## 1、**设计目的:**
本课程设计的目的是通过设计一个磁盘调度模拟系统,从而使磁盘调度算法
更加形象化,容易使人理解,使磁盘调度的特点更简单明了,能使使用者加深对先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)循环扫描法(CSCN)等磁盘调度算法的理解。
## 2、**设计内容:**
以图形化界面展示了四个算法,计算平均寻道时间,还有用图表进行比较。
先来先服务算法(FCFS)
这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。
最短寻道时间优先算法(SSTF)
该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。
扫描算法(SCAN)
扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。例如,当磁头正在自里向外移动时,扫描算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。这时,同样也是每次选择这样的进程来调度,即其要访问的磁道,在当前磁道之内,从而避免了饥饿现象的出现。由于这种算法中磁头移动的规律颇似电梯的运行,故又称为电梯调度算法。此算法基本上克服了最短寻道时间优先算法的服务集中于中间磁道和响应时间变化比较大的缺点,而具有最短寻道时间优先算法的优点即吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法,两侧磁道被访问的频率仍低于中间磁道。
循环扫描算法(CSCAN)
循环扫描算法是对扫描算法的改进。如果对磁道的访问请求是均匀分布的,当磁头到达磁盘的一端,并反向运动时落在磁头之后的访问请求相对较少。这是由于这些磁道刚被处理,而磁盘另一端的请求密度相当高,且这些访问请求等待的时间较长,为了解决这种情况,循环扫描算法规定磁头单向移动。例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。
## **3、设计步骤:**
### **3.1需求分析**
设计主界面以灵活选择某算法,实现以下算法
1、先来先服务算法(FCFS)
2、最短寻道时间优先算法(SSTF)
3、扫描算法(SCAN)
4、循环扫描算法(CSCAN)
并求出每种算法的平均寻道长度。
### **3.2 概要设计:**
### 3.2.1 设计思想
本次课程设计我们是以面向对象的思想为主,利用eclipse为工具实现模拟磁盘调度。程序主要是利用java的swing架构做图形,用冒泡排序方法、FCFS方法、SSTF方法、SCAN方法、CSCAN方法实现功能。利用菜单式的选择界面,方便的用户操作。最终对每一种模拟磁盘调度输出磁头平均移动的磁道数。
### 3.2.2 抽象数据类型的定义
bubble():对输入的磁道进行冒泡排序,FCFS():即先来先服务方法,SSTF()方法:最短最短寻道时间函数,SCAN():扫描方法,CSCAN():循环扫描方法。各函数之间有点可以相互调用,共同实现要求。
本程序主要用到的数据结构为数组、字符串,包括对字符串的合法性判断,利用数组算磁头移动的平均移动磁道数。
### **3.3详细设计:**
函数的调用关系图
![](img/Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.004.png)
### **3.4调试分析:**
关于图形化界面,我想设背景图片却一直没法显示,后重载Jpanel的构造函数才完成。关于四个算法,只有SSTF在实现时,找到最近位置后,忘记再去找最近而一直按顺序找,很快就调试出来了。
### **3.5 系统测试:**
![](img/Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.009.png)
![](img/Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.010.png)
![](img/Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.011.png)
先来先服务(FSFC)
![](img/Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.012.png)
最短寻道时间优先算法(SSTF)
![](img/Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.013.png)
扫描算法(SCAN)
![](img/Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.014.png)
循环扫描算法(CSCAN)
![](img/Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.015.png)
四个算法平均寻道长度比较
![](img/Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.016.png)
#### **3.6 使用说明:**
运行程序,输入磁道个数,输入请求序列(也可点击随机生成),点击选择算法,选择所要查看的算法,输入开始磁道,选择其他算法,四个都选后,点击比较即可看四个平均寻道长度的柱状图。
## **4、经验与体会:**
实践能学到的比看的还要多,这次实践,我对磁盘存储管理算法理解更进一步,对四个算法的步骤更加熟记于心,今后学习我也要多实践。对图形化界面的操作也更熟练。十分感谢老师的教导,讲的很详细,我做起来才能如此顺利。
## **5、重要数据结构或源程序中的疑难部分说明**
```java
/*最短寻道时间优先调度算法*/
public void SSTF(int cidao[],int now){
int k=1;
int l,r,len=0;
int i,j,sum=0;
int a,count=0;
float ave;
for(i=0;i<cidao.length;i++) {
if(cidao[i]>0){
len++;
}
}
cidao=bubble(cidao,len); //调用冒泡排序算法排序
String s="";
for(int z=0;z<len;z++){
s+=cidao[z]+" ";
}
log.addLog("磁道序列从小到大排序为:"+s);
if(cidao[len-1]<=now) //若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务
{ String buffer="";
for(i=len-1;i>=0;i--){
buffer+=cidao[i]+" ";
}
log.addLog("磁盘扫描序列为: "+buffer.toString());
sum=now-cidao[0];
count=len;
}
if(cidao[0]>=now){ //若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务;
String buffer="";
for(i=0;i<len;i++){
buffer+=cidao[i]+" ";
}
log.addLog("磁盘扫描序列为: "+buffer.toString());
sum=cidao[len-1]-now;
count=len;
}
if(now>cidao[0]&&now<cidao[len-1]) {//若当前磁道号大于当前请求序列中最小者并且小于最大者
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本课程设计的目的是通过设计一个磁盘调度模拟系统,从而使磁盘调度算法 更加形象化,容易使人理解,使磁盘调度的特点更简单明了,能使使用者加深对先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)循环扫描法(CSCN)等磁盘调度算法的理解。
资源推荐
资源详情
资源评论
收起资源包目录
100012108-基于Java实现(GUI)磁盘调度模拟系统(操作系统课程).zip (44个子文件)
javaoscoursedisign
Code
login(背景图).jpg 44KB
lib
jfreechart-1.0.13.jar 1.36MB
jcommon-1.0.16.jar 302KB
gnujaxp.jar 226KB
.classpath 496B
操作系统课程设计.jar 1.91MB
.settings
org.eclipse.jdt.core.prefs 598B
src
caozuoxitongkeshe
LogPane.java 1KB
DiskOperation.java 5KB
ArithPane.java 7KB
BarChart1.java 3KB
CreatIcon.java 282B
BackgroundPanel.java 509B
Arithmetic.java 10KB
res
login.jpg 44KB
bin
caozuoxitongkeshe
BarChart1.class 3KB
CreatIcon.class 1016B
Arithmetic.class 7KB
ArithPane.class 6KB
LogPane.class 2KB
DiskOperation$1.class 2KB
BackgroundPanel.class 859B
DiskOperation.class 7KB
.project 400B
Doc
3117004638_周惠龙_操作系统课程设计.doc 1.13MB
LICENSE 1KB
img
Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.005.png 2KB
Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.013.png 78KB
Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.001.png 117B
Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.008.png 3KB
Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.009.png 77KB
Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.014.png 68KB
Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.015.png 64KB
Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.004.png 6KB
Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.007.png 3KB
Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.017.png 140B
Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.006.png 3KB
Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.010.png 7KB
Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.011.png 90KB
Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.002.png 2KB
Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.016.png 17KB
Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.003.png 3KB
Aspose.Words.5fe42ebd-2597-42ee-82bd-f8fef4bec682.012.png 65KB
README.md 9KB
共 44 条
- 1
资源评论
神仙别闹
- 粉丝: 2704
- 资源: 7638
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功