Bounded-Buffer–共享内存.pptVIP

  • 65
  • 0
  • 约2.45千字
  • 约 17页
  • 2018-12-20 发布于天津
  • 举报
Bounded-Buffer–共享内存.ppt

* 进程操作 主讲教师:夏莹杰 xiayingjie@zju.edu.cn 进程创建 父进程创建若干子进程;后者再创建其子进程;与此类推,构成了反映“传承”关系的一棵进程树 子进程的资源 子进程共享父进程的所有资源 子进程共享父进程的部分资源 子进程不从父进程共享资源,重新独立申请 执行代码的执行顺序 父进程和子进程并发执行 父进程在子进程执行期间等待,待子进程执行完毕后才恢复执行余下代码 进程创建 (Cont.) 地址空间中的image 子进程复制了(duplicate,不是copy)父进程的image 子进程全新装入一个程序,得到不同于父进程的image 举例:UNIX的进程创建 fork系统调用创建一个新(子)进程 fork之后,exec系统调用装入一个新程序 Unix环境里创建子进程 Unix环境fork一个进程 int main() { Pid_t pid; /* fork another process */ pid = fork(); if (pid 0) { /* error occurred */ fprintf(stderr, Fork Failed); exit(-1); } else if (pid == 0) { /* child process */ execlp(/bin/ls, ls, NULL); } else { /* parent process */ /* parent will wait for the child to complete */ wait (NULL); printf (Child Complete); exit(0); } } Solaris系统中常见的一棵进程树 进程终止 “进程终止”语义之一:子进程执行完最后一条指令后,要求操作系统将自己杀出 (exit)。语义动作含: 子进程传递数据给父进程 (通过父进程的wait操作) 子进程的资源被操作系统收回 “进程终止”语义之二:父进程终止子进程的执行(abort)。终止原因可能是: 子进程超额使用系统资源 早前交给子进程执行的任务,过期无效了 如果父进程终止了,它的子进程怎么办? 有些操作系统把这些子进程也全部终止 All children terminated - cascading termination 进程间合作(进程间通讯,IPC) 独立进程不会影响其它进程的执行,也不被影响 合作进程影响其它进程,或者受其影响 进程间合作是必须的,带来的好处: 共享信息 加速(计算)执行任务 模块化 方便,等等…… 进程间合作有两种基本模式: 共享内存,速度快,只在建立共享内存区域时需要系统调用 消息传递,交换较少量数据,系统调用多 共享内存经典案例:生产者-消费者问题 生产者进程“生产”出信息,存储在缓冲区,供消费者进程“消费” unbounded-buffer 缓冲区的容量无限 bounded-buffer 缓冲区的容量有限 P0 P1 in out Bounded-Buffer – “共享内存”解决方案 数据结构 #define BUFFER_SIZE 10 Typedef struct { . . . } item; item buffer[BUFFER_SIZE]; int in = 0; int out = 0; 解决方案可行 但是只能用足BUFFER_SIZE-1个缓冲单元 Bounded-Buffer – 生产者进程的“存” while (true) { /* Produce an item */ while (((in = (in + 1) % BUFFER SIZE count) == out) ; /* do nothing -- no free buffers */ buffer[in] = item; in = (in + 1) % BUFFER SIZE; { Bounded Buffer – 消费者进程的“取” while (true) { while (in == out) ; // do nothing -- nothing to consume // remove an item from the buffer item = buffer[out]; out = (out + 1) % BUFFER SIZE; return item; { Interprocess Communication (IPC) 进程间通信IPC,提供一套进程通信、进

文档评论(0)

1亿VIP精品文档

相关文档