logo资料库

操作系统进程管理实验含源代码.doc

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
操作系统
进程管理实验报告
班级:2012211310
学号:2012211391
姓名:胡莺夕
操作系统 进程管理实验报告 班级:2012211310 学号:2012211391 姓名:胡莺夕 班内序号:27 以下程序用来验证 fork()函数的功能。
可见,一个 fork()语句会返回两次.通过判断条件(pid1 > 0 && pid2 > 0)来标明主进程, (pid1 == 0 && pid2 > 0)来标明子进程 1,(pid1 > 0 && pid2 == 0)来标明子进程 2。其中 pid1 == 0 && pid2 == 0 的进程为 pid1 = fork();语句第二次返回时再次执行 pid2 = fork();创建的子进程。 (1)进程的创建: 编写一段程序,使用系统调用 fork() 创建两个子进程。当此程序运行时,在系统中有一 个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”,
子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原 因。 实验结果如图所示: (2)进程的控制 修改已经编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现 的现象,并分析原因。 如果在程序中使用系统调用 lockf () 来给每一个进程加锁,可以实现进程之间的互斥, 观察并分析出现的现象。
如上图所示,lockf(1, 1, 0);为进程加锁,其他进程不能访问锁内的内容;lockf(1, 0, 0);为解 锁操作。 (3) a) 编写一段程序,使其实现进程的软中断通信。 要求:使用系统调用 fork() 创建两个子进程,再用系统调用 signal() 让父进程捕捉键盘上来的中断信号(即按 DEL 键);当捕捉到中断信号后,父进程用系统调用 Kill() 向两个子进程发出信号,子进程捕捉到信号后分别 输出下列信息后终止: Child Process 1 is killed by Parent! Child Process 2 is killed by Parent!
父进程等待两个子进程终止后,输出如下的信息后终止: Parent Process is killed! b) 在上面的程序中增加语句 signal(SIGINT, SIG-IGN) 和 signal(SIGQUIT, SIG-IGN), 观察执行结果,并分析原因。 ——程序将不响应 SIGINT(cntr + c)和 SIGQUIT(cntr + /)信号 #include #include #include pid_t pid1, pid2; void killChild(int sig); void childOneDo(int sig); void childTwoDo(int sig); int main () { pid1 = fork(); pid2 = fork(); if (pid1 > 0 && pid2 > 0) { signal(SIGINT, killChild); signal(SIGINT, SIG_DFL); } else if (pid1 == 0 && pid2 > 0) { signal(SIGINT, childOneDo); } else if (pid1 > 0 && pid2 == 0)
{ } signal(SIGINT, childTwoDo); for ( ; ; ) ; return 0; } void killChild(int sig) { kill(pid1, sig); kill(pid2, sig); } void childOneDo(int sig) { printf("Child process one is killed by parent!\n"); } void childTwoDo(int sig) { printf("Child process two is killed by parent!\n"); printf("Parent process is killed!\n"); }
(4)进程的管道通信 编制一段程序,实现进程的管道通信。 使用系统调用 pipe() 建立一条管道线;两个子进程 P1 和 P2 分别向管道各写一句话: Child 1 is sending a message! Child 2 is sending a message! 而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。 要求父进程先接收子进程 P1 发来的消息,然后再接收子进程 P2 发来的消息。 实现代码如下: #include #include int main () { pid_t pid1, pid2;
分享到:
收藏