processes without partitions
play

Processes without Partitions Matthew Flatt University of Utah Adam - PowerPoint PPT Presentation

Processes without Partitions Matthew Flatt University of Utah Adam Wick Robert Bruce Findler University of Utah University of Chicago 1 This talk has been modified from its original version. It has been edited for content and formatted to


  1. Processes without Partitions Matthew Flatt University of Utah Adam Wick Robert Bruce Findler University of Utah University of Chicago 1

  2. This talk has been modified from its original version. It has been edited for content and formatted to fit your screen. 2

  3. Machines and Processes 3

  4. Machines and Processes 101010 010101 4

  5. Machines and Processes 101010 010101 5

  6. Machines and Processes λ λ 101010 010101 6

  7. Machines and Processes λ λ OS 101010 010101 7

  8. Machines and Processes λ λ VM 101010 010101 8

  9. Process Examples 9

  10. Process Examples 10

  11. Process Examples 11

  12. Process Examples 12

  13. Process Examples λ λ DrScheme user's program Run DrScheme 13

  14. Languages with Termination Pilot [Redell80] SPIN [Bershad95] JKernel [Hawblitzel98] Alta [Tullman99] KaffeOS [Back00] JSR-121 [Soper03] .NET application domains ... λ λ 14-15

  15. Languages with Termination PLT Scheme λ λ 16

  16. Motivation and Approach Processes in PLT Scheme • Threads • Parameters • Eventspaces • Custodians Memory Accounting 17

  17. Threads Concurrent execution eval (require "spin-display.scm") (define (spin) (rotate-a-little) (sleep 0.1) (spin)) eval (define spinner (thread spin)) eval (kill-thread spinner) 18

  18. Parameters (a.k.a. Fluid Variables) Thread-local state (printf "Hello\n") (fprintf (current-output-port) "Hola\n") (fprintf (current-error-port) "Goodbye\n") eval (error "Ciao") (parameterize ((current-error-port (current-output-port))) eval (error "Au Revoir")) (parameterize ((current-error-port (current-output-port))) (thread (lambda () eval (error "Zai Jian")))) 19

  19. Eventspaces Concurrent GUIs (thread (lambda () (message-box "One" "Hi"))) eval (thread (lambda () (message-box "Two" "Bye"))) (thread (lambda () (message-box "One" "Hi"))) (parameterize ((current-eventspace (make-eventspace))) eval (thread (lambda () (message-box "Two" "Bye")))) 20

  20. Custodians Termination and clean-up (define c (make-custodian)) (parameterize ((current-custodian c)) eval ...) eval (custodian-shutdown-all c) 21

  21. Etc. • Security Guards Resource access control • Namespaces Global bindings • Will Executors Timing of finalizations • Inspectors Debugging access 22

  22. Building a Programming Environment SchemeEsq, a mini DrScheme [ICFP 99] 23

  23. GUI - Frame (define frame (new frame% [label "SchemeEsq"] [width 400] [height 175])) (send frame show #t) eval 24

  24. GUI - Reset Button (new button% [label "Reset"] [parent frame] [callback (lambda (b e) (reset-program))]) eval 25

  25. GUI - Interaction Area (define repl-display-canvas (new editor-canvas% [parent frame])) eval 26

  26. GUI - Interaction Buffer (define esq-text% (class text% ... (evaluate str) ...)) (define repl-editor (new esq-text%)) (send repl-display-canvas set-editor repl-editor) eval 27

  27. Evaluator (define (evaluate expr-str) (thread (lambda () (print (eval (read (open-input-string expr-str)))) (newline) (send repl-editor new-prompt)))) eval 28

  28. Evaluator Output (define user-output-port (make-output-port ... repl-editor ...)) (define (evaluate expr-str) (parameterize ((current-output-port user-output-port)) (thread (lambda () ...)))) eval 29

  29. Evaluating GUIs (define user-eventspace (make-eventspace)) (define (evaluate expr-str) (parameterize ((current-output-port user-output-port) (current-eventspace user-eventspace)) (thread (lambda () ...))) eval 30

  30. Custodian for Evaluation (define user-custodian (make-custodian)) (define user-eventspace (parameterize ((current-custodian user-custodian)) (make-eventspace))) (define (evaluate expr-str) (parameterize ((current-output-port user-output-port) (current-eventspace user-eventspace) (current-custodian user-custodian)) (thread (lambda () ...)))) eval 31

  31. Reset Evaluation (define (reset-program) (custodian-shutdown-all user-custodian) (set! user-custodian (make-custodian)) (parameterize ((current-custodian user-custodian)) (set! user-eventspace (make-eventspace))) (send repl-editor reset)) eval 32

  32. Motivation and Approach Processes in PLT Scheme Memory Accounting • Without partitions [ISMM 04] 33

  33. Resource Consumption λ λ DrScheme user's program 34

  34. Resource Consumption λ λ DrScheme user's program 35

  35. Resource Consumption λ λ DrScheme user's program 36

  36. Resource Consumption λ λ DrScheme user's program 37

  37. Resource Consumption λ λ DrScheme user's program 38

  38. Resource Consumption λ λ DrScheme user's program 39

  39. Resource Accounting • Conventional OS : process memory use = size of partition λ λ Accounting is easy Trading data is difficult 40

  40. Resource Accounting • Language as OS : process memory use = size of owned data λ λ Trading data is easy Accounting appears difficult: sharing, real-time tracking 41

  41. Resource Accounting Our strategy: compute accounting charges during GC λ λ See also [Price03] 42

  42. Basic Accounting thread 1 x q = custodian A λ thread 2 y r = custodian B λ z s thread 3 43

  43. Basic Accounting A A thread 1 x q = custodian A λ A A thread 2 y r = custodian B λ z s thread 3 B B 44

  44. Basic Accounting A A thread 1 x q = custodian A λ A A thread 2 y r = custodian B λ z s thread 3 B, A B, A 45

  45. Sharing = custodian A thread 1 λ x z y = custodian B thread 2 λ 46

  46. Sharing A = custodian A thread 1 λ x A or B z y = custodian B thread 2 λ B 47

  47. Sharing: Charge the Child A = custodian A thread 1 λ x B, A z y = custodian B thread 2 λ B 48

  48. Threads, Custodians, and Weak References = custodian A thread 1 λ x = custodian B thread 2 λ 49

  49. Threads, Custodians, and Weak References = custodian A thread 1 λ B x = custodian B thread 2 λ 50

  50. Threads, Custodians, and Weak References = custodian A thread 1 λ B x = custodian B thread 2 λ 51

  51. Threads, Custodians, and Weak References = custodian A thread 1 λ B x = custodian B thread 2 λ 52

  52. Why Charge the Child? A = custodian A thread 1 λ x B, A z y = custodian B thread 2 λ B • Parent is responsible for children • Parent may allocate for children GUI objects File descriptors ... 53-55

  53. Initial Experience: DrScheme Bad Loop Normal Normal 56

  54. Initial Experience: DrScheme Bad Loop Normal Shut Down 57

  55. DrScheme Bug = DrScheme thread 0 λ x = User1 thread 1 y λ z = User2 thread 2 λ 58

  56. DrScheme Repair = DrScheme thread 0 λ x = User1 thread 1 y λ z = User2 thread 2 λ 59

  57. DrScheme Repair = DrScheme thread 0 λ x = User1 thread 1 y λ z = User2 thread 2 λ Changed 5 references: • Weakened 2 • Removed 2 • Moved 1 into child 60

  58. Current Experience: DrScheme Bad Loop Normal Normal 61

  59. Current Experience: DrScheme Shut Down Normal Normal 62

  60. Accounting without Partitions Useful accounting • Doesn't need partitions • Does need hierarchy 63

  61. Conclusion λ λ • Programmers need OS-like constructs in languages concurrency adjust run-time environment easy termination • Multiple language constructs for “process” programmer can mix and match to balance isolation and cooperation 64

Recommend


More recommend