欢迎使用CSDN-markdown编辑器
来源:互联网 发布:剑侠情缘2白金版 mac 编辑:程序博客网 时间:2024/05/29 14:04
页面置换算法
上学期操作系统课设选了这道课题,主要是借助编程语言实现先来先服务算法、最短时间优先调度算法、电梯调度算法、单项扫描算法、双向扫描算法。参考资料上是用C写的,且只有先来先服务算法的源码,所以课设基本没怎么卡,就是在最短时间算法设计时因为优化的问题卡了一下,电梯、单向扫描、双向的思想其实可以类通。下面上核心源码:
先来先服务算法
public void FIFO() { //先来先服务算法 System.out.println("先来先服务算法"); for (int i = 0; i < a.length; i++) { fifolist.add(Integer.valueOf(a[i])); if(i>0){ fifodis+=Math.abs(a[i]-a[i-1]); //移动路径,绝对值 System.out.print("-"); System.out.print(fifodis); } } System.out.print(" 移动臂移动距离"+fifodis); System.out.println(); }
最短时间优先
public void SSTF(){System.out.println("最短路径优先算法");int len=a.length;int flag[]=new int[len];int done=0; int now=a[0];int mindistance=65535;int site=0;sstflist.add(Integer.valueOf(a[0]));for(int i=0;i<a.length;i++) //标识位数组{flag[i]=0; }while(done<len-1){mindistance=65535;site=0;for(int i=1;i<len;i++){if(flag[i]==1)continue; if(mindistance>Math.abs(a[i]-now)){mindistance=Math.abs(a[i]-now);site=i;}}sstflist.add(Integer.valueOf(a[site]));flag[site]=1;done++;sstfdis+=mindistance;now=a[site];}System.out.print("移动臂移动距离"+sstfdis);System.out.println();}
电梯调度
public void EL() { System.out.println("电梯调度算法");int len=a.length;int flag[]=new int[len];for(int i=0;i<a.length;i++) //标识位数组{flag[i]=0; }flag[0]=1;int done=0; int now=a[0];int site=0;boolean bool=true;int mindistance=65535;ellist.add(Integer.valueOf(a[0]));if(before<a[0]){ //方向向上System.out.println(before);System.out.println("上");while(done<len-1){mindistance=65535;site=0;for(int i=1;i<len;i++){if(flag[i]==1)continue;if((bool==true&&a[i]>now)||(bool==false&&a[i]<now)) //最小值{if(mindistance>Math.abs(a[i]-now)){mindistance=Math.abs(a[i]-now);site=i;}}}if(mindistance==65535){bool=false;continue;}ellist.add(Integer.valueOf(a[site]));flag[site]=1;done++;eldis+=mindistance;now=a[site];}}else if(before>=a[0]) //方向乡向下{System.out.println(before);System.out.println("下");while(done<len-1){mindistance=65535;site=0;for(int i=1;i<len;i++){if(flag[i]==1)continue;if((bool==false&&a[i]>now)||(bool==true&&a[i]<now)) //最小值{if(mindistance>Math.abs(a[i]-now)){mindistance=Math.abs(a[i]-now);site=i;}}}if(mindistance==65535){bool=false;continue;}ellist.add(Integer.valueOf(a[site]));flag[site]=1;done++;eldis+=mindistance;now=a[site];}}System.out.print("移动臂移动距离"+eldis);System.out.println();}
单向扫描算法
public void DSC() //单向扫描 { System.out.println("单向扫描算法"); int len=a.length; int flag[]=new int[len]; for(int i=0;i<a.length;i++) //标识位数组 { flag[i]=0; } flag[0]=1; int done=0; int now=a[0]; int site=0; boolean bool=true; int mindistance=65535; dslist.add(Integer.valueOf(a[0])); while(done<len-1) //向上 { mindistance=65535; site=0; for(int i=1;i<len;i++) { if(flag[i]==1) continue; if((bool==true&&a[i]>now)||(bool==false)) //最小值 { if(mindistance>Math.abs(a[i]-now)) { mindistance=Math.abs(a[i]-now); site=i; } } } if(mindistance==65535) { dsdis+=Max-1-now; now=0; bool=false; continue; } dslist.add(Integer.valueOf(a[site])); flag[site]=1; done++; dsdis+=mindistance; now=a[site]; } System.out.print("移动臂移动距离"+dsdis); System.out.println(); }
双向调度算法
public void USC() //双向扫描 { System.out.println("双向调度算法"); int len=a.length; int flag[]=new int[len]; for(int i=0;i<a.length;i++) //标识位数组 { flag[i]=0; } flag[0]=1; int done=0; int now=a[0]; int site=0; boolean bool=true; int mindistance=65535; uslist.add(Integer.valueOf(a[0])); if(before<a[0]) { while(done<len-1) { mindistance=65535; site=0; for(int i=1;i<len;i++) { if(flag[i]==1) continue; if((bool==true&&a[i]>now)||(bool==false&&a[i]<now)) //最小值 { if(mindistance>Math.abs(a[i]-now)) { mindistance=Math.abs(a[i]-now); site=i; } } } if(mindistance==65535) { usdis+=Max-1-now; bool=false; continue; } uslist.add(Integer.valueOf(a[site])); flag[site]=1; done++; usdis+=mindistance; now=a[site]; } } if(before>a[0]) { while(done<len-1) { mindistance=65535; site=0; for(int i=1;i<len;i++) { if(flag[i]==1) continue; if((bool==false&&a[i]>now)||(bool==true&&a[i]<now)) //最小值 { if(mindistance>Math.abs(a[i]-now)) { mindistance=Math.abs(a[i]-now); site=i; } } } if(mindistance==65535) { usdis+=now-0; bool=false; continue; } uslist.add(Integer.valueOf(a[site])); flag[site]=1; done++; usdis+=mindistance; now=a[site]; } } System.out.print("移动臂移动距离"+usdis); System.out.println(); }
0 0
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 操作系统之中断(四)
- [0.2] scala开发环境搭建及第一个应用程序
- Android杂谈之Android数据存储方式
- 数的二进制表示中1的数目
- USACO 1.3 crypt1
- 欢迎使用CSDN-markdown编辑器
- JAVA基础之泛型
- 梯度下降实现案例(含python代码)
- (p120)线性时间找到顺序统计量
- Linux系统常用命令
- 5分钟弄懂Docker!
- UI学习第07天
- UVA - 12099 The Bookcase 书架
- 利用ParameterizedType获取java泛型参数类