文档库 最新最全的文档下载
当前位置:文档库 › 模拟电梯调度算法,实现对磁盘的驱动调度。

模拟电梯调度算法,实现对磁盘的驱动调度。

模拟电梯调度算法,实现对磁盘的驱动调度。
模拟电梯调度算法,实现对磁盘的驱动调度。

操作系统实验

(第三次)

一、实验内容

模拟电梯调度算法,实现对磁盘的驱动调度。

二、实验目的

磁盘是一种高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的辅

助存储器,担负着繁重的输入输出任务、在多道程序设计系统中,往往同时会有若干个要求访问磁盘的输入输出请求等待处理。系统可采用一种策略,尽可能按最佳次序执行要求访问磁盘的诸输入输出请求。这就叫驱动调度,使用的算法称为驱动调度算法。驱动调度能降低为若干个输入输出请求服务所需的总时间,从而提高系统效率。本实验要求学生模拟设计一个驱动调度程序,观察驱动调度程序的动态运行过程。通过实验使学生理解和掌握驱动调度的职能。

三、实验题目

模拟电梯调度算法,对磁盘进行移臂和旋转调度。

[提示]:

(1)磁盘是可供多个进程共享的存储设备,但一个磁盘每时刻只能为一个进程服务。

当有进程在访问某个磁盘时,其他想访问该磁盘的进程必须等待,直到磁盘一次工作结束。当有多个进程提出输入输出要求而处于等待状态时,可用电梯调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。选择访问者的工作由“驱动调度”进程来完成。

由于磁盘与处理器是可以并行工作的、所以当磁盘在作为一个进程服务时,占有处理

器的另一进程可以提出使用磁盘的要求,也就是说,系统能动态地接收新的输入输出请求。为了模拟这种情况,在本实验中设置了一个“接收请求”进程。

“驱动调度”进程和“接收请求”进程能否占有处理器运行,取决于磁盘的结束中断信

号和处理器调度策略。在实验中可用随机数来模拟确定这两个进程的运行顺序,以代替中断四、处理和处理器调度选择的过程。因而,程序的结构可参考图3—1

(2)“接收请求”进程建立一张“请求I/O”表,指出访问磁盘的进程要求访问的物理

地址,表的格式为:

假定某个磁盘组共有200 个柱面,由外向里顺序编号(0—199),每个柱面上有20 个

磁道,编号为0—19,每个磁道分成8 个物理记录,编号0—7。进程访问磁盘的物理地址

可以用键盘输入的方法模拟得到。图3—2 是“接收请求”进程的模拟算法。

在实际的系统中必须把等待访问磁盘的进程排入等待列队,由于本实验模拟驱动调

度,为简单起见,在实验中可免去队列管理部分,故设计程序时可不考虑“进程排入等待队列”的工作。

(3)“驱动调度”进程的功能是查“请求I/O”表,当有等待访问磁盘的进程时,按

电梯调度算法从中选择一个等待访问者,按该进程指定的磁盘物理地址启动磁盘为其服务。对移动臂磁盘来说,驱动调度分移臂调度和旋转调度。电梯调度算法的调度策略是与

移动臂的移动方向和移动臂的当前位子有关的,所以每次启动磁盘时都应登记移动臂方向和当前位子。电梯调度算法是一种简单而实用的驱动调度方法,这种调度策略总是优先选择与当前柱面号相同的访问请求,从这些请求中再选择一个能使旋转距离最短的等待访问者。如果没有与当前柱面号相同的访问请求,则根据移臂方向来选择,每次总是沿臂移动方向选择一个与当前柱面号最近的访问请求,若沿这个方向没有访问请求时,就改变臂的移动方向。这种调度策略能使移动臂的移动频率极小,从而提高系统效率。用电梯调度算法实现驱动调

度的模拟算法如图3-3。

(4)图3-1 中的初始化工作包括,初始化“请求I/O”表,置当前移臂方向为里移;

置当前位置为0 号柱面,0 号物理记录。程序运行前可假定“请求I/O”表中已经有如干个进程等待访问磁盘。

在模拟实验中,当选中一个进程可以访问磁盘时,并不实际地启动磁盘,而用显示:“请求I/O”表;当前移臂方向;当前柱面号,物理记录号来代替图3-3 中的“启动磁盘”这项工作。

(1)程序中使用的数据结构及其说明。

const int PCB=100; //定义100个进程

int pcbs_num=0; //记录当前io表的进程个数

typedef struct process //请求io表

{

char pname[10]; //进程名

int Cylinder; //柱面号

int Track; //磁道号

int Record; //物理记录号

int Way;

}PROCESS;

PROCESS pcbs[PCB];

PROCESS a; //记录当前位置(柱面号、物理记录号)采用带头节点的循环链表存(2)打印一份源程序并附上注释。

(3)#include

(4)#include

(5)#include

(6)#include

(7)#include

(8)usingnamespace std;

(9)constint PCB = 100; //定义100个进程

(10)int pcbs_num = 0; //记录当前io表的进程个数

(11)typedefstruct process//请求io表

(12){

(13)char pname[10]; //进程名

(14)int Cylinder; //柱面号

(15)int Track; //磁道号

(16)int Record; //物理记录号

(17)int Way;

(18)}PROCESS;

(19)PROCESS pcbs[PCB];

(20)PROCESS a;

(21)void init_a() //设置当前位置

(22){

(23) a.Cylinder = 4;

(24) a.Track = 0;

(25) a.Record = 0;

(26)}

(27)int count_PN() //记录进程总数

(28){

(29)int i;

(30)for (i = 0; pcbs[i].Cylinder != NULL; i++)

(31){

(32)}

(33)cout << i << endl;

(34)return i;

(35)}

(36)void accept() //接受请求模拟算法

(37){

(38)cout <<"输入进程名和物理地址(柱面号,磁道号,物理记录号)"<< endl;

(39)cin >> pcbs[pcbs_num].pname >> pcbs[pcbs_num].Cylinder >>

pcbs[pcbs_num].Track >> pcbs[pcbs_num].Record;

(40)pcbs_num++;

(41)}

(42)int Cylinder_e() //判断柱面号相等

