云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 2012级操作系统实验报告

2012级操作系统实验报告

  • 62 次阅读
  • 3 次下载
  • 2025/5/2 9:52:41

(3)vfork和fork之间的还有一个区别是:vfork保证子进程先运行,在她调用exec或exit之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。

⒋ 进程的退出函数有哪些?有何区别?C程序是如何被启动终止的? exit 函数; return 函数; abort函数 _exit函数。 exit和_exit函数用于正常终止一个程序

exit先执行一些清除处理.然后进入内核清除操作包括调用执行各终止处理程序,关闭所有标准I/O流 _exit立即进入内核

abort函数用于异常终止一个程序

exit是一个函数,有参数,把控制权交给系统

return是函数执行完后的返回,将控制权交给调用函数

5

实验二 进程通信

【实验目的与要求】

⒈ 了解基于信号的进程通信机制。

⒉ 熟悉LINUX系统中进程之间软中断通信的基本原理。 【实验原理】

一、信号

⒈ 信号的基本概念 ⒉ 信号的发送 ⒊ 对信号的处理

二、所涉及的中断调用 ⒈ kill() ⒉ signal() ⒊ wait() ⒋ waitpid() ⒌ lockf()

【实验主要仪器与材料】

⒈ 带Linux操作系统的PC机 ⒉ GCC编译器 【实验内容】

⒈ 编写程序:用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按^c键);捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:

Child process1 is killed by parent! Child process2 is killed by parent!

父进程等待两个子进程终止后,输出如下的信息后终止: Parent process is killed!

⒉ 分析利用软中断通信实现进程同步的机理。 【实验步骤及实验结果分析】

⒈ 编写程序:用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按^c键);捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:

Child process1 is killed by parent! Child process2 is killed by parent!

父进程等待两个子进程终止后,输出如下的信息后终止: Parent process is killed!

⒉ 对软中断信号的处理分三种情况进行:

(1)如果进程收到的软中断是一个已决定要忽略的信号,不做处理便立即返回。

(2)进程收到软中断后便退出。

(3)执行用户设置的软中断处理程序。 【思考题】

实验内容的参考程序如下,请仔细阅读、调试、分析,回答下述问题: #include

1

#include #include #include #include

void waiting(),stop(); int wait_mark; int main() { int p1, p2, stdout=1; while((p1=fork()) == -1); /*创建子进程p1*/ if (p1 > 0) { while((p2=fork()) == -1); /*创建子进程p2*/ if(p2 > 0) { wait_mark=1; signal(SIGINT, stop); /*接收到^c信号,转stop*/ waiting(); kill(p1, 16); /*向p1发软中断信号16*/ kill(p2, 17); /*向p2发软中断信号17*/ wait(0); /*同步*/ wait(0); printf(\ exit(0); } else { wait_mark=1; signal(17, stop); /*接收到软中断信号17,转stop*/ waiting(); lockf(stdout, 1, 0); printf(\ lockf(stdout, 0, 0); exit(0); } } else { wait_mark=1;

signal(16, stop); /*接收到软中断信号16,转stop*/

waiting(); lockf(stdout, 1, 0); printf(\

2

lockf(stdout, 0, 0); exit(0); } return 0; }

void waiting() { while(wait_mark != 0); }

void stop() { wait_mark=0; }

⒈ 参考程序段前面部分用了两个wait(0),它们起什么作用?

作用:wait(0)函数作用是等待子进程结束,父进程有两个子进程,所以两个wait函数。

⒉ 参考程序段中每个进程退出时都用了语句exit(0),为什么?

作用:是为了让子进程正常自我终止,正常退出。 ⒊ 参考程序的运行结果是什么?

Parent process is killed!

⒋ 参考程序是否符合实验要求?为什么?

不符合。原因:p1,p2都会捕捉中断信号。对于父进程,当它捕捉到中断信号时就会转向指定的函数stop();函数,之后父进程被唤醒,从被中断处继续执行。对于子进程,由于没有给它们指定的收到中断信号后的动作,就会执行默认的动作,结束自己。所以当我们发出中断信号后,父进程按预计的方式正常执行,而p1,p2自己结束了自己,所以不会有预计的结果。 ⒌ 参考程序该如何修改才能得到正确结果?

第一种方法:在fork()语句创建子进程之前捕捉中断信号,既signal(SIGINT, stop);。

第二种方法:在每个子进程前添加忽略中断信号的语句,既signal(SIGINT,SI G_IGN);。

第三种方法:打开两个界面,一个界面正常编译,另一个界面执行:

ps -a

ps -a|grep a.out kill -s INT 11313

3

搜索更多关于: 2012级操作系统实验报告 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

(3)vfork和fork之间的还有一个区别是:vfork保证子进程先运行,在她调用exec或exit之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。 ⒋ 进程的退出函数有哪些?有何区别?C程序是如何被启动终止的? exit 函数; return 函数; abort函数 _exit函数。 exit和_exit函数用于正常终止一个程序 exit先执行一些清除处理.然后进入内核清除操作包括调用执行各终止处理程序,关闭所有标准I/O流 _exit立即进入内核 abort函数用于异常终止一个程序 exit是一个函数,有参数,把控制权交给系统 re

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com