操作系统实验报告 实验一 进程管理

实验一进程管理
一、目的
进程调度是处理机管理的核心内容..本实验要求编写和调试一个简单的进程调度程序..通过本实验加深理解有关进程控制块、进程队列的概念;并体会和了解进程调度算法的具体实施办法..
二、实验内容及要求
1、设计进程控制块PCB的结构PCB结构通常包括以下信息:进程名进程ID、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等..可根据实验的不同;PCB结构的内容可以作适当的增删..为了便于处理;程序中的某进程运行时间以时间片为单位计算..各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定..
2、系统资源r1…r w;共有w类;每类数目为r1…r w..随机产生n进程P i 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;并排列到就绪队列的尾上..
三、实验环境
操作系统环境:Windows系统..
编程语言:C..
四、实验思路和设计
1、程序流程图
2、主要程序代码
//PCB结构体
struct pcb
{
public int id; //进程ID
ei矽钢片public int ra; //所需资源A的数量
灯管支架public int rb; //所需资源B的数量
public int rc; //所需资源C的数量
public int ntime; //所需的时间片个数
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
//a;b;c分别为A;B;C三类资源的总量
//i为进城计数;i=1…n
//h为运行的时间片次数;time1Inteval为时间片大小毫秒
/
/对进程进行初始化;建立就绪数组、阻塞数组..
public void input//对进程进行初始化;建立就绪队列、阻塞队列
{
m = int.ParsetextBox4.Text;
拖鞋生产设备
n = int.ParsetextBox5.Text;
a = int.ParsetextBox6.Text;
b = int.ParsetextBox7.Text;
c = int.ParsetextBox8.Text;
a1 = a;
b1 = b;
c1 = c;
r = m - n;
time1Inteval = int.ParsetextBox9.Text;
timer1.Interval = time1Inteval;
for i = 1; i <= n; i++
{
pcb jincheng = new pcb;
jincheng.id = i;简报器
jincheng.ra = random.Nexta + 1;
jincheng.rb = random.Nextb + 1;
< = random.Nextc + 1;
listBox1.Items.Add"产生进程ID:" + jincheng.id;
listBox1.Items.Add"所需A资源数目:" + jincheng.ra;
listBox1.Items.Add"所需B资源数目:" + jincheng.rb;
listBox1.Items.Add"所需C资源数目:" + ;
listBox1.Items.Add"所需时间片数:" + ime;
if a - jincheng.ra >= 0 && b - jincheng.rb >= 0 && c - >= 0
{
a = a - jincheng.ra;
b = b - jincheng.rb;
c = c - ;
jincheng.state = 'W';
hready.Addjincheng;//加入就绪队列
}
else
{
jincheng.state = 'B';
hblock.Addjincheng;//加入阻塞队列
}
listBox1.Items.Add"当前进程状态:" + jincheng.state;
}
}
/
电源线扣/从数组起始地址开始输出该数组的内容
public void dispArrayList list
{
ArrayList list1 = new ArrayList;
list1 = list;
if list1.Count > 0
{
for int j = 0; j < list1.Count; j++
{
pcb p = pcblist1j;
listBox1.Items.Add" " + p.id.ToString + " " + p.state.ToString + " " + p.ra.ToString + " " + p.rb.ToString + " " + p.rc.ToString+" " + p.ntime.ToString + " " + p.rtime.ToString + " \r\n";
}
}
else
{
listBox1.Items.Add"\r\n\t 该队列中没有进程\r\n";
}
}
//输出就绪数组和阻塞数组的信息
public void outputall
{
listBox1.Items.Add"\r\n=======CPU运行了:" + h.ToString + "次=======\r\n";
listBox1.Items.Add"当前就绪队列的信息";
listBox1.Items.Add"进程ID 进程状态A资源数B资源数C资源数所需时间片已运行时间片";
disphready;
listBox1.Items.Add"当前就阻塞列的信息";
listBox1.Items.Add"进程ID 进程状态A资源数B资源数C资源所需时间片已运行时间片";
disphblock;
}
//运行就绪数组的头进程;运行一个时间片;轮转一个时间片;时间片轮转调度算法
public void running
{
ArrayList hready1 = new ArrayList;
hready1 = hready;
pcb p1 = new pcb;
p1=pcbhready10;
p1.state='R';
稀油润滑p1.rtime= p1.rtime + 1;
h=h+1;
listBox1.Items.Add"\r\n~~~~~~~当前正在运行进程ID是:" +p1.id + "~~~~~~~~\r\n";
listBox1.Items.Add"\r\n进程ID 进程状态A资源数B资源数C资源数所需时间片已运行时间片\r\n";
listBox1.Items.Addp1.id + " " +p1.state+ " " + p1.ra + " " + p1.rb + " " + p1.rc + " " + p1.ntime + " " + p1.rtime;
ime==p1.rtime
{
listBox1.Items.Addp1.id.ToString+"的进程已经完成\r\n";
a = a + p1.ra;
b = b + p1.rb;
c = c + p1.rc;
hready.RemoveAt0;
}
else
{
p1.state='W';
hready1.Addp1;
hready.RemoveAt0;
}
}
//检测当前资源数目是否满足阻塞数组里进程的需求
public void testblock
{
ArrayList hblock1 = new ArrayList;
hblock1 = hblock;
for int m = 0; m < hblock1.Count; m++
{
pcb p1 = new pcb;

本文发布于:2024-09-22 04:24:34,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/102283.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进程   时间   资源
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议