版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实验报告 院系: 专业: 班级: 学号: 指导老师: 进程调度的模拟与内存管理 、实验目的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当 就续进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处 理器。实验模拟实现处理机调度,以加深了解处理机调度的工作,并体会优先级 和时间片轮转调度算法的具体实施方法。帮助了解在不同的存储管理方式下,应 怎样实现主存空间的分配和回收。 二、实验要求 1、可随机输入若干进程,并按优先权排序; 2、从就绪队首选进程运行:优先权-1/要求运行时间-1 要求运行时间二0时,撤销该进程 3、重新排序,进行下轮调度。 4、可随时增
2、加进程; 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、验一的基础上增加 内存管理部分,在新建进程的时候增加一个输入内存大小的输入框,在进程进入 内存时要分配内存,在进程销毁时要回收内存,如果进入内存时内存不足,则将 进程插入到后备队列等待下次调度。系统维护一个内存表,每个表项代表一个空 间,每个空间保存了该空间的起始地址和空间大小以及空间使用状态。初始时只 有一个空间,当CPU启动时要分配内存,内存分配釆用最先适应算法。回收内存 时如果有相邻空闲空间,则要进行空闲空间合并。 五、部分源程序 public class data :、 private String name; /进出的名字 private int time;要求的时间总和 priva
7、te int priority; /进代的优先权,值越大优先级越高 private String state; ,7进程的状态 private int start; private int length; /进程所占的内存空间 private int isln;八进程所需内存大小 进程各项变量的初始化 public void setName(String name) thisname = name; public void setPriority(int priority) this .priority = priority; public void setState (String stat
8、e) this state = state; public String getName0 return (this name); public int getPriority0 return (this priority); public String getStateO return (this state); public void setTimednt time) this .time = time; public int getTimeO return (this time); public void setLength(int length) thislength = length
9、; public int getLengthO return (thislength); public void setStart(int start) this .start = start; public int getStart 0 return (this start); public void setlslndnt isln) this isln = isln; public int getlsInO return (this isln); 删除列表中第几个数据 public void update(ArrayList list, int num) sList clear 0; fo
10、r(int i = 0; i listsize(); i+) if(i != num) sList add(list get(i); list clear 0; for (int i = 0; i sList. size(); i+) list add(sList get (i); public void update1(ArrayList list, int num) sListl clear 0; for (int i = 0; i list. sizeO ; i+) if(i != num) sListl add(list get(i); list clear 0; for(int i
11、= 0; i 放入内存 public void putlnMemory0 if (runningList. size ()0) if(runningList. get(0). getIsIn()=0) for (int i = 0; i = runningList get (0). getLengthO) runningList get (0). setStart (unAssignList get (i) getBaseO); runningList get (0) setlsln(l); if(unAssignList get(i) getLimit0 = runningList get
12、(0). getLengthO) updatel(unAssignList, i); else unAssignList get(i) setBase(unAssignList get(i) getBase()+runningList get (0) g etLengthO); unAssignList get (i) setLimit (unAssignList get (i) getLimit ()-runningList get (0) getLengthO); break; if (readyList. size()0) for(int j = 0; j readyList. size
13、O; j+) if (readyList get (j) getIsIn()=0) for(int i = 0; i = readyList get (j) getLengthO) readyList get(j) setStart (unAssignList get (i) getBaseO); readyList get (j) setlsln(l); if(unAssignList get(i) getLimit () = readyList get (j) getLengthO) updatel(unAssignList,i); else unAssignList get (i) se
14、tBase (unAssignList get (i) getBase 0 +readyList get (j) get Length 0); unAssignList get (i) setLimit (unAssignList get (i) getLimit () -readyList get (j) g etLengthO); break; 移除内存 public void putOutMemory(ArrayList list, int num) list get(num) setlsIn(O); boolean flagl = false; boolean flag2 = fals
15、e; for(int i = 0; i unAssignListsize(); i+) if(unAssignList get(i) getBase 0 = (list get (num) getLength()+list get(num) getStart() unAssignList get(i) setBase(list get(num) getStart 0); unAssignList get (i) setLimit (list get (num) getLengthO -unAssignList get (i) get Limit 0); flagl = true; break;
16、 for(int i = 0; i unAssignListsize(); i+) if (unAssignList get (i)getBeseO-unAssignList get (i) getLimit 0) = list get (num) getStart 0) if(!flagl) 注:文档可能无法思考全面,请浏览后下载,供参考。 unAssignList get (i) setLimit (list get (num) getLengthOunAssignList get (i) get Limit 0); flag? = true; break; else unAssignLi
17、st get (i) setLimit (unAssignList get (i) getLimit () unAssignList get (i +1). getLimit (); updatel(unAssignList, i+1); if(flagl flag2) else int i=0; while (unAssignList get(i) getBase()list get(num) getStart 0) i+; Data_Memory data = new Data_Memory0; data setBase(list get(num) getStart 0); data se
18、tLimit (list get (num) getLengthO); sListl clear 0; for(int j = 0; j i; j+) sListl add(unAssignList get(j); sListl add(data); for(int j = i; j unAssignListsize(); j+) sListl add(unAssignList get (j); unAssignList clear 0; for(int j = 0; j 对内存管理调度的操作 private class MyRenderer extends DefaultListCe1IRe
19、nderer public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) super getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); setBackground(Color gray); for(int i = 0; i unAssignListsize(); 2+) for(int j = unAssi
20、gnListget(i) getBase()+6 ; j 0) if(runningList get(0) getTime ()=0) runningList clear 0; sList clear 0; for(int i = 0; i 0) sList add(readyList get (i); 注:文档可能无法思考全面,请浏览后下载,供参考。 readyList clear 0; for(int i =0; i sList. sizeO ;i+) readyList add(sList get (i); readyList get(i) setState(ready); /从wa i
21、 t i ng队列加入新的进程 int j = 0; int m = readyList sizeO; for (; m 6 m+, j+) readyList add(waitingList get (j); readyList get(m) setState(ready); / sort (readyList); /调整 waitingList sList clear 0; for(int i = j; i waitingList sizeO; i*) sList add(waitingList get (i); waitingList clear 0; for (int i =0; i
22、0) runningList add(readyList get (0); runningList get(0) setState(running); update(readyList,0); if (waitingList. size()0) readyList add(waitingList get(0); readyList get(5) setState(ready); update(waitingList, 0); elseif(runningList size()0) if (readyList. size()0) readyList add(runningList get (0)
23、; runningList clear 0; readyList get(0) setState(running); readyList get (readyList size()-l) setState(z,readyz,); runningList add(readyList get (0); update(readyList, 0); putlnMemory0; subO; displayO ; jtf1. grabFocus0; public void PManager0 if(runningList size()0) if(runningList. get(0). getTime()
24、=0) runningList clear 0; sList clear 0; for(int i = 0; i 0) sList add(readyList get (i); readyList clear 0; for(int i =0; i sListsize();i+) readyList add(sList get(i); readyList get (i) setState (z/ready/z); int j = 0; int m = readyListsize(); for(; m 6 runningList get (0). setState (/running); upda
25、te(readyList, getFirstW(readyList)-l); if(waitingList. size()0) readyList add(waitingList get(getFirstW(waitingList)-l); readyList get (readyList sizeO-1). setState(/ready); update(waitingList, getFirstW(waitingList)-l); else if(readyList. size 0 0) boolean flag = false; int a = runningListget(0)get
26、Priority0; int b = readyListget(getFirstW(readyList)一1). getPriority0; if(a b) sList clear 0; sList add(readyList get(getFirstW(readyList)-1); flag = true; if(flag) runningList get(0) setState(ready); readyList add(runningList get(0); runningList clear 0; runningList add(sList get(0); runningList ge
27、t(0) setState(running); update(readyList, getFirstW(readyList)-1); 注:文档可能无法思考全面,请浏览后下载,供参考。 注:文档可能无法思考全面,请浏览后下载,供参考。 putlnMemory (); sublO; display 0; jtf1.grabFocus 0; 六、程序运行图 图1进程界面 图2新建进程 cpuiftg及内存管理匚叵区 1 6 7 8 A 10 11 12 13 14 15 16 17 1 19 20 21 23 2! 25 26 27 28 29 30 31 32 33 34 35 36 内存状态: 图3进程的挂起与解挂 图4.进程的删除 注:文档可能无法思考全面,请浏览后下载,供参考。 0cpum 及内 TFB3 回区I StartPrioritv 讲程优先级: 后备队列
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年海外留学申请政策解读试题及答案
- 2026年公开选调干部政策理论水平笔试试题
- 2026年高中安全教育试题及答案
- 2026年移动公司劳动合同(1篇)
- 电力故障导致的数据恢复方案企业IT部门预案
- 中小企业网络营销策略手册
- 智能制造生产线自动化升级与改造方案
- 数据驱动的高效办公手册
- 旅客服务周到热情承诺书(9篇)
- 2024年山东省淄博市中考化学真题(含答案)
- 产业引导资金实施方案
- 解读《特种设备使用管理规则》TSG 08-2026与2017版对比
- 2026年法律硕士(法学)考研复试高频面试题包含详细解答
- 湖北省武汉市2026届高中毕业生三月调研考试数学试题含答案
- 自动控制原理试题库(含答案)
- 深圳一模讲评课件
- 【答案】《数字电子技术基础》(华北电力大学)章节作业慕课答案
- 2026年私域流量运营美妆私域种草调研
- 体育赛事组织与管理流程及注意事项
- 医疗急救人员服务礼仪要求
- 大学毛概课件南方谈话
评论
0/150
提交评论