贵州大学Linux实验

贵州大学Linux实验

ID:41799726

大小:79.92 KB

页数:5页

时间:2019-09-02

贵州大学Linux实验_第1页
贵州大学Linux实验_第2页
贵州大学Linux实验_第3页
贵州大学Linux实验_第4页
贵州大学Linux实验_第5页
资源描述:

《贵州大学Linux实验》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、贵州大学实验报告学院:专业:班级:姓名学兮实验组实验时间指导教师成绩实验项口名称进程的管道通信实验目的1、了解什么是管道2、熟悉UNIX/LINUX支持的管道通信方式实验要求掌握虚拟存储请求页式存储管理中儿种基本页血置换算法的基本思想和实现过程,并比较它们的效率。实验原理实验手段:编程验证原理;第310条■第319条指令为第31页(对应虚存地址为[310,319])按以上方式,用户指令可组成32贝。实验仪器PC机或工作站一台;RedHat9.0操作系统;实验步骤(一)什么是管道UNIX系统在OS的发展上,最重要的贡

2、献之一便是该系统首创了管道(pipe)o这也是UNIX系统的一大特色。所谓管道,是指能够连接一个写进程和一个读进程的、并允许它们以生产者—消费者方式进行通信的一个共享文件,乂称为pipe文件。由写进程从管道的写入端(句柄1)将数据写入管道,而读进程则从管道的读出端(句柄0)读出数据。(二)管道的类型:1、有名管道旬柄fd[O]句柄fd[l]•个nJ以在文件系统中长期存在的、具有路径名的文件。用系统调用mknod()建立。它克服无名管道使用上的局限性,可让更多的进程也能利用管道进行通信。因而其它进程可以知道它的存在,

3、并能利用路径名来访问该文件。对有名管道的访问方式与访问其他文件一样,需先用open()打开。2、无名管道一个临时文件。利用pipe()建立起来的无名文件(无路径名)。只用该系统调用所返回的文件描述符來标识该文件,故只冇调丿IJpipe()的进程及其了孙进程才能识别此文件描述符,才能利用该文件(管道)进行通信。当这些进程不再使用此管道时,核心收回其索引结点。二种管道的读写方式是相同的,木文只讲无名管道。3、pipe文件的建立分配磁盘和内存索引结点、为读进程分配文件表项、为写进程分配文件表项、分配用户文件描述符4、读/

4、写进程互斥内核为地址设置一个读指针和一个写指针,按先进先出顺序读、写。为使读、写进程互斥地访问pipe文件,需使各进程互斥地访问pipe文件索引结点屮的肓接地址项。因此,每次进程在访问pipe文件前,都需检杏该索引文件是否已被上锁。若是,进程便睡眠等待,否则,将其上锁,进行读/写。操作结束后解锁,并唤醒因该索引结点上锁而睡眠的进程。(三)所涉及的系统调用1、pipe()建立一无名管道。系统调用格式pipe(filedes)参数定义intpipe(filedes);intfiledes[2];其中,filedes[l

5、]是写入端,fi!edes[O]是读出端。该函数使用头文件如下:#includeistd.h>#inlcude#include2、read()系统调用格式read(fd,buf,nbyte)功能:从fd所指示的文件中读illnbyte个字节的数据,并将它们送至由指针buf所指示的缓冲区中。如该文件被加锁,等待,直到锁打开为止。参数定义intread(fd,buf,nbyte);intfd;char*buf;unsignednbyte;3、write()系统调用格式read(fc

6、l,buf,nbyte)功能:把nbyte个字节的数据,从buf所指向的缓冲区写到由fd所指向的文件中。如文件加锁,暂停写入,直至开锁。参数定义同read()。实验内容编写程序实现进程的管道通信。川系统调用pipe()建立一管道,二个子进程P1和P2分别向管道各写一句话:Child1issendingamessage!Child2issendingamessage!父进程从管道屮读出二个来白子进程的信息并显示(要求先接收P1,后P2)。实骑数据延迟5秒示显示child1processissendingmessage

7、!再延迟5秒child2processissendingmessage!#include#include#includeintpidl,pid2;main(){intfd[2];charoutpipe[100],inpipe[100];pipe(fd);/*创建一个管道*/while((pidl=fork())==-l);if(pidl==0){lockf(fdfl],l,0);sprintf(outpipc,"child1processissendingm

8、essage!");/*把串放入数组outpipe中*/write(fdLU,outpipe,50);/*向管道写长为50字节的串*/sleep(5);/*自我阻塞5秒*/lockf(fd[l],0,0);cxit(0);}else{while((pid2=fork())==-l);if(pic!2==0){lockf(fd[l],l,0);八互斥*/spr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。