操作系统 实验 进程调度 银行家算法 多线程编程 存储管理 磁盘调度_第1页
操作系统 实验 进程调度 银行家算法 多线程编程 存储管理 磁盘调度_第2页
操作系统 实验 进程调度 银行家算法 多线程编程 存储管理 磁盘调度_第3页
操作系统 实验 进程调度 银行家算法 多线程编程 存储管理 磁盘调度_第4页
操作系统 实验 进程调度 银行家算法 多线程编程 存储管理 磁盘调度_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、实验一 进程调度实验学时:2学时实验类型:设计实验要求:必修一、 实验目的多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处理机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。二、 实验内容1 优先权法、轮转法简化假设1) 进程为计算型的(无I/O)2) 进程状态:ready、running、finish3) 进程需要的CPU时间以时间片为单位确定2 算法描述1) 优先权法动态优先权当前运行进程用完时间片后,其优先权减去一个常数。2) 轮转法三、 流程图四、 实验程序代码 package 进程调度;/* * auth

2、or * */public class CPCB private String name;private int time;private int count;public int getCount() return count;public void setCount(int count) this.count = count;public String getName() return name;public void setName(String name) = name;public int getTime() return time;public void set

3、Time(int time) this.time = time;package 进程调度;/* * author * */class PCBprivate String name;private int time ;private int priority ;public int getTime()return time;public void setTime(int time)this.time = time;public int getPriority()return priority;public void setPriority(int priority)this.priority =

4、 priority;public String getName() return name;public void setName(String name) = name;package 进程调度;import java.util.LinkedList;/* * author * */class processprivate final static int nap_time = 500;private LinkedList queue = new LinkedList(); private LinkedList cqueue = new LinkedList();/优先权

