资源简介
实验内容:
① 由用户指定要产生的进程及其类别,存入进入就绪队列。
② 调度程序从就绪队列中提取一个就绪进程运行。如果申请的资源被阻塞则进入相应的等待队列,调度程序调度就绪队列中的下一个进程。进程运行结束时,会检查对应的等待队列,激活队列中的进程进入就绪队列。运行结束的进程进入over链表。重复这一过程直至就绪队列为空。
③ 程序询问是否要继续?如果要转直①开始执行,否则退出程序。
实验目的:
通过实验模拟生产者与消费者之间的关系,了解并掌握他们之间的关系及其原理。由此增加对进程同步的问题的了解。
实验要求:
每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程类型标号、进程系统号、进程状态、进程产品(字符)、进程链指针等等。
系统开辟了一个缓冲区,大小由buffersize指定。
程序中有三个链队列,一个链表。一个就绪队列(ready),两个等待队列:生产者等待队列(producer);消费者等待队列(consumer)。一个链表(over),用于收集已经运行结束的进程
本程序通过函数模拟信号量的原子操作。
代码片段和文件信息
/*#include
#include
#include
#include
using namespace std;
#define buffersize 10//缓冲区的长度
struct PCB{
string cls;//producer and consumer
int number;
string zhuangtai;
PCB *next;
};
int buffersum;//记录缓冲区有多少已经填充
PCB *ready *prowait *conwait *over;
PCB *P[20];
void Init(){//初始化,将20个进程分为生产者与消费者
int clas i;
PCB *p;
ready = new PCB;
ready->next = NULL;
over = new PCB;
over->next = NULL;
prowait = new PCB;
prowait->next = NULL;
conwait = new PCB;
conwait->next = NULL;//完成头指针的初始化
p = ready;
srand((int)time(0));
clas=rand() % 20+1;
for (i = 1; i <= clas; i++){
P[i - 1] = new PCB;
P[i - 1]->next = NULL;
P[i - 1]->cls = “producer“;
P[i - 1]->number = i;
P[i - 1]->zhuangtai = “ready“;
p->next = P[i - 1];
p = p->next;
}
for (i = clas + 1; i <= 20; i++){
P[i - 1] = new PCB;
P[i - 1]->next = NULL;
P[i - 1]->cls = “consumer“;
P[i - 1]->number = i;
P[i - 1]->zhuangtai = “ready“;
p->next = P[i - 1];
p = p->next;
}
}
void print(){
PCB *p;
p = over->next;
cout << “##运行结束进程:“ << endl;
while (1){
if (p == NULL)
break;
cout << “进程系统号:“ << p->number << “\t进程类型:“ << p->cls << endl;
p = p->next;
}
p = ready->next;
cout << “##就绪队列:“ << endl;
while (1){
if (p == NULL)
break;
cout << “进程系统号:“ << p->number << “\t进程类型:“ << p->cls << endl;
p = p->next;
}
p = prowait->next;
cout << “##生产者等待队列:“<< endl;
while (1){
if (p == NULL)
break;
cout << “进程系统号:“ << p->number << “\t进程类型:“ << p->cls << endl;
p = p->next;
}
p = conwait->next;
cout << “##消费者等待队列:“ << endl;
while (1){
if (p == NULL)
break;
cout << “进程系统号:“ << p->number << “\t进程类型:“ << p->cls << endl;
p = p->next;
}
}
void jud
评论
共有 条评论