(43){

(44)for (int i = 0; i

(45){

(46)if (pcbs[i].Cylinder == a.Cylinder)

(47)return i;

(48)}

(49)return 0;

(50)}

(51)int Cylinder_near(int cylinder, int record) ////选择当前柱面号的访问者中物理块号最近的

(52){

(53)int t = 8, a, k;

(54)for (int i = 0; i

(55){

(56)if (pcbs[i].Cylinder == cylinder)

(57){

(58) a = pcbs[i].Record - record;

(59)if (a<0){ a = a + 8; }

(60)if (a

(61){

(62)t = a; k = i;

(63)}

(64)}

(65)}

(66)return k;

(67)}

(68)int Cylinder_max(int cylinder) //选择比当前柱面号大的请求中柱面号最小的

(69){

(70)int num, t = 199, i, a = 0, b = 0;

(71)for (i = 0; i < pcbs_num; i++)

(72){

(73)if ((abs(pcbs[i].Cylinder - cylinder))cylinder) (74){

(75)t = abs(pcbs[i].Cylinder - cylinder);

(76)}

(77)} num = cylinder + t; //选择的柱面号

(78)t = 8; //物理块号最大相差7

(79)for (i = 0; i

(80){

(81)if (pcbs[i].Cylinder == num &&pcbs[i].Record < t)

(82){

(83)t = pcbs[i].Record; a = i;

(84)}

(85)}

(86)return a;

(87)}

(88)int Cylinder_max1(int cylinder)

(89){

(90)int t = 199, i, b = 0, c = 0;

(91)for (i = 0; i

(92){

(93)if ((abs(pcbs[i].Cylinder - cylinder))>b && pcbs[i].Cylinder >cylinder) (94){

(95) b = abs(pcbs[i].Cylinder - cylinder);

(96)}

(97)}

(98)return b;

(99)}

(100)int Cylinder_min(int cylinder) //选择比当前柱面号小的请求中柱面号最大的(101){

(102)int num, t = 199, i, a = 0; for (i = 0; i < pcbs_num; i++)

(103){

(104)if ((abs(pcbs[i].Cylinder - cylinder))

(106)t = abs(pcbs[i].Cylinder - cylinder);

(107)}

(108)}

(109)num = cylinder - t; t = 8; //物理块号相差最大为7

(110)for (i = 0; i < pcbs_num; i++)

(111){

(112)if (pcbs[i].Cylinder == num && pcbs[i].Record

(113){

(114)t = pcbs[i].Record; a = i;

(115)}

(116)}

(117)return a; //返回柱面号小的请求中柱面号最大的下标

(118)}

(119)void delete_scan(int x)

(120){

(121)for (int i = x; i

(122)pcbs[i] = pcbs[i + 1]; pcbs_num--;

(123)}

(124)void print_io() //打印请求io表

(125){

(126)cout <<"输出请求i/o表:"<< endl;

(127)cout <<"进程名"<<" 柱面号"<<" 磁道号"<<" 物理记录号"<< endl;

(128)for (int i = 0; i

(129){

(130)cout << setfill(' ') << setw(6) << pcbs[i].pname << setfill(' ') << setw(8) << pcbs[i].Cylinder << setfill(' ') << setw(8) << pcbs[i].Track << setfill(' ') << setw(10) << pcbs[i].Record << endl;

(131)}

(132)}

(133)void print_scan(bool x)

(134){

(135)cout <<"选中的:"<< endl; cout <<"进程名"<<" 柱面号"<<" 磁道号"<<" 物理记录号"<<" 方向"<< endl; cout << setfill(' ') << setw(6) << a.pname << setfill(' ') << setw(8) << a.Cylinder << setfill(' ') << setw(10) << a.Track << setfill(' ') << setw(10) << a.Record << setfill(' ') << setw(6) <

(136)}

(137)int SCAN() //驱动调度电梯调度模拟算法

(138){

(139)print_io(); //打印io表

(140)int scan;

(141)int scan1;//scan为选择的进程的编号

(142)bool way = 1; //方向 0=out 1=in

(143)if (a.Cylinder == NULL)

(144){

(145)init_a();

(146)}

(147)if (pcbs_num == 0)

(148){

(149)cout <<"无等待访问者"<< endl; return 0;

(150)}

(151)else

(152){

(153)if (pcbs[Cylinder_e()].Cylinder == a.Cylinder) //选择能使旋转距离最短的访问者

(154){

(155)scan = Cylinder_near(a.Cylinder, a.Record);//选择当前柱面号的访问者中最近的

(156)if (pcbs[scan].Cylinder

(157){

(158)way = 0;

(159)}

(160)else way = 1;

(161)}

(162)else

(163){

(164)if (way == 1)

(165){

(166)scan = Cylinder_max(a.Cylinder); //选择比当前柱面号大的请求中物理块号最小的

(167)scan1 = Cylinder_max1(a.Cylinder);

(168)if (scan == scan1)

(169){

(170)scan = Cylinder_min(a.Cylinder); //选择比当前柱面号小的请求中物理块号最大的

(171)way = 0;

(172)}

(173)}

(174)else

(175){

(176)scan = Cylinder_min(a.Cylinder);

(177)if (scan == 0)

(178){

(179)scan = Cylinder_max(a.Cylinder);

(180)way = 1;

(181)}

(182)}

(183)} a = pcbs[scan];

(184)delete_scan(scan); //删除pcbs[scan]

(185)print_scan(way); //打印

(186)return 1;

(187)}

(188)}

(189)void work()//初始化

(190){

(191)float n; char y = 'y'; while (y == 'y' || y == 'Y')

(192){

(193)cout <<"输入在[0,1]区间内的一个随机数"<< endl;

(194)cin >> n;

(195)if (n>0.5)

(196){

(197)SCAN(); //驱动调度

(198)}

(199)else

(200){

(201)accept(); //接受请求

(202)}

(203)cout <<"继续?(y/n)"<< endl;

(204)cin >> y;

(205)}

(206)}

(207)void main()

(208){

(209)work();

(210) }

(4)打印驱动调度进程每次选择访问请求前的“请求I/O”表以及每次选中的进程名、访问的柱面号、物理记录号和当前移臂方向(用up 代表里移,down 代表外移

作业6--磁盘驱动调度-答案

作业6磁盘驱动调度 1磁盘共有100各柱面,若干个等待访问磁盘者依次要访问的柱面为20 , 44, 40, 4, 80, 12, 76。假设每移动一个柱面需要3ms时间,移动臂当前位于36号柱面,试问对以下 几种磁盘请求调度算法而言,满足以上请求序列,磁头将分别如何移动?并计算为完成 上述各次访问总共花费的寻找时间。 ①先来先服务算法(FCFS)。 ②最短寻找时间优先算法(SSTF)。 ③扫描算法(SCAN)。 ④循环扫描算法(CSCAN)。 1.解 ①先来先服务算法,磁头移动示意图: 0 4 12 20 36 40 44 先来先服务算法磁头的移动顺序为:20,44,40,4,80,12,76。 花费的寻找时间为:(16+24+4+36+76+68+64)*3=864(ms) ②最短寻找时间优先算法,磁头移动示意图: 0 4 12 20 36 40 44 76 80 99 最短寻找时间优先算法磁头的移动顺序为:40,44,20,12,4,76,80 花费的寻找时间为:(4+4+24+8+8+72+4)*3=372 ( ms) 76 80 99

③扫描(电梯调度)算法,磁头移动示意图: 电梯调度算法磁头移动的顺序为:40, 44, 76, 80, 20, 12, 4 花费的寻找时间为:(44+76)*3=360(ms) ④循环扫描算法(CSCAN,磁头移动示意图: 循环扫描算法磁头移动的顺序为:40, 44, 76, 80, 4, 12, 20 花费的寻找时间为:(44+76+16)*3=408(ms) 【下载本文档,可以自由复制内容或自由编辑修改内容,更多精彩文章,期待你的好评和关注,我将一如既往为您服务】

群控电梯调度算法

一)、弄清群控电梯调度算法的评价指标 由于乘客心理等待时间的长短、电梯响应呼梯的快慢、召唤厅站客流量的大小、轿厢内乘客人数的多少等均是一些模糊的概念,很难用确切的数量关系定义,也难以用普通的逻辑规则综合描述。 近年来,人们借助于模糊数学中的隶属函数来表述,将复杂的模糊问题转化为简单清晰的形式进行求解和控制.模糊控制通过模糊逻辑进行推理,有效地对电梯运行状况作出判断,但对于非常复杂的多变量系统,要建立正确的模糊规则和隶属函数是非常困难的,而且通过大量实验建立的隶属函数和规则有时也很难保证十分精确与合理。此外,其隶属函数中的加权系数是确定的,不能根据客流改变而相应改变。 为了解决模糊控制中存在的某些问题,新发明将神经网络控制方法应用于电梯控制中,无需建立精确数学模型,可以提供准确的控制策略,以减少候梯时间,降低乘客的焦急等待心理,节约能源,合理有效地调度电梯最佳运行。 (二)、理解上行高峰模式、下行高峰模式、双路运行模式等概念,并找出根据一系列输入手段间接算出运行模式的算法: 上行高峰交通模式:当主要的客流是上行方向,即全部或者大多数乘客从建筑物的门厅进入电梯且上行,这种状况被定义为上行高峰交通状况。 下行高峰交通模式:当主要的客流是下行方向,即全部或者大多数乘客乘电梯下行到门厅离开电梯,这种状况被定义为下行高峰交通状况。 二路交通模式:当主要的客流是朝着某一层或从某一层而来,而该层不是门厅,这种状况被定义为二路交通状况。二路交通状况多是由于在大楼的某一层设有茶点部或会议室,在一天的某一时刻该层吸引了相当多的到达和离开呼梯信号。所以二路交通状况发生在上午和下午休息期间或会议期间。 四路交通模式:当主要的客流是朝着某两个特定的楼层而来,而其中的一个楼层可能是门厅,这种交通状况被定义为四路交通状况。当中午休息期间,会出现客流上行和下行两个方向的高峰状况。午饭时客流主要是下行,朝门厅和餐厅。午休快结束时,主要是从门厅和餐厅上行。所以四路交通多发生在午休期间。四路交通又可分为午饭前交通和午饭后交通模式。此两类交通模式和早晨与晚上发生的上行、下行高峰不同,虽然主要客流都为上行和下行模式,但此两类交通模式同时还有相当比例的层间交通和相反方向的交通。各交通量的比例还与午休时间的长短,餐厅的位置和大楼的使用情况有关。四路交通时不但要考虑主要交通客流,还要考虑其他客流,与单纯的上、下行高峰期不同。 平衡的层间交通模式:当上行和下行乘客数量大致相同,并且各层之间的交通需求基本平衡时,此时的交通模式是处于一种普通的双向层间交通状况,它存在于一天中的大部分时间,乘客通常要求最小的候梯时间和乘梯时间。 空闲交通模式:空闲交通模式通常发生在假日、深夜、黎明等情况下,此时大楼的客流稀少、乘客的到达间隔很长,在这种状况下群控系统中仅仅有部分电梯进行工作,而其余电梯轿厢则空闲等候。 基于神经网络的交通模式识别 基于统计规律的交通模式识别 (三)、不同的运行模式各自适用什么样的调度算法? 1、基于专家系统的电梯群控调度算法[8] 电梯群控系统是一个具有大量不确定和不完整信息的复杂的非线性系统。这样一个复杂的系

操作系统实验报告—磁盘调度算法

操作系统实验报告实验3 磁盘调度算法 报告日期:2016-6-17 姓名: 学号: 班级: 任课教师:

实验3 磁盘调度算法 一、实验内容 模拟电梯调度算法,实现对磁盘的驱动调度。 二、实验目的 磁盘是一种高速、大量旋转型、可直接存取的存储设备。它作为计算机系统的辅助存储器,负担着繁重的输入输出任务,在多道程序设计系统中,往往同时会有若干个要求访问磁盘的输入输出请示等待处理。系统可采用一种策略,尽可能按最佳次序执行要求访问磁盘的诸输入输出请求,这就叫驱动调度,使用的算法称驱动调度算法。驱动调度能降低为若干个输入输出请求服务所须的总时间,从而提高系统效率。本实验要求学生模拟设计一个驱动调度程序,观察驱动调度程序的动态运行过程。 三、实验原理 模拟电梯调度算法,对磁盘调度。 磁盘是要供多个进程共享的存储设备,但一个磁盘每个时刻只能为一个进程服务。当有进程在访问某个磁盘时,其他想访问该磁盘的进程必须等待,直到磁盘一次工作结束。当有多个进程提出输入输出请求处于等待状态,可用电梯调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。当存取臂仅需移到一个方向最远的所请求的柱面后,如果没有访问请求了,存取臂就改变方向。 假设磁盘有200个磁道,用C语言随机函数随机生成一个磁道请求序列(不少于15个)放入模拟的磁盘请求队列中,假定当前磁头在100号磁道上,并向磁道号增加的方向上移动。请给出按电梯调度算法进行磁盘调度时满足请求的次序,并计算出它们的平均寻道长度。 四、实验过程 1.画出算法流程图。

2.源代码 #include #include #include int *Init(int arr[]) { int i = 0; srand((unsigned int)time(0)); for (i = 0; i < 15; i++) { arr[i] = rand() % 200 + 1; printf("%d ", arr[i]); } printf("\n"); return arr; } void two_part(int arr[]) { int i = 0; int j = 0;

操作系统磁盘调度SCAN算法

#include #include #include #include typedefstruct_proc { char name[100]; /*定义进程名称*/ int team; /*定义柱面号*/ int ci; /*定义磁道面号*/ int rec; /*定义记录号*/ struct_proc *prior; struct_proc *next; }PRO; PRO *g_head = NULL, *g_curr = NULL, *local; int record = 0; //初始柱面号 int yi = 1; //初始方向 int rec0 = 0; //初始记录号 void init() { PRO *p; /*初始化链表(初始I/O表)*/ g_head = (PRO*)malloc(sizeof(PRO)); g_head->next = NULL; g_head->prior = NULL; p = (PRO*)malloc(sizeof(PRO)); strcpy_s(p->name, "P1"); p->team = 100; p->ci = 10; p->rec = 1; p->next = NULL; p->prior = g_head; g_head->next = p; g_curr = g_head->next; p = (PRO*)malloc(sizeof(PRO)); strcpy_s(p->name, "P2"); p->team = 50; p->ci = 10; p->rec = 5; p->next = NULL; p->prior = g_curr;

电梯调度算法

课程设计报告 电梯调度算法 学院医药信息工程学院 专业 年级 2008 学生姓名 学号 指导教师 2011-7-12 电梯调度算法设计报告

一.LOOK(查找)调度(电梯)电梯算法,操作系统学术名为SCAN算法。磁臂仅移动到请求的最外道就回转。反方向查找服务。 1.问题描述: 说明:电梯调度算法的基本原则就是如果在电梯运行方向上有人要使用电梯则继续往那个方向运动,如果电梯中的人还没有到达目的地则继续向原方向运动。具体而言,如果电梯现在朝上运动, *如果当前楼层的上方和下方都有请求,则先响应所有上方的请求,然后才向下响应下方的请求;如果电梯向下运动,则刚好相反。 *设计要求:模拟多人在不同楼层同时要求到各自目的地时电梯的响应顺序,要求使用C语言编程,定义合适的数据结构。最后,需要说明设计思想,同时给出能够运行的源程序,并给出对应的程序流程图。 * 设计提示:可以用一个结构体表示乘电梯的人,其中内容包括人的姓名、起始楼层、目的楼层;建立一个结构体的数组模拟当前所有需要乘电梯的人。把这个结构体数组作为程序的输入,*通过对数组中每个人的起始楼层和目的楼层进行分析,确定每个人进出电梯的顺序,并打印输出。 2.算法设计: 本程序用java语言、eclipse平台编写。 (1)算法思想:本算法只设计了一辆电梯,通过往返寻找方法,即先查询电梯运行方向的楼层是否存在有其他键被按下,有就继续往该方向运行,如果没有就查询电梯运行反方向的楼层是否有按键被按下,如果有电梯就改变方向,反方向运行。如果没有电梯就停止在该楼层,30秒后如果没有任何键被按下,电梯就自动返回1楼驻停。同时,电梯乘客所去的楼层方向与电梯当前方向一致的话,则电梯优先搭载该乘客。随后再搭载去反方向的乘客。实现电梯的升降操作。 二.1.总程序流程图如下

模拟电梯调度算法,实现对磁盘的驱动调度。

操作系统实验 (第三次) 一、实验内容 模拟电梯调度算法,实现对磁盘的驱动调度。 二、实验目的

磁盘是一种高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的辅 助存储器,担负着繁重的输入输出任务、在多道程序设计系统中,往往同时会有若干个要求访问磁盘的输入输出请求等待处理。系统可采用一种策略,尽可能按最佳次序执行要求访问磁盘的诸输入输出请求。这就叫驱动调度,使用的算法称为驱动调度算法。驱动调度能降低为若干个输入输出请求服务所需的总时间,从而提高系统效率。本实验要求学生模拟设计一个驱动调度程序,观察驱动调度程序的动态运行过程。通过实验使学生理解和掌握驱动调度的职能。 三、实验题目 模拟电梯调度算法,对磁盘进行移臂和旋转调度。 [提示]: (1)磁盘是可供多个进程共享的存储设备,但一个磁盘每时刻只能为一个进程服务。 当有进程在访问某个磁盘时,其他想访问该磁盘的进程必须等待,直到磁盘一次工作结束。当有多个进程提出输入输出要求而处于等待状态时,可用电梯调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。选择访问者的工作由“驱动调度”进程来完成。 由于磁盘与处理器是可以并行工作的、所以当磁盘在作为一个进程服务时,占有处理 器的另一进程可以提出使用磁盘的要求,也就是说,系统能动态地接收新的输入输出请求。为了模拟这种情况,在本实验中设置了一个“接收请求”进程。 “驱动调度”进程和“接收请求”进程能否占有处理器运行,取决于磁盘的结束中断信 号和处理器调度策略。在实验中可用随机数来模拟确定这两个进程的运行顺序,以代替中断四、处理和处理器调度选择的过程。因而,程序的结构可参考图3—1

天津理工大学 操作系统实验3:磁盘调度算法地实现

实验报告学院(系)名称:计算机与通信工程学院

【实验过程记录(源程序、测试用例、测试结果及心得体会等)】 #include #include #include using namespace std; const int MaxNumber=100; int TrackOrder[MaxNumber]; int MoveDistance[MaxNumber]; //----移动距离; int FindOrder[MaxNumber]; //-----寻好序列。 double AverageDistance; //-----平均寻道长度 bool direction; //-----方向 true时为向外,false为向里 int BeginNum; //----开始磁道号。 int M; //----磁道数。 int N; //-----提出磁盘I/O申请的进程数 int SortOrder[MaxNumber]; //----排序后的序列 bool Finished[MaxNumber]; void Inith() { cout<<"请输入磁道数:"; cin>>M; cout<<"请输入提出磁盘I/O申请的进程数:"; cin>>N; cout<<"请依次输入要访问的磁道号:"; for(int i=0;i>TrackOrder[i]; for(int j=0;j>BeginNum; for(int k=0;k=0;i--) for(int j=0;jSortOrder[j+1])

磁盘移臂调度过程模拟设计-电梯算法最短寻道时间优先

学号: 课程设计 题目 磁盘移臂调度过程模拟设计 --电梯算法、最短寻道时间优先算法 学院计算机科学与技术学院专业 班级 姓名 指导教师吴利军

2013 年 1 月15 日 课程设计任务书 学生姓名: 指导教师:吴利军工作单位:计算机科学与技术学院 题目: 磁盘移臂调度过程模拟设计——电梯算法、最短寻道时间优先算法初始条件: 1.预备内容:阅读操作系统的文件管理章节内容,理解有关文件组织形式、存储设备的概念。 2.实践准备:掌握一种计算机高级语言的使用。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.编程序模拟磁盘调度的过程,采用指定算法,模拟并输出存取臂的移动顺序,并计算存取臂移动的磁道总数。能够处理以下的情形: ⑴可根据需要输入当前磁头的位置,磁头移动方向; ⑵能够输入柱面数,磁道访问序列等参数,并能够显示调度结果(磁盘访问请求的磁道号 以及磁头移动的总磁道数)。 2.设计报告内容应说明: ⑴课程设计目的与功能; ⑵需求分析,数据结构或模块说明(功能与框图);

⑶源程序的主要部分; ⑷测试用例,运行结果与运行情况分析; ⑸自我评价与总结: i)你认为你完成的设计哪些地方做得比较好或比较出色; ii)什么地方做得不太好,以后如何改正; iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训); iv)完成本题是否有其他的其他方法(如果有,简要说明该方法); v)对实验题的评价和改进意见,请你推荐设计题目。 时间安排: 设计安排一周:周1、周2:完成程序分析及设计。 周2、周3:完成程序调试及测试。 周4、周5:验收,撰写课程设计报告。 (注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记) 指导教师签名:年月日 系主任(或责任教师)签名:年月日 磁盘移臂调度过程模拟设计 ——电梯算法、最短寻道时间优先算法1 课程设计目的与功能

操作系统驱动调度

实验三驱动调度 一、实验容 模拟电梯调度算法,实现对磁盘的驱动调度。 二、实验目的 磁盘是一种高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的辅助存储器,担负着繁重的输入输出任务、在多道程序设计系统中,往往同时会有若干个要求访问磁盘的输入输出请求等待处理。系统可采用一种策略,尽可能按最佳次序执行要求访问磁盘的诸输入输出请求。这就叫驱动调度,使用的算法称为驱动调度算法。驱动调度能降低为若干个输入输出请求服务所需的总时间,从而提高系统效率。本实验要求学生模拟设计一个驱动调度程序,观察驱动调度程序的动态运行过程。通过实验使学生理解和掌握驱动调度的职能。 三、数据结构 #define M 20 typedef struct PCB { char proc[M];//进程名 int cylinder_num;//柱面号 int track_num;//磁道号

int phy_num;//物理记录号 struct PCB *next; }PCB; 四、实验题目 模拟电梯调度算法,对磁盘进行移臂和旋转调度。 (1)磁盘是可供多个进程共享的存储设备,但一个磁盘每时刻只能为一个进程服务。当有进程在访问某个磁盘时,其他想访问该磁盘的进程必须等待,直到磁盘一次工作结束。当有多个进程提出输入输出要求而处于等待状态时,可用电梯调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。选择访问者的工作由“驱动调度”进程来完成。 由于磁盘与处理器是可以并行工作的、所以当磁盘在作为一个进程服务时,占有处理器的另一进程可以提出使用磁盘的要求,也就是说,系统能动态地接收新的输入输出请求。为了模拟这种情况,在本实验中设置了一个“接收请求”进程。 “驱动调度”进程和“接收请求”进程能否占有处理器运行,取决于磁盘的结束中断信号和处理器调度策略。在实验中可用随机数来模拟确定这两个进程的运行顺序,以代替中断处理和处理器调度选择的过程。因而,程序的结构可参考图3—1 (2)“接收请求”进程建立一“请求I/O”表,指出访问磁盘的进程要求访问的物理地址,表的格式为:

实验三___驱动调度

实验三驱动调度 一、实验内容 模拟电梯调度算法,实现对磁盘的驱动调度。 二、实验目的 磁盘是一种高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的辅助存储器,担负着繁重的输入输出任务、在多道程序设计系统中,往往同时会有若干个要求访问磁盘的输入输出请求等待处理。系统可采用一种策略,尽可能按最佳次序执行要求访问磁盘的诸输入输出请求。这就叫驱动调度,使用的算法称为驱动调度算法。驱动调度能降低为若干个输入输出请求服务所需的总时间,从而提高系统效率。本实验要求学生模拟设计一个驱动调度程序,观察驱动调度程序的动态运行过程。通过实验使学生理解和掌握驱动调度的职能。 三、实验题目 模拟电梯调度算法,对磁盘进行移臂和旋转调度。 [提示]: (1)磁盘是可供多个进程共享的存储设备,但一个磁盘每时刻只能为一个进程服务。当有进程在访问某个磁盘时,其他想访问该磁盘的进程必须等待,直到磁盘一次工作结束。当有多个进程提出输入输出要求而处于等待状态时,可用电梯调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。选择访问者的工作由“驱动调度”进程来完成。 由于磁盘与处理器是可以并行工作的、所以当磁盘在作为一个进程服务时,占有处理器的另一进程可以提出使用磁盘的要求,也就是说,系统能动态地接收新的输入输出请求。为了模拟这种情况,在本实验中设置了一个“接收请求”进程。 “驱动调度”进程和“接收请求”进程能否占有处理器运行,取决于磁盘的结束中断信号和处理器调度策略。在实验中可用随机数来模拟确定这两个进程的运行顺序,以代替中断处理和处理器调度选择的过程。因而,程序的结构可参考图3—1

(2)“接收请求”进程建立一张“请求I/O”表,指出访问磁盘的进程要求访问的物理地址,表的格式为: 假定某个磁盘组共有200个柱面,由外向里顺序编号(0—199),每个柱面上有20个磁道,编号为0—19,每个磁道分成8个物理记录,编号0—7。进程访问磁盘的物理地址可以用键盘输入的方法模拟得到。图3—2是“接收请求”进程的模拟算法。

磁盘调度算法的模拟实现

磁盘调度算法的模拟实现 学院 专业 学号 学生姓名 指导教师姓名 2014年3月19日 目录

一、课设简介 (2) 1.1 课程设计题目 (2) 1.2 课程设计目的 (2) 1.3 课程设计要求 (2) 二、设计内容 (3) 2.1功能实现 (3) 2.2流程图 (3) 2.3具体内容 (3) 三、测试数据 (4) 3.3 测试用例及运行结果 (4) 四、源代码 (5) 五、总结 (12) 5.1 总结............................................ 一、课设简介 1.1课程设计题目

磁盘调度算法的模拟实现1 1.2程序设计目的 操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。 1)进一步巩固和复习操作系统的基础知识。 2)培养学生结构化程序、模块化程序设计的方法和能力。 3)提高学生调试程序的技巧和软件设计的能力。 4)提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。 1.3 设计要求 1)磁头初始磁道号,序列长度,磁道号序列等数据可从键盘输入,也可从文件读入。 2)最好能实现磁道号序列中磁道号的动态增加。 3)磁道访问序列以链表的形式存储 4)给出各磁盘调度算法的调度顺序和平均寻道长度 二、设计内容 2.1 功能实现 设计并实现一个本别利用下列磁盘调度算法进行磁盘调度的模拟

