操作系统原理实验报告(2)

2018-12-04 16:29

lockf(fd[1], 0, 0); /* 释放管道写入端 */ exit(0); /* 关闭P1*/ }

else /* 从父进程返回,执行父进程 */ {

while ((p2=fork())==-1); /* 创建子进程P2,失败时循环 */ if (p2==0) /* 从子进程P2返回,执行子进程P2 */ {

lockf(fd[1], 1, 0); /* 锁定写入端 */

sprintf(buf, \ printf(\

write(fd[1], buf, 50); /* 把buf中的字符写入管道 */ sleep(5); /* 睡眠5秒,让父进程读 */ lockf(fd[1], 0, 0); /* 释放管道写入端 */ exit(0); /* 关闭P2*/ }

wait(0);

if ((r=read(fd[0], s, 50))== -1) printf(\ else printf(\ wait(0);

if ((r=read(fd[0], s, 50))== -1) printf(\ else printf(\ exit(0); } }

/*exp1-2.c*/

#include #include #include int p1,p2; void main() {

void ppdo(); void p1do(); void p2do();

signal(SIGINT,ppdo); p1=fork(); if(p1==0) {

signal(SIGUSR1,p1do); for(;;);

5

} else {

p2=fork(); if(p2==0) {

signal(SIGUSR2,p2do); for(;;); } }

wait(0); wait(0);

printf(\ exit(0); }

void ppdo() {

kill(p1,SIGUSR1); kill(p2,SIGUSR2); }

void p1do() {

printf(\ exit(0); }

void p2do() {

printf(\ exit(0); }

六、程序运行结果及分析

实验1管道通信运行结果截图

6

实验1管道通信结果分析

父进程建立后,创建了子进程P1,P2,然后P1,P2分别向管道中写入字符串“Child process p1 is sending message!”和“Child process p2 is sending message!”,父进程从管道中读取字符串。

实验2软中断通信运行结果截图

7

实验2软中断通信结果分析

先预设中断信号SIGINT,再先后创建子进程P1和P2,预设中断信号SIGUSR1,SIGUER2,当我们按下“Ctrl+C”时,父进程发出中断信号SIGUSR1和SIGUSR2,通知子进程P1和P2,子进程捕捉到信号后分别输出相应的信息后,终止,最后输出“Parent process is killed!”后终止。

实验后思考:

通过这次实验,深刻地了解到了管道通信和软中断通信的详细过程,深化了老师课堂上的讲解,对整个过程的把握也更加清晰了。

很值得的一次学习经历,做完实验,再画流程图,程序运行的细节熟悉于心,了如指掌。

七.指导教师评议 成绩等级

8

实验2 进程通信

一、实验目的

1. 了解进程间通信IPC的三种方式:消息队列、共享内存和信号量。 2. 掌握使用消息队列进行进程间通信的有关系统调用和编程方法。 3. 掌握使用共享内存进行进程间通信的有关系统调用和编程方法。

二、实验内容

1. 消息队列

使用系统调用msgget( )、msgsnd( )、msgrcv( )和msgctl( ),用消息队列机制实现客户进程和服务器进程间的通信。客户进程首先建立一个描述符为msgqid的消息队列,接着向服务器进程发送一个消息正文为自己的进程标识pid且类型为1的消息,然后接收来自服务器进程的消息,并在屏幕上显示:“Client receives a message from xxxx!”,其中“xxxx”为服务器进程的进程标识。服务器进程首先捕捉软中断信号(除不能捕捉的SIGKILL),若捕捉到时则调用函数cleanup( )删除消息队列,终止服务器进程。否则重复下列操作:接收所有类型为1的消息,并在屏幕上显示:“Server receives a message from xxxx!”,其中“xxxx”为客户进程的进程标识;然后服务器进程将客户进程的进程标识作为返回消息的类型,而将自己的进程标识作为消息正文发送给客户进程。 2. 共享内存

使用系统调用shmget( )、shmat( )和shmctl( ),用共享内存机制实现进程间的通信。其中一个进程向共享内存中写入数据,另一个进程从共享内存中读出数据并显示在屏幕上。

三、实验要求

1. 根据实验内容编写C程序。 2. 上机调试程序。

3. 记录并分析程序运行结果。

四、程序说明和程序流程图

实验1消息队列流程图

9


操作系统原理实验报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:关于新农村政策与税费改革调查报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: