(完整word版)操作系统实验报告实验一进程管理.pdf
《(完整word版)操作系统实验报告实验一进程管理.pdf》由会员分享,可在线阅读,更多相关《(完整word版)操作系统实验报告实验一进程管理.pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 实验一进程管理一、目的进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。二、实验内容及要求1、设计进程控制块PCB 的结构(PCB 结构通常包括以下信息:进程名(进程ID)、进程优先数、轮转时间片、进程所占用的CPU 时间、进程的状态、当前队列指针等。可根据实验的不同,PCB 结构的内容可以作适当的增删)。为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。2、系 统 资 源(r1rw),共 有w 类,每 类
2、 数 目 为r1 rw。随机 产 生n 进 程Pi(id,s(j,k),t),0=i=n,0=j=m,0=k=dt 为总运行时间,在运行过程中,会随机申请新的资源。3、每个进程可有三个状态(即就绪状态W、运行状态R、等待或阻塞状态B),并假设初始状态为就绪状态。建立进程就绪队列。4、编制进程调度算法:时间片轮转调度算法本程序用该算法对n 个进程进行调度,进程每执行一次,CPU 时间片数加1,进程还需要的时间片数减 1。在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU 时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。三、实验
3、环境操作系统环境:Windows 系统。编程语言:C#。四、实验思路和设计1、程序流程图2 对进程进行初始化,建立就绪队列、阻塞队列。Input()触发时钟,调用时间片轮转调度算法。runFcfs()取就绪队列的第一个进程,判断其运行的时间片是否达到所需次数。如果达到,则释放资源如果没达到,则运行一个时间片。running()输出就绪队列和阻塞队列的信息。outputall()就绪队列为空?检查阻塞队列,对于当前资源数目满足阻塞队列的进程,由阻塞转入就绪队列。testblock()检查是否有新进程产生,如果有,则判断系统资源是否够用,如果够用,则分配给该进程,插入就绪队列。如果不够用,则插入阻
4、塞队列。testnew()显示三类资源情况。rescore()结束开始是否文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W
5、4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编
6、码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W
7、4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编
8、码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W
9、4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编
10、码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M33 2、主要程序代码/PCB 结构体struct pcb public int id;/进程 ID public int ra;/所需资源A 的数量public int rb;/所需资源B 的数量public int rc;/所需资源C 的数量public int ntime;/所需的
11、时间片个数public int rtime;/已经运行的时间片个数public char state;/进程状态,W(等待)、R(运行)、B(阻塞)/public int next;ArrayList hready=new ArrayList();ArrayList hblock=new ArrayList();Random random=new Random();/ArrayList p=new ArrayList();int m,n,r,a,a1,b,b1,c,c1,h=0,i=1,time1Inteval;/m为要模拟的进程个数,n 为初始化进程个数/r 为可随机产生的进程数(r=m-n
12、)/a,b,c 分别为 A,B,C 三类资源的总量/i 为进城计数,i=1n/h 为运行的时间片次数,time1Inteval 为时间片大小(毫秒)/对进程进行初始化,建立就绪数组、阻塞数组。public void input()/对进程进行初始化,建立就绪队列、阻塞队列 m=int.Parse(textBox4.Text);n=int.Parse(textBox5.Text);a=int.Parse(textBox6.Text);b=int.Parse(textBox7.Text);c=int.Parse(textBox8.Text);a1=a;b1=b;c1=c;r=m-n;time1In
13、teval=int.Parse(textBox9.Text);timer1.Interval=time1Inteval;for(i=1;i=0&(b-jincheng.rb)=0&(c-jincheng.rc)=0)a=a-jincheng.ra;b=b-jincheng.rb;c=c-jincheng.rc;jincheng.state=W;hready.Add(jincheng);/加入就绪队列 else jincheng.state=B;hblock.Add(jincheng);/加入阻塞队列 listBox1.Items.Add(当前进程状态:+jincheng.state);/从数组
14、起始地址开始输出该数组的内容public void disp(ArrayList list)ArrayList list1=new ArrayList();list1=list;if(list1.Count 0)for(int j=0;j list1.Count;j+)pcb p=(pcb)list1j;listBox1.Items.Add(+p.id.ToString()+p.state.ToString()+p.ra.ToString()+p.rb.ToString()+p.rc.ToString()+p.ntime.ToString()+p.rtime.ToString()+rn);el
15、se listBox1.Items.Add(rnt 该队列中没有进程!rn);/输出就绪数组和阻塞数组的信息public void outputall()listBox1.Items.Add(rn=CPU运行了:+h.ToString()+次=rn);文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6
16、K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1
17、Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6
18、K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1
19、Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6
20、K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1
21、Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M3文档编码:CD3K3U6M6K8 HY9S5W4S9L1 ZQ3D1Y3D3M35 listBox1.Items.Add(*当前就绪队列的信息!*);listBox1.Items.Add(
22、进程 ID 进程状态A 资源数B 资源数C 资源数所需时间片已运行时间片);disp(hready);listBox1.Items.Add(*当前就阻塞列的信息!*);listBox1.Items.Add(进程 ID 进程状态A 资源数B 资源数C 资源所需时间片已运行时间片);disp(hblock);/运行就绪数组的头进程,运行一个时间片,轮转一个时间片,时间片轮转调度算法public void running()ArrayList hready1=new ArrayList();hready1=hready;pcb p1=new pcb();p1=(pcb)hready10;p1.sta
23、te=R;p1.rtime=p1.rtime+1;h=h+1;listBox1.Items.Add(rn当前正在运行进程ID 是:+p1.id+rn);listBox1.Items.Add(rn进程 ID 进程状态A 资源数B 资源数C 资源数所需时间片已运行时间片 rn);listBox1.Items.Add(p1.id+p1.state+p1.ra+p1.rb+p1.rc+p1.ntime+p1.rtime);if(p1.ntime=p1.rtime)listBox1.Items.Add(p1.id.ToString()+的进程已经完成!rn);a=a+p1.ra;b=b+p1.rb;c=
24、c+p1.rc;hready.RemoveAt(0);else p1.state=W;hready1.Add(p1);hready.RemoveAt(0);/检测当前资源数目是否满足阻塞数组里进程的需求public void testblock()ArrayList hblock1=new ArrayList();hblock1=hblock;for(int m=0;m=0)&(b-p1.rb=0)&(c-p1.rc=0)p1.state=W;hready.Add(p1);a=a-p1.ra;b=b-p1.rb;c=c-p1.rc;listBox1.Items.Add(ID号为:+p1.id+
25、的进程由阻塞队列转入就绪队列rn);hblock.RemoveAt(m);m-;/检测是否有新的进程产生,随机产生新进程public void testnew()int t;if(r0)/r 为随机产生的进程数目 t=random.Next(9)+1;if(t=0&(b-jincheng.rb)=0&(c-jincheng.rc)=0)a=a-jincheng.ra;b=b-jincheng.rb;c=c-jincheng.rc;jincheng.state=W;listBox1.Items.Add(进程状态为:+jincheng.state);hready.Add(jincheng);/加入
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 操作系统 实验 报告 进程 管理
限制150内