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

操作系统实验报告

来源:用户分享 时间:2025/5/22 23:17:52 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

insert(self->other_resources,r); }/*插入一个RCB指针指向进程资源链表;*/ else {

/*资源不可用*/

/*记录阻塞*/

self->status.type=?blocked?;

self->status.list=r; remove(RL,self);

.

/*指向所请求资源的RCB*/

/*将进程从就绪队列中删除*/ /*插入资源等待队列*/

/*调度程序运行选择下一个运行进

insert(r->waiting_list,self); } scheduler( ); 程*/

release(RID) {

/*释放资源算法*/

/*获取资源控制块首地址*/ /*从进程资源链表中删除该资源*/

r=get_RCB(RID);

remove(self->other_resource,r);

if(waiting_list==NULL) r->status=?free?; /*等待队列为空,置资源状态为空闲*/

else {

/*等待队列不为空*/

/*从等待队列中移出一个进程q*/ /*将进程q的状态设为就绪*/ /*进程q的状态指针指向就绪队列*/ /*进程q插入就绪队列*/

/*调度程序运行选择下一个运行进程*/

remove(r->waiting_list,q);

q->status.type=?ready?; q->status.list=RL; insert(RL,q); } scheduler( );

============================================================= 4.调度程序。

调度策略采用固定优先级和可剥夺优先级调度算法。

即调度程序必须维护n个不同优先级的就绪队列,各就绪队列可为空,也可包含多个进程。0级进程优先级最低,n-l级进程优先级最高。创建进程时就赋予了固定的优先级,并在进程的生存期内保持不变。当新进程创建或阻塞进程被唤醒时,它就被插入同级的就绪队列中。

调度程序按“先来先服务”和优先级“从高到低”的方式处理就绪队列。即从最高优先级的非空就绪队列的队首选择一个进程进入运行态。这样的调度策略很容易导致\饥饿\,进程出现。因为对进程q来说,只有当优先级高于自己的所有进程都运行完毕,或都进入阻塞状态时,它才能得到运行权。

可以假定系统中至少有一个进程处于就绪态。为确保这一点,设计一个特殊进程init,该进程在系统初始化时自动创建,并赋予最低优先级0级。init进程

有两个作用:充当闲逛进程,该进程运行时不申请任何资源,以免被阻塞;作为第一个被创建的进程,它没有父进程,可创建比自己优先级高的其他进程。所以init进程是进程生成树的根进程。

采用优先级策略的调度程序的常见结构知下所示:

============================================================= scheduler()

{ 找出最高优先级进程p;

}

============================================================ 每当任一进程的操作执行完毕,必须执行进程调度程序,它是当前运行进程的一部分。 进程调用该函数,后者决定该进程是继续执行还是被其他进程剥夺运行权。作出判断的依据是:是否存在高优先级进程p,如果存在,p将剥夺self的运行权。

当前进程的运行权被剥夺的情况有以下两种:

①当前进程刚刚完成release(操作,由此被唤醒进程的优先级可能高于当前进程。

②当前进程刚刚完成create()操作,新创建进程的优先级可能高于当前进程。 在以下两种情况下,新挑选的进程必须剥夺当前进程的运行权:

①当前进程刚刚完成reques()操作,并且申请的资源timeout则当前进程的状态就改为“阻塞”;或者由于分时运行进程的需要,调度程序被一个timeout操作调用运行。在timeout操作中当前进程的状态改为“就绪”。在上述情况中,当前进程的状态都不是“运行”。所以当前进程必须停止运行,此时就绪队列中最高优先级的进程p得到执行。

②当进程刚刚完成destroy操作,进程自己删除自身,它的PCB表不再存在。此时调度程序被执行,从就绪队列中选出最高优先级的进程p,并令其执行。 剥夺操作包括以下工作:将选中的最高优先级进程p的状态改为“运行\。如果当前进程依然存在且没有阻塞,则将其状态改为“就绪”,以便随后能得到执行。最后,进行上下文切换,保留当前CPU的各个寄存器值,放入PCB表。装入中选进程p的寄存器值。

本实现方案没有对实际的CPU进行访问来保存或恢复寄存器的值,因此上下文切换的任务只是将正在运行进程的名字显示在终端屏幕上。从这一点可以认为,用户终端屏幕开始扮演当前运行进程功能的角色。

5.用户shell界面。

If(self->prioritypriority)||self->status.type!=?running?||self= nil)

preempt(p,self); /*调度进程p,替换当前进程self*/

为RCB试和演示管理器的CPU能,本方案设计开发一个shell界面,它可以重复接受终端输入的命令,唤醒管理器执行相应的功能,并在屏幕上显示结果。 使用上述系统,终端就能展示当前进程。只要输入一个命令,就中断当前进程序的执行,shell界面调用进程资源管理器中的函数F,并传递终端输入的参数。该函数执行后将改变PCB、RCB及其他数据结构中的信息。当调度程序执行时,决定下一个要运行的进程,并改变其状态值。保存当前进程的CPU各寄存器值(虚拟CPU),然后恢复中选进程的值。调度程序将系统状态信息显示在屏幕上,提示下一步操作。特别地,它始终提示正在运行的进程是什么,即终端和键盘正在为哪个进程服务。另外,函数F也可能返回一个错误码,shell也将它显示在屏幕上。

shell命令的语法格式规定如下: 命令名 参数

例如,执行命令行“crA1”时将调用对应的管理器函数create(A,1),即创建一个名为A、优先级为1的进程。同理,命令“rq R”将调用函数request(R)执行。 以下显示说明shell界面的交互内容(假定进程A的优先级为1,并且正在运行)。由“*”开始的行视为shell的输出结果。提示符“>”后面是提示用户输入的命令。

……

* process A is running > cr B 2

* process B is running > cr C 1

* process B is running > re q R1

* process B is blocked;process A is running ……

6.进程及资源管理器的升级版。

可对上述基本型进程功能资源管理器进行功能扩展,使管理器能够处理时钟到时中断和I/O处理完成中断。

(1)相对时钟到时中断。假设系统提供一个硬件时钟。周期性产生一个时钟到时中断。引发调用函数timeout()的执行。

(2) 110处理完成中断。使用名为IO的资源表示所有的I/O设备。该资源的RCB由以下两部分组成:

IO

Waiting_list

(3)扩展shell。显示当前运行进程,并添加一个系统调用request_100。终端也能表示硬件,用户能够模拟两种类型的中断:时钟到时、I/O完成处理。为了实现以上功能,必须添加新的shell命令,调用以下三个系统调用:request_IO(),IO_ competion,timeout()。

以下部分由学生填写:

1. 程序流程图

(1) 初始化进程流程图

(2) 采用优先级策略的进程调度流程图。

2. 实验结果

(1) 手动调度进程运行结果图。

(2) 最高优先级别+先来先服务算法调度进程运行结果图。

3. 结果分析

详详细细xx。。。。

实验二 常规存储器管理

一、实验目的

搜索更多关于: 操作系统实验报告 的文档
操作系统实验报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c3muf47e8dn0wk4t3v4f03ibqw7s1xb00tli_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top