logo资料库

操作系统实验报告,进程通信.doc

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
实验课程名称 实验项目名称 一、 实验目的 操作系统实验 进程通信 成绩 指导 老师 进程是程序在一个数据集合上运行的过程,进程是并发执行的,也即系统中的多个进程轮流地占 用处理器运行。我们把若干个进程都能进行访问和修改的那些变量称为公共变量。由于进程是并发地 执行的,所以,如果对进程访问公共变量不加限制,那么就会产生“与时间有关”的错误,即进程执 行后所得到的结果与访问公共变量的时间有关。为了防止这类错误,系统必须要用同步机构来控制进 程对公共变量的访问。一般说,同步机构是由若干条原语——同步原语——所组成。本实验要求学生 模拟 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模拟处理 器指令执行程序 六、实验结果分析 实验的流程比较多,需要多个函数来实现,在个个函数的调用和实现上发了比较多的时间。
分享到:
收藏