1 / 16
文档名称:

操作系统实验报告.docx

格式:docx   大小:82KB   页数:16页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

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

分享

预览

操作系统实验报告.docx

上传人:教然后知困 2022/8/10 文件大小:82 KB

下载得到文件列表

操作系统实验报告.docx

相关文档

文档介绍

文档介绍:Prepared on 22 November 2020
操作系统实验报告
课程设计(综合实验)报告
( 2014-- 2015年度第一学期)
名 称: 操作系统综合实验
题 目: OS 能。能够交换这些函数被调用的顺序吗思考其中的原因。
PspCreateProcessEnvironment 的主要功能是创建进程控制块,并且为进程创建了地址空间和分配了 句柄表。PspLoadProcessImage 是将进程的可执行映像加载到了进程的地址空间中。PspCreateThread 创建了进程的主线程。这三个函数被调用的顺序是不能够改变的。就向上面描述的加载可执行映像之前必须已经为进程创建了地址空间,这样才能够确定可执行映像可以被加载到内存的什么位置。在创建主线程之 前必须已经加载了可执行映像,这样主线程才能够知道自己要从哪里开始执行,执行哪些指令。因此不能交换他们的顺序。
实验4 线程的状态和转换
实验目的
调试线程在各种状态间的转换过程,熟悉线程的状态和转换。
通过为线程增加挂起状态,加深对线程状态的理解。
二、 实验内容
1 准备实验
2 调试线程状态的转换过程(阻塞—就绪、运行—就绪、就绪—运行、运行—阻塞)
3 为线程增加挂起状态
三、问题答案及参考代码
PsResumThread(IN HANDLE hThread){
STATUS Status;
BOOL IntState;
PTHREAD Thread;
Status=ObRefObjectByHandle(hThread,PspThreadType,(PVOID*)&Thread);
if (EOS_SUCCESS(Status)){
IntState = KeEnableInterrupts(FALSE);
if (Zero == Thread->State) {
ListRemoveEntry(&Thread->StateListEntry);
PspReadyThread(Thread);
PspThreadSchedule();
Status = STATUS_SUCCESS;}
else{
Status = STATUS_NOT_SUPPORTED; }
KeEnableInterrupts(IntState);考一下,在本实验中,当loop线程处于运行状态时,EOS中还有哪些线程,它们分别处于什么状态。可以使用控制台命令pt查看线程的状态。
,并且在控制台2中执行suspend命令时,为什么控制台1中的loop线程处于就绪状态而不是运行状态
答:当在控制台2 中执行suspend命令时,实质上是优先级为24的控制台2线程抢占了处理器,也就是控制台2线程处于运行状态,所以此时loop线程处于就绪状态了。
4. 总结一下在图5-3中显示的转换过程,哪些需要使用线程控制块中的上下文(将线程控制块中的上下文恢复到处理器中,或者将处理器的状态复制到线程控制块的上下文中),哪些不需要使用,并说明原因。
答:一个进程在运行过程中或执行系统调用,或产生了一个中断事件,处理器都进行一次模式切换,操作系统接收控制权,有关系统例程完成必须的操作后,或恢复被中断进程或切换到新进程。当系统调度新进程占有处理器时,新老进程随之发生上下文切换,因此,进程的运行被认为是在进程的上下文中执行,这时的控制权在操作系统手中,它在完成必要的操作后,可以恢复被中断的进程或切换到别的进程。
实验5 进程的同步
一、 实验目的
使用EOS的信号量,编程解决生产者—消费者问题,理解进程同步的意义。
调试跟踪EOS信号量的工作过程,理解进程同步的原理。
修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。
二、 实验内容
1 、准备实验
2 、使用EOS的信号量解决生产者-消费者问题
3 、调试EOS信号量的工作过程
4、 修改EOS的信号量算法
if(Semaphore->Count>0){?
Semaphore->Count--;?
flag=STATUS_SUCCESS;
}/
while((!ListIsEmpty(&Semaphore->WaitListHead))&&(ReleaseCount)){?
PspWakeThread(&Semaphore->WaitListHead,STATUS_SUCCESS);?
PspThreadSchedule();?
Releas