八 真经之管道通信问题(西北工大) 在管道通信机制中用信号量描述读进程和写进程访问管道文件的过程假设管道文件大小为KB 问题分析 UNIX系统中利用一个打开的共享文件来连接两个相互通信的进程这个共享文件叫管道作为管道输入的发送进程以字符流的形式将信息送入管道而作为管道输出的接收进程从管道中获取信息管道通信机制要提供三方面的协调能力()互斥.当一个进程对管道进行读/写操作时另一个进程必须等待()同步当写进程把数据写入管道后便去睡眠等待直到输出进程取走数据后唤醒它若一次写入的数据超过缓沖区剩余空间的大小当缓沖区满时写进程必须阻塞并唤醒读进程()对方是否存在只有确定对方存在时才能够进行通信本题只需要考虑互斥同步问题由于只有一对进程访问管道因此不需要设置互斥信号量只要设置两个同步信号量emptyfull分别表示管道可写和可读 The PV code Using Pascal begin pipe:array[]of kilobytes; ts=lengthin=out=:integer; emptyfull:semaphore=; cobegin process PipeWriter begin repeat; 产生数据 p(empty); length=data length; while(length> and ts>) begin pipe[in]=data of KB; in=(in+)mod n; ts=ts; length=length; end v(full); end process Consumer begin repeat; p(full); 从缓沖区取出一件物品; out=(out+)mod n; ts=ts+; v(empty); end coend end 返回《操作系统之PV金典》 |