操作系统试验报告_第1页
操作系统试验报告_第2页
操作系统试验报告_第3页
操作系统试验报告_第4页
操作系统试验报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、操作系统实验报告院系:专业:班级:学号:姓名:指导老师:进程调度的模拟与内存治理一、实验目的在采用多道程序设计的系统中, 往往有假设干个进程同时处于就绪状态. 当 就续进程个数大于处理器数时, 就必须依照某种策略来决定哪些进程优先占用处 理器.实验模拟实现处理机调度, 以加深了解处理机调度的工作, 并体会优先级 和时间片轮转调度算法的具体实施方法. 帮助了解在不同的存储治理方式下, 应 怎样实现主存空间的分配和回收.二、实验要求1 、可随机输入假设干进程,并按优先权排序;2 、从就绪队首选进程运行:优先权 -1/ 要求运行时间 -1要求运行时间 =0 时,撤销该进程3、重新排序,进行下轮调度.

2、4、可随时增加进程;5、规定道数,设置后备队列和挂起状态.假设内存中进程少于规定道数,可自动从后备队列调度一作业进入.被挂起进程入挂起队列,设置解挂功能用于将指定挂起进程解挂入就绪队列.6、每次调度后,显示各进程状态.7、自行假设主存空间大小,预设操作系统所占大小并构造未分分区表;表目内容:起址、长度、状态未分 / 空表目8、结合以上实验,PCB增加为:PID ,要求运行时间,优先权,状态,所需主存大小,主存起始位置,PCB旨针9 、采用最先适应算法分配主存空间;10、进程完成后,回收主存,并与相邻空闲分区合并.11、采用图形界面;三、实验内容选择一个调度算法,实现处理机调度.1、设计一个按优

3、先权调度算法实现处理机调度的程序;2、设计按时间片轮转实现处理机调度的程序.3、主存储器空间的分配和回收.在可变分区治理方式下,采用最先适应算 法实现主存空间的分配和回收.四、实验原理该模拟系统采用java语言实现,要实现的功能有新建进程、进程调度、挂 起进程、解挂进程、删除进程,道数和时间片大小可以由用户自己调整,有两种 调度策略:按优先权调度和按时间片轮转调度. 每个进程可能有5种状态:新建 (new)、就绪(ready)、运行(running)、阻塞(waiting)、挂起(suspend).每个 状态都有一个队列用来存放处于该状态的进程,不同的调度策略采用不同的队列实现.当创立进程时,

4、如果内存中的进程数还没到达规定道数,那么将新建进程插入就绪队列,如果内存中进程数已经到达规定道数,那么插到后备队列,后备队列中的进程的状态为new.CPU每次调度时都从就绪队列中取进程,在进程执行过 程中如果下一个操作时10操作,那么将进程插入到 waiting队列.在系统运行过 程中可以执行进程挂起操作,但执行的挂起操作时系统自动暂停运行, 在弹出窗 口选择要挂起的进程后,将选中的进程从原来的队列中删除并插入到挂起队列. 进行解挂操作时将选中的进程从挂起队列中删除并插入该进程原来所处的队列.按优先级调度:中选择按优先权调度时,所有队列都采用优先队列,优先队列采用一个有序 链表实现,进程的优先

5、权值越大代表优先级越高, 优先队列中的进程按优先权从 大到小排列,当新进程插入时根据该进程的优先权插入到队列中的适宜位置,插入后保持队列按优先权从大到小排列,如果新进程与队列中某个进程优先权值相 等,那么该新进程插到那个进程后面,以遵循先来先效劳的规那么.当要从队列中取 出进程时总是取队列中第一个进程,由于该进程的优先级最高.按时间片轮转调度: 中选择按时间片轮转调度时,所有队列都采用先进先出队列,先进先出队列 采用一个普通单向链表实现,当新进程插入时插入到队列的末尾,当要取进程时取队首进程,这样就实现了先进先出.内存治理该实验基于实验一完成,核心是内存的分配和回收,在实验一的根底上增加 内存

6、治理局部,在新建进程的时候增加一个输入内存大小的输入框,在进程进入内存时要分配内存,在进程销毁时要回收内存,如果进入内存时内存缺乏,那么将 进程插入到后备队列等待下次调度.系统维护一个内存表,每个表项代表一个空 间,每个空间保存了该空间的起始地址和空间大小以及空间使用状态.初始时只有一个空间,当CPUS动时要分配内存,内存分配采用最先适应算法.回收内存 时如果有相邻空闲空间,那么要进行空闲空间合并.五、局部源程序public class data private String n ame; etls ln()=O)for (int i = 0; i < (); i+)if (i).get