程序。 1) 先来先服务算法FCFS 2) 最短寻道时间优先算法 SSTF 2.2流程图 2.3具体内容 1)先来先服务算法FCFS 这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘 的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请 求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情 况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情开始 选择算法 F C F S S S T F 结束

操作系统课程设计--模拟实现磁盘的调度

课 程 设 计设计题目:模拟实现磁盘的调度

一、课题设计目的 a、观察、体会操作系统的磁盘调度方法,并通过一个简单的磁盘调度模拟程序的实现,加深对磁盘调度的理解。 b、提高实际动手编程能力,为日后从事软件开发工作打下坚实基础。 c、通过对磁盘调度算法的设计,深入理解提高磁盘访问速度的原理。 二、课题实现环境 VC++6.0 MFC 三、课题设计思路 算法描述: 1.服务算法(FCFS) 先来先服务(FCFS)调度:按先来后到次序服务,未作优化。 最简单的移臂调度算法是“先来先服务”调度算法,这个算法实际上不考虑访问者要求访问的物理位置,而只是考虑访问者提出访问请求的先后次序。例如,如果现在读写磁头正在50号柱面上执行输出操作,而等待访问者依次要访问的柱面为130、199、32、159、15、148、61、99,那么,当50号柱面上的操作结束后,移动臂将按请求的先后次序先移到130号柱面,最后到达99号柱面。 采用先来先服务算法决定等待访问者执行输入输出操作的次序时,移动臂来回地移动。先来先服务算法花费的寻找时间较长,所以执行输入输出操作的总时间也很长。 2.算法(SCAN) SCAN 算法又称电梯调度算法。SCAN算法是磁头前进方向上的最短查找时间优先算法,它排除了磁头在盘面局部位置上的往复移动,SCAN算法在很大程度上消除了SSTF算法的不公平性,但仍有利于对中间磁道的请求。 “电梯调度”算法是从移动臂当前位置开始沿着臂的移动方向去选择离当前移动臂最近的那个柱访问者,如果沿臂的移动方向无请求访问时,就改变臂的移动方向再选择。这好比乘电梯,如果电梯已向上运动到4层时,依次有3位乘客陈生、伍生、张生在等候乘电梯。他们的要求是:陈生在2层等待去10层;伍生在5层等待去底层;张生在8层等待15层。由于电梯目前运动方向是向上,所以电梯的形成是先把乘客张生从8层带到15层,然后电梯换成下行方向,把乘客伍生从5层带到底层,电梯最后再调换方向,把乘客陈生从2层送到10层。 我们仍用前述的同一例子来讨论采用“电梯调度”算法的情况。由于磁盘移动臂的初始方向有两个,而该算法是与移动臂方向有关,所以分成两种情况来讨论。 〈1〉.移动臂由里向外移动 开始时,,在50号柱面执行操作的读写磁头的移动臂方向是由里向外,趋向32号柱面的位置,因此,当访问50号柱面的操作结束后,沿臂移动方向最近的柱面是32号柱面。所以应先为32号柱面的访问者服务,然后是为15号柱面的访问者服务。之后,由于在向外移方向已无访问等待者,故改变移动臂的方向,由外向里依次为各访问者服务。在这种情况下为等待访问者服务的次序是61、99、130、148、159、199。

