实验课程名称
实验项目名称
一、 实验目的
操作系统实验
进程通信
成绩
指导
老师
进程是程序在一个数据集合上运行的过程,进程是并发执行的,也即系统中的多个进程轮流地占
用处理器运行。我们把若干个进程都能进行访问和修改的那些变量称为公共变量。由于进程是并发地
执行的,所以,如果对进程访问公共变量不加限制,那么就会产生“与时间有关”的错误,即进程执
行后所得到的结果与访问公共变量的时间有关。为了防止这类错误,系统必须要用同步机构来控制进
程对公共变量的访问。一般说,同步机构是由若干条原语——同步原语——所组成。本实验要求学生
模拟 PV 操作同步机构的实现,模拟进程的并发执行,了解进程并发执行时同步机构的作用。
二、实验设备
微型计算机一台、Windows xp 操作系统、vc++6.0
三、实验内容
实验题目:
模拟 PV 操作同步机构,且用 PV 操作解决生产者——消费者问题。
(1) PV 操作同步机构,由 P 操作原语和 V 操作原语组成
(2) 生产者——消费者问题
(3)进程控制块 PCB
(4)处理器的模拟
(5)程序设计
模拟的指令
p (s)
v (s)
put
GET
produce
consume
GOTO L
NOP
能
功
执行 P 操作原语
执行 V 操作原语
B[IN]: =product;
x: =B[out];
输入一个字符放入 C 中
打印或显示 x 中的字符
PC: =L
空操作
IN: = (IN+1) mod 10
out: =(out+1) mod 10
模拟的处理器指令
序号
生产者程序
消费者程序
0
1
2
3
4
produce
p (s1)
PUT
v (s2)
Goto 0
p (s2)
GET
v (s1)
consume
goto 0
生产者和消费者程序
图 9-4 初始化流程
图 9-5 模拟处理器调度
//指令计数器
四、实验数据结构
1. //全局变量
int PC;
static int PA[5]={5,1,3,2,7};
static int SA[5]={1,4,2,6,7};
int s[2];
int processNum;
char* C,x;
//现行进程号
//存放生产者程序中的一条模拟指令执行的入口地址
//存放消费者程序中的一条模拟指令执行的入口地址
2. //PCB 结构
struct PCB
{
char* m_processName;
int m_flag;
char* m_reason;
int m_break;
//进程名
//状态:'1'运行态、'0'就绪态、'-1'等待态、'2'完成态
//等待原因:等待信号量 s1 或 s2
//断点
}process[PROCESS_SIZE];
/*--------------------------------------------------------------------------------*/
struct packet
{
int m_semaphore;
//标示信号量号
}message;
图 9-6 模拟处理器指令执行
//模拟 P 操作
//模拟 V 操作
//模拟 put 操作
//模拟 get 操作
3. void p()
void v()
void put()
void get()
void produce()
void consume()
//模拟 produce 操作
//模拟 consume 操作
void Goto()
//模拟 Goto 操作
void excutInstruction(int i)
void init()
void excutProcess() //模拟处理器指令执行程序
void assign()
//处理器调度程序
//初始化
//模拟的处理器指令
五、算法流程
1. PV 操作同步机构,由 P 操作原语和 V 操作原语组成,它们的定义如下:
P 操作原语 P (s):将信号量 s 减去 1,若结果小于 0,则执行原语的进程被置成等待信号量 s 的状态。
V 操作原语 V (s):将信号量 s 加 1,若结果不大于 0,则释放一个等待信号量 s 的进程。
2. 用 PV 操作来实现生产者和消费者之间的同步,semaphore 和 products 是预先定义的两个类型,在模拟
实现中 semaphore 用 integer 代替,products 可用 integer 或 char 等代替。
3. 进程控制块 PCB 包括 4 个部分:进程名、状态、等待原因、断电。
4.处理器的初始化流程为:初始化信号量 s1:=0,s2=0生产者消费者进程的 PCB 中状态为就绪,断点为 0
将现行进程置为生产者进程,PC:=0处理器调度程序。
5.模拟处理器调度流程:保护现场:PC=当前进程 PCB 的断点有就绪进程? 否:返回;是:随机选择
一就绪进程作为现行进程将现行进程状态改为运行状态现行进程 PCB 的断点值=>PC模拟处理
器指令执行程序
六、实验结果分析
实验的流程比较多,需要多个函数来实现,在个个函数的调用和实现上发了比较多的时间。