一、课程设计目的
通过设计,编写,调试一个简单的进程线程调度模拟系统,对进程调度,
进程运行状态变换及 wait 原语和 signal 原语加深理解和掌握。
二、课程设计题目描述和要求
文件打印问题
有三个进程 PA、PB 和 PC 合作解决文件打印问题:PA 将文件记录从磁盘
读入主存的缓冲区 1,每执行一次读一个记录; PB 将缓冲区 1 的内容复制到
缓冲区 2,每执行一次复制一个记录;PC 将缓冲区 2 的内容打印出来,每执行
一次打印一个记录。缓冲区的大小等于一个记录的大小。请用 PV 操作来保证
文件的正确打印。
分析:进程 PA、PB、PC 之间的关系为:PA 与 PB 共用一个单缓冲区,而
PB 又与 PC 共用一个单缓冲区,其合作方式如图所示。当缓冲区 1 为空时,进
程 PA 可以将一个记录读入其中;若缓冲区 1 中有数据且缓冲区 2 为空,则进
程 PB 可以将记录从缓冲区 1 复制到缓冲区 2 中;若缓冲区 2 中有数据,则进
程 PC 可以打印记录。其他条件下,相应进程必须等待。
为遵循这一同步规则,应设置 4 个信号量 empty1,empty2,full1,full2,信
号量 empty1、empty2 分别表示缓冲区 1 及缓冲区 2 是否为空,其初值为
1;信号量 full1、full2 分别表示缓冲区 1 及缓冲区 2 是否有记录可供处理,其
初值为 0。同步描述如下:
semaphore empty1,empty2=1;
semaphore full1,full2=0;
main()
{
cobegin