ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:557.11KB ,
资源ID:565335      下载积分:15 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-565335.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机操作系统实验报告.docx)为本站会员(聆听****声音)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

计算机操作系统实验报告.docx

1、实 验 报 告(实验)课程名称 计算机操作系统11实验报告学生姓名: 学号:指导教师:实 验 地 点 : 主 楼 A2-411 实 验 时 间 :2019.5 一、实验室名称:计算机实验室二、实验项目名称:进程与资源管理三、实验学时:6 四、实验原理:(1) 系统总体架构最右边部分为进程与资源管理器,属于操作系统内核的功能。该管理器具有如下功能:完成进程创建、撤销和进程调度;完成多单元 (multi_unit)资源的管理;完成资源的申请和释放;完成错误检测和定时器中断功能。中间绿色部分为驱动程序test shell, 设计与实现 test shell,该 test shell 将调度所设计的进

2、程与资源管理器来完成测试。Test shell 的应具有的功能:1、从终端或者测试文件读取命令;2、将用户需求转换成调度内核函数(即调度进程和资源管理器);3、在终端或输出文件中显示结果:如当前运行的进程、错误信息(2) 进程的基本三个状态1、就绪状态,当进程已分配到除 CPU 以外的所有必要资源后,只要再获得 CPU, 就可以立即运行,进程这时的状态称为就绪状态。2、执行状态,进程已获得CPU,其程序正在执行。在单处理机系统中,只有一个进程处于执行状态,在多处理机系统中,则有多个进程处于执行状态。3、阻塞状态,处于执行状态的线程由于发生某事件而暂停无法继续执行时,便放弃处理机而处于暂停状态,

3、此时进程的状态称为阻塞状态,或等待状态或封锁状态。(3) 操作系统的资源管理1、跟踪记录资源使用情况:在多道任务系统中,系统资源要满足多道任务的需要,但一个任务对资源的需要可能并不是连续的,这就需要对资源使用情况进行跟踪和记录,了解当前资源状态或剩余情况,以满足任务对资源的请求。2、分配或回收资源:在条件满足的情况下将资源分配给请求的任务,分配后要记录当前资源剩余情况和状态,以备下一次的分配;根据任务完成的情况适时地回收系统资源,保证新进程的请求。3、提高资源的利用率:在操作系统的管理下使系统资源得到合理、高效的使用。4、协调多个进程对资源请求的冲突:当少量资源为多个请求服务时,会产生资源使用

4、冲突,这时操作系统需要分析请求进程的特性,对资源使用做出决策,协调各进程合理地使用资源。(4) 进程调度与时钟中断设计使用基于优先级的抢占式调度策略,在同一优先级内使用时间片轮转算法。五、实验目的:设计和实现进程与资源管理,并完成 Test shell 的编写,以建立系统的进程管理、调度、资源管理和分配的知识体系,从而加深对操作系统进程调度和资源管理功能的宏观理解和微观实现技术的掌握。六、实验内容:在实验室提供的软硬件环境中,设计并实现一个基本的进程与资 源管理器。该管理器能够完成进程的控制,如进程创建与撤销、进程 的状态转换;能够基于优先级调度算法完成进程的调度,模拟时钟中 断,在同优先级进

5、程中采用时间片轮转调度算法进行调度;能够完成 资源的分配与释放,并完成进程之间的同步。该管理器同时也能完成 从用户终端或者指定文件读取用户命令,通过Test shell 模块完成对 用户命令的解释,将用户命令转化为对进程与资源控制的具体操作,并将执行结果输出到终端。七、实验环境(设备、元器件):1、操作系统:Windows102、开发工具:Visual Studio 2017八、实验步骤:(一)系统功能需求分析:创建进程、销毁进程、进程调度、请求资源、释放资源、时间中断(二)总体框架设计1、具体原理和总体工作流程分析:首先,通过主函数从终端上读入各种命令,然后对命令进行分析,将用户的需求转换成

6、调度内核函数,以实现创建进程、撤销进程、销毁调度、请求资源、释放资源、时间中断等功能,从而模拟操作系统对进程调度和资源管理的的过程,最后在终端上显示相对应的消息。2、相关方法和算法:(1)C 语言中的结构 struct,用来实现 PCB、RCB 等(2) STL 容器实现阻塞队列,就绪队列,并完成删除,插入等操作。(3) 将进程资源管理封装成一个类,主函数实现接收命令来调用这个类的对象。3、总体工作流程图开始Managem;Init()getline(cin, line) istringstreaimss(line);从终端上接收命令IsscommandCommand=createComman

7、d=deleteCommand=ListCommand=requestCommand=releaseCommand=toiss name unit;iss name unit;IssnameM.create(name)IssnameM.delete(name)Isskindm.request(id, unit); m.release(id, unit);m.timeout();Kind=rlKind=pcbKind=rcbM.print_rl()M.print_pcb() M.print_rcb()(三)模块详细设计几个全局变量:RL为list容器来实现3种优先级的就绪队列,r4分别为R1,R

8、2,R3,R4,四种资源种类,current_process为全局变量,用来指示当前进程。list RL3;/就绪队列RCB r4;/四种资源PCB* current_process;/当前进程1 进程管理设计1.1 进程状态与操作 进程状态:ready/running/blocked 进程操作: 创建(create):(none) - ready 撤销(destroy):running/ready/blocked - (none) 请求资源(Request): running - blocked (当资源没有时,进程阻塞) 释放资源(Release): blocked - ready (因申

9、请资源而阻塞的进程被唤醒) 时钟中断(Time_out): running - ready 调度:ready - running / running -ready 1.2 进程控制块结构(PCB)struct PCBstring name; int type;int priority;vector children;/孩子节点PCB* father;/ 父 亲 节 点 resource res4;struct resourceint used = 0;/资源使用的数量int wait_req = 0;/因申请资源而导致进程被阻塞的资源数量;3 个级别的优先级,且优先级固定无变化2 =“syst