7、Limit() >= (O).getLength()(O).setStart(i).getBase();(O).setlsl n(1);if (i).getLimit() = (0).getLength()update1( unAssignList ,i);else(i).setBase(i).getBase()+(O).getLe ngth();(i).setLimit(i).getLimit()(O).getLe ngth();break ;if ()>0)for (int j = 0; j < (); j+)if (j).getlsln()=0) for (int i

8、= 0; i < (); i+)if (i).getLimit() >= (j).getLength()(j).setStart(i).getBase();(j).setlsl n(1);if (i).getLimit() = (j).getLength()update1( unAssignList ,i);else(i).setBase(i).getBase()+(j).getLe ngth(); (i).setLimit(i).getLimit()(j).getLe ngth();break ;移除内存public void putOutMemory(ArrayList<

9、Data> list,int num)(n um).setlsl n(0);boolean flag1 =false ;boolean flag2 =false ;for (int i = 0; i < (); i+)if (i).getBase() = (num).getLength()+(num).getStart()(i).setBase (n um).getStart();(i).setLimit (n um).getLe ngth()+(i).getLimit();flag1 = true ;break ;for (int i = 0; i < (); i+)if

10、(i).getBase()+(i).getLimit() = (num).getStart()if (!flag1)(i).setLimit(num).getLength()+(i).getLimit();flag2 = true ;break ;else(i).setLimit(i).getLimit()+(i+1).getLimit(); update1( unAssignList ,i+1);if (flag1 | flag2)elseint i = 0;while (i).getBase()<(num).getStart()i+;Data_Memory data = new Da

11、ta_Memory();(num).getStart();(num).getLength();();for (int j = 0; j < i; j+)(j);(data);for (int j = i; j < (); j+)(j);();for (int j = 0; j < (); j+)(j);对内存治理调度的操作private class MyRenderer extends DefaultListCelIRendererintj+)public Comp onent getListCellRe ndererComp onen t(JList list, Objec

12、t value,index,boolean isSelected,boolean cellHasFocus)(list, value, in dex, isSelected,cellHasFocus);setBackgrou nd;for (int i = 0; i < (); i+)for (int j = (i).getBase()+6 ; j < (i).getLimit()+(i).getBase()+6;if (index = j)setBackgrou nd;etTime()=O)();();for (int i = 0; i < (); i+)if (i).ge

13、tTime()>0)(i);();for (int i =0; i < ();i+)(i);(i).setState( "ready"); etState( "ready");etState( "ru nning");update( readyList ,0);if ()>0)(0);(5).setState( "ready"); update( waitingList ,0);else etState( "running" ); ()-1).setState( "r

14、eady" ); (0);update( readyList ,0); putInMemory(); sub(); display();();public void PManager()if ()>0)if (0).getTime()=0)();( );f or ( int i = 0; i < (); i+)if (i).getTime()>0)(i);( );f or ( int i =0; i < ();i+)(i);(i).setState( "ready" );i nt j = 0;i nt m = ();f or(; m <

15、; 6 && j < (); m+,j+) (getFirstW( waitingList )-1);(m).setState( "ready" );update( waitingList ,getFirstW( waitingList )-1); etState( "running" );update( readyList ,getFirstW( readyList )-1);if ()>0)(getFirstW( waitingList )-1);()-1).setState( "ready" );up

16、date( waitingList ,getFirstW( waitingList )-1);elseif ()>0)boolean flag = false ;int a = (0).getPriority();int b = (getFirstW(readyList )-1).getPriority();if (a > b)();(getFirstW( readyList )-1);flag = true ;if (flag)(0).setState("ready" );(0);();(0);(0).setState("running"

17、);update( readyList ,getFirstW( readyList )-1); putInMemory(); s ub1(); display();( );六、程序运行图图1进程界面图2新建进程图3进程的挂起与解挂图4.进程的删除图5进程运行中证程it先范-迸祥弋?:SiartPriorityslopStartlmswaiinuit?Tim内折畑:七、实验总结为了完成这个程序,我参考了课本,互联网以及相关资料. 由于我对 java 语言比拟陌生, 因此虽然这个试验比拟简单, 并且不是我一人独立完成, 但也花 费了我大量时间. 通过这个实验, 我更加形象的了解了进程的调度过程, 加深了 对于优先权调度和时间片轮转调度的理解,并不像从前一样仅仅停留在概念上. 除此之外让我对 java 语言也有了进一步的了解.

温馨提示

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

评论

0/150

提交评论