1、1实验一 进程管理一、目的进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。二、实验内容及要求1、设计进程控制块 PCB 的结构( PCB 结构通常包括以下信息:进程名(进程 ID) 、进程优先数、轮转时间片、进程所占用的 CPU 时间、进程的状态、当前队列指针等。可根据实验的不同,PCB 结构的内容可以作适当的增删) 。为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。2、系统资源(r 1rw),共有 w 类
2、,每类数目为 r1rw。随 机产生 n 进程 Pi(id,s(j,k),t),0= 0 b = b - jincheng.rb;c = c - jincheng.rc;jincheng.state = W;hready.Add(jincheng);/加入就绪队列elsejincheng.state = B;hblock.Add(jincheng);/加入阻塞队列listBox1.Items.Add(“当前进程状态:“ + jincheng.state);/从数组起始地址开始输出该数组的内容public void disp(ArrayList list)ArrayList list1 = new
3、 ArrayList();list1 = list;if (list1.Count 0)for (int j = 0; j = 0) hready.Add(p1);a = a - p1.ra;b = b - p1.rb;c = c - p1.rc;listBox1.Items.Add(“ID 号为:“+p1.id + “ 的进程由阻塞队列转入就绪队列 rn“);hblock.RemoveAt(m);m-;/检测是否有新的进程产生,随机产生新进程public void testnew()int t;if (r0)/r 为随机产生的进程数目t = random.Next(9) + 1;if (t
4、= 0 b = b - jincheng.rb;c = c - jincheng.rc;jincheng.state = W;listBox1.Items.Add(“进程状态为:“ + jincheng.state);hready.Add(jincheng);/加入就绪队列7listBox1.Items.Add(“资源满足新进程请求,该进程进入就绪队列rn“);elsejincheng.state = B;hblock.Add(jincheng);/加入阻塞队列listBox1.Items.Add(“进程状态为:“ + jincheng.state);listBox1.Items.Add(“资
5、源不满足新进程请求,该进程进入阻塞队列rn“);r = r - 1;/系统三类资源变化情况的显示public void rescore()/系统三类资源变化情况的显示if (a a1) textBox1.Text = a1.ToString(); if (a = 0 if (b = 0 if (c = 0 running();testblock();testnew();rescore();elsetimer1.Enabled = false;textBox1.Text = a1.ToString();textBox2.Text = b1.ToString();textBox3.Text = c
6、1.ToString();listBox1.Items.Add(“rnrn“); /计时器触发时间片轮转调度算法8private void timer1_Tick(object sender, EventArgs e)runFcfs();/开始模拟按钮单击执行函数private void button1_Click(object sender, EventArgs e)runmain();button1.Enabled = false;textBox1.Enabled = false;textBox2.Enabled = false;textBox3.Enabled = false;textB
7、ox4.Enabled = false;textBox5.Enabled = false;textBox6.Enabled = false;textBox7.Enabled = false;textBox8.Enabled = false;textBox9.Enabled = false;/清除屏幕按钮单击执行函数private void button2_Click(object sender, EventArgs e)textBox1.Text = “;textBox2.Text = “;textBox3.Text = “;textBox4.Text = “;textBox5.Text =
8、“;textBox6.Text = “;textBox7.Text = “;textBox8.Text = “;textBox9.Text = “;listBox1.Items.Clear();textBox4.Enabled = true;textBox5.Enabled = true;textBox6.Enabled = true;textBox7.Enabled = true;textBox8.Enabled = true;textBox9.Enabled = true;button1.Enabled = true;/运行的主函数public void runmain()input();
9、9imer1.Enabled = true;3、运行界面和运行结果界面中,可以任意设定需要模拟的进程总数(如 5) ,初始化进程个数(如 3) ,还有 A、B、C 三类资源的总数(如 10、10、10) 。为了方便显示,还可以设定时间片的长度(如 500 毫秒) 。除此之外,在运行过程中,所有的资源都是随机生成的,并且其中新进程的产生也是随机的,但是产生的进程总数不会多于开始设定的模拟的进程总数,以防止不断产生新进程,程序不断运行。在显示窗口的上方,还会实时显示资源的变化情况,方便对运行的观察。当运行结束后,可以通过工具栏中的显示选项中的保存结果按钮,将结果保存成 txt 文件格式,方便运行后
10、的结果分析。五、心得体会本次实验,我的任务是设计一个允许 n 个进程并发运行的进程管理模拟系统。该系统包括有简单的进程控制、同步与通讯机构,系统在运行过程中能显示各进程的状态及有关参数的变化情况,从而观察诸进程的运行过程及系统的管理过程,我是用 C#写的,在我的电脑能够运行通过,虽不能尽善尽美,但也基本能实现老师的要求。 两个星期的实验,虽然时间有点短,但我也收获不少,这次实验,加深了我对进程概念及进程管理的理解;比较熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构、同步机构及通讯机构的实施。也让我认识到自己的不足,操作系统的有些知识,我知道的还不多,没有掌握好,还需要多多学学,不断提升自己的能力。实验中,我们小组分工合作,共同学习,虽然在实验中遇到了一些问题,但在老师和同学的细心指导和热心帮助下解决了。同时,了解到团队精神的重要性,也为以后的学习和工作打下了坚实的基础,同时积累了宝贵的经验。