Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems)...

28
Opera&ng Systems CMPSCI 377 Processes & Threads Emery Berger and Mark Corner University of Massachuse9s Amherst

Transcript of Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems)...

Page 1: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

Opera&ng  Systems  CMPSCI  377  

Processes  &  Threads  

Emery  Berger  and  Mark  Corner  University  of  Massachuse9s  

Amherst  

Page 2: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

2  

Outline  

  Processes    Threads    Basic  synchroniza&on    Bake-­‐off  

Page 3: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

What  is  a  Process?  

  One  or  more  threads  running  in  an  address  space  

3  

Page 4: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

What  is  an  address  space?  

  The  collec&on  of  data  and  code  for  the  program  organized  in  an  organized  (addressable)  region.  

4  

Page 5: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

Why  do  we  need  processes?  

  A  process  (with  a  single  thread)  supports  a  serial  flow  of  execu&on  

  Is  that  good  enough?  

 What  if  something  goes  wrong?  

 What  if  something  takes  a  long  &me?  

 What  if  we  have  more  than  one  user?  

5  

Page 6: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

6  

Processes  vs.  Threads…  

  Both  useful    –  parallel  programming  &  concurrency  

– Hide  latency  – Maximize  CPU  u&liza&on  – Handle  mul&ple,  asynchronous  events  

  But:  different  programming  styles,  performance  characteris&cs,  and  more  

Page 7: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

7  

Processes    Process:  execu&on  context  (PC,  registers)  +  address  space,  files,  etc.  

  Basic  unit  of  execu&on  

Page 8: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

8  

Process  API  

  UNIX:  –  fork()  –  create  copy  of  current  process  

• Different  return  value  • Copy-­‐on-­‐write  

–  exec()  –  replace  process  w/  executable  

 Windows:  –  CreateProcess  (…)  

• 10  arguments  

Page 9: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

9  

TranslaFon  Lookaside  Buffer    TLB:  fast,  fully  associa&ve  memory  –  Stores  page  numbers  (key),  frame  (value)  in  which  they  are  stored  

  Copy-­‐on-­‐write:  protect  pages,  copy  on  first  write  

Page 10: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

10  

Processes  Example  

Do we need the sleep?

Page 11: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

11  

Quick  AcFvity  

  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))  

Page 12: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

12  

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  <<  "Fib("  <<  i  <<  ")  =  "  <<  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;  }  

Page 13: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

13  

CommunicaFon  

  Processes:  –  Input  =  state  before  fork()  – Output  =  return  value  

• argument  to  exit()  

  But:  how  can  processes  communicate  during  execu&on?  

Page 14: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

14  

IPC    signals  

–  Processes  can  send  &  receive  ints  associated  with  par&cular  signal  numbers  •  Process  must  set  up  signal  handlers  

–  Best  for  rare  events  (SIGSEGV)  •  Not  terribly  useful  for  parallel  or  concurrent  programming  

  pipes  –  Communica&on  channels  –  easy  &  fast  

–  Just  like  UNIX  command  line  •  ls  |  wc  -­‐l  

Page 15: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

15  

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("ls", "ls", 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("wc", "wc", "-l", NULL); } }

Pipe  example  

Page 16: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

16  

IPC,  conFnued  

  sockets  –  Explicit  message  passing  

–  Can  distribute  processes  anywhere    mmap  (common  and  aws0m  hack)  

– All  processes  map  same  file  into  fixed  memory  loca&on  

– Objects  in  region  shared  across  processes  – Use  process-­‐level  synchroniza&on  

• Much  more  expensive  than  threads…  

Page 17: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

17  

Threads    Processes  -­‐  everything  in  dis&nct  address  space  

  Threads  –  same  address  space  (&  files,  sockets,  etc.)  

Page 18: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

18  

Threads  API  

  UNIX  (POSIX):  –  pthread_create()  –  start  separate  thread  execu&ng  func&on  

–  pthread_join()  –  wait  for  thread  to  complete  

 Windows:  –  CreateThread  (…)  

• only  6  arguments!  

Page 19: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

19  

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  +  expensiveComputa&on(i);  

   }      return  (void  *)  v;  

}  main()  {      pthread_t  t1,  t2;      int  *r1,  *r2;      pthread_create  (&t1,  NULL,  run,  (int  *)100);      pthread_create  (&t2,  NLL,  run,  (int  *)100);  

   pthread_join  (t1,  (void  **)  &r1);      pthread_join  (t2,  (void  **)  &r2);        cout  <<  "r1  =  "  <<  *r1  <<  ",  r2  =  "  <<  *r2  <<  endl;  }  

Page 20: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

20  

Exercise  

  Print  out  fib(0)  …  fib(100),  in  parallel  – Main  loop  should  spawn  children  as  threads      int  &d;  • pid  =  pthread_create(&&d,  NULL,  func&on,  argument);  

– Wait  for  children  • pthread_join(&d,&result)  

Page 21: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

21  

Exercise  

Page 22: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

22  

CommunicaFon    In  threads,  everything  shared  except:  stacks,  registers  &  thread-­‐specific  data  –  Old  way:  

•  pthread_setspecific  •  pthread_getspecific  

–  New  way:  __thread  •  sta&c  __thread  int  x;  •  Easier  in  Java…  

  Updates  of  shared  state  must  be  synchronized  

Page 23: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

23  

Bake-­‐off  

  Processes  or  threads?  –  Performance  

–  Flexibility  /  Ease-­‐of-­‐use  –  Robustness  

Page 24: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

24  

Scheduling  

Page 25: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

25  

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  

Page 26: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

26  

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  communica&on  or  risky  hackery  

  Threads  –  Communicate  through  memory  –  must  be  on  same  machine  

–  Require  thread-­‐safe  code  

Page 27: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

27  

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…  

Page 28: Operang)Systems) CMPSCI377) Processes)&)Threads)emery/classes/cmpsci... · Operang)Systems) CMPSCI377) Processes)&)Threads) Emery&Berger&and&MarkCorner& University&of&Massachuse9s&

28  

The  End