操作系统实验,实验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的低级通信 Linux的低级通信主要用来传递进程间的控制信号,主要是文件锁和软中断信号机制 软中断信号的目的是通知对方发生了异步事件 信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达 信号是在软件层次上对中断机制的一种模拟 与硬中断处理程序不一致的是 收到硬中断信号后中断处理程序立即被启动,软中断处理程序必须等到接收进程运行时才启动 进程可向自己发送软中断信号,以便在某些意外情况下,进程能转入规定好的处理程序。例如,大部分陷阱都是由当前进程自己向自己发送一个软中断信号而立即转入相应处理的 信号事件的发生有两个来源 硬件来源,比如我们按下了键盘或者其它硬件故障 软件来源,最常用发送信号的系统函数是kill, raise, alarm和setitimer以及sigqueue函数,软件来源还包括一些非法运算等操作 Linux中有30个软中断信号和31个实时软中断信号 常见软中断信号 SIGHUP 从终端上发出的结束信号 SIGINT 来自键盘的中断信号 SIGQUIT 来自键盘的退出信号 SIGFPE 浮点异常信号 SIGALRM 时钟定时信号 信号处理的一般方法 忽略该信号 执行系统默认动作 捕捉信号 为了给用户进程也提供相应的同步、互斥以及软中断通信功能,Linux系统提供了几种相应的系统调用或库函数 文件锁函数lockf(fd, function, size)可用于互斥 用于同步的系统调用是wait()或sleep(n),其中wait()用于父子进程之间的同步,而sleep则使得当前进程睡眠n秒后自动唤醒自己 系统调用kill( pid, sig )和signal( sig, func )被用来传递和接收中断信号 例:signal( SIGINT, SIG_IGN ),表示当前进程忽略键盘中断信号的影响 发送信号 常用于发送信号的系统函数是kill、raise和alarm kill()函数 功能:传送信号给指定的进程 语法格式: #includesys/types.h #includesignal.h int kill(pid_t pid,int sig); 函数说明:kill()可以用来送参数 sig 指定的信号给参数 pid 指定的进程,参数 pid一般0(将信号传给进程识别码为 pid 的进程) 返回值:执行成功则返回0;如果有错误则返回-1 #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(); /*挂起进程直至捕捉到一个信号*/ } else {?/*父进程*/? ???? sleep(3);? ???? kill(pid,SIGKILL); /*向子进程发送SIGKILL信号*/? ???? printf(parent?send?signal to kill child!\n);? ???? waitpid(pid,NULL,0); /*等待pid退出*/? ??? printf(child?process?exit!\n);? ??? exit(0);? ?? }? }? alarm() 语法格式: #include unistd.h unsigned int alarm(unsigned int seconds) ; 返回:0或以前设置的闹钟时间的余留秒数 参数:seconds的值是秒数,经过了指定的seconds秒后会产生信号SIGALRM 说明: 设置一个时间

文档评论(0)

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

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

1亿VIP精品文档

相关文档