Processes and Threads

3,618 views

Published on

From the Operating Systems course (CMPSCI 377) at UMass Amherst, Fall 2007.

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,618
On SlideShare
0
From Embeds
0
Number of Embeds
34
Actions
Shares
0
Downloads
168
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Processes and Threads

  1. 1. Operating Systems CMPSCI 377 Processes & Threads Emery Berger University of Massachusetts Amherst UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science
  2. 2. Outline Processes  Threads  Basic synchronization  Bake-off  UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 2
  3. 3. Processes vs. Threads… Both useful for parallel programming &  concurrency Hide latency  Maximize CPU utilization  Handle multiple, asynchronous events  But: different programming styles,  performance characteristics, and more UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 3
  4. 4. Processes Process:  execution context (PC, registers) + address space, files, etc. Basic unit of  execution UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 4
  5. 5. Process API UNIX:  fork() – create copy of current process  Different return value  Copy-on-write  exec() – replace process w/ executable  Windows:  CreateProcess (…)  10 arguments  UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 5
  6. 6. Translation Lookaside Buffer TLB: fast, fully  associative memory Stores page  numbers (key), frame (value) in which they are stored Copy-on-write:  protect pages, copy on first write UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 6
  7. 7. Processes Example UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 7
  8. 8. Exercise Print out fib(0) … fib(100), in parallel  Main loop should fork off children  (returns pid of child) int pid; pid = fork(); if (pid == 0) { // I’m child process } else { // I’m parent process } Wait for children (waitpid(pid,0,0))  UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 8
  9. 9. Exercise // Print fib(0) ... fib(100) in parallel. int main() { int cids[101]; // Saved child pids. for (int i = 0; i < 101; i++) { // Fork off a bunch of processes to run fib(i). int cid = fork(); if (cid == 0) { // I am the child. cout << quot;Fib(quot; << i << quot;) = quot; << fib(i) << endl; return 0; // Now the child is done, so exit (IMPORTANT!). } else { // I am the parent. Store the child’s pid somewhere. cids[i] = cid; } } // Wait for all the children. for (int i = 0; i < 101; i++) { waitpid (cids[i], 0, 0); // Wait for the ith child. } return 0; } UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 9
  10. 10. Communication Processes:  Input = state before fork()  Output = return value  argument to exit()  But: how can processes communicate  during execution? UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 10
  11. 11. IPC signals  Processes can send & receive ints associated  with particular signal numbers Process must set up signal handlers  Best for rare events (SIGSEGV)  Not terribly useful for parallel or concurrent  programming pipes  Communication channels – easy & fast  Just like UNIX command line  ls | wc -l  UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 11
  12. 12. Pipe example int main() { int pfds[2]; pipe(pfds); if (!fork()) { close(1); /* close normal stdout */ dup(pfds[1]); /* make stdout same as pfds[1] */ close(pfds[0]); /* we don't need this */ execlp(quot;lsquot;, quot;lsquot;, NULL); } else { close(0); /* close normal stdin */ dup(pfds[0]); /* make stdin same as pfds[0] */ close(pfds[1]); /* we don't need this */ execlp(quot;wcquot;, quot;wcquot;, quot;-lquot;, NULL); } } UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 12
  13. 13. IPC, continued sockets  - Explicit message passing + Can distribute processes anywhere mmap (common and aws0m hack)  All processes map same file into fixed  memory location Objects in region shared across processes  Use process-level synchronization  Much more expensive than threads…  UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 13
  14. 14. Threads Processes -  everything in distinct address space Threads – same  address space (& files, sockets, etc.) UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 14
  15. 15. Threads API UNIX (POSIX):  pthread_create() – start separate  thread executing function pthread_join() – wait for thread to  complete Windows:  CreateThread (…)  only 6 arguments!  UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 15
  16. 16. Threads example #include <pthread.h> void * run (void * d) { int q = ((int) d); int v = 0; for (int i = 0; i < q; i++) { v = v + expensiveComputation(i); } return (void *) v; } main() { pthread_t t1, t2; int r1, r2; pthread_create (&t1, run, 100); pthread_create (&t2, run, 100); pthread_wait (&t1, (void *) &r1); pthread_wait (&t2, (void *) &r2); printf (“r1 = %d, r2 = %dn”, r1, r2); } UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 16
  17. 17. Exercise Print out fib(0) … fib(100), in parallel  Main loop should spawn children as threads  int tid; pid = pthread_create(&tid, function, argument); Wait for children  pthread_join(tid,&result) UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 17
  18. 18. Exercise UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 18
  19. 19. Communication In threads, everything shared except:  stacks, registers & thread-specific data Old way:  pthread_setspecific  pthread_getspecific  New way: __thread  static __thread int x;  Easier in Java…  Updates of shared state must be  synchronized UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 19
  20. 20. Bake-off Processes or threads?  Performance  Flexibility / Ease-of-use  Robustness  UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 20
  21. 21. Scheduling UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 21
  22. 22. Context Switch Cost Threads – much cheaper  Stash registers, PC (“IP”), stack pointer  Processes – above plus  Process context  TLB shootdown  Process switches more expensive, or require long quanta UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 22
  23. 23. Flexibility / Ease-of-use Processes – more flexible  + Easy to spawn remotely + ssh foo.cs.umass.edu “ls -l” + Can communicate via sockets = can be distributed across cluster / Internet - Requires explicit communication or risky hackery Threads  Communicate through memory – must be on  same machine - Require thread-safe code UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 23
  24. 24. Robustness Processes – far more robust  Processes isolated from other processes  Process dies – no effect  Apache 1.x  Threads:  If one thread crashes (e.g., derefs NULL),  whole process terminates Then there’s the stack size problem  Apache 2.x…  UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 24
  25. 25. The End UNIVERSITY OF MASSACHUSETTS AMHERST • Department of Computer Science 25

×