模拟磁盘调度算法,操作系统课程设计

某某大学 课程设计报告课程名称:操作系统 设计题目:模拟磁盘调度算法 系别:计算机系 专业:计算机科学与技术 组别: 学生姓名: 学号: 起止日期: 指导教师:

目录 第一章需求分析 (1) 1.1课程设计的简介 (1) 1.2课程设计的目的 (1) 1.3磁盘调度主要思想 (1) 1.4课程设计内容 (2) 第二章概要设计 (3) 2.1设计思想 (3) 2.2 数据结构 (3) 2.3模块调用关系图 (3) 2.4子模块程序流程图 (5) 第三章详细设计 (6) 3.1模块划分 (6) 第四章代码测试 (9) 4.1先来先服务 (9) 4.1最短寻道时间优先 (11) 4.1扫描算法 (12) 第五章心得体会 (13) 第六章致谢 (13) 参考文献 (1) 附源代码 (2)

第一章需求分析 1.1课程设计的简介 这是一个用VC++6.0为工具、C++为编程语言而实现模拟先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)的一个磁盘调度程序。该程序设计系统主界面可以灵活选择某种算法并算出磁头移动的总磁道数以及平均磁道数。 1.2课程设计的目的 本课程设计的目的是通过设计一个磁盘调度模拟系统,从而使磁盘调度算法更加形象化,容易使人理解,使磁盘调度的特点更简单明了,能使使用者加深对先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)等磁盘调度算法的理解。 1.3磁盘调度主要思想 设备的动态分配算法与进程调度相似,也是基于一定的分配策略的。常用的分配策略有先请求先分配、优先级高者先分配等策略。在多道程序系统中,低效率通常是由于磁盘类旋转设备使用不当造成的。操作系统中,对磁盘的访问要求来自多方面,常常需要排队。这时,对众多的访问要求按一定的次序响应,会直接影响磁盘的工作效率,进而影响系统的性能。访问磁盘的时间因子由3部分构成,它们是查找(查找磁道)时间、等待(旋转等待扇区)时间和数据传输时间,其中查找时间是决定因素。因此,磁盘调度算法先考虑优化查找策略,需要时再优化旋转等待策略。 平均寻道长度(L)为所有磁道所需移动距离之和除以总的所需访问的磁道数(N),即: L=(M1+M2+……+Mi+……+MN)/N。其中Mi为所需访问的磁道号所需移动的磁道数。 启动磁盘执行输入输出操作时,要把移动臂移动到指定的柱面,再等待指定扇区的旋转到磁头位置下,然后让指定的磁头进行读写,完成信息传送。因此,执行一次输入输出所花的时间有:

