网站大量收购独家精品文档,联系QQ:2885784924

实验四 经典的进程同步问题课件.pptVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实 验 四 一、编程实现生产者—消费者问题 二、进程间的通信 (软中断信号) 三、实验目的 1. 掌握进程同步的实现算法 1. 了解什么是信号 2. 熟悉LINUX系统中进程之间软中断通信的基本原理 实 验 四 四、实验任务 1. 编写程序,创建生产者和消费者进程,生产者进程产生数据并写入缓冲区,消费者进程取数据并输出,缓冲区能存放四个数据,如果缓冲区满,则生产者不能写数据,并报警;如果缓冲区空,消费者不能取数据,并报警。(选做,2个生产者,2个消费者) 2. 编写程序:用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按^c键);捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child process1 is killed by parent! Child process2 is killed by parent! 父进程等待两个子进程终止后,输出如下的信息后终止: Parent process is killed! 实 验 四 五、实验要求 1. 阅读有关的参考书,学习系统功能调用kill( )、 signal( )的功能及用法 2. 输入实验指导中的参考代码,编译并运行 能否得到结果?为什么?尝试修改源代码,得到预期的结果。 3. 写实验报告 * 六、有关的系统功能调用: int kill(pid_t pid, int sig); //向进程组或进程发送信号 pid: 1. pid大于零,pid是信号欲送往的进程的标识。 2.pid等于零,信号将送往所有与调用kill()的那个进程属同一个使用组的进程。 3. pid等于-1,信号将送往所有调用进程有权给其发送信号的进程,除了进程1(init)。 4. pid小于-1时,信号将送往以-pid为组标识的进程。 sig:准备发送的信号,其值为零则没有任何信号送出 六、有关的系统功能调用: signal(int sig,int function)//;预置对信号的处理方式 int sig:信号 void (*function) ( ) 接收到指定信号后的处理函数 参数sig 电源故障 SIGPWR 19 某个子进程死 SIGCLD 18 用户自定义信号2 SIGUSR2 17 用户自定义信号1 SIGUSR1 16 软件终止(software termination) SIGTERM 15 闹钟。当某进程希望在某时间后接收信号时发此信号 SIGALRM 14 向某个非读管道中写入数据 SIGPIPE 13 系统调用中参数错,如系统调用号非法 SIGSYS 12 段违例(segmentation violation),进程试图去访问其虚地址空间以外的位置 SIGSEGV 11 总线错误 SIGBUS 10 杀死、终止进程 SIGKILL 09 浮点运算溢出 SIGFPE 08 EMT指令 SIGEMT 07 IOT指令 SIGIOT 06 跟踪陷阱(trace trap),启动进程,跟踪代码的执行 SIGTRAP 05 非法指令 SIGILL 04 退出,当用户从键盘按quit键时 SIGQUIT 03 中断,当用户从键盘按^c键或^break键时 SIGINT 02 挂起(hangup) SIGHUP 01 说 明 名 字 值 #include stdio.h #include signal.h #include unistd.h void waiting( ),stop( ); int wait_mark; main( ) { int p1,p2,stdout; while((p1=fork( ))= =-1); /*创建子进程p1*/ if (p10) { while((p2=fork( ))= =-1); /*创建子进程p2*/ if(p20) { wait_mark=1; 七、参考代码 signal(SIGINT,stop); /*接收到^c信号,转stop*/ waiting( ); kill(p1,16); /*向p1发软中断信号16*/ kill(p2,17); /*向p2发软中断信号17

文档评论(0)

brnpnu31163 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档