设某台机挂有两个I/O通道:分别挂一台输入机和一台打印机。卡片机上有一叠数据卡片,现在要把这些数据逐一输入到缓冲区B1,然后再复制到缓冲区B2,并在打印机上打印出来。 问:系统可设哪些进程来完成这个任务?用P-V原语写这些进程的同步算法。 图片1.png
时间: 2024-05-02 07:18:19 浏览: 261
例1设有一台计算机,有两条IO通道,分别接一台卡片输入机和一.pdf
可以设3个进程来完成这个任务:
1. 输入进程:从输入机读取数据卡片,将数据逐一输入到缓冲区B1中。
2. 复制进程:从缓冲区B1中读取数据,将数据复制到缓冲区B2中。
3. 打印进程:从缓冲区B2中读取数据,将数据打印出来。
其中,输入进程和复制进程需要进行同步,保证复制进程不会读取到空缓冲区或重复读取已经读取的数据。可以使用信号量来实现同步。
P-V原语如下:
```
semaphore mutex = 1; // 互斥信号量,保证同一时间只有一个进程访问缓冲区B1
semaphore empty = n; // 空缓冲区信号量,初始值为缓冲区B1的大小n
semaphore full = 0; // 满缓冲区信号量,初始值为0
// 输入进程
while(还有数据卡片) {
P(empty); // 等待空缓冲区
P(mutex); // 进入临界区
将数据卡片输入到缓冲区B1中;
V(mutex); // 退出临界区
V(full); // 增加满缓冲区信号量
}
// 复制进程
while(还有数据需要复制) {
P(full); // 等待满缓冲区
P(mutex); // 进入临界区
从缓冲区B1中读取数据,复制到缓冲区B2中;
V(mutex); // 退出临界区
V(empty); // 增加空缓冲区信号量
}
// 打印进程
while(还有数据需要打印) {
P(full); // 等待满缓冲区
P(mutex); // 进入临界区
从缓冲区B2中读取数据,打印出来;
V(mutex); // 退出临界区
V(empty); // 增加空缓冲区信号量
}
```
阅读全文