电梯调度算法

江西师范大学计算机信息工程学院学生实验报告 专业_ 计算机科学与技术姓名___马化梁学号____1308092042 日期__2015.6.5_ 课程名称操作系统实验室名称X4313 实验名称设备管理-电梯调度算法 指导教师朱明华成绩 1、实验目的 本实验要求学生设计一个电梯调度算法来模拟实现磁盘移臂调度过程。 2、实验原理和内容 任何一个对磁盘的访问请求,应给出访问磁盘的存储空间地址:柱面号、磁头号和扇区号。在启动磁盘执行I/O操作时,应先把移动臂移动到指定的柱面,再等待指定的扇区旋转到磁头位置下,最后让指定的磁头进行读/写,完成信息传送。移臂调度是根据访问者指定的柱面位置来决定执行次序的调度。 3、实验步骤 (1)弄清实验要求及目的; (2)想清思路; (3)设计代码; (4)实现代码。

4、程序及运行结果(或实验数据记录及分析) #include #include #include #include #include using namespace std; const int maxn=1024; int N,a[maxn]; int main() { int flag=1,m; while(flag) { cout<<"电梯调度算法"<>N; cout<<"请输入相应的柱面号"<>a[i]; sort(a,a+N); cout<<"请输入执行I/O操作的起始位置(柱面号)"<>x; for(int i=0;i>y; if(y==1) { for(int i=m+1;i

