山东科技大学学生课程设计
{ f=0; break; } }
if(f==0) //若有进程没完成,则为不安全状态 {
printf(\系统此时处在不安全状态!\ safe=0; } else {
printf(\系统当前为安全状态,安全序列为:\ for(i=0;i printf(\输出安全序列 printf(\ } } void print() //输出函数 { int i,j; printf(\ printf(\此时资源分配情况**********************\\n\ printf(\进程 Max Allocation Need \\n\ for (i=0;i printf(\ for(j=0;j - 38 - 山东科技大学学生课程设计 printf(\ } for(j=0;j printf(\ } for(j=0;j printf(\ } for(j=0;j printf(\ } for(j=0;j printf(\ } printf(\ } printf(\各类资源可利用的资源数为:\ for (j=0;j printf(\ } printf(\} - 39 - 山东科技大学学生课程设计 2.4运行结果 3.磁盘调度算法 3.1最短寻道优先 3.1.1 需求分析 该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,但这种调度算法却不能保证平均寻道时间最短。SSTF算法的平均每次磁头移动距离,明显低于FCFS的距离。SSTF较之FCFS有更好的寻道性能,故过去一度被广泛采用过。 基本功能如下: (1)将磁道号由小到大的排序; (2)通过比较左右距离的大小,确定下一寻道号 以下是各功能模块的功能描述: 1.主函数模块 本模块的主要功能是获得磁道号和进行次磁道调度。 - 40 - 山东科技大学学生课程设计 2.排序功能模块 本模块的主要功能是将磁道号进行排序,按从小到大排成一个数组。 3.输出模块 本模块的主要功能是输出磁盘调度后的磁道号。 测试数据: 磁道数目:5 磁道号:3 2 1 9 6 当前磁道号:4 3.1.2 概要设计 本次程序使用c语言的方法,首先将获得的磁道号进行排序,然后在主函数中进行磁盘的调度,最后输出磁道号。 3.1.3 详细设计 1.主函数模块 首先进行磁道号的获取,然后调用排序函数sort(),将进程号进行排序,在主函数中,先通过循环得到当前磁道号的位置,通过比较与左右磁道号的距离,决定下一个磁道是左还是右,并且进行输出。 2.排序模块 将磁道号进行由小到大排序,并存入数组。 - 41 - 山东科技大学学生课程设计 开始 输入磁道号 调用sort()函数 输入当前磁道号 否 当前磁道号>a[i] 是 a[i]-a[left]>a[i]-a[righ是 否 a[i]=a[left] a[i]=a[right输出a[i] 是 是否还有磁道号 否 结束 图2:sstf流程图 - 42 -