Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Processes and Threads

3,955 views

Published on

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

Published in: Technology, Education
  • Be the first to comment

  • Be the first to like this

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

×