实验四 磁盘驱动调度算法的模拟

实验四磁盘驱动调度算法的模拟 一.实验内容: 熟悉磁盘的结构以及磁盘的驱动调度算法的模拟,编程实现简单常用的磁盘驱动调度算法:先来先服务(FIFO)、电梯调度算法、最短寻道时间优先算法、扫描(双向扫描)算法、循环扫描算法等。 编程语言建议采用c/c++或Java。模拟程序鼓励采用随机数技术、动态空间分配技术,有条件的最好能用图形界面展现甚至用动画模拟。 实验性质:验证型。 二.实验目的和要求 1)掌握使用一门语言进行磁盘驱动调度算法的模拟; 2)编写程序将磁盘驱动调度算法的过程和结果能以较简明直观的方式展现出来。 三.实验原理、方法和步骤 1. 实验原理 磁盘驱动调度对磁盘的效率有重要影响。磁盘驱动调度算法的好坏直接影响辅助存储器的效率,从而影响计算机系统的整体效率。 常用的磁盘驱动调度算法有: 最简单的磁盘驱动调度算法是先入先出(FIFO)法。这种算法的实质是,总是严格按时间顺序对磁盘请求予以处理。算法实现简单、易于理解并且相对公平,不会发生进程饿死现象。但该算法可能会移动的柱面数较多并且会经常更换移动方向,效率有待提高。 最短寻道时间优先算法:总是优先处理最靠近的请求。该算法移动的柱面距离较小,但可能会经常改变移动方向,并且可能会发生进程饥饿现象。 电梯调度:总是将一个方向上的请求全部处理完后,才改变方向继续处理其他请求。 扫描(双向扫描):总是从最外向最里进行扫描,然后在从最里向最外扫描。该算法与电梯调度算法的区别是电梯调度在没有最外或最里的请求时不会移动到最外或最里柱面,二是扫描算法总是移到最外、最里柱面。 循环扫描(单向扫描):从最外向最里进行柱面请求处理,到最里柱面后,直接跳到最外柱面然后继续向里进行处理。

