操作系统实验四
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.单独构成一种独立的文件系统:管道对于管道两端的进程而