《中南大学操作系统实验报告31004.pdf》由会员分享,可在线阅读,更多相关《中南大学操作系统实验报告31004.pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、中南大学 操作系统实验报告 姓名:学号:班级:进程模拟与主存分配回收 一、实验内容 1.设计进程管理中数据结构的内容;2.设计一个优先权调度算法,实现进程调度;3.设计至少两个临界资源的同步管理模拟。4.主存存储器空间的分配和回收 二、实验目的 a)加深对进程概念及进程管理各部分内容的理解;b)熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构和同步机构的实现过程。c)帮助了解在不同的存储管理方式下,应怎样实现主存空间的分配和回收 三、实验要求 1.最好采用图形界面;2.可随时增加进程;3.规定道数,设置后备队列和阻塞状态。若内存中进程少于规定道数,可自动从后备队4.列中调度作业进入
2、。被阻塞进程入阻塞队列,设置唤醒功能用于将指定阻塞进程唤醒进入就绪队列;5.每次调度完成,显示各进程状态;6.设置至少两个临界资源阻塞队列和公共变量,模拟同步过程;7.设置时间片中断操作;8.自行假设主存空间大小,预设操作系统所占大小并构造未分分区表。9.采用最先适应算法分配主存空间 10.进程完成后,分配主存,并与相邻空闲分区合并。四、具体实现 将实验一与实验二结合在一起。所以整合成了一分实验报告。在这里统一给出自己实现的思想。1.流程图 开始就绪队列内存是否够用是否有临界资源可以使用阻塞队列外存队列是否完成释放资源部分进程进入就绪队列结束队列2.关键代码:1.利用冒泡法实现优先级的排序 e
3、tPriority()(j).getPriority()etAll();(0);2.内存不够时,移入外存队列 public void move(PCB PCB,ArrayList externStore,ArrayList PCBready)if()=false)(PCB);(PCB);五、实验总结 1.通过此次实验,对于操作系统的模拟有了更深的理解。进程的调度,在开始做第一个实验时,由于设计上的漏洞,导致临界资源一直被占用,结果造成了死锁。在实践中,更加理解了死锁的涵义。同时,也提醒着自己要不断的总结,注意数据结构方面的设计问题。2.对于实验内容的理解,我在这方面产生了点困难。刚开始,不知道
4、如何来模拟临界资源。在请教了老师之后,慢慢开始摸索。3.,接触到第二个实验,对于主存空间的模拟又产生了困难。不知道该用什么来模拟。最终采用了投机取巧的方式。用了 ArrayList.这样,就不用担心主存的回收问题了。但是这样,不太符合实际情况。六、源代码 package os_check_1;import class CPU static boolean source=false;static ArrayList PCBready=new ArrayList();etTime();return time;etState(1);sGetStore()=true)if(0).getSource()
5、=true)etUseSource()=true)etPID()+执行);else (0);etPID()+执行);else 会占用临界资源 public void run1(ArrayList ready)for(int x=0;x=2;x+)un();etTime()=0)break;else source=true;etUseSource(true);if(0).getUseSource()=true)临界资源被+(0).getPID()+占用);un();etTime()=0)break;etTime()=0)(i);etUseSource()=true)etPID()+释放临界资源)
6、;source=false;etAll();阻塞队列中有:+();for(int i=0;i();i+)(i).getAll();完成队列中有:+();for(int i=0;i();i+)(i).getAll();if()!=0)是否需要从阻塞队列中唤醒进程);int choose=();if(choose=1)wakeUp();是否需要增加进程);etPID()=id)for(int j=0;j();j+)if(j).getUseSource()=true)(j).setUseSource(false);用 mainStore 的大小表示主存。(0);sGetStore()=true)etPID()+从外存进入内存);public void show()主存使用情况为:);for(int i=0;i();i+)package os_check_1;public class PCB private int PID;etAll();(0);etPriority()(j).getPriority()etAll();package os_check_1;import class Test public static void main(String args)CPU cpu=new CPU();