磁盘调度算法-电脑资料.

磁盘调度算法 -电脑资料 2019-01-01 磁盘优点 容量很大每位的价格非常低当关掉电源后存储信息不丢失 物理特性 磁盘表面覆盖着磁性物质,信息记录在磁表面上, 。固定头磁盘的每个磁道单独有一个磁头,这样就能使得计算机可以很快地从一个磁道转换到另一个磁道。但是这需要大量的头,设备成本很高。更通用的方式是每个盘面只有一个头,让它从一道移向另一道。这种动头设备需要硬件设备移动头。 磁盘一般用于文件存储,设计原则是:成本低、容量大、速度高。扩大存储容量:a.增加每英寸磁道数目; b. 双面记录。 存取盘块中的信息一般要有三部分时间:系统首先要把磁头移到相应的道上或柱面上,这个时间叫做寻道时间;一旦磁头到达指定磁道,必须等待所需要的扇区转到读/写头下,这个延迟时间叫做旋转延迟时间;最后,信息实际在磁盘和内存之间进行传送也要花费时间,这部分时间叫做传送时间。一次磁盘服务的总时间就是这三者之和。 要使磁盘服务尽可能地快,操作系统要提供合适的调度算法,改善磁盘服务的平均时间。 进程需要和磁盘交换信息时必须要操作系统发出系统调用,对磁盘的请求一般要有下述几部分内容: 1. 输入和输出; 2. 磁盘地址(驱动器、柱面、面号、扇区); 3. 内存地址; 4. 传送长度。 磁盘调度算法

1、先来先服务调度(FCFS) FCFS 算法是优先为最先到达的请求服务。例如,有如下请求磁盘服务队列,要访问的磁道数分别是: 98,183,37,122,14,124,65,67 排在前面的是先到达的请求,假设磁头目前停留在53磁道上,按照先来先服务的算法,接下来磁头的移动顺序依次是: 53—>98—>183—>37—>122—>14—>124—>65—>67 这个过程总共移动了(98-53)+(183-98)+(183-37)+(122-37)+(122-14)+(124-14)+(124-65)+(67-65)=640个磁道 这种调度法产生的磁头移动服务太大,磁头频繁的大幅度移动,容易产生机械振动和误差,对使用寿命有损害。所以,要设计好的算法来减少磁头移动幅度,减少服务时间,改善磁盘的吞吐量。 2、最短寻道时间优先法(SSTF) ??优先服务接近于磁头当前位置的请求。SSTF从本质上将是SJF(最短作业优先算法)调度的形式。使用SSTF调度算法,上面那个请求队列的执行顺序是: ??53—>65—>67—>37—>14—>98—>122—>124—>183 总共移动了236个磁道,比FCFS的三分之一多一点,明显改善了磁盘服务, 《》()。 ??但是这种算法并不是最优的。例如,若把磁头从53道移动到37道(尽管不是靠的最近的),然后移动到14,接下去是65,67,98,122,124,183,总共移动了208个磁道<236。 ??SSTF也可能导致某些请求长期得不到服务(即“饥饿”问题)。如果当前磁头附近总会不断的到来新的请求,那么距离磁头远的请求将会一直等待下去。 3、扫描法(SCAN) 由于请求服务的队列具有动态性质,总会有新的请求到达,因此可采用扫描算法。读/写磁头从磁盘的一端出发,向另一端移动,遇到所需的磁道时就

应用实例电梯调度模拟器

UML程序设计实例 —电梯调度模拟器— 本章通过电梯调度模拟器的例子详细介绍了如何利用UML进行一个实际系统的开发。这个系统的实现过程,遵循Rational统一软件开发过程,最后用Vc++编码实现。 问题描述 在开发任何一个系统之前,开发人员对所要开发的系统的初步理解首先是从用户的问题描述开始的。问题描述的内容包括系统的基本功能需求,用户对系统的性能,外观等特性的要求。这种描述根据开发项目的规模不同,呈现不同的形式。对于大的项目,问题描述可能是长达几页(几十页)的需求规格说明;对于小的项目,可能只是口头上的几句陈述。通过问题描述,开发人员对要开发的系统产生一个大概的印象。 此实例的问题描述如下: 有一座8层楼房,每层提供一组按钮(“上”或“下”),用于请求电梯的到达;每部电梯内部提供一个控制面板,提供用户对目标楼层的选择,并显示电梯当前所处楼层、运行方向。两部电梯由一个调度器统一调度。如果没有请求,并超过一定时限,电梯回到一楼。希望开发人员能实现一个电梯调度模拟器来模拟如上所述的一切,对电梯的调度准则没有做特别要求。 此外,用户还可能会对系统的性能,外观等特性提出要求,这些都需要在开发过程中加以考虑。 需求分析 拟订侯选需求 在系统开发启动之前,首先要对项目做一些可行性分析。在Rational统一软件开发过程中,称这个阶段为初始阶段。 在初始阶段主要是跟各方进行交流,广泛收集信息,听取客户和专家的建议。并对这些信息和建议进行记录,整理得到一个后选需求列表。 后选需求列表中应包括如下各项 1.名称 2.简要说明 3.状态(建议的、批准的、并入的或证实的) 4.实现成本估算(人小时,人月) 5.优先级(关键的、重要的或辅助的) 6.实现风险的级别(关键的、重要的或一般的) 表1 后选需求列表

操作系统实验 磁盘调度算法

操作系统 实验报告 哈尔滨工程大学 计算机科学与技术学院