10、em”1 = “user”0 = “init”每个 PCB 要么在 RL 中,要么在 block list 中。当前正在运行的进程, 根据优先级,可以将其放在 RL 中相应优先级队列的首部。1.3 创建进程函数开始New process赋优先级, PCB 名字连接父亲节点,子节点压入相应优先级就绪队列scheduler()输出创建进程信息结束1、设计流程2、详细代码void Manage:create(string name, int priority)PCB* newprocess = new PCB;/创建新进程newprocess-name = name;newprocess-prior

11、ity = priority;newprocess-father = current_process; /连接父亲节点process_listname = newprocess;if (current_process != nullptr)current_process-children.push_back(newprocess);/链接子节点RLpriority.push_back(newprocess);/进程进入相应优先级的就绪队列scheduler();if (newprocess-name != current_process-name) newprocess-type = 1;co

12、ut process name is running second;kill(p);/ 嵌套调用,撤销所有子孙进程auto father = p-father;for (int i = 0; i children.size(); +i)/在父进程的子进程里删除自己if (p-name = father-childreni-name)father-children.erase(father-children.begin() + i); break;scheduler();2 资源管理设计2.1 资源控制块(RCB)的结构struct RCBint initial = 0;/初始资源数量int a

13、vailable = 0;/剩余可用资源数量list wait_list;/资源对应的阻塞队列;2.2 请求资源当请求资源不超过该类资源现有数量时,给请求资源的进程分配资源,当请求资源超过该类资源现有数量时,将该进程放入对应资源的阻塞队列中。开始No申请资源数resid.used += unit压入对应资源的阻塞队列输出相应信息输出相应信息scheduler()结束1、设计流程2、详细代码设计void Manage:request(int id, int unit)if (rid.available = unit)rid.available -= unit; current_process-r

14、esid.used += unit;cout process name requests unit R id + 1 type = 2;RLcurrent_process-priority.remove(current_process); rid.wait_list.push_back(current_process);cout process name is blocked. endl; current_process = nullptr;scheduler();cout process name is running. resid.used -= unit; rid.available +

15、= unit;while (!rid.wait_list.empty() & rid.available = rid.wait_list.front()-resid.wait_req)auto temp = rid.wait_list.front();temp-resid.used+= temp-resid.wait_req; rid.available -= temp-resid.wait_req; temp-resid.wait_req = 0; rid.wait_list.remove(temp);temp-type = 1;RLtemp-priority.push_back(temp)

16、;cout The process name wake uptype = 0;else if (current_process-priority priority.remove(current_process); RLcurrent_process-priority.push_back(current_process); current_process-type = 1;current_process = RLmax.front();current_process-type = 0;3.2 时钟中断设计开始从就绪队列头部移除当前运行进程qq的状态变为就绪压入就绪队列尾部scheduler()输

17、出相应信息结束1、设计流程2、详细代码void Manage:timeout()int p = current_process-priority;RLp.remove(current_process); RLp.push_back(current_process); current_process-type = 1;auto a = current_process; current_process = nullptr; scheduler();if (a-name != current_process-name)cout Now the process name is ready, the p

18、rocess name is runing endl;15elsecout Now the process name is running endl;4、系统初始化设计初始化每个资源的数量,对应的阻塞队列和就绪队列,并创建init 进程。void Manage:init()current_process = nullptr; for (int i = 0; i 4; +i)ri.initial = i + 1; ri.available = i + 1;while (!ri.wait_list.empty()ri.wait_list.pop_back();for (int i = 0; i 3

19、; +i)while (!RLi.empty()RLi.pop_back();create(init, 0);5 输出就绪队列信息函数遍历每个List 将各个就绪队列中的进程打印出来。void Manage:print_RL()for (int i = 0; i 3; +i)cout i :;int size = RLi.size(); if (size = 0)cout NULL endl;elsefor (list:iterator it = RLi.begin(); it != RLi.end(); +it)if (*it)-type = 0) continue;cout name ;c

20、out second;if (process-type = 0)cout type is running type = 1)cout type is ready endl;elsecout type is blocked endl;cout the priority is priority endl; cout name resource: endl; for (int i = 0; i 4; +i)cout R i + 1 resi.used endl;cout father is father-name children.size() = 0)cout name has no childr

21、en endl;elsecout children is ;for (int i = 0; i children.size(); +i)cout childreni-name ;cout endl;7 输出 RCB 信息函数将每个资源所剩余的资源数量和所对应的阻塞队列中包含的进程名字打印出来。void Manage:print_rcb()for (int i = 0; i 4; +i)cout R i + 1 ri.available endl; cout the wait_list is ;int size = ri.wait_list.size(); if (size = 0)cout N

22、ULL endl;elsefor (list:iterator it = ri.wait_list.begin(); it !=ri.wait_list.end(); +it)if (*it)-type = 0) continue;cout name ;cout 1)iss command;if (command = init)m.init();else if (command = quit) exit(0);else if (command = create)iss name priority; m.create(name, priority);else if (command = list)iss kind;if (kind = pcb)iss name; m.print_PCB(name);else if (kind = rl) m.print_RL();else if (kind = rcb) m.print_rcb();30elsecout error name un

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2