当前位置:文档之家› 操作系统实验四

操作系统实验四

青岛理工大学课程实验报告
算法描述及实验步骤
功能:共享存储区的附接。

从逻辑上将一个共享存储区附接到进程的虚拟地址空间上。

用于建立调用进程与由标识符shmid指定的共享内存对象之间的连接。

系统调用格式:virtaddr=shmat(shmid,addr,flag)
该函数使用头文件如下:
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
(8)shmdt( )
功能:用于断开调用进程与共享内存对象之间的连接,成功时返回0,失败返回-1。

系统调用格式:
int shmdt(shmaddr)
char *shmaddr;/*采用shmat函数的返回值*/
(9)shmctl( )
功能:共享存储区的控制,对其状态信息进行读取和修改。

用于对已创建的共享内存对象进行查询、设置、删除等操作。

系统调用格式:shmctl(shmid,cmd,buf)
该函数使用头文件如下:
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
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.单独构成一种独立的文件系统:管道对于管道两端的进程而。

相关主题