1 / 26
文档名称:

操作系统实验进程的同步heu样稿.doc

格式:doc   大小:7,078KB   页数:26页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

操作系统实验进程的同步heu样稿.doc

上传人:业精于勤 2020/11/20 文件大小:6.91 MB

下载得到文件列表

操作系统实验进程的同步heu样稿.doc

文档介绍

文档介绍:操作系统
实 验 报 告
课程名称
操作系统试验
课程编号
0906553
试验项目名称
进程同时
学号
年级
姓名
专业
学生所在学院
指导老师
试验室名称地点

哈尔滨工程大学
计算机科学和技术学院
第六讲 进程同时
一、试验概述
1. 试验名称
进程同时
2. 试验目标
(1)使用 EOS 信号量编程处理生产者—消费者问题,了解进程同时意义。
(2)调试跟踪 EOS 信号量工作过程,了解进程同时原理。
(3)修改 EOS 信号量算法,使之支持等候超时唤醒功效(有限等候),加深了解进程同时原理。
3. 试验类型
验证型试验,设计性试验
4. 试验内容
(1)准备试验
(2)使用 EOS 信号量处理生产者-消费者问题
(3)调试 EOS 信号量工作过程
1)创建信号量 2)等候释放信号量 3)等候信号量(不阻塞) 4)释放信号量(不唤醒) 5) 等候信号量(阻塞) 6) 释放信号量(唤醒)
(4)修改 EOS 信号量算法
二、试验环境
操作系统集成试验环境OS Lab
三、试验过程
1. 设计思绪和步骤图
2. 算法实现
3. 需要处理问题及解答
(1). P143生产者在生产了13号产品后原来要继续生产14号产品,可此时生产者为何须需等候消费者消费了4号产品后,才能生产14号产品呢?生产者和消费者是怎样使用同时对象来实现该同时过程呢?
答:此时生产了0-13号14个产品,消费了0-3号4个产品,缓冲区全部占满了。只有缓冲区有空闲生产者才能生产东西,有权向里面放东西。所以它必需等到消费者,取走产品,有空闲缓冲区时,才继续生产14号产品。
(2). P145- 修改EOS信号量算法(只看一次消费1个产品,一次消费2个产品能够写到试验汇报中)
答:见三,四部分
(3). 思索在ps/,为何要使用原子操作?

答:原子操作要求一旦开始就要运行到结束,不能有中止。在实施等候信号量和释放信号量时候,不许可cpu响应外部中止,所以使用原子操作。
(4). 绘制ps/。
原子操作前关中止
PsWaitForSemaphore
开始原子操作P操作
N
Wait操作信号量大于0
Y
实施P操作
P操作结束
Ps Release Semaphore
原子操作前关中止
开始原子操作V操作
N
P和V操作信号量之和大于缓冲队列长度
Y
统计目前信号量值
返回“信号数目量超出范围”
释放信号量
信号量值+1
N
P操作控制信号量小于0
N
被阻塞进程量小于要释放信号量
Y
唤醒等候进程
Y
唤醒队列中进程
N
等候队列为空
Y
返回“唤醒成功”
结束
4. 关键数据结构、实现代码及其说明
1)修改PsWaitForSemaphore函数
if (Semaphore->Count>0){
Semaphore->Count--;
flag=STATUS_SUCCESS;
}//假如信号量大于零,说明还有资源,能够为线程分配
else
flag=PspWait(&Semaphore->WaitListHead, Milliseconds);
KeEnableInterrupts(IntState); // 原子操作完成,恢复中止。
return flag;
}//不然,说明资源数量不够,不能再为线程分配资源,所以要使线程等候
2)修改PsReleaseSemaphore函数
if (Semaphore->Count + ReleaseCount > Semaphore->MaximumCount) {
Status = STATUS_SEMAPHORE_LIMIT_EXCEEDED;
} else {
//
// 统计目前信号量值。
//
if (NULL != PreviousCount) {
*PreviousCoun