操作系统实验四

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

青岛理工大学课程实验报告

算法描述及实验步骤

功能:共享存储区的附接。从逻辑上将一个共享存储区附接到进程的虚拟地址空间上。用于建立调用进程与由标识符shmid指定的共享内存对象之间的连接。

系统调用格式:virtaddr=shmat(shmid,addr,flag)

该函数使用头文件如下:

#include

#include

#include

(8)shmdt( )

功能:用于断开调用进程与共享内存对象之间的连接,成功时返回0,失败返回-1。

系统调用格式:

int shmdt(shmaddr)

char *shmaddr;/*采用shmat函数的返回值*/

(9)shmctl( )

功能:共享存储区的控制,对其状态信息进行读取和修改。用于对已创建的共享内存对象进行查询、设置、删除等操作。

系统调用格式:shmctl(shmid,cmd,buf)

该函数使用头文件如下:

#include

#include

#include

2、步骤:

(1)定义进程变量(2)定义两个字符数组

(3)创建管道(4)如果进程创建不成功,则空循环(5)如果子进程创建成功,pid为进程号(6)锁定管道

(7)给Outpipe赋值(8)向管道写入数据

(9)等待读进程读出数据(10)解除管道的锁定

(11)结束进程等待子进程结束(12)从管道中读出数据

(13)显示读出的数据(14)父进程结束

创建jincheng.c

插入文字

运行:

运行后:

(对实验结果进行分析,问题回答,实验心得体会及改进意见)

虽然对pipe()、msgget()、msgsnd()、msgrcv()、msgctl()、shmget()、shmat()、

shmdt()、shmctl()的功能和实现过程有所了解,但是运用还是不熟练,过去没

见过,所以运行了一个简单的程序。

利用管道机制、消息缓冲队列、共享存储区机制进行进程间的通信,加深了对

其了解。

(1)管道通信机制,同步的实现过程:当写进程把一定数量的数据写入pipe,

便去睡眠等待,直到读进程取走数据后,再把它唤醒。当读进程读一空pipe

时,也应睡眠等待,直到写进程将数据写入管道后,才将之唤醒,从而实现进

程的同步。

管道通信的特点:A管道是半双工的,数据只能向一个方向流动;需要双方通

信时,需要建立起两个管道;B. 只能用于父子进程或者兄弟进程之间(具有亲

缘关系的进程);C.单独构成一种独立的文件系统:管道对于管道两端的进程而

相关文档
最新文档