2015广工操作系统课程设计报告之磁盘调度(附java源代码)
操作系统磁盘调度算法实验报告及代码
操作系统磁盘调度算法实验报告及代码一、实验目的通过实验掌握磁盘调度算法的实现过程,了解各种不同磁盘调度算法的特点和优缺点,并比较它们的性能差异。
二、实验原理磁盘调度是操作系统中的重要内容,其主要目的是提高磁盘的利用率和系统的响应速度。
常见的磁盘调度算法有:FCFS(先来先服务)、SSTF (最短寻道时间)、SCAN(扫描)、C-SCAN(循环扫描)等。
三、实验过程1.编写代码实现磁盘调度算法首先,我们需要定义一个磁盘请求队列,其中存放所有的IO请求。
然后,根据所选的磁盘调度算法,实现对磁盘请求队列的处理和IO请求的调度。
最后,展示运行结果。
以FCFS算法为例,伪代码如下所示:```diskQueue = new DiskQueue(; // 创建磁盘请求队列while (!diskQueue.isEmpty()request = diskQueue.dequeue(; // 取出队列头的IO请求//处理IO请求displayResult(; // 展示运行结果```2.运行实验并记录数据为了验证各种磁盘调度算法的性能差异,我们可以模拟不同的场景,例如,随机生成一批磁盘IO请求,并使用不同的磁盘调度算法进行处理。
记录每种算法的平均响应时间、平均等待时间等指标。
3.撰写实验报告根据实验数据和结果,撰写实验报告。
实验报告通常包括以下内容:引言、实验目的、实验原理、实验步骤、实验结果、实验分析、结论等。
四、实验结果与分析使用不同的磁盘调度算法对磁盘IO请求进行处理,得到不同的实验结果。
通过对比这些结果,我们可以看出不同算法对磁盘IO性能的影响。
例如,FCFS算法对于请求队列中的请求没有排序,可能会导致一些请求等待时间过长。
而SSTF算法通过选择离当前磁道最近的请求进行处理,能够减少平均寻道时间,提高磁盘性能。
五、实验总结通过本次实验,我们学习了操作系统中磁盘调度算法的原理和实现过程。
不同的磁盘调度算法具有不同的优缺点,我们需要根据实际情况选择合适的算法。
广工操作系统2015的实验报告材料
实验报告课程名称操作系统实验学生学院计算机学院专业班级计算机科学与技术学号学生姓名指导教师孙为军2015 年 12 月30日实验一进程调度一、实验目的编写并调试一个模拟的进程调度程序,以加深对进程的概念及进程调度算法的理解.二、实验内容1.采用“短进程优先”调度算法对五个进程进行调度。
每个进程有一个进程控制块( PCB)表示。
进程控制块可以包含如下信息:进程名、到达时间、需要运行时间、已用CPU时间、进程状态等等。
2.每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。
每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。
重复以上过程,直到所要进程都完成为止。
三、实现思路先考虑实现进程调度所需要的数据结构,然后根据所需要的算法进行设计。
四、主要的数据结构进程控制块PCB:struct pcb {char name[10];char state;int ntime;int rtime;struct pcb* link;}*ready=NULL,*p;五、算法流程图六、运行与测试输入进程信息:输入完毕,显示当前运行以及就绪的进程:优先运行短进程七、改进的方向界面比较难看,可以中文化信息。
实验二作业调度一、实验目的用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。
二、实验内容1.写并调试一个单道处理系统的作业等待模拟程序。
2.作业等待算法:分别采用先来先服务(FCFS)、响应比高者优先(HRN)的调度算法。
3.由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU时限等因素。
4.每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。
操作系统实验报告—磁盘调度算法
操作系统实验报告—磁盘调度算法操作系统实验报告实验3磁盘调度算法报告日期:20XX-6-17姓名:学号:班级:任课教师:实验3磁盘调度算法一、实验内容模拟电梯调度算法,实现对磁盘的驱动调度。
二、实验目的磁盘是一种高速、大量旋转型、可直接存取的存储设备。
它作为计算机系统的辅助存储器,负担着繁重的输入输出任务,在多道程序设计系统中,往往同时会有若干个要求访问磁盘的输入输出请示等待处理。
系统可采用一种策略,尽可能按最佳次序执行要求访问磁盘的诸输入输出请求,这就叫驱动调度,使用的算法称驱动调度算法。
驱动调度能降低为若干个输入输出请求服务所须的总时间,从而提高系统效率。
本实验要求学生模拟设计一个驱动调度程序,观察驱动调度程序的动态运行过程。
三、实验原理模拟电梯调度算法,对磁盘调度。
磁盘是要供多个进程共享的存储设备,但一个磁盘每个时刻只能为一个进程服务。
当有进程在访问某个磁盘时,其他想访问该磁盘的进程必须等待,直到磁盘一次工作结束。
当有多个进程提出输入输出请求处于等待状态,可用电梯调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。
当存取臂仅需移到一个方向最远的所请求的柱面后,如果没有访问请求了,存取臂就改变方向。
假设磁盘有200个磁道,用C语言随机函数随机生成一个磁道请求序列放入模拟的磁盘请求队列中,假定当前磁头在100号磁道上,并向磁道号增加的方向上移动。
请给出按电梯调度算法进行磁盘调度时满足请求的次序,并计算出它们的平均寻道长度。
四、实验过程1.画出算法流程图。
2.源代码#include #include #include int *Init(intarr) {int i = 0;srand((unsignedint)time(0)); for (i = 0; i = num) {a[j+1] = arr[i]; j++; } else {b[k+1] = arr[i]; k++; } }printf(\访问序列:\\n\); for (i = 1; i 0; i--) { printf(\, b[i]); }sum = ((a[j]-100)*2+(100- b[1]))/15;printf(\平均寻道长度:%d\, sum); }int main {int arr[15] = { 0 }; int *ret=Init(arr); two_part(ret); getchar ; return 0;}4运行结果:五、实验小结通过本次实验,我对scan算法更加深入理解,用C语言模拟电梯调度算法,实现对磁盘的驱动调度,这个相比前两个实验实现起来相对简单,理解了算法实现起来尤为简单,程序敲出来之后没有错误,可直接运行,结果验证也无误。
操作系统课程设计--磁盘调度先来先服务算法
《操作系统原理》课程设计报告书题目:磁盘调度先来先服务算法学号:学生姓名:专业:计算机科学与技术指导教师:2014 年 5 月 29目录1 功能描述 (2)1.1 功能实现思想 (2)1.2 功能详述 (2)2 系统设计 (2)2.1 系统总体设计 (2)2.1.1 数据结构描述 (2)2.1.2 函数功能分析 (2)2.1.2 程序函数调用关系 (3)2.2 系统详细设计 (3)2.2.1 设计任务 (3)2.2.2 设计要求 (3)2.2.3 算法思想 (3)2.2.4 FCFS 算法流程图 (4)3 系统实现 (4)4 系统测试与分析 (5)4.1 系统运行结果 (5)4.2 系统运行结果分析 (5)5 总结 (6)参考文献 (6)附:源程序代码 (7)教师评分表 (10)1 功能描述根据进程请求访问磁盘的先后次序进行调度,从而计算出磁头移动的总距离和平均寻道长度。
1.1 功能实现思想这是一种比较简单的磁盘调度算法。
它根据进程请求访问磁盘的先后次序进行调度。
此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。
此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。
1.2 功能详述根据进程请求访问磁盘的先后次序进行调度,首先根据提示输入总的磁道数、提出磁盘I/O申请的进程数、开始磁道号和磁道序列。
通过程序调用函数输出磁盘请求序列和磁盘扫描序列,从而计算出磁头移动的总距离和平均寻道长度。
2 系统设计2.1 系统总体设计2.1.1 数据结构描述void FCFS(int cidao[],int m)输入磁道号,按先来先服务的策略输出磁盘请求序列和磁盘扫描序列,求移动的总距离和平均寻道长度,输出移动的总磁道数和平均寻道长度。
2.1.2 函数功能分析由于一开始要对键盘输入的磁道数和要使用的算法进行一次有效性的判断,我使用了int decide(char str[]),如果输入的信息不是0~9之间的数都将被判定为不合法,合法后才能进行下一步。
《操作系统》实验六磁盘调度报告
《操作系统》实验六磁盘调度报告磁盘调度是指操作系统对存储在磁盘中的数据进行管理和调度,以提高磁盘的利用率和系统的性能。
在实验六中,我们将学习和实现几种经典的磁盘调度算法,并通过实验比较它们的性能。
本次实验中,我们实现了以下几种磁盘调度算法:先来先服务(FCFS)、最短寻道时间优先(SSTF)、电梯算法(SCAN)和循环扫描(C-SCAN)。
下面将对这几种算法进行具体的介绍和分析。
首先是先来先服务算法(FCFS)。
该算法按照请求的顺序进行磁盘访问,先到达的请求先被服务。
该算法实现简单,但是它无法根据磁盘的物理布局情况进行优化,因此可能出现不连续访问磁盘的情况,导致磁盘的寻道时间增加。
实验结果显示,在磁盘请求序列比较随机的情况下,FCFS算法的性能较差。
第二种算法是最短寻道时间优先算法(SSTF)。
该算法选择与当前磁头位置最近的磁道进行访问,以减少寻道时间。
实验结果显示,SSTF算法在磁盘请求序列比较随机的情况下,相较于FCFS算法,可以有效地减少寻道时间。
然而,当一些磁道频繁被请求时,SSTF算法会优先访问该磁道,导致其他磁道的请求被延迟,出现饥饿现象。
第三种算法是电梯算法(SCAN)。
该算法模拟电梯的运行过程,在一个方向上依次访问磁道,直到到达磁盘的最边缘,然后改变方向继续访问。
实验结果显示,SCAN算法可以很好地优化磁盘访问的顺序,减少寻道时间。
但是,SCAN算法可能导致一些请求在磁盘的一侧永远得不到服务,造成饥饿现象。
最后是循环扫描算法(C-SCAN)。
该算法和SCAN算法类似,不同之处是C-SCAN算法在到达磁盘最边缘后,直接返回到磁道的起始位置继续扫描。
实验结果显示,C-SCAN算法可以减少饥饿现象,但是可能出现磁盘一侧被连续访问导致其他区域的访问不均衡。
综上所述,不同的磁盘调度算法在不同的应用场景下有不同的性能表现。
在磁盘请求序列比较随机的情况下,SSTF算法能够最大程度地减少寻道时间。
2015广工操作系统课程设计报告之磁盘调度(附java源代码)
《操作系统》课程设计磁盘调度算法学 院 计算机学院 专 业 计算机科学与技术 学 号 姓 名指导教师孙为军日期2016年1月2日操作系统课程设计任务书说明:本表由指导教师填写,由系主任审核后下达给选题学生,装订在设计(论文)首页一、设计思想说明1.1 设计环境开发平台:eclipse Version: Luna Service Release 1 (4.4.1) Build id: 20140925-1800开发环境:Windows10 操作系统Java版本:java version “1.8.0_25”java<TM> SE Runtime Environment <build 1.8.0_25-b18>java HotSpot(TM) 64-Bit Server Vm <Build 25.25-b02,mixed mode>1.2 设计思想1.先到先服务算法(FCFS)这是一种比较简单的磁盘调度算法。
它根据进程请求访问磁盘的先后次序进行调度。
此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。
此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。
2.最短寻道时间优先调度算法(SSTF)该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。
其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。
在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。
3.扫描算法(SCAN)扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。
操作系统课程设计报告磁盘调度算法
操作系统课程设计报告磁盘调度算法华南农业⼤学数学与信息学院(软件学院)《操作系统分析与设计实习》成绩单开设时间:2015学年第⼀学期⼀、需求分析(1)输⼊的形式和输⼊值的范围:在⽂本框输⼊序列长度,输⼊值为int类型输出每种算法的平均寻道长度。
(3)程序所能达到的功能:模拟实现FCFS、SSTF、SCAN、C-SCAN 算法,并计算及⽐较磁头移动道数。
(4)测试数据:包括正确的输⼊及其输出结果和含有错误的输⼊及其输出结果:⼆、概要设计1)主程序流程图:输出随机⽣成400个磁道号序列主菜单选择算法开始FCFS SSTFSCANC-SCAN 结束(2)各程序模块之间的调⽤关系磁头初始位置输⼊及合法性检查冒泡排序算法由外向内输出磁道序列由内向外输出磁道序列由当前位置向内再向外输出磁道序列由当前位置向外再向内输出磁道序列由当前位置向内再由外向内输出磁道序列由当前位置向外再由内向外输出磁道序列就近选择主函数SCANC-SCAN三、详细设计1)各操作伪码算法(1)实现磁头初始位置的输⼊并进⾏合法性检查int printstarter()//磁头初始位置输⼊{输⼊:磁头初始位置;if输⼊⼩于0或⼤于1500{输出:"输⼊数据类型有误,请重新输⼊!"<重新输⼊}Else 返回合法的磁头初始位置}(2)冒泡排序算法int *bubble//冒泡排序算法{for 从数组的第⼀个元素开始重复{依次和后续元素表较⼤⼩;If后⾯元素⼤于当前元素交换数值;}输出排序后的数组;返回数组;}(3)int out_to_in//由磁道最外向内输出磁道序列{for 从最外磁道开始{依次输出磁道号;当前磁道号与磁头初始未⾄的绝对值求和;返回绝对值之和;}(4)int in_to_out//由磁道最内向外输出磁道序列{ for 从最内磁道开始{依次输出磁道号;当前磁道号与磁头初始未⾄的绝对值求和;磁头初始位置=当前磁道号;}返回绝对值之和;}(5)int out_to_in_to_out//先由当前位置向内再向外{找到⼩于等于磁头初始位置的磁道for由该磁道开始{向内依次输出磁道号;当前磁道号与磁头初始未⾄的绝对值求和;}for由该磁道的外侧磁道开始{向外依次输出磁道号;当前磁道号与磁头初始未⾄的绝对值求和;}返回绝对值之和;}(6)int in_to_out_to_in//先由当前位置向外再向内{找到⼤于等于磁头初始位置的磁道for由该磁道开始{向外依次输出磁道号;当前磁道号与磁头初始未⾄的绝对值求和;}for由该磁道的内侧磁道开始当前磁道号与磁头初始未⾄的绝对值求和;}返回绝对值之和;}(7)int out_to_in_twice由当前磁道向内再从最外向内{找到⼩于等于磁头初始位置的磁道;for由该磁道开始{向内依次输出磁道号;当前磁道号与磁头初始未⾄的绝对值求和;}for由最外侧磁道开始{向内依次输出磁道号直到⼩于等于初始位置的磁道的外侧⼀个磁道;当前磁道号与磁头初始未⾄的绝对值求和;}返回绝对值之和;}(8)int in_to_out_twice由当前磁道向外再从最内向外{找到⼤于等于磁头初始位置的磁道for由该磁道开始{向内依次输出磁道号;当前磁道号与磁头初始未⾄的绝对值求和;}for由最内侧磁道开始{向外依次输出磁道号直到⼩于等于初始位置的磁道的内侧⼀个磁道;当前磁道号与磁头初始未⾄的绝对值求和;}返回绝对值之和;{找到⼤于磁头初始位置的磁道;while初始位置内侧差绝对值更⼩{输出内侧磁道号;绝对值差求和;初始位置更新为当前磁道号;}while 初始位置外侧绝对值差更⼩{输出外侧磁道号;绝对值差求和;初始位置更新为当前磁道号;}}If已到达最内侧未到达最外侧{if内侧绝对值差更⼩{输出最内侧磁道号;绝对差值求和;初始位置更新;while 向外侧依次输出磁道号直到到达最外侧{绝对差值求和;更新初始位置;}}else外侧绝对值差更⼩{While向外侧依次输出磁道号直到到达最外侧{绝对差值求和;更新初始位置;绝对差值求和;更新初始位置;}}if 已到达最外侧未到达最内侧{If外侧绝对值更⼩{输出最外侧磁道号;绝对差值求和;更新初始位置;while向内依次输出磁道号{绝对差值求和;更新初始位置;}}else{while 向内依次输出磁道号{绝对差值求和;更新初始位置;}输出最外侧磁道号;绝对值差求和;更新初始位置;}}if均到达最内侧和最外侧{if 外侧差绝对值更⼩{}else{输出最内侧磁道号并绝对值差求和;输出最外侧磁道号并绝对值差求和;}}求总和并返回;}(10)void FCFS算法{输出磁盘请求序列为;按照磁盘请求序列依次输出磁盘扫描序列;当前磁道号与磁头初始未⾄的绝对值求和;求平均值;输出平均寻道长度;}(11)void SSTF算法{if序列中最⼤的磁道号⼩于磁头初始位置{调⽤out_to_in直接由外向内;}if 序列中最⼩的磁道号⼤于磁头初始位置{调⽤in_to_out直接由内向外;}If 磁头初始位置为中间值{调⽤就近选择算法;}求均值;输出平均寻道时间;}输⼊:磁臂移动⽅向(1:向外,0:向内); if 序列中最⼤的磁道号⼩于磁头初始位置{调⽤out_to_in直接由外向内;}if序列中最⼩的磁道号⼤于磁头初始位置{调⽤in_to_out直接由内向外;}if 初始磁头位置为中间值{if 磁臂⽅向向内{调⽤out_to_in_to_out;}if 磁臂⽅向向外{调⽤n_to_out_to_in;}}求均值;输出平均寻道时间;}(13)Viod C-SCAN算法{请输⼊磁臂移动⽅向(1:向外,0:向内);if 序列中最⼤磁道号⼩于等于磁头初始位置{ if磁臂⽅向向内{调⽤out_to_in;}if磁臂⽅向向外{调⽤in_to_out;if 序列中最⼤磁道号⼤于等于磁头初始位置{if磁臂⽅向向内{调⽤out_to_in;}if磁臂⽅向向外{调⽤in_to_out;}}if初始磁头位置为中间值{if (磁臂⽅向向内{调⽤out_to_in_twice;}if 磁臂⽅向向外{调⽤in_to_out_twice);}}求均值;输出平均寻道时间;}(14)主函数int main(){随机⽣成200个0~499的磁道序列并输出;随机⽣成100个500~999的磁道序列并输出;随机⽣成100个1000~1500的磁道序列并输出;输出:主菜单;输⼊:⽤户选择并进⾏合法性检查switch (⽤户选择)case 2:调⽤SSTF()case 3:调⽤SCAN()case 4:调⽤C-SCAN()case 5:退出}}2)函数的调⽤关系图四、调试分析1)调试过程中遇到的问题以及对设计与实现的讨论和分析:(1)随机⽣成400个磁道号序列:使⽤rand()函数,对于:50%位于 0~499,25%分布在 500~999,25%分布在 1000~1499,采⽤如下⽅法解决:track[i] = (rand() % 500);track[i] = (rand() % 500)+500;track[i] = (rand() % 500)+1000;(2)通过对每⼀⾏的输出设置断点判断问题出现在哪⾥,把出问题的地⽅缩⼩到⼀定范围,然后解决问题,如若解决不出则上⽹查询。
操作系统磁盘调度算法实验报告
目录一、课程设计目的 (3)二、课程设计要求 (3)三、课程设计原理 (3)四、程序代码 (5)五、流程图设计 (11)六、运行结果 (14)七、调试分析 (16)八、心得体会 (16)一、课程设计目的操作系统是最重要的计算机系统软件,同时也是最活跃的学科之一,发展极为迅速。
我们在本课程的实验过程中,要了解实际操作系统的工作过程,加深对操作系统基础理论和重要算法的理解,在实践过程中加深对操作系统原理的理解。
通过设计一个磁盘调度模拟系统,以加深对先来先服务、最短寻道时间、电梯算法以及循环扫描算法等磁盘调度算法的理解。
让我们更好地掌握操作系统中磁盘调度的原理及实现方法,增强动手能力。
本实验通过对磁盘调度算法的实现,加深对算法的理解,同时通过用C++语言编写程序实现这些算法,并在windows平台上实现,也再一次提高了自己编程的能力,提高了综合运用专业课知识的能力。
二、课程设计要求本设计的具体要求如下:1.模拟一个磁盘调度算法2.要求能够模拟FCFS、最短寻道时间、电梯算法等磁盘调度算法3.输入为一组作业的磁道请求4.输出为按选择的算法执行时的磁头移动轨迹三、课程设计原理1.各个算法分析(1)先来先服务算法(FCFS)这是一种最简单的磁盘调度算法。
它根据请求访问磁盘的先后次序进行调度。
此算法的优点是公平、简单,且每个进程的请求都能依次地得到处理,不会出现某一进程的请求长期得不到满足的情况。
但是此算法由于未对寻道进行优化,致使平均寻道时间可能较长。
当有进程先后提出磁盘I/O请求时,先按他们发出请求的先后次序排队。
然后依次给予服务。
其平均寻道距离较大,故先来先服务算法仅适用于请求磁盘I/O进程数目较少的场合。
(2)最短寻道时间优先算法(SSTF)该算法选择这样的进程:其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次寻道时间最短。
但这种算法不能保证平均寻道时间最短。
有可能导致某个进程出现“饥饿”现象,因为只要不断有新进程请求到达,且其所要访问的磁道与磁头当前所在的磁道的距离较近,这种新进程的I/O请求必然优先满足。
2015广工操作系统课程设计报告(文档最后含源码下载地址)
操作系统课程设计学生学院____ 计算机学院______ 专业班级 13级计科9 学号学生姓名指导教师李敏2015 年12 月29 日成绩一、课程设计介绍设计模拟一个实现多道批处理系统的两级调度。
通过具体的作业调度、进程调度、内存分配等功能的实现,加深对多道批处理系统的两级调度模型和实现过程的理解。
作业从进入系统到最后完成,要经历两级调度:作业调度和进程调度。
作业调度是高级调度,它的主要功能是根据一定的算法,从输入井中选中若干个作业,分配必要的资源,如主存、外设等,为它们建立初始状态为就绪的作业进程。
进程调度是低级调度,它的主要功能是根据一定的算法将CPU分派给就绪队列中的一个进程。
在本次课程设计中假定系统可供用户使用的主存空间共100KB,并有4台磁带机。
主存分配采用可变分区分配方式且主存中信息不允许移动,对磁带机采用静态分配策略,作业调度分别采用先来先服务算法和最小作业优先算法,进程调度则采用先来先服务和最短进程优先算法。
二、课程设计环境1.计算机及操作系统:PC机,WindowsXP系统2.程序设计使用工具:Microsoft VisualC++ 6.03.程序设计语言:C语言三、课程设计思想假定“预输入”程序已经把一批作业的信息存放在输入井了,并为它们建立了相应作业表。
测试数据如下:作业到达时间估计运行时间内存需要磁带机需要JOB1 10:00 25分钟15K 2台JOB2 10:20 30分钟60K 1台JOB3 10:30 10分钟50K 3台JOB4 10:35 20分钟10K 2台JOB5 10:40 15分钟30K 2台本次课程设计采用的是两个作业调度算法:先来先服务算法和短作业优先算法,两个进程调度算法:先来先服务算法,短进程优先算法。
系统根据所选算法组合对输入系统的作业进行两级调度(作业调度,进程调度)。
分别在不同算法控制下运行设计的程序,依次显示被选中作业、内存空闲区和磁带机的情况,输出不同算法作业的选中次序及作业平均周转时间。
(完整word版)操作系统课程设计磁盘调度报告
题目:磁盘调动一.设计目的本课程设计是学习完《计算机操作系统》课程后,进行的一次全面的综合训练,经过课程设计,我们更好地掌握操作系统的原理及实现方法 , 加深对操作系统基础理论和重要算法的理解,增强了着手能力。
二.课程设计内容和要求编程序实现下述磁盘调动算法 , 并求出每种算法的均匀寻道长度,要求设计主界面以灵巧选择某算法,且以下算法都要实现:1、先来先服务算法( FCFS)2、最短寻道时间优先算法(SSTF)3、扫描算法( SCAN)4、循环扫描算法( CSCAN)三.算法及数据构造3.1 算法的整体思想设施的动向分派算法与进度调动相像,也是鉴于必定的分派策略的。
常用的分派策略有先恳求先分派、优先级高者先分派等策略。
在多道程序系统中,低效率往常是因为磁盘类旋转设施使用不妥造成的。
操作系统中,对磁盘的接见要求来自多方面,经常需要排队。
这时,对众多的接见要求按必定的序次响应,会直接影响磁盘的工作效率,从而影响系统的性能。
接见磁盘的时间因子由3 部分组成,它们是查找(查找磁道)时间、等候(旋转等候扇区)时间和数据传输时间,此中查找时间是决定要素。
所以,磁盘调动算法先考虑优化查找策略,需要时再优化旋转等候策略。
均匀寻道长度( L)为全部磁道所需挪动距离之和除以总的所需接见的磁道数( N),即:L=(M1+M2+ +Mi++MN)/N此中 Mi 为所需接见的磁道号所需挪动的磁道数。
启动磁盘履行输入输出操作时,要把挪动臂挪动到指定的柱面,再等候指定扇区的旋转到磁头地点下,而后让指定的磁头进行读写,达成信息传递。
所以,履行一次输入输出所花的时间有:找寻时间——磁头在挪动臂带动下挪动到指定柱面所花的时间。
延缓时间——指定扇区旋转到磁头下所需的时间。
传递时间——由磁头进度读写达成信息传递的时间。
此中传递信息所花的时间,是在硬件设计就固定的。
而找寻时间和延缓时间是与信息在磁盘上的地点相关。
为了减少挪动臂进行挪动花销的时间,每个文件的信息不是按盘面上的磁道次序寄存满一个盘面后,再放到下一个盘面上。
操作系统磁盘调度算法课程设计报告与代码
淮阴工学院操作系统课程设计报告选题名称 :磁盘调度算法的模拟实现系(院) :经济管理学院专业 :信息管理与信息系统班级 :姓名 :学号:指导教师 :学年学期 :2014 ~2015 学年第 1 学期2014年12月21日设计任务书课题名称设计目的实验环境任务要求序号1 2 3 4磁盘调度算法的模拟实现1.调研并熟悉磁盘调度的基本概念、排序算法与工作规程;2.学习 Visual C++ 中的图形化界面设计技术;3.通过实际编程加深对基础知识的理解,提高实践能力;4.学习开发资料的收集与整理,学会撰写课程设计报告。
1.微型电子计算机( PC);2.安装 Windows 2000 以上操作系统, Visual C++6.0 开发工具。
1.利用课余时间去图书馆或上网查阅课题相关资料,深入理解课题含义及设计要求,注意材料收集与整理;2.在第 15 周末之前完成预设计,并请指导教师审查,通过后方可进行下一步工作;3.本课题主要实现能用各种排序算法实现对数据的排序,排序后显示排序结果。
4.结束后,及时提交设计报告(含纸质稿、电子稿),要求格式规范、内容完整、结论正确,正文字数不少于3000 字(不含代码)。
工作进度计划起止日期工作内容在预设计的基础上,进一步查阅资料,完善设计方案,形成2014.12.15~2014.12.16书面材料。
2014.12.17~2014.12.18设计总体方案,构建、绘制流程框图,编写代码,上机调试。
2014.12.18~2014.12.19测试程序,优化代码,增强功能,撰写设计报告。
提交软件代码、设计报告,参加答辩,根据教师反馈意见,2014.12.20~2014.12.21修改、完善设计报告。
指导教师(签章):年月日摘要:磁盘是外设中一个很常用的部分,所以,对磁盘数据的寻道时间的长短可以直接影响机器的整体运行速度的快慢。
本设计为一个模拟磁盘调度算法的磁盘调度模拟系统,能够模拟先来先服务(FCFS)算法、最短寻道时间( SSTF)算法、电梯( SCAN)算法、环形扫描( C_SCAN)算法及 N_SCAN算法五个磁盘调度算法,输入为一组作业的磁道请求,输出为按选择的算法执行时的磁头移动轨迹。
操作系统课程设计-磁盘调度
计算机操作系统课程设计设计说明书磁盘调度算法的实现与分析学生姓名班级学号成绩指导教师(签字)计算机与通信学院目录1 课程设计简介 (3)1.1 课程设计的目的 (3)1.2 课程设计内容 (3)1.2.1 先服务FCFS (First Come First Server) (3)1.2.2最短寻道时间优先SSFT (Shortest Seek Time First) (3)1.2.3 SCAN (4)1.2.4 C-SCAN (5)2 数据结构的设计 (6)2.1 数据结构的设计理念 (6)2.2 数据结构的详细设计 (6)2.2.1 FCFS策略 (6)2.2.2 SSTF策略 (6)2.2.3 SCAN策略 (7)2.2.4 C_SCAN策略 (7)3 功能模块(或算法)描述 (8)3.1 排序模块(流程图) (8)3.1.1 SSTF策略 (8)3.1.2 SCAN策略 (8)3.1.3 C_SCAN策略 (9)3.2 求移动的磁道数模块(流程图) (9)4 程序运行结果 (11)4.1 FCSF策略的运行结果 (11)4.2 SSTF策略的运行结果 (11)4.3 SCAN策略的运行结果 (12)4.4 C_SCAN策略的运行结果 (12)5、心得体会 (13)参考文献 (14)附源代码 (15)附录一:FCFS策略 (15)附录三:SCAN策略 (16)附录四:C_SCAN策略 (18)1 课程设计简介1.1 课程设计的目的使学生熟悉磁盘管理系统的设计方法;加深对所学各种磁盘调度算法的了解及其算法的特点。
主要对FCFS(先来先服务),SSTF(最短寻道时间优先),SCAN(电梯调度算法),C-SCAN(循环调度算法)这几种磁盘调度的算法分析和实现。
1.2 课程设计内容1.2.1 先服务FCFS (First Come First Server)这是最简单的磁盘调度策略,它根据进程请求访问磁盘的时间顺序进行调度。
(完整word版)2015广工操作系统实验报告(文档最后含源码下载地址)
操作系统实验报告学生学院____ 计算机学院______专业班级 13级计科9学 号学生姓名指导教师 李敏2015 年 12 月 29 日实验一进程调度实验一、实验目的用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。
二、实验内容和要求设计一个有N个进程共行的进程调度程序。
要求采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程),时间片轮转算法,多级反馈队列调度算法这三种算法。
每个进程有一个进程控制块(PCB)表示。
进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。
进程的到达时间为进程输入的时间。
进程的运行时间以时间片为单位进行计算。
每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。
就绪进程获得CPU后都只能运行一个时间片。
用已占用CPU时间加1来表示。
如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。
每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。
重复以上过程,直到所要进程都完成为止。
三、实验主要仪器设备和材料实验环境硬件环境:IBM-PC或兼容机软件环境:C++、C语言编程环境四、实验方法1、编写并调试一个模拟的进程调度程序,采用“最高优先数优先”调度算法对五个进程进行调度。
“最高优先数优先”调度算法的基本思想是把CPU分配给就绪队列中优先数最高的进程。
静态优先数是在创建进程时确定的,并在整个进程运行期间不再改变。
动态优先数是指进程的优先数在创建进程时可以给定一个初始值,并且可以按一定原则修改优先数。
操作系统磁盘调度算法java版
实验六磁盘调度算法1、实验目的通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法的实现方法。
2、试验内容问题描述:设计程序模拟先来先服务FCFS、最短寻道时间优先SSTF、SCAN 和循环SCAN算法的工作过程。
假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。
3、程序要求:1)利用先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN 算法模拟磁道访问过程。
2)模拟四种算法的磁道访问过程,给出每个磁道访问的磁头移动距离。
3)输入:磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向(对SCAN和循环SCAN算法有效),算法选择1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。
4)输出:每种算法的平均寻道长度。
4、需求分析(1) 输入的形式和输入值的范围算法选择要访问的磁道数磁道当前磁道号输入当前移动臂的移动的方向(第三个算法)(2) 输出的形式每种算法的平均寻道长度(3)测试用例先来先服务FCFS最短寻道时间优先SCAN算法CSCAN5、调试分析通过对这次操作系统实验,使我懂得了操作系统磁盘调度的四种算法:先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)和循环扫描算法(CSCAN)。
加深了我对这门课程的理解。
锻炼了自己在考虑全局也不是细节的能力。
通过这次实验,再一次熟悉并深入掌握了程序设计语言和算法设计。
6、测试结果(1)使用FCFS算法输入输出(2)使用SSTF算法输入输出(3)使用SCAN算法(向增长方向)输入输出(4)使用SCAN算法(向减少方向)输入输出(5)使用CSCAN算法输入输出7、附录(java)package experiment;public class F_Disc_Dispatch {private static int maxsize = 100;// 要访问的磁道数private static int count;// 磁道private static int cidao[] = new int[maxsize];// 当前磁道号private static int now;// 总寻道长度private static int sum = 0;// 平均寻道长度private static double AverageDistance;// 当前移动臂的移动的方向 (1 (true)表示向外,0(false)表示向内)private static boolean direction;// 算法选择// 1-使用FCFS算法// 2-使用SSTF算法// 3-使用SCAN算法// 4-使用CSCAN算法private static int option = 0;// for循环用到变量private static int i;private static int j;private static int k;private static Scanner stdin;public static void main(String[] args) throws FileNotFoundException { // 输入数据input();// int a;switch (option) {case 1: // 使用FCFS算法FCFS();break;case 2: // 使用SSTF算法SSTF();break;case 3: // 使用SCAN算法SCAN();break;case 4: // 使用CSCAN算法CSCAN();break;}}// 输入数据public static void input() throws FileNotFoundException {BufferedInputStream in = new BufferedInputStream(new FileInputStream( "./file/06"));System.setIn(in);stdin = new Scanner(System.in);// 算法选择// 1-使用FCFS算法// 2-使用SSTF算法// 3-使用SCAN算法// 4-使用CSCAN算法option = stdin.nextInt();// 要访问的磁道数count = stdin.nextInt();// 磁道for (i = 0; i < count; i++) {cidao[i] = stdin.nextInt();}// 当前磁道号now = stdin.nextInt();if (option == 3) {// 输入当前移动臂的移动的方向 (1 表示向外,0表示向内) :try {int g = stdin.nextInt();if (g == 1) {direction = true;} else {direction = false;}} catch (Exception e) {// TODO: handle exceptionreturn;}}stdin.close();}/********************* 先来先服务调度算法 **************************/public static void FCFS() {sum += Math.abs(cidao[0] - now);for (i = 0; i < count; i++) // 输出磁盘扫描序列{}for (i = 0, j = 1; j < count; i++, j++) // 求平均寻道长度{sum += Math.abs(cidao[j] - cidao[i]);AverageDistance = (float) (sum) / (float) (count);}}/********************** 最短寻道时间优先调度算法 ********************/public static void SSTF() {k = 1;int l, r;bubble(); // 调用冒泡排序算法排序if (cidao[count - 1] <= now) // 若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务{for (i = count - 1; i >= 0; i--) {}sum = now - cidao[0];}if (cidao[0] >= now) // 若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{for (i = 0; i < count; i++) {}sum = cidao[count - 1] - now;}if (now > cidao[0] && now < cidao[count - 1]) // 若当前磁道号大于请求序列中最小者且小于最大者{while (cidao[k] < now) // 确定当前磁道在已排的序列中的位置,后面的算法都用到了,可以直接复制后少量修改,节省时间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《操作系统》课程设计磁盘调度算法学 院 计算机学院 专 业 计算机科学与技术 学 号 姓 名指导教师孙为军日期2016年1月2日操作系统课程设计任务书说明:本表由指导教师填写,由系主任审核后下达给选题学生,装订在设计(论文)首页一、设计思想说明1.1 设计环境开发平台:eclipse Version: Luna Service Release 1 (4.4.1) Build id: 20140925-1800开发环境:Windows10 操作系统Java版本:java version “1.8.0_25”java<TM> SE Runtime Environment <build 1.8.0_25-b18>java HotSpot(TM) 64-Bit Server Vm <Build 25.25-b02,mixed mode>1.2 设计思想1.先到先服务算法(FCFS)这是一种比较简单的磁盘调度算法。
它根据进程请求访问磁盘的先后次序进行调度。
此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。
此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。
2.最短寻道时间优先调度算法(SSTF)该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。
其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。
在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。
3.扫描算法(SCAN)扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。
例如,当磁头正在自里向外移动时,扫描算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。
这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。
这时,同样也是每次选择这样的进程来调度,即其要访问的磁道,在当前磁道之内,从而避免了饥饿现象的出现。
由于这种算法中磁头移动的规律颇似电梯的运行,故又称为电梯调度算法。
此算法基本上克服了最短寻道时间优先算法的服务集中于中间磁道和响应时间变化比较大的缺点,而具有最短寻道时间优先算法的优点即吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法,两侧磁道被访问的频率仍低于中间磁道。
4.循环扫描(CSACN)循环扫描算法是对扫描算法的改进。
如果对磁道的访问请求是均匀分布的,当磁头到达磁盘的一端,并反向运动时落在磁头之后的访问请求相对较少。
这是由于这些磁道刚被处理,而磁盘另一端的请求密度相当高,且这些访问请求等待的时间较长,为了解决这种情况,循环扫描算法规定磁头单向移动。
例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。
该系统共分为12个模块:1.初始化模块:initial();2.窗口函数模块:frame();3.先来先服务算法模块:FCFS();4.最短寻道优先算法模块:SSTF();5.扫描算法模块:SCAN();6.循环扫描模块:CSAN();7.排序函数模块:sort();8.结果函数模块:result();9.磁道输入模块:getInputData();10.开始磁道模块:getStartData();11.按钮监听器模块:class ButtonListener12.画布模块:class Canvas系统结构图:数组a[]:用于存放原始输入磁道数组b[]:用于存放调度顺序磁道数组c[]:用于存放播放动画时的中间数组int变量start:用于存放开始磁道float变量Avg:用于存放平均寻道长度float变量Sum:用于存放总寻道长度字符串数组s[]:用于存放按钮名称String变量ss:存放输入的磁道的字符串String变量sss:存放输入的开始磁道的字符串Int变量Style:选择具体的算法Boolena变量Animation:是否播放动画的标志位Boolean变量isOK:用于防止未选算法就播放动画而出现无法关闭程序的bug Timer变量timer:用于设定一定时间执行某个消息Int变量point:用于动画演示指向要画数字的下面countTime:用于记录动画播放的次数四、算法流程图1.先来先服务算法(FCFS):先来先服务算法(FCFS)流程图2.最短寻道时间优先算法(SSTF):最短寻道时间优先算法(SSTF)流程图3.扫描算法(SCAN):扫描算法(SCAN)流程图4.循环扫描(CSCAN):循环扫描(CSCAN)流程图5.磁道输入模块:磁道输入模块流程图6.开始磁道设置流程图:开始磁道设置流程图7.动画演示:动画演示流程图图五、程序运行及清单1.程序运行主界面,开始的磁道及磁头都为默认设置:FCFS算法:SSTF算法:SCAN算法:CSCAN算法:设置磁道:设置磁头:动画演示:六、使用说明书1.本java程序已经打包成一个jar文件,在有jvm的环境下,双击即可运行本程序。
2.运行本程序后点击右侧按钮即可进行选择算法及动画演示。
3.在选择动画演示前请先选择算法,否则无任何响应。
eg:打开程序还未点击算法就直接点击动画演示则无任何响应4.点击设置磁道窗口,会弹出一个输入窗口,在此窗口输入10个数,以空格键隔开,点击确定即可完成输入,并可自动刷新主界面数据。
若输入个数少于10个则无任何响应5.点击设置磁头,会弹出一个输入窗口,在此输入磁头开始数,点击确定即可完成输入。
6.点击右上角X按钮即可退出程序。
七、心得体会本次的课程设计主要考察了磁盘的四种调度算法,说实话,调度算法的实现完全没难度,主要的难度在于界面的设计。
之所以说难在于界面设计是因为这次使用的编写语言是java,之前也从来没有用java来编写过程序,因此本程序也是我用java写的第一个程序,难免bug会比较多,还望老师多多见谅。
虽说这只是几天的课程设计,但是这几天却让我学到了不少知识。
从添加按钮,再添加按钮监听器,编写对话框,再到画布的使用,编写动画。
这些都是我之前没有学习和接触到的。
开始做的时候是比较困难的,很多东西都是不知道怎么办,或者根本不知道有没有这个东西,后来不断的查书和百度(在此真的得谢谢度娘),很多比较难处理的问题的大部分都是百度或者自己看书解决的。
在这次课设后也明白了一个道理,世界上的知识使学不完的,然而借助某些工具会让你学到你当前迫切想学的知识。
在这次课设后觉得java这么语言真的得好好去专研一下,自己学的太少了,欠缺的太多了,这次回家也要好好脑补一下了。
最后谢谢老师本学期操作系统课程的指导!!!八、源程序import java.awt.*;import java.awt.event.*;import javax.swing.JDialog;import javax.swing.Timer;public class Cipandiaodu extends WindowAdapter //继承windowsAdapter类{private int[] a=new int[10]; //用于设置磁道数private int[] b=new int[10]; //用于记录调度顺序private int[] c=new int[10]; //用于播放动画的中间数组private int[] t=new int[10]; //用于存放设置的磁道,防止原始磁道输入顺序改变private int start=50; //设置默认的开始磁道数private float Avg; //平均寻道长度private float Sum; //记录移动的总道数private Button[] bt=new Button[9]; //按钮private JDialog jd1=new JDialog(); //设置磁道的对话框private JDialog jd2=new JDialog(); //设置磁头的对话框private TextField tf1=new TextField(100); //输入磁道的输入框private TextField tf2=new TextField(100); //输入磁头的输入框private Panel pl1=new Panel(); //该容器用于添加按钮private Panel pl3=new Panel(); //该容器用于添加画布private MyCanvas drawArea=new MyCanvas(); //定义一个画布用于变写信息private String s[]={"设置磁道","设置磁头","FCFS","SSTF","SCAN","CSCAN","确定","确定","动画演示"}; //按钮名称private String ss=""; //用于接收输入的字符串来改变输入磁道private String sss=""; //用于接受输入的字符创来改变输入的磁头的开始磁道private int Style; //用于选择具体的调度算法private boolean animation; //用于调度算法播放动画private boolean isOK; //标志位,防止未选算法就点击播放动画出现无法关闭的bug private Timer timer; //用于设定一定时间间隔内重复执行某个消息private int point; //指向要画的数字下面private int countTime; //记录动画播放时间GridBagLayout gb1=new GridBagLayout(); //布局管理器GridBagConstraints gbc1=new GridBagConstraints(); //具体管理组件布局GridBagLayout gb2=new GridBagLayout(); //布局管理器GridBagConstraints gbc2=new GridBagConstraints();public static void main(String args[]) //主函数{(new Cipandiaodu()).frame(); //定义一个实例调用frame函数}private void initial() //初始化函数{for(int i=0;i<10;i++) //默认设置的磁道{if(i==0){a[i]=10;}else{a[i]=a[i-1]+10;}}for(int i=0;i<9;i++){bt[i]=new Button(s[i]); //设置按钮名bt[i].addActionListener(new ButtonListener()); //绑定监听器}for(int i=0;i<6;i++){pl1.add(bt[i]); //将按钮添加到容器内}pl1.add(bt[8]);jd1.setBounds(320, 180, 400, 100); //设置对话框大小jd1.setTitle("在此输入10个磁道数(以空格键隔开)"); //对话框名字Label l1=new Label("输入磁道数:");gb1.setConstraints(l1,gbc1); //将l1与gbc关联起来,gbc去管理l1的具体布局gbc1.weightx=1; // 设置权重gb1.setConstraints(tf1,gbc1);gbc1.weightx=2;jd1.setLayout(gb1);jd1.add(l1);jd1.add(tf1);jd1.add(bt[6]);jd2.setBounds(320, 180, 260, 100);jd2.setTitle("在此重新输入磁头所在磁道数");Label l2=new Label("输入磁头:");gb2.setConstraints(l2,gbc2);gbc2.weightx=1;gb2.setConstraints(tf2,gbc2);gbc2.weightx=2;jd2.setLayout(gb2);jd2.add(l2);jd2.add(tf2);jd2.add(bt[7]);pl3.setLayout(new GridLayout(1,3)); //gridlayout布局pl3.setVisible(false);pl1.setLayout(new GridLayout(7,1)); //设置按钮布局,6X1小格drawArea.setPreferredSize(new Dimension(430,280)); //设置画布大小,Dimension 类封装单个对象中组件的宽度和高度(精确到整数)。