




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实验报告,实验一,进程管理 实验一 一 进程 管理 一 、 目得 进程调度就是处理机管理得核心内容。本实验要求编写与调试一个简单得进程调度程序。通过本实验加深理解有关进程控制块、进程队列得概念,并体会与了解进程调度算法得具体实施方法。 二 、实验 内容 及要求 1、设计进程控制块 pcb 得结构(cb 结构通常包括以下信息:进程名(进程 i)、进程优先数、轮转时间片、进程所占用得 cu 时间、进程得状态、当前队列指针等.可根据实验得不同,pc结构得内容可以作适当得增删)。为了便于处理,程序中得某进程运行时间以时间片为单位计算。各进程得轮转时间数以及进程需运行得时间片数得初始值均由用户给
2、定。 、系统资源(r ),共有 类,每类数目为 r 1 r w 。随 机产生 进程 p i (id,(j, ), ),0=in,0=j<= ,0=k<=dt 为总运行时间,在运行过程中,会随机申请新得资源. 3、每个进程可有三个状态(即就绪状态 w、运行状态、等待或阻塞状态),并假设初始状态为就绪状态。建立进程就绪队列. 4、编制进程调度算法:时间片轮转调度算法 本程序用该算法对 n 个进程进行调度,进程每执行一次,cu 时间片数加,进程还需要得时间片数减。在调度算法中,采用固定时间片(即:每执行一次进程,该进程得执行时间片数为已执行了个单位),这时,cpu 时间片数加 1,进程还
3、需要得时间片数减 1,并排列到就绪队列得尾上。 三 、实验 环境 操作系统环境:windows 系统。 编程语言:。 四 、实验 思路与 设计 、 程序流程图 、2? 、 主要程序代码 对进程进行初始化,建立就绪队列、阻塞队列。input() 触发时钟,调用时间片轮转调度算法。runfcfs() 取就绪队列得第一个进程,判断其运行得时间片就是否到达所需次数。如果到达,那么释放资源 如果没到达,那么运行一个时间片。running() 输出就绪队列与阻塞队列得信息。outputall() 就绪队列为空? 检查阻塞队列,对于当前资源数目满足阻塞队列得进程,由阻塞转入就绪队列。testblock()
4、检查就是否有新进程产生,如果有,那么判断系统资源就是否够用,如果够用,那么分配给该进程,插入就绪队列。如果不够用,那么插入阻塞队列。testnew() 显示三类资源情况。rescore() 结束 开始 就是 否 / cb 结构体 truct pcb pulic int id; /进程 id public it a; /所需资源得数量 publc int rb; /所需资源 b 得数量 publi it rc; /所需资源 c 得数量 public in ntime; /所需得时间片个数 ublic int rime; /已经运行得时间片个数 public char sate; /进程状态,(等
5、待)、r(运行)、b(阻塞) /pli int et; rrlist hready = new ryst(); arralis hbloc e arraist(); random rom = new ranom(); /rraylst p = new arrayist(); int m, n, r, a,, b,1, c,c1, h = 0, i = 1, time1intval;/为要模拟得进程个数,n 为初始化进程个数 /r 为可随机产生得进程数(=m-n) /a,b,分别为 a,b,c 三类资源得总量 /i 为进城计数,i1n /h 为运行得时间片次数,tme1invl为时间片大小(毫秒
6、) / 对进程进行初始化, 建立就绪 数组 、阻塞 数组. pubc void inut()/对进程进行初始化,建立就绪队列、阻塞队列 m = it、parse(exbx4、text); n = in、parse(texbx5、text); a = int、are(xtbox6、tet); b t、parse(texox、tet); c = int、se(texbo8、txt); 1 a; 1 = ; c1 = c; r = n; tme1neval = int、pse(textbo、text); me、intrval me1ta; fo (i = ; i = n; i+) pb icen =
7、 new pc(); jinchng、id = i; icheng、ra (random、nex(a) + 1); jiheng、rb = (rad、nxt() + 1); iche、rc = (andom、next(c) + 1); jincheng、ntime (random、next(1, )); jincheg、rte ; stbox1、items、add(产生进程 id:” + jinceng、d); itbo、items、ad("所需 a 资源数目:" jnheng、); litbox1、ites、d(”所需 b 资源数目:” jnchng、); lsbx1、i
8、tems、(所需 c 资源数目:" + ncng、rc); lbox、tems、add(”所需时间片数:" + jincheng、ntie); f ((a - jincen、r) > 0 (b jncng、r) 0 (c - jincheng、c) > 0) a = a - jiheng、ra; = b jinhng、rb; c = incheng、rc; incn、state "w; hready、ad(jincen);/参加就绪队列 lse jinceg、state ""; blo、ad(ichen);/参加阻塞队列 listb
9、x1、ies、add(”当前进程状态:” + incheng、sae); /从 从 数组 起始地址开始输出该 数组 得内容 publc void dis(arayli list) araylist lit = new arrylist(); ist1 = list; (lis1、cou 0) for (int j 0; it1、count; +) pcb p = (pc)t1; isbox1、ies、ad( " p、id、osting() + " " + p、state、tostin() + " ” + p、r、tostring() + " +
10、 、b、otring() + ” p、rc、tostrg()+” ” p、time、string() " ” 、rtim、ostring() + " rn”); ls isbox1、itms、(”rn 该队列中没有进程!r"); / 输出就绪 数组 与阻塞 数组 得信息 publi vid utpal() lisox1、tem、add(”rn=pu 运行了:” + h、totrng() + "次=r); lisbox、iem、add("*当前就绪队列得信息!*"); lisbox1、items、ad(进程 id 进程状态 a 资源数
11、b 资源数 c 资源数 所需时间片 已运行时间片”); disp(hreay); lisbo、its、a("*当前就阻塞列得信息!*); ltbox1、ites、add(”进程d 进程状态 a 资源数 b 资源数 c 资源 所需时间片 已运行时间片"); dip(hbl); / 运行就绪 数组 得头进程 ,运行一个时间片, 轮转一个时间片 ,时间片轮转调度算法 puli d rnni() arrayist eady1 = nw arrist(); hredy = hread; p p1 = new pcb(); 1=(cb)hrady10; p1、sate" p、
12、rte= p、me + ; h=+1; lisbox1、tem、add(”rn当前正在运行进程d 就是:" +p、id + "rn"); lisbo1、ims、ad(rn 进程 id 进程状态 a 资源数 资源数 c 资源数 所需时间片 已运行时间片rn”); lisb1、items、ad(p、d + ” " p1、stat+ " p1、a + " " + p1、r + ” + p、rc + + p1、ntie + " + p1、rtme); i (p、ntime=1、rte) listbox1、iems、add(
13、p、d、tostring()+”得进程已经完成!rn”); a = a + p、ra; b = + 1、rb; c + 1、rc; hready、oeat(0); s 1、stae=w; hready、dd(p1); red、removet(0); / 检测当前资源数目就是否满足阻塞 数组 里进程得需求 publi void tstblck() arrayt hck = ne arait(); hblk1 hblo; for (t = 0; hblock1、cunt; m+) p p1 = new pcb(); p1 = (pcb)hblok; f (a p1、ra = 0) &&am
14、p; (b - 1、r >= 0) & (c - p、rc >= 0)) p1、tae""; hed、ad(1); a = a - 1、ra; b = b - p1、b; c - p1、r; listbox、items、add(”id 号为:"+p1、d + 得进程由阻塞队列转入就绪队列r"); hbloc、eoveat(m); m-; / 检测就是否有新得进程产生, 随机产生新进程 ublic void estnew() int ; if (r>0)/为随机产生得进程数目 t = radom、next() + 1; if (t
15、 = 7) lstbx1、e、d("n 有新得进程申请参加:); pcb jinceng ew cb(); incheng、id = i+; inchen、r (radom、ext(a) + 1); jinhng、rb = (ranm、next(b) + 1); jnheg、c (rndm、next(c) ); jinchen、nime = (radom、next(1, 5)); iceng、tm ; istox1、items、dd(”产生进程 i: + jinchng、id); listx1、ems、(所需资源数目:" + jinch、ra); isbox1、ies、ad
16、(”所需 b 资源数目:” + iheng、b); listox1、tms、d(”所需 c 资源数目:" cng、rc); listbx1、tes、add(”所需时间片数:" + jincheng、time); f ((a - jicheng、ra) > 0 & (b jnchen、rb) = (c - jincn、rc) >= 0) a = a jinchg、a; b = jinheg、rb; c c - incheg、r; incheg、state = ; box1、items、d("进程状态为:” + cheg、stae); hreay、
17、add(jheng);/参加就绪队列 isbox1、iems、add(”资源满足新进程请求,该进程进入就绪队列rn); else incheng、sate = ; hblok、ad(inceng);/参加阻塞队列 lisbox1、item、add(进程状态为: + inchn、stae); listbo1、tem、dd(”资源不满足新进程请求,该进程进入阻塞队列r"); r 1; / 系统三类资源变化情况得显示 ubic void rescor()/系统三类资源变化情况得显示 f (a a1) textbo1、txt = a1、tostri(); if (a 0) etox1、tex
18、t ”; i ( = 0 & a 1) texb1、et = 、tostrin(); if (b > b1) textx2、tex = 1、tostrin(); i (b 0) textb2、txt = ”"; f (b 0 & = b1) extox、ext b、ttrig(); i (c > c) extbox、tet c1、osrin(); if (c 0) textox3、ext = ”0”; if (c 0 & c c1) txtbox3、text = 、otrg(); / 时间片轮转 调度算法务 (先来先效劳 fcfs 算法) ubli
19、c vo unfcs() if (hrady、cut0) otputall(); ing(); tesblok(); esnew(); rescore(); ese tier1、ealed = flse; extbo、text = a1、ostrin(); extbo2、t b、ostri(); textbox3、e = c1、ostrig(); litbox1、iems、d("rn<<<所有进程都已经运行结束!>>>>r”); / 计时器触发 时间片轮转 调度算法 piate vi timer1tc(objet seder, eventar
20、 e) ncfs(); / 开始模拟按钮 单击执行函数 rivat o buton1cic(oject sener, eventarg e) ai(); btton1、eabe = false; texbox、enabed = ale; xbox2、enl false; textbox3、eabled fle; teox4、ble false; textbx、be = flse; texox6、nabled = le; ttbox7、enabled as; etbox8、enabld = fale; tetbox9、enabled = flse; 去除屏幕按钮单击执行函数 pivat vd b
21、tton2lic(object sender, vens e) exbox1、text = ; txtbox2、ext = "”; extx3、ext = ”; textx4、txt " ttbox5、text ”; tetbx6、txt = ”; txtx7、tex "”; exbx8、et = ; tex9、te = " listox1、items、lar(); txbox4、eble = tru; tetbox5、enable = true; xtbx6、eabled = tr; textx7、eabl = tru; texbox8、enabd te; xbox9、abed rue; buto1、enabled = true; / 运行得主函数 pulic oid unman() in(); mer1、enabled = t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纪昌学射教课件
- 校园流行风校园作文8篇范文
- 纪念周恩来课件
- 纪念刘和珍路课件
- 2025年软件设计师考试软件测试用例设计与执行试题
- 七年级收心考数学试卷
- 青海省小考数学试卷
- 纪委书记课件
- 去年沭阳小升初数学试卷
- 2024年天津市烟草专卖局(公司)招聘考试真题
- 打造国际化教育环境-学校的外部合作关系构建
- 2025-2030全球无纸化病案管理系统行业调研及趋势分析报告
- 涉密项目保密风险评估及防控措施
- 第六单元碳和碳的氧化物
- JJG(京) 47-2013 出租汽车计价器(行车测距法)检定规程
- 收益法资产评估评估程序表(适用于非整年)
- 5.3 一元一次方程的应用 七年级数学北师大版(2024)上册课时优化训练(含答案)
- 男方因病丧失劳动能力自愿离婚协议书(2篇)
- 化工厂拆除施工方案
- 资产并购咨询合同模板
- 食品物流学:食品保管与储存
评论
0/150
提交评论