操作系统实验(1).docx
《操作系统实验(1).docx》由会员分享,可在线阅读,更多相关《操作系统实验(1).docx(18页珍藏版)》请在三一办公上搜索。
1、操作系统实验操作系统 实 验 报 告 课程名称 实验项目名称 学号 姓名 学生所在学院 实验室名称地点 操作系统实验 进程的同步 课程编号 0906553 年级 专业 指导教师 哈尔滨工程大学 计算机科学与技术学院 第五讲 进程的同步 一、实验概述 1. 实验名称 进程的同步 2. 实验目的 l 使用EOS的信号量,编程解决生产者消费者问题,理解进程同步的意义。 l 调试跟踪EOS信号量的工作过程,理解进程同步的原理。 l 修改EOS的信号量算法,使之支持等待超时唤醒功能,加深理解进程同步的原理。 3. 实验类型 验证,设计 4. 实验内容 4.1 准备实验 4.2 使用EOS的信号量解决生产
2、者消费者问题 4.3 调试EOS信号量的工作过程 4.3.1 创建信号量 4.3.2 等待、释放信号量 4.3.2.1 等待信号量 4.3.2.2 释放信号量 4.3.2.3 等待信号量 4.3.2.4 释放信号量 4.4 修改EOS的信号量算法 二、实验环境 操作系统集成实验环境 OS Lab l EOS 操作系统 三、实验过程 1. 设计思路和流程图 1 2. 需要解决的问题及解答 (1). P143生产者在生产了13号产品后本来要继续生产14号产品,可此时生产者为什么必须等待消费者消费了4号产品后,才能生产14号产品呢?生产者和消费者是怎样使用同步对象来实现该同步过程的呢? 答:此时生产
3、了0-13号14个产品,消费了0-3号4个产品,缓冲区都占满了。只有缓冲区有空闲生产者才能生产东西,有权向里面放东西。所以它必须等到消费者,取走产品,有空闲缓冲区时,才继续生产14号产品。 (2). P145-3.4 修改EOS的信号量算法(只看一次消费1个产品的,一次消费2个产品的可以写到实验报告中) 答:见之后部分 (3). 思考在ps/semaphore.c文件内的PsWaitForSemaphore和PsReleaseSemaphore函数中,为什么要使用原子操作? 答:原子操作要求一旦开始就要运行到结束,不能有中断。在执行等待信号量和释放信号量的时候,不允许cpu响应外部中断,所以使
4、用原子操作。 (4). 绘制ps/semaphore.c文件内PsWaitForSemaphore和PsReleaseSemaphore函数的流程图。 PsWaitForSemaphore N 开始原子操作P操作 原子操作前关中断 Wait操作的信号执行Y P操作 P操作结束 2 Ps Release Semaphore P和V操作的信号量之N 开始原子操作V操作 原子操作前关中断 和大于缓冲队列长度 Y N P操作控制的信号量不大于0 Y 被阻塞进程量小于要释唤醒等待进程 放的信号量 N 返回“信号数目量超出范围” 释放信号量 Y 记录当前信号量的值 信号量值+1 唤醒队列中进程 返回“唤醒
5、成功” 等待队列为空 N Y ps/semaphore.c文件 #include psp.h VOID PsInitializeSemaphore( IN PSEMAPHORE Semaphore, IN LONG InitialCount, 结束 3. 主要数据结构、实现代码及其说明 3 IN LONG MaximumCount) /*+ 功能描述: 初始化信号量结构体。 参数: Semaphore - 要初始化的信号量结构体指针。 InitialCount - 信号量的初始值,不能小于 0 且不能大于 MaximumCount。 MaximumCount - 信号量的最大值,必须大于 0。
6、 返回值:无。 -*/ ASSERT(InitialCount = 0 & InitialCount 0); Semaphore-Count = InitialCount; Semaphore-MaximumCount = MaximumCount; ListInitializeHead(&Semaphore-WaitListHead); STATUS PsWaitForSemaphore( IN PSEMAPHORE Semaphore, IN ULONG Milliseconds) /*+ 功能描述: 信号量的 Wait 操作。 参数: Semaphore - Wait 操作的信号量对象。
7、 Milliseconds - 等待超时上限,单位毫秒。 返回值: STATUS_SUCCESS。 当你修改信号量使之支持超时唤醒功能后,如果等待超时,应该返回 STATUS_TIMEOUT。 -*/ 4 BOOL IntState; STATUS flag; ASSERT(KeGetIntNesting = 0); / 中断环境下不能调用此函数。 IntState = KeEnableInterrupts(FALSE); / 开始原子操作,禁止中断。 / 目前仅实现了标准记录型信号量,不支持超时唤醒功能,所以 PspWait 函数 / 的第二个参数的值只能是 INFINITE。 if (Se
8、maphore-Count0) else flag=PspWait(&Semaphore-WaitListHead, Milliseconds); Semaphore-Count-; flag=STATUS_SUCCESS; KeEnableInterrupts(IntState); / 原子操作完成,恢复中断。 return flag; STATUS PsReleaseSemaphore( IN PSEMAPHORE Semaphore, IN LONG ReleaseCount, OUT PLONG PreviousCount ) STATUS Status; BOOL IntState;
9、 IntState = KeEnableInterrupts(FALSE); / 开始原子操作,禁止中断。 if (Semaphore-Count + ReleaseCount Semaphore-MaximumCount) Status = STATUS_SEMAPHORE_LIMIT_EXCEEDED; else / 记录当前的信号量的值。 if (NULL != PreviousCount) *PreviousCount = Semaphore-Count; 5 int mm=Semaphore-Count;/ 目前仅实现了标准记录型信号量,每执行一次信号量的释放操作 / 只能使信号量的
10、值增加 1。 while (!ListIsEmpty(&Semaphore-WaitListHead)&(ReleaseCount) Semaphore-Count=mm+ReleaseCount;/ 可能有线程被唤醒,执行线程调度。 Status = STATUS_SUCCESS; PspWakeThread(&Semaphore-WaitListHead, STATUS_SUCCESS); PspThreadSchedule; ReleaseCount-; KeEnableInterrupts(IntState); / 原子操作完成,恢复中断。 return Status; POBJECT
11、_TYPE PspSemaphoreType = NULL;/ 用于初始化 semaphore 结构体的参数结构体。 typedef struct _SEM_CREATE_PARAM LONG InitialCount; LONG MaximumCount; SEM_CREATE_PARAM, *PSEM_CREATE_PARAM;/semaphore 对象的构造函数,在创建新 semaphore 对象时被调用。 VOID PspOnCreateSemaphoreObject( IN PVOID SemaphoreObject, IN ULONG_PTR CreateParam) PsInit
12、ializeSemaphore( (PSEMAPHORE)SemaphoreObject, (PSEM_CREATE_PARAM)CreateParam)-InitialCount, (PSEM_CREATE_PARAM)CreateParam)-MaximumCount ); / semaphore 对象类型的初始化函数。 VOID PspCreateSemaphoreObjectType( 6 VOID) STATUS Status; OBJECT_TYPE_INITIALIZER Initializer; Initializer.Create = PspOnCreateSemaphore
13、Object; Initializer.Delete = NULL; Initializer.Wait = (OB_WAIT_METHOD)PsWaitForSemaphore; Initializer.Read = NULL; Initializer.Write = NULL; Status = ObCreateObjectType(SEMAPHORE, &Initializer, &PspSemaphoreType); if (!EOS_SUCCESS(Status) / semaphore 对象的构造函数。 STATUS PsCreateSemaphoreObject( IN LONG
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验
链接地址:https://www.31ppt.com/p-3549597.html