5、算法public void go(int p_Num) throws Exceptionfor(int i = 0;ip_Num;i+)PCB pcb = new PCB();int time = (int)(Math.random()*20+1);int pri = (int)(Math.random()*20+4);pcb.setName(进程+i);pcb.setTime(time);pcb.setPriority(pri);queue.add(pcb);queue = this.sort(queue);int i=0;while(queue.size()!=0)PCB pcb = (P

6、CB)queue.getFirst();System.out.println(i+tt+pcb.getName()+运行t+优先级:+pcb.getPriority()+-所需时间:+pcb.getTime();/Thread.sleep(nap_time);int pre = pcb.getPriority() - 3;int time = pcb.getTime() - 1;if(time=0)System.out.println(pcb.getName()+tt进程运行结束);PCB p = (PCB)queue.removeFirst();System.out.println(移除队列

7、的进程是tt+p.getName()+n队列中还有+queue.size()+个进程n);else queue.remove();pcb.setPriority(pre);pcb.setTime(time);/System.out.println(运行后:+i+-+pcb.getName()+-优先级:+pcb.getPriority()+-所需时间:+pcb.getTime();queue.add(pcb);queue = this.sort(queue);i+;/时间片轮转调度算法public void cycle(int p_Num) throws Exceptionfinal int

8、time = 3; /定义轮转时间片数for(int i = 0;ip_Num;i+)CPCB cpcb = new CPCB(); cpcb.setTime(int)(Math.random()*20)+1);cpcb.setName(进程+i);cpcb.setCount(0);cqueue.add(cpcb);while(cqueue.size()!=0)CPCB cpcb = (CPCB)cqueue.getFirst();while(cpcb.getCount()!=time)/Thread.sleep(nap_time);cpcb.setTime(cpcb.getTime() -

9、1);cpcb.setCount(cpcb.getCount()+1);for(int i=0;icqueue.size();i+)/输出进程运行情况CPCB cpcb1 = (CPCB)cqueue.get(i);System.out.println(cpcb1.getName()+tt所需时间片数+cpcb1.getTime()+tt已占用CPU时间片数+cpcb1.getCount();if(cpcb.getTime()=0)System.out.println(cpcb.getName()+运行结束n+-移除队列的是+cpcb.getName()+-);cqueue.removeFir

10、st();System.out.println(-队列中还有+cqueue.size()+个进程-);break;if(cpcb.getCount()=time)/cqueue.remove();System.out.println(-因为+cpcb.getName()+占用CPU时间片数+cpcb.getCount()+=+time);System.out.println(cpcb.getName()+时间片运行结束+cpcb.getCount()+cpcb.getTime();CPCB p = (CPCB)cqueue.removeFirst();cqueue.add(p);cpcb.se

11、tCount(0);break;public LinkedList sort(LinkedList processes)for(int i=0;iprocesses.size();i+)PCB thread = new PCB();thread = processes.get(i);for(int j=i+1;jprocesses.size();j+)if(thread.getPriority() processes.get(j).getPriority()PCB mythread = new PCB();mythread = thread;/thread = processes.get(j)

12、;processes.set(i, processes.get(j);processes.set(j, mythread);return processes;package 进程调度;import java.io.BufferedReader;import java.io.InputStreamReader;/* * * author 邱福文 * */public class MainFunpublic void FPF() public static void main (String args) throws ExceptionInteger n2;doSystem.out.print(请

13、输入进程数:);BufferedReader sin = new BufferedReader(new InputStreamReader(System.in);String str = sin.readLine();Integer n = Integer.parseInt(str);System.out.print(请输入调度算法:n+1为优先权n+2为轮转法n+0 退出n);BufferedReader sin2 = new BufferedReader(new InputStreamReader(System.in);String str2 = sin2.readLine();proce

14、ss p = new process();/do n2 = Integer.parseInt(str2);switch(n2)case 0:break;case 1:p.go(n);break;case 2:p.cycle(n);break;default:System.out.print(输入有误请重新输入); break;while(n2!=0);五、 实验结果请输入进程数:3请输入调度算法:1为优先权2为轮转法0 退出10进程0运行优先级:19-所需时间:181进程1运行优先级:19-所需时间:152进程0运行优先级:16-所需时间:173进程1运行优先级:16-所需时间:144进程0运

15、行优先级:13-所需时间:165进程1运行优先级:13-所需时间:136进程2运行优先级:10-所需时间:87进程0运行优先级:10-所需时间:158进程1运行优先级:10-所需时间:129进程2运行优先级:7-所需时间:710进程0运行优先级:7-所需时间:1411进程1运行优先级:7-所需时间:1112进程2运行优先级:4-所需时间:613进程0运行优先级:4-所需时间:1314进程1运行优先级:4-所需时间:1015进程2运行优先级:1-所需时间:516进程0运行优先级:1-所需时间:1217进程1运行优先级:1-所需时间:918进程2运行优先级:-2-所需时间:419进程0运行优先级:

16、-2-所需时间:1120进程1运行优先级:-2-所需时间:821进程2运行优先级:-5-所需时间:322进程0运行优先级:-5-所需时间:1023进程1运行优先级:-5-所需时间:724进程2运行优先级:-8-所需时间:225进程0运行优先级:-8-所需时间:926进程1运行优先级:-8-所需时间:627进程2运行优先级:-11-所需时间:1进程2进程运行结束移除队列的进程是进程2队列中还有2个进程28进程0运行优先级:-11-所需时间:829进程1运行优先级:-11-所需时间:530进程0运行优先级:-14-所需时间:731进程1运行优先级:-14-所需时间:432进程0运行优先级:-17-

17、所需时间:633进程1运行优先级:-17-所需时间:334进程0运行优先级:-20-所需时间:535进程1运行优先级:-20-所需时间:236进程0运行优先级:-23-所需时间:437进程1运行优先级:-23-所需时间:1进程1进程运行结束移除队列的进程是进程1队列中还有1个进程38进程0运行优先级:-26-所需时间:339进程0运行优先级:-29-所需时间:240进程0运行优先级:-32-所需时间:1进程0进程运行结束移除队列的进程是进程0队列中还有0个进程请输入进程数:3请输入调度算法:1为优先权2为轮转法0 退出2进程0所需时间片数8已占用CPU时间片数1进程1所需时间片数6已占用CPU

18、时间片数0进程2所需时间片数13已占用CPU时间片数0进程0所需时间片数7已占用CPU时间片数2进程1所需时间片数6已占用CPU时间片数0进程2所需时间片数13已占用CPU时间片数0进程0所需时间片数6已占用CPU时间片数3进程1所需时间片数6已占用CPU时间片数0进程2所需时间片数13已占用CPU时间片数0-因为进程0占用CPU时间片数3=3进程0时间片运行结束36进程1所需时间片数5已占用CPU时间片数1进程2所需时间片数13已占用CPU时间片数0进程0所需时间片数6已占用CPU时间片数0进程1所需时间片数4已占用CPU时间片数2进程2所需时间片数13已占用CPU时间片数0进程0所需时间片

19、数6已占用CPU时间片数0进程1所需时间片数3已占用CPU时间片数3进程2所需时间片数13已占用CPU时间片数0进程0所需时间片数6已占用CPU时间片数0-因为进程1占用CPU时间片数3=3进程1时间片运行结束33进程2所需时间片数12已占用CPU时间片数1进程0所需时间片数6已占用CPU时间片数0进程1所需时间片数3已占用CPU时间片数0进程2所需时间片数11已占用CPU时间片数2进程0所需时间片数6已占用CPU时间片数0进程1所需时间片数3已占用CPU时间片数0进程2所需时间片数10已占用CPU时间片数3进程0所需时间片数6已占用CPU时间片数0进程1所需时间片数3已占用CPU时间片数0-

20、因为进程2占用CPU时间片数3=3进程2时间片运行结束310进程0所需时间片数5已占用CPU时间片数1进程1所需时间片数3已占用CPU时间片数0进程2所需时间片数10已占用CPU时间片数0进程0所需时间片数4已占用CPU时间片数2进程1所需时间片数3已占用CPU时间片数0进程2所需时间片数10已占用CPU时间片数0进程0所需时间片数3已占用CPU时间片数3进程1所需时间片数3已占用CPU时间片数0进程2所需时间片数10已占用CPU时间片数0-因为进程0占用CPU时间片数3=3进程0时间片运行结束33进程1所需时间片数2已占用CPU时间片数1进程2所需时间片数10已占用CPU时间片数0进程0所需

21、时间片数3已占用CPU时间片数0进程1所需时间片数1已占用CPU时间片数2进程2所需时间片数10已占用CPU时间片数0进程0所需时间片数3已占用CPU时间片数0进程1所需时间片数0已占用CPU时间片数3进程2所需时间片数10已占用CPU时间片数0进程0所需时间片数3已占用CPU时间片数0进程1运行结束-移除队列的是进程1-队列中还有2个进程-进程2所需时间片数9已占用CPU时间片数1进程0所需时间片数3已占用CPU时间片数0进程2所需时间片数8已占用CPU时间片数2进程0所需时间片数3已占用CPU时间片数0进程2所需时间片数7已占用CPU时间片数3进程0所需时间片数3已占用CPU时间片数0-因

22、为进程2占用CPU时间片数3=3进程2时间片运行结束37进程0所需时间片数2已占用CPU时间片数1进程2所需时间片数7已占用CPU时间片数0进程0所需时间片数1已占用CPU时间片数2进程2所需时间片数7已占用CPU时间片数0进程0所需时间片数0已占用CPU时间片数3进程2所需时间片数7已占用CPU时间片数0进程0运行结束-移除队列的是进程0-队列中还有1个进程-进程2所需时间片数6已占用CPU时间片数1进程2所需时间片数5已占用CPU时间片数2进程2所需时间片数4已占用CPU时间片数3-因为进程2占用CPU时间片数3=3进程2时间片运行结束34进程2所需时间片数3已占用CPU时间片数1进程2所

23、需时间片数2已占用CPU时间片数2进程2所需时间片数1已占用CPU时间片数3-因为进程2占用CPU时间片数3=3进程2时间片运行结束31进程2所需时间片数0已占用CPU时间片数1进程2运行结束-移除队列的是进程2-队列中还有0个进程-请输入进程数:实验二 银行家算法一、 实验目的死锁会引起计算机工作僵死,因此操作系统中必须防止。本实验的目的在于让学生独立的使用高级语言编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生,以加深对课堂上所讲授的知识的理解。二、 实验要求设计有n个进程共享m个系统资源的系统,进程可动态的申请和释放资源,系统按

24、各进程的申请动态的分配资源。系统能显示各个进程申请和释放资源,以及系统动态分配资源的过程,便于用户观察和分析;三、 数据结构1 可利用资源向量Available ,它是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源的数目,其初始值是系统中所配置的该类全部可用资源数目。其数值随该类资源的分配和回收而动态地改变。如果Available(j)=k,标是系统中现有Rj类资源k个。2 最大需求矩阵Max,这是一个nm的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max(i,j)=k,表示进程i需要Rj类资源的最大数目为k。3 分配矩阵Allocation,这是一个n

25、m的矩阵,它定义了系统中的每类资源当前一分配到每一个进程的资源数。如果Allocation(i,j)=k,表示进程i当前已经分到Rj类资源的数目为k。Allocation i表示进程i的分配向量,有矩阵Allocation的第i行构成。4 需求矩阵Need,这是一个nm的矩阵,用以表示每个进程还需要的各类资源的数目。如果Need(i,j)=k,表示进程i还需要Rj类资源k个,才能完成其任务。Need i表示进程i的需求向量,由矩阵Need的第i行构成。上述三个矩阵间存在关系:Need(i,j)=Max(i,j)-Allocation(i,j);四、 银行家算法参考教材P96五、 安全性算法1

26、设置两个向量。Work:它表示系统可提供给进程继续运行的各类资源数目,它包含m个元素,开始执行安全性算法时,Work = Available。Finish:它表示系统是否有足够的资源分配给进程,使之运行完成,开始Finish(I)=false;当有足够资源分配给进程Pi时,令Finish(i)=true;2 从进程集合中找到一个能满足下述条件的进程。Finish(i)= = false;Need i work;如找到则执行步骤3;否则,执行步骤4;3 当进程Pi获得资源后,可顺利执行直到完成,并释放出分配给它的资源,故应执行Work = work + Allocation i Finish(i

27、)=true;转向步骤2;4 若所有进程的Finish(i)都为true,则表示系统处于安全状态;否则,系统处于不安全状态。六、实验流程图七、实验流程图package 银行家算法;import java.io.*;/* * bank 的摘要说明。 */public class Bankint Max = new int 7, 5, 3 , 3, 2, 2 , 9, 0, 2 , 2, 2, 2 , 4, 3, 3 ;int Available = new int 3, 3, 2 ;int Allocation = new int 0, 1, 0 , 2, 0, 0 , 3, 0, 2 , 2,

28、 1, 1 , 0, 0, 2 ;int Need;int Max1 = new int53;/还需最大需求int Available1 = new int3;/各类资源数int Allocation1 = new int53;/已分配的资源数int Need1 = new int53;/还需要的资源数private static int processNum = 5;private static int resourceNum = 3;public Bank() throws IOExceptionBufferedReader sin = new BufferedReader(new Inp

29、utStreamReader(System.in);System.out.print(请输入资源数m:);String mstr = sin.readLine();int m = Integer.parseInt(mstr);resourceNum = m;Available = new intresourceNum;System.out.println(请输入系统各类资源数Available);/初始化Avaliablefor(int i=0;iresourceNum;i+)System.out.print(nAvailable+i+=);Availablei = Integer.parse

30、Int(sin.readLine();int count=0;System.out.println(请输入进程数:);String nstr = sin.readLine();int n = Integer.parseInt(nstr);processNum = n;Max = new intprocessNumresourceNum;/初始化Maxwhile(countprocessNum)/Maxcount = new intresourceNum;System.out.println(请输入各进程需要的最大资源Max:);for(int i=0;iresourceNum;i+)Syste

31、m.out.print(nMax+count+i+=);String rsStr = sin.readLine();int rsNum = Integer.parseInt(rsStr);Maxcounti = rsNum;count+;/初始化Allocationint countA=0;Allocation = new intprocessNumresourceNum;while(countAprocessNum)/AllocationcountA = new intresourceNum;System.out.println(请输入各进程最初分配的资源Alocation:);for(in

32、t i=0;iresourceNum;i+)System.out.print(nAllocation+countA+i+=);String aStr = sin.readLine();int aNum = Integer.parseInt(aStr);AllocationcountAi = aNum;countA+;/初始化NeedNeed = new intprocessNumresourceNum;for(int s=0;sprocessNum;s+)for(int t=0;tresourceNum;t+)Needst = Maxst - Allocationst;/银行家算法public

33、 void BankerMethod() throws NumberFormatException, IOExceptionboolean isSafe;System.arraycopy(Available, 0, Available1, 0, Available.length);isSafe = Safe(0);System.arraycopy(Available1, 0, Available, 0, Available.length);int Request = new intresourceNum;BufferedReader sin = new BufferedReader(new I

34、nputStreamReader(System.in);System.out.print(请输入发出请求的进程:(0-+processNum+):);int pNum = Integer.parseInt(sin.readLine();String yesno = y;boolean bool = false;while (yesno.equalsIgnoreCase(y)&bool=false) System.out.println(请输入进程的请求向量(request):);for (int i = 0; i resourceNum; i+) System.out.print(Reques

35、t+i+=);Requesti = Integer.parseInt(sin.readLine();int rn = 0;while (rn NeedpNumrn) System.out.print(n请求的资源超过了该进程的需求,是否重新输入请求向量(y/n):);yesno = sin.readLine();break;rn+;int ra = 0;if(rn=resourceNum)while (ra Availablera) System.out.print(n请求的资源超过了系统剩余资源,是否重新输入请求向量(y/n):);yesno = sin.readLine();break;r

36、a+;if(ra=resourceNum)bool = true;for(int aan=0;aanresourceNum;aan+)Availableaan = Availableaan - Requestaan;AllocationpNumaan = AllocationpNumaan + Requestaan;NeedpNumaan = NeedpNumaan - Requestaan;isSafe = Safe(pNum);/ 安全性算法public boolean Safe(int pNum) boolean isSafe = false;int p = new intprocess

37、Num;int Work = new intresourceNum;boolean Finish = new booleanprocessNum;Work = Available;StringBuffer strBuff = new StringBuffer();int pk = 0;int kp = 0;int i = pNum;while (kp processNum) if(i=processNum)i = 0;while (i processNum) int j = 0;/ boolean temp =false ;while (j Workj) / temp = true;break

38、;j+;if (j = resourceNum) ppk+ = i;Finishi = true;strBuff.append(P+i+t);for(int m=0;mresourceNum;m+)strBuff.append(Workm+ );strBuff.append(t);for(int m=0;mresourceNum;m+) strBuff.append(Needim+ );strBuff.append(t);for(int m=0;mresourceNum;m+) strBuff.append(Allocationim+ );strBuff.append(t);for(int m

39、=0;mresourceNum;m+) Workm = Workm + Allocationim; strBuff.append(Workm+ );strBuff.append(tt);strBuff.append(Finishi);strBuff.append(n);i+;kp+;if (kp = processNum) boolean result = true;for (int t = 0; t processNum; t+) result = result & Finisht;if (result) System.out.println(找到了一个安全序列:);for (int k =

40、 0; k processNum; k+)if(k!=processNum-1)System.out.print(p + pk+ );elseSystem.out.print(p + pk+n);/System.out.println(-);System.out.println(-进程+pNum+-);System.out.println(tWorkttNeedttAllocationtWork+AllocationttFinish); System.out.println(strBuff.toString();isSafe = true;return isSafe; else System.out.println(无法找到安全序列:);return isSafe;public Bank(int i)Need = new intprocessNumresourceNum;for (int s = 0; s processNum; s+) for (int t = 0; t 0) System.out.println(读者进行等待.); this.wait(); readerCount+; if(readerCount=1) dbRea

温馨提示

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

评论

0/150

提交评论