77范文网 - 专业文章范例文档资料分享平台

华北电力大学操作系统实验报告..(3)

来源:网络收集 时间:2018-12-21 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

华 北 电 力 大 学 实 验 报 告

实验4 线程的状态和转换 一、实验目的 1、调试线程在各种状态间的转换过程,熟悉线程的状态和转换。 2、通过为线程增加挂起状态,加深对线程状态的理解。 二、预备知识 阅读本书第5.2.3节,了解线程都有哪些状态以及EOS是如何定义这些状态的。了解线程是如何在这些状态之间进行转换的,特别是要阅读一下EOS中用于线程转换的相关函数的源代码。阅读本书第5.2.4节,了解EOS为线程添加的挂起状态,以及Suspend和Resume原语操作。线程状态的转换和线程的同步、线程的调度是不可分割的,所以建议读者简单学习一下第5.3和5.4节中的内容。 三、实验内容 3.1 准备实验 按照下面的步骤准备实验: 1. 启动OS Lab。 2. 新建一个EOS Kernel项目。 3.2 调试线程状态的转换过程 1. 按F7生成在本实验3.1中创建的EOS Kernel项目。 2. 按F5启动调试。 3. 待EOS启动完毕,在EOS控制台中输入命令“loop”后按回车。 4. 结束此次调试。 loop命令执行的效果可以参见图: 3.2.1 线程由阻塞状态进入就绪状态 3.2.2 线程由运行状态进入就绪状态 3.2.3 线程由就绪状态进入运行状态 3.2.4 线程由运行状态进入阻塞状态 3.3 为线程增加挂起状态 1. 删除之前添加的所有断点。 2. 按F5启动调试。 3. 待EOS启动完毕,在EOS控制台中输入命令“loop”后按回车。此时可以看到loop线程的执行计数在不停增长,说明loop线程正在执行。记录下loop线程的ID。 4. 按Ctrl+F2切换到控制台2,输入命令“suspend 31”(如果loop线程的ID是31)后按回车。命令执行成功的结果如图12-2所示。 5. 按Ctrl+1切换回控制台1,可以看到由于loop线程已经成功被挂起,其执行计数已经停止增长了。此时占用处理器的是EOS中的空闲线程。 第 页 共 页

华 北 电 力 大 学 实 验 报 告

实验5 进程的同步 一、实验目的 1、使用EOS的信号量,编程解决生产者—消费者问题,理解进程同步的意义。 2、调试跟踪EOS信号量的工作过程,理解进程同步的原理。 3、修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。 二、预备知识 阅读本书第5章中的5.3节,学习EOS内核提供的三种同步对象(该实验没有涉及到Event同步对象)。重点理解各种同步对象的状态与使用方式。同时学习经典的生产者-消费者问题。 阅读5.2节,学习在EOS应用程序中调用EOS API函数CreateThread创建线程的方法。 三、实验内容 3.1 准备实验 1. 启动OS Lab。 2. 新建一个EOS Kernel项目。 3. 生成EOS Kernel项目,从而在该项目文件夹中生成SDK文件夹。 4. 新建一个EOS应用程序项目。 5. 使用在第3步生成的SDK文件夹覆盖EOS应用程序项目文件夹中的SDK文件夹。 3.2 使用EOS的信号量解决生产者-消费者问题 生产者-消费者同步执行的过程 3.3 调试EOS信号量的工作过程 3.3.1 创建信号量 第 页 共 页

华 北 电 力 大 学 实 验 报 告

3.3.2 等待、释放信号量 3.3.2.1 等待信号量(不阻塞) 3.3.2.2 释放信号量(不唤醒) 3.3.2.3 等待信号量(阻塞) 3.3.2.4 释放信号量(唤醒) 3.4 修改EOS的信号量算法 在目前EOS Kernel项目的ps/semaphore.c文件中,PsWaitForSemaphore函数的Milliseconds参数只能是INFINITE,PsReleaseSemaphore函数的ReleaseCount参数只能是1。现在要求同时修改PsWaitForSemaphore函数和PsReleaseSemaphore函数中的代码,使这两个参数能够真正起到作用,使信号量对象支持等待超时唤醒功能和批量释放功能。 (a)main函数流程图;(b)Producer函数流程图;(c)Consumer函数流程图 第 页 共 页

华 北 电 力 大 学 实 验 报 告

实验6 时间片轮转调度 一、实验目的 1、调试EOS的线程调度程序,熟悉基于优先级的抢先式调度。 2、为EOS添加时间片轮转调度,了解其它常用的调度算法。 二、预备知识 阅读本书第5章中的第5.4节。重点理解EOS当前使用的基于优先级的抢先式调度,调度程序执行的时机和流程,以及实现时间片轮转调度的细节。 三、实验内容 3.1 准备实验 按照下面的步骤准备实验: 1. 启动OS Lab。 2. 新建一个EOS Kernel项目。 3.2 阅读控制台命令“rr”相关的源代码 阅读ke/sysproc.c文件中第690行的ConsoleCmdRoundRobin函数,及该函数用到的第649行的ThreadFunction函数和第642行的THREAD_PARAMETER结构体,学习“rr”命令是如何测试时间片轮转调度的。 没有时间片轮转调度时“rr”命令的执行效果 3.3调试线程调度程序 3.3.1 调试当前线程不被抢先的情况 正像上图中显示的,新建的第0个线程会一直运行,而不会被其它同优先级的新建线程或者低优先级的线程抢先。按照下面的步骤调试这种情况在PspSelectNextThread函数中处理的过程。 1. 结束之前的调试。 2. 在ke/sysproc.c文件的ThreadFunction函数中,调用fprintf函数的代码行(第680行)添加一个断点。 3. 按F5启动调试。 4. 待EOS启动完毕,在EOS控制台中输入命令“rr”后按回车。“rr”命令开始执行后,会在断点处中断。 5. 查看ThreadFunction函数中变量pThreadParameter->Y的值应该为0,说明正在调试的是第0个新建的线程。 6. 激活虚拟机窗口,可以看到第0个新建的线程还没有在控制台中输出任何内容,原因是fprintf 函数还没有执行。 7. 激活OS Lab窗口后按F5使第0个新建的线程继续执行,又会在断点处中断。再次激活虚拟机窗口,第 页 共 页

华 北 电 力 大 学 实 验 报 告

可以看到第0个新建的线程已经在控制台中输出了第一轮循环的内容。可以多按几次F5查看每轮循环输出的内容。 3.3.2 调试当前线程被抢先的情况 3.4 为EOS添加时间片轮转调度(行时间片轮转调度时“rr”命令的执行效果) 修改ps/sched.c文件中的PspRoundRobin函数(第337行),在其中实现时间片轮转调度算法。 1. 代码修改完毕后,按F7生成EOS内核项目。 2. 按F5启动调试。 3. 在EOS控制台中输入命令“rr”后按回车。应能看到20个线程轮流执行的效果,如图。 第 页 共 页

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库华北电力大学操作系统实验报告..(3)在线全文阅读。

华北电力大学操作系统实验报告..(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/380662.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: