操作系统实验报告材料实验一进程管理系统_第1页
操作系统实验报告材料实验一进程管理系统_第2页
操作系统实验报告材料实验一进程管理系统_第3页
操作系统实验报告材料实验一进程管理系统_第4页
操作系统实验报告材料实验一进程管理系统_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实用 实验一进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验 加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。 二、实验内容及要求 1设计进程控制块 PCB的结构(PCB结构通常包括以下信息:进程名(进程 ID)、进程优先数、轮 转时间片、进程所占用的 CPU时间、进程的状态、当前队列指针等。可根据实验的不同,PCB结构的内 容可以作适当的增删)。为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的轮转 时间数以及进程需运行的时间片数的初始值均由用户给定。 2、 系统资源(rirw),共有 w

2、类,每类数目为rirw。随 机产生 n进程P(id,s(j,k), t),0= i =n,0=j =mO=k=dt为总运行时间,在运行过程中,会随机申请新的资源。 3、 每个进程可有三个状态(即就绪状态W运行状态 R、等待或阻塞状态 B),并假设初始状态为 就绪状态。建立进程就绪队列。 4、编制进程调度算法:时间片轮转调度算法 本程序用该算法对 n个进程进行调度,进程每执行一次,CPU时间片数加1,进程还需要的时间片 数减1。在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1 个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。

3、 三、实验环境 操作系统环境: Win dows系统。 编程语言:C#o 四、实验思路和设计 1、程序流程图 文档 2、主要程序代码 /PCB结构体 struct pcb public intid;/ public intra;/ public intrb;/ public intrc;/ public int n time; / public int rtime; / public char state; / /public int n ext; 进程ID 所需资源A的数量 所需资源B的数量 所需资源C的数量 所需的时间片个数 已经运行的时间片个数 进程状态,W (等待)、R (运行)、B

4、(阻塞) ArrayList hready = new ArrayList(); ArrayList hblock = new ArrayList(); Ran dom ran dom = new Ran dom(); /ArrayList p = new ArrayList(); int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, timenteval;/m为要模拟的进程个数,n 为初始 化进程个数 /r 为可随机产生的进程数(r=m-n) /a ,b,c分别为A, B, C三类资源的总量 /i 为进城计数,i=1n /h 为运行的时间片次数,time1

5、Inteval为时间片大小(毫 秒) /对进程进行初始化,建立就绪数组、阻塞数组。 public void in put()/对进程进行初始化,建立就绪队列、阻塞队列 m = in t.Parse(textBox4.Text); n = in t.Parse(textBox5.Text); a = in t.Parse(textBox6.Text); b = in t.Parse(textBox7.Text); c = in t.P arse(textBox8.Text); a1 = a; b1 = b; c1 = c; r = m - n; time1I nteval = in t. Par

6、se(textBox9.Text); timer1 .In terval = time1I nteval; for (i = 1; i = 0 b = b - jin che ng.rb; c = c - jin che ng.rc; jin che ng.state = W; hready.Add(j in che ng); else jin che ng.state = B; hblock.Add(j inchen g);/ listBox1.ltems.Add(” 加入就绪队列 加入阻塞队列 当前进程状态:+ jinchen g.state); /从数组起始地址开始输出该数组的内容 pu

7、blic void disp(ArrayList list) ArrayList list1 = new ArrayList(); list1 = list; if (list1.Count 0) for (int j = 0; j list1.Cou nt; j+) pcb p = (pcb)list1j; listBox1.ltems.Add(” + p.id.ToStri ng() + + p.state.ToStri ng() + + p.ra.ToStri ng()+ + p.rb.ToStri ng()+ + p. ntime.ToStri ng() + + p.rtime.ToS

8、tri ng() + rn); else + p.rc.ToStri ng()+ listBox1.ltems.Add(rnt /输出就绪数组和阻塞数组的信息 public void outputall() 文档 该队列中没有进程!rn); listBox1.Items.Add(r n= listBox1.Items.Add(* listBox1.ltems.Add(” 进程 运行了: ” + h.ToStri ng() + ); 资源数C资源数 CPU 当前就绪队列的信息! ID进程状态A资源数B *“ :rn “); 所需时间片 已运行时间片 ”); disp(hready); listB

9、ox1.Items.Add(* listBox1.ltems.Add(” *); 进程 当前就阻塞列的信息! ID进程状态A资源数B资源数C资源 所需时间片 已运行时间片 ); disp(hblock); /运行就绪数组的头进程,运行一个时间片, public void runnin g() ArrayList hready1 = new ArrayList(); hready1 = hready; pcb p1 = new pcb(); p1=(pcb)hready10; p1.state=R; p1.rtime= p1.rtime + 1; h=h+1; listBox1.Items.Ad

10、d(rn listBox1.Items.Add(rn进程 时间片rn”); listBox1.ltems.Add(p1.id + +p1.state+ p1.rb + + p1.rc + + p1. ntime + if (p1. ntime=p1.rtime) listBox1.ltems.Add(p1.id.ToStri ng()+ a = a + p1.ra; b = b + p1.rb; c = c + p1.rc; hready.RemoveAt(O); else 轮转一个时间片,时间片轮转调度算法 当前正在运行进程 ID是:+p1.id + rn); ID进程状态A资源数B资源数C

11、资源数 所需时间片 已运行 + p1.ra + + + p1.rtime); 的进程已经完成!rn ”); p1.state=W; hreadyl.Add(pl); hready.RemoveAt(O); /检测当前资源数目是否满足阻塞数组里进程的需求 public void testblock() ArrayList hblock1 = new ArrayList(); 文档 实用 hblockl = hblock; for (i nt m = 0; m = 0) hready.Add(p1); a = a - p1.ra; b = b - p1.rb; c = c - p1.rc; rn)

12、; listBox1.ltems.Add(ID号为:+p1.id + 的进程由阻塞队列转入就绪队列 hblock.RemoveAt(m); m-; /检测是否有新的进程产生,随机产生新进程 public void test new() int t; if (rO)/r为随机产生的进程数目 t = ran dom.Next(9) + 1; if (t = 0 b = b - jin che ng.rb; c = c - jin che ng.rc; jin che ng.state = W; 文档 实用 文档 listBox1.ltems.Add(” hready.Add(j in che ng

13、); listBox1.ltems.Add(” else jin che ng.state = B; hblock.Add(ji nche ng);/ listBox1.ltems.Add(” listBox1.ltems.Add(” r = r - 1; /系统三类资源变化情况的显示 进程状态为:+ jin che ng.state); 加入就绪队列 资源满足新进程请求,该进程进入就绪队列 加入阻塞队列 进程状态为:+ jin che ng.state); 资源不满足新进程请求,该进程进入阻塞队列 r n); r n); public void rescore()系统三类资源变化情况的显示

14、if (a a1) textBox1.Text = a1.ToStri ng(); if (a = 0 if (b = 0 if (c = 0 runnin g(); testblock(); tes tn ew(); rescore(); else timer1.E nabled = false; textBox1.Text = a1.ToStri ng(); textBox2.Text = b1.ToStri ng(); 所有进程都已经运行结束!r n); textBox3.Text = d.ToStri ng(); listBox1.ltems.Add(rn /计时器触发时间片轮转调度算

15、法 private void timer1_Tick(object sen der. Even tArgs e) runF cfs(); /开始模拟按钮单击执行函数 private void butt on 1_Click(object sen der, Even tArgs e) runmain(); butt on 1.E nabled = false; textBox1.E nabled = false; textBox2.E nabled = false; textBox3.E nabled = false; textBox4.E nabled = false; textBox5.E

16、nabled = false; textBox6.E nabled = false; textBox7.E nabled = false; textBox8.E nabled = false; textBox9.E nabled = false; /清除屏幕按钮单击执行函数 private void butt on 2_Click(object sen der, Even tArgs e) textBox1.Text =; textBox2.Text =; textBox3.Text =; textBox4.Text =; textBox5.Text =; textBox6.Text =; t

17、extBox7.Text =; textBox8.Text =; textBox9.Text =; listBox1.ltems.Clear(); textBox4.E nabled = true; textBox5.E nabled = true; textBox6.E nabled = true; textBox7.E nabled = true; textBox8.E nabled = true; textBox9.E nabled = true; butt on 1.E nabled = true; /运行的主函数 public void runmain() 文档 in put();

18、imerl.E nabled = true 3、运行界面和运行结果 界面中,可以任意设定需要模拟的进程总数(如5),初始化进程个数(如 3),还有A、B C三类 资源的总数(如10、10、10)。为了方便显示,还可以设定时间片的长度(如 500毫秒)。除此之外,在 运行过程中,所有的资源都是随机生成的,并且其中新进程的产生也是随机的,但是产生的进程总数不 会多于开始设定的模拟的进程总数,以防止不断产生新进程,程序不断运行。在显示窗口的上方,还会 实时显示资源的变化情况,方便对运行的观察。当运行结束后,可以通过工具栏中的显示选项中的保存 结果按钮,将结果保存成 txt文件格式,方便运行后的结果分析。 五、心得体会 本次实验,我的任务是设计一个允许n个进程并发运行的进程管理模拟系统。该系统包括有简单的 进程控制、同步与通讯机构,系统在运行过程中能显示各进程的状态及有关参数的变化情况,从而观察 诸进程的运行过程及系统的管理过程,我是用C#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论