操作系统实验,实验6软中断信号及处理分析.ppt

操作系统实验,实验6软中断信号及处理分析.ppt

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验六 软中断信号及处理;实验目的 加深对进程概念的理解,明确进程和程序的区别、进一步认识并发执行的实质 了解并熟悉Linux系统中利用软中断信号实现进程通信的基本概念及方法 熟悉Linux提供的有关系统调用函数/库函数,并能使用这些函数 实验准备及预习 阅读讲义《附件7-软中断信号及处理》,了解Linux系统中利用软中断信号实现进程通信的基本概念及方法 熟悉Linux提供的有关系统调用函数/库函数:alarm()、kill()、signal()、sleep()、pause();Linux的低级通信;;信号事件的发生有两个来源 硬件来源,比如我们按下了键盘或者其它硬件故障 软件来源,最常用发送信号的系统函数是kill, raise, alarm和setitimer以及sigqueue函数,软件来源还包括一些非法运算等操作 Linux中有30个软中断信号和31个实时软中断信号;常见软中断信号;忽略该信号 执行系统默认动作 捕捉信号 ;;发送信号;#includesys/types.h? #includesys/stat.h? #includesignal.h? #includeunistd.h? #includestdio.h? #includestdlib.h?? int?main()? {?pid_t?pid;? ????pid=fork();? ????if(pid0)??{? ????????????perror(fork()?error\n);? }? ????if(pid==0) {?/*子进程*/??? ????? printf(child?process?wait?for?signal!\n);? ????? pause(); /*挂起进程直至捕捉到一个信号*/ };;alarm() 语法格式: #include unistd.h unsigned int alarm(unsigned int seconds) ; 返回:0或以前设置的闹钟时间的余留秒数 参数:seconds的值是秒数,经过了指定的seconds秒后会产生信号SIGALRM 说明: 设置一个时间值(闹钟时间),在将来的某个时刻该时间值会被超过。当所设置的时间值被超过后,产生SIGALRM信号 如果不忽略或不捕捉此信号,则其默认动作是终止该进程 每个进程只能有一个闹钟时间。如果在调用alarm时,以前已为该进程设置过闹钟时间,而且它还没有超时,则该闹钟时间的余留值作为本次alarm函数调用的值返回。以前登记的闹钟时间则被新值代换 ;#includeunistd.h #includestdio.h #includestdlib.h    int main() {   int ret; alarm(50);    sleep(30);    /*使进程睡眠30秒,期间要放弃CPU*/ ret=alarm(10);    printf(%d\n,ret);    pause();    /*使调用进程挂起直至捕捉到一个信号*/ printf(I have been waken up.\n,ret);    } ;捕捉信号;;;#includeunistd.h #includestdio.h #includestdlib.h   #includesignal.h  void msg(); int main() {  int ret; alarm(50);    sleep(30);    /*使进程睡眠30秒,期间要放弃CPU*/ ret=alarm(10);    printf(%d\n,ret);   signal(SIGALRM, msg);  pause();    /*使调用进程挂起直至捕捉到一个信号*/ printf(I have been waken up.\n,ret);    } void?msg()? {? ?printf(“catched a?alarm?signal!\n);?}?;;#include unistd.h #include stdio.h #include signal.h void waiting() { while(wait_mark!=0); } void stop() { wait_mark=0; } void keep_alive() { };int main() { int p1,p2; while((p1=fork())==-1); if(p10){ while((p2=fork())==-1); if(p20){ printf(“parent\n”); wait_mark=1; signal(SIG

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档