第六讲磁盘调度算法 一、实验概述 1. 实验名称 磁盘调度算法 2. 实验目的 (1)通过学习EOS 实现磁盘调度算法的机制,掌握磁盘调度算法执行的条件和时机; (2)观察 EOS 实现的FCFS、SSTF和 SCAN磁盘调度算法,了解常用的磁盘调度算法; (3)编写 CSCAN和 N-Step-SCAN磁盘调度算法,加深对各种扫描算法的理解。 3. 实验类型 验证性+设计性实验 4. 实验内容 (1)验证先来先服务(FCFS)磁盘调度算法; (2)验证最短寻道时间优先(SSTF)磁盘调度算法; (3)验证SSTF算法造成的线程“饥饿”现象; (4)验证扫描(SCAN)磁盘调度算法; (5)改写SCAN算法。 二、实验环境 在OS Lab实验环境的基础上,利用EOS操作系统,由汇编语言及C语言编写代码,对需要的项目进行生成、调试、查看和修改,并通过EOS应用程序使内核从源代码变为可以在虚拟机上使用。 三、实验过程 1. 设计思路和流程图 (1)改写SCAN算法 在已有 SCAN 算法源代码的基础上进行改写,要求不再使用双重循环,而是只遍历一次请求队列中的请求,就可以选中下一个要处理的请求。算法流程图如下图所示。 图 3.1.1 SCAN算法IopDiskSchedule函数流程图(2)编写循环扫描(CSCAN)磁盘调度算法 在已经完成的SCAN算法源代码的基础上进行改写,不再使用全局变量ScanInside 确定磁头移动的方向,而是规定磁头只能从外向内移动。当磁头移动到最内的被访问磁道时,磁头立即移动到最外的被访问磁道,即将最大磁道号紧接着最小磁道号构成循环,进行扫描。算法流程图如下图所示。

磁盘调度算法操作系统的任务之一就是有效地使用硬件对磁盘

8.2 磁盘调度算法 操作系统的任务之一就是有效地使用硬件。对磁盘驱动器来说,满足这一要求意味着要有较快的访问速度和较宽的磁盘带宽。访问时间包括两个主要部分是寻道时间和旋转延迟。寻道时间是磁臂将磁头移动到包含目标扇区的柱面的时间。旋转延迟是磁盘需要将目标扇区转动到磁头下的时间。磁盘带宽是所传递的总的字节数除以从服务请求开始到最后传递结束时的总时间。可以通过使用适当的访问顺序来调度磁盘I/O 请求,提高访问速度和带宽。 每当一个进程需要对磁盘进行I/O 操作,它就向操作系统发出一个系统调用。该调用请求指定了一些信息: ?操作是输入还是输出? ?所传输的磁盘地址是什么? ?所传输的内存地址是什么? ?所传输的扇区数是多少? 如果所需的磁盘驱动器和控制器空闲,那么该请求会马上处理。如果磁盘驱动器或控制器忙,那么任何新的服务请求都会加到该磁盘驱动器的待处理请求队列上。对于一个有多个进程的多道程序设计系统,磁盘队列可能有多个待处理请求。因此,当完成一个请求时,操作系统可以选择处理哪个待处理请求。那么操作系统该如何选择呢?有多个磁盘调度算法可供使用,接下来将会加以讨论 磁盘调度算法用以改善磁盘的平均寻道时间。典型算法有FCFS算法、最短寻道时间优 先算法SSTF、SCAN 算法、C-SCAN 算法。 目前常用的磁盘调度算法有:先来先服务、最短寻道时间优先、扫描算法和循环扫描 (1)先来先服务算法FCFS(First Come First Served )这是一种最简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。但此算法由于未对寻道进行优化,致使平均寻道时间可能较长。 假定有一个磁盘请求队列,其I/O对各柱面上块的请求序列如下:(磁道编号从0- 199)98, 183, 37, 122, 14, 124, 65, 67 如果当前磁头位置位于53,图8.4显示了FCFS调度算法的磁头移动路径,总的磁头移动为640柱面。

数学建模 电梯调度问题16

电梯调度问题 商业中心某写字楼有二十二层地上建筑楼层和两层地下停车场,6部电梯,每部电梯最大载重是20个正常成人的体重总和。工作日里每天早晚高峰时期均是非常拥挤,而且等待电梯的时间明显增加。请你针对早晚高峰期的电梯调度问题建立数学模型,以期获得合理的优化方案。 1)请给出若干合理的模型评价指标。 2)暂不考虑该写字楼的地下部分,每层楼层的平均办公人数经过调查已知(见表1)。假设每层楼之间电梯的平均运行时间是3秒,最底层(地上一层)平均停留时间是20秒,其他各层若停留,则平均停留时间为10秒,电梯在各层的相应的停留时间内乘梯人员能够完成出入电梯。 表1:该写字楼各层办公人数 楼层人数楼层人数楼层人数 1无9236 617200

2 3 4 5 6 7 8208 52 177 222 5 130 181 191 236 7 10 11 12 13 14 15 16 139 272 272 272 270 300 264 18 19 20 2l 22 200 200 200 207 207 请你针对这样的简化情况,建立你的数学模型(列明你的假设),给出一个尽量最优的电梯调度方案,并利用所提评价指标进行比较。 3)将你在第2问中所建立的数学模型进一步实际化,以期能够尽量适用于实际情况,用于解决现实的电梯调度问题。 问题备注:

本题的评分标准按照以下先后顺序:逻辑的严谨程度-行文与模型描述的条理程度-模型和现实问题的接近程度-以及所用数学工具的理论程度。 摘要 随着科技的发展,人们逐步加快了自己的步伐,高节奏的生活,对于时间的要求,越来越高,写字楼里的人来也匆匆去也匆匆,在高峰期时段对电梯的使用最多,电梯的合理化应用在此显得尤为重要,没有合理的优化方案,不仅影响了乘客的上班时间,同时,电梯的多次停顿也造成了一定程度的能源浪费,所以在此提出得到优化方案,并作出计算分析其优化程度。 本文首先根据电梯群控模型评价指标体系,从乘客者的候梯时间和乘梯时间和能耗三个角度考虑。最初选定方案一 电梯编号负责楼层 1—2 2-10 3—4 11-17 5—6 18-22 方案二 电梯编号负责楼层 1 2 3 4 5 6 2 7 8 9 10 3 11 12 13 4 14 1 5 16 5 17 18 19 6 20 21 22 我们将建立一个多目标规划模型,对该模型的建立,分三个目标:乘客的平均候梯时间要短,乘客的平均乘梯时间要短,能源耗损要少。利用这三个指标来综合评价电梯群控方案的优劣。并采用模糊评价和多目标优化群控和借助实现蒙特卡罗模拟的思想,建立了全面合理的电梯调度方案的评价体系。并将模拟出的数据代入评价函数,从而帮助确定电梯调度的最佳策略。 根据建模得到的结果,最终得到的最佳方案为方案二。最后本文还根据使用的算法,结合实际情况,对模型的优缺点进行了详细的分析与评价,并提出了改进和模型推广方向。最后本文就所建立的模型在实际运用中的作用进行了分析,并提出了改进方向。结合实际,加入重要因素的考虑,比如考虑其他交通流,考虑个别人群满意度。

相关文档
相关文档 最新文档