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

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

操作系统实验报告

课程名称操作系统实验名称磁盘调度成绩

学生姓名作业君专业软件工程班级、学号

同组者姓名实验日期2020

一、实验目的

磁盘是高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的辅助存储器,担负着繁重的输入输出工作,在现代计算机系统中往往同时会有若干个要求访问磁盘的输入输出要求。系统可采用一种策略,尽可能按最佳次序执行访问磁盘的请求。由于磁盘访问时间主要受寻道时间T的影响,为此需要采用合适的寻道算法,以降低寻道时间。本实验要求模拟设计一个磁盘调度程序,观察调度程序的动态运行过程。通过实验来理解和掌握磁盘调度的职能。

二、实验内容与要求

实验内容:

分别模拟如下磁盘调度算法,对磁盘进行移臂操作:

●先来先服务算法

●最短寻道优先算法

实验要求:

1、假设磁盘只有一个盘面,并且磁盘是可移动头磁盘。

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

进程在访问某个磁盘时,其它想访问该磁盘的进程必须等待,直到磁盘一次工作结束。

当有多个进程提出输入输出请求而处于等待状态时,可用磁盘调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。为此设置“驱动调度”进程。

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

进程可以提出使用磁盘(这里我们只要求访问磁道),即动态申请访问磁道,为此设置“接受请求”进程。

4、为了模拟以上两个进程的执行,可以考虑使用随机数来确定二者的允许顺序,参考程序

流程图。

5、“接受请求”进程建立一张“进程请求I/O”表,指出等待访问磁盘的进程要求访问的磁

道,表的格式如下:

6、磁盘调度的功能是查“请求I/O”表,当有等待访问的进程时,按磁盘调度算法从中选

择一个等待访问的进程,按其指定的要求访问磁道。流程图中的“初始化”工作包括:初始化“请求I/O”表,设置当前移臂方向;当前磁道号。并且假设程序运行前“请求I/O”

表中已有若干进程(4~8个)申请访问相应磁道。

三、算法描述(含数据结构定义)或流程图

四、实验过程

#include

using namespace std;

#include

#include

typedef struct node

{

int data;

struct node *next;

}Node;

int main()

{

void fcfs(Node *,int,int);//声明先来先服务函数FCFS

void sstf(Node *,int,int);//声明最短寻道时间优先函数SSTF

void print(Node *); //输出链表函数

Node *head,*p,*q; //建立一个链表

int it,c=0,f,s; //c为链表长度,f是开始的磁道号,s是选择哪个算法

head=(Node *)malloc(sizeof(Node));

head->next=NULL;

q=head;

cout<<" /**************磁盘调度算法***************/"<

cout<

cout<<"新建一个单链表,以0作为结束标志:";

cin>>it;

while(it!=0)

{

p=(Node *)malloc(sizeof(Node));

p->next=NULL;

p->data=it;

q->next=p;

q=p;

cin>>it;

c++;

}

cout<<"从几号磁道开始:";

cin>>f; //f为磁道号

print(head);

cout<<"链表长度为:"<

cout<<"1、先来先服务算法FCFS"<

cout<<"2、最短寻道时间优先算法SSTF"<

cout<<"3、电梯调度算法(扫描算法SCAN)"<

cout<<"0、退出"<

cout<<"请选择:";

cin>>s;

while(s!=0)

{

switch(s)

{

case 1:cout<<"你选择了:先来先服务算法FCFS"<

fcfs( head,c,f);

break;

case 2:cout<<"你选择了:最短寻道时间优先算法SSTF"<

sstf( head,c,f);

break;

}

cout<<"退出请选0,继续请选1,2:";

cin>>s;

}

}

/***********************************************************/

void fcfs(Node *head,int c,int f)//先来先服务算法

{

void print(Node *);

Node *l;//*m,*n;

float num=0; //num为平均寻道长度

l=head->next;

for(int i=0;i

{

num+=abs(l->data-f);

f=l->data;

l=l->next;

}

num=num/c;

cout<<"先来先服务的寻道顺序是:"<

print(head);

cout<<"平均寻道长度:"<

}

/*****************************************************************/ void sstf(Node *head,int c,int f)//最短寻道时间优先算法

{

void print(Node *);

Node *p,*q,*r,*s,*l,*m;

l=(Node *)malloc(sizeof(Node));

l->next=NULL;

m=l;

q=head;

p=head->next;

s=head;

r=head->next;

float num=0;

for(int i=0;i

{

int min=abs(f-r->data);

for(int j=0;j

{

p=p->next;

q=q->next;

if(abs(f-p->data))

{

min=abs(f-p->data);

r=p;

s=q;

}

}

num+=abs(f-r->data);

f=r->data;

s->next=r->next;

r->next=NULL;

m->next=r;

m=r;

q=head;

p=head->next;

s=head;

r=head->next;

}

num=num/c;

cout<<"最短寻道时间优先顺序是:"<

print(l);

cout<<"平均寻道长度:"<

}

/*****************************************************/ void print(Node *head) //输出链表

{

Node *p;

p=head->next;

cout<<"单链表显示:";

if(p==NULL)

{

cout<<"单链表为空:";

}

else if(p->next==NULL)

{

cout<data;

}

else

{

while(p->next!=NULL)

{

cout<data<<"->";

p=p->next;

}

cout<data<

}

}

1.假设磁盘访问序列:89,138,73,122,41,142,56,76,

读写头起始位置:95

分别按照下列调度算法安排磁头服务序列,并计算寻道距离。

先来先服务

最短寻道时间优先

电梯算法

2. 比较三种磁盘调度算法的特点,并用实验数据进行说明。

(1)先来先服务算法

特点:

1.有利于长作业(进程)而不利于短作业(进程)

2.有利于CPU繁忙型作业(进程)而不利于I/O繁忙型作业(进程)

算法思想:最简单的调度算法,既可以用于作业调度,也可以用于程序调度,当作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,优先从后备队列中,选择一个或多个位于队列头部的作业,把他们调入内存,分配所需资源、创建进程,然后放入“就绪队列”,直到该进程运行到完成或发生某事件堵塞后,进程调度程序才将处理机分配给其他进程。

(2)最短寻找时间优先算法

特点:

1.优点:简单,公平。

2.缺点:效率不高,相邻两次请求可能会造成最内到最外的柱面寻道,使磁头反复移动,增加了服务时间,对机械也不利。

算法思想:按访问请求到达的先后次序服务。

(3)扫描算法(又称电梯算法)

SCAN算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象。由于磁头移动规律与电梯运行相似,故又称为电梯调度算法。SCAN算法对最近扫描过的区域不公平,因此,它在访问局部性方面不如FCFS算法和SSTF算法好。

算法思想:当设备无访问请求时,磁头不动;当有访问请求时,磁头按一个方向移动,在移动过程中对遇到的访问请求进行服务,然后判断该方向上是否还有访问请求,如果有则继续扫描;否则改变移动方向,并为经过的访问请求服务,如此反复。

3. 选择一个磁盘调度算法,详细地描述其程序的实现过程。

扫描算法(SCAN)不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。当磁头正在由里向外移动时,SCAN算法所选择的下一个访问对象应是其欲访问的磁道,既在当前磁道之外,又是距离最近的。这样由里向外地访问,直至再无更外的磁道需要访问时,才将磁臂换向,由外向里移动。这时,同样也是每次选择在当前磁道之内,且距离最近的进程来调度。

六、实验总结

经过这次实验,我也更加确切的区分了扫描算法与先来先服务算法以及最短寻找时间优先算法的区别!

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

《操作系统原理》 课程设计报告书 题目:磁盘调度 专业:网络工程 学号: 学生姓名: 指导教师: 完成日期:

目录 第一章课程设计目的 (1) 1.1编写目的 (1) 第二章课程设计内容 (2) 2.1设计内容 (2) 2.1.1、先来先服务算法(FCFS) (2) 2.1.2、最短寻道时间优先算法(SSTF) (2) 2.1.3、扫描算法(SCAN) (3) 2.1.4、循环扫描算法(CSCAN) (3) 第三章系统概要设计 (4) 3.1模块调度关系图 (4) 3.2模块程序流程图 (4) 3.2.1 FCFS算法 (5) 3.2.2 SSTF算法 (6) 3.2.3 SCAN算法 (7) 3.2.4 CSCAN算法 (8) 第四章程序实现 (9) 4.1 主函数的代码实现 (9) 4.2.FCFS算法的代码实现 (11) 4.3 SSTF算法的代码实现 (13) 4.4 SCAN算法的代码实现 (15) 4.5 CSCAN算法的代码实现 (17) 第五章测试数据和结果 (20) 第六章总结 (23)

第一章课程设计目的 1.1编写目的 本课程设计的目的是通过磁盘调度算法设计一个磁盘调度模拟系统,从而使磁盘调度算法更加形象化,容易使人理解,使磁盘调度的特点更简单明了,能使使用者加深对先来先服务算法、最短寻道时间优先算法、扫描算法以及循环扫描算法等磁盘调度算法的理解 1

第二章课程设计内容 2.1设计内容 系统主界面可以灵活选择某种算法,算法包括:先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)、循环扫描算法(CSCAN)。 2.1.1、先来先服务算法(FCFS) 这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。 2.1.2、最短寻道时间优先算法(SSTF) 该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。 2

操作系统实验报告模板

操作系统上机 实验报告 成绩 教师: 2012 年 12月 5日 班级: 学号: 姓名: 实验地点: 实验时间:

实验一进程的建立 【实验目的】 创建进程及子进程 在父子进程间实现进程通信 【实验软硬件环境】 Linux 、Windows98、Windows2000 【实验内容】 创建进程并显示标识等进程控制块的属性信息; 显示父子进程的通信信息和相应的应答信息。 (进程间通信机制任选) 【实验程序及分析】 编程思路:首先本程序在Linux用C语言完成的,父子进程的创建用fork函数来实现,然后是父子进程间的通信,这里用pipe实现。可以定义chan1[2], chan1[2],chanx[0]表示读,chanx[1]表示写。他们配合使用。 【实验截图】 【实验心得体会】 通过这次上机练习,我熟悉了用c++实现进程的创建,销毁,父子进程间的通讯等一系列课程中需要学习的内容。本来进程的概念在一开始我始终无法清晰地理解,但是通过自己用mfc的方法去实现它后,我开始慢慢地理解操作系统的进程的运作机制。 虽然,我只是实现了一个父子进程的创建和通讯,但是,管中窥豹,我想自己开始明白一个操作系统正是由很多这种进程实现功能的。其中,系统整体的进程调度,管理等等还有很多东西等着我们去进一步学习、理解。 实验二进程间的同步 【实验目的】

理解进程同步和互斥模型及其应用 【实验软硬件环境】 Linux 、Windows98、Windows2000 【实验内容】 利用通信API实现进程之间的同步: 建立司机和售票员进程; 并实现他们间的同步运行。 【实验程序及分析】 程序总体思路:由于本次试验时用PV操作实现的互斥与同步模型,所以先实现P、V操作的函数,然后在主程序中利用PV操作函数实现司机和售票员的同步。司机和售票员分别为父进程和子进程,假设司机停车开门,此时为父进程中运行,然后申请开车,但是此时乘客没上车,所以只能阻塞。此时进入子进程,乘客上车,关门,售票员检票,释放开车,然后死机开车,到站,释放开车门。如此循环。 示意图 #include #include

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

操作系统磁盘调度算法 实验报告 Company number:【0089WT-8898YT-W8CCB-BUUT-202108】

目录

1.课程设计目的 编写目的 本课程设计的目的是通过磁盘调度算法设计一个磁盘调度模拟系统,从而使磁盘调度算法更加形象化,容易使人理解,使磁盘调度的特点更简单明了,能使使用者加深对先来先服务算法、最短寻道时间优先算法、扫描算法以及循环扫描算法等磁盘调度算法的理解。 2.课程设计内容 设计内容 系统主界面可以灵活选择某种算法,算法包括:先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)、循环扫描算法(CSCAN)。 1、先来先服务算法(FCFS) 这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进

程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。 2、最短寻道时间优先算法(SSTF) 该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。 3、扫描算法(SCAN) 扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。例如,当磁头正在自里向外移动时,扫描算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到

操作系统实验报告心得体会

操作系统实验报告心得体会 每一次课程设计度让我学到了在平时课堂不可能学到的东西。所以我对每一次课程设计的机会都非常珍惜。不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。所以在这两周的课设中,熬了2个通宵,生物钟也严重错乱了。但是每完成一个任务我都兴奋不已。一开始任务是任务,到后面任务就成了自己的作品了。总体而言我的课设算是达到了老师的基本要求。总结一下有以下体会。 1、网络真的很强大,用在学习上将是一个非常高效的助手。几乎所有的资料都能够在网上找到。从linux虚拟机的安装,到linux的各种基本命令操作,再到gtk的图形函数,最后到文件系统的详细解析。这些都能在网上找到。也因为这样,整个课程设计下来,我浏览的相关网页已经超过了100个(不完全统计)。当然网上的东西很乱很杂,自己要能够学会筛选。 不能决定对或错的,有个很简单的方法就是去尝试。就拿第二个实验来说,编译内核有很多项小操作,这些小操作错了一项就可能会导致编译的失败,而这又是非常要花时间的,我用的虚拟机,编译一次接近3小时。所以要非常的谨慎,尽量少出差错,节省时间。多找个几个参照资料,相互比较,

慢慢研究,最后才能事半功倍。 2、同学间的讨论,这是很重要的。老师毕竟比较忙。对于课程设计最大的讨论伴侣应该是同学了。能和学长学姐讨论当然再好不过了,没有这个机会的话,和自己班上同学讨论也是能够受益匪浅的。大家都在研究同样的问题,讨论起来,更能够把思路理清楚,相互帮助,可以大大提高效率。 3、敢于攻坚,越是难的问题,越是要有挑战的心理。这样就能够达到废寝忘食的境界。当然这也是不提倡熬夜的,毕竟有了精力才能够打持久战。但是做课设一定要有状态,能够在吃饭,睡觉,上厕所都想着要解决的问题,这样你不成功都难。 4、最好在做课设的过程中能够有记录的习惯,这样在写实验报告时能够比较完整的回忆起中间遇到的各种问题。比如当时我遇到我以前从未遇到的段错误的问题,让我都不知道从何下手。在经过大量的资料查阅之后,我对段错误有了一定的了解,并且能够用相应的办法来解决。 在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的 1)访问系统数据区,尤其是往系统保护的内存地址写数据,最常见就是给一个指针以0地址 2)内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域

操作系统实验报告

操作系统实验报告 实验名称: 系统的引导 所在班级: 指导老师: 老师 实验日期: 2014年3 月29 日

一、实验目的 ◆熟悉hit-oslab实验环境; ◆建立对操作系统引导过程的深入认识; ◆掌握操作系统的基本开发过程; ◆能对操作系统代码进行简单的控制,揭开操作系统的神秘面纱。 二、实验容 1. 阅读《Linux核完全注释》的第6章引导启动程序,对计算机和Linux 0.11的引导过程进行初步的了解。 2. 按照下面的要求改写0.11的引导程序bootsect.s。 3. 有兴趣同学可以做做进入保护模式前的设置程序setup.s。 4. 修改build.c,以便可以使用make BootImage命令 5. 改写bootsect.s主要完成如下功能: bootsect.s能在屏幕上打印一段提示信息XXX is booting...,其中XXX是你给自己的操作系统起的名字,例如LZJos、Sunix等。 6. 改写setup.s主要完成如下功能: bootsect.s能完成setup.s的载入,并跳转到setup.s开始地址执行。而setup.s 向屏幕输出一行"Now we are in SETUP"。setup.s能获取至少一个基本的硬件参数(如存参数、显卡参数、硬盘参数等),将其存放在存的特定地址,并输出到屏幕上。setup.s不再加载Linux核,保持上述信息显示在屏幕上即可。 三、实验环境

本实验使用的系统是windows系统或者是Linux系统,需要的材料是osexp。 四、实验步骤 1. 修改bootsect.s中的提示信息及相关代码; 到osexp\Linux-0.11\boot目录下会看到图1所示的三个文件夹,使用UtraEdit 打开该文件。将文档中的98行的mov cx,#24修改为mov cx,#80。同时修改文档中的第246行为图2所示的情形。 图1图2 图3 2. 在目录linux-0.11\boot下,分别用命令as86 -0 -a -o bootsect.obootsect.s和 ld86 -0 -s -obootsectbootsect.o编译和bootsect.s,生成bootsect文件; 在\osexp目录下点击MinGW32.bat依此输入下面的命令: cd linux-0.11 cd boot as86 -0 -a -o bootsect.obootsect.s ld86 -0 -s -o bootsectbootsect.o

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

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

【实验过程记录(源程序、测试用例、测试结果及心得体会等) 】 #include #include #include using namespace std; 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]) const int MaxNumber=100; int TrackOrder[MaxNumber]; int MoveDistance[MaxNumber]; // ------- int FindOrder[MaxNumber]; // ---------- double AverageDistance; // ----------- bool direction; // int BeginNum; // int M; // int N; // int SortOrder[MaxNumber]; // ------ bool Finished[MaxNumber]; 移动距离 ; 寻好序列。 平均寻道长度 方向 true 时为向外, false 开始磁道号。 磁道数。 提出磁盘 I/O 申请的进程数 排序后的序列 为向里

天津理工大学 操作系统实验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])

操作系统实验报告

操作系统实验报告 Document number:NOCG-YUNOO-BUYTT-UU986-1986UT

许昌学院 《操作系统》实验报告书学号: 姓名:闫金科 班级:14物联网工程 成绩: 2016年02月

实验一Linux的安装与配置 一、实验目的 1.熟悉Linux系统的基本概念,比如Linux发行版、宏内核、微内核等。 2.掌握Linux系统的安装和配置过程,初步掌握Linux系统的启动和退出方 法。 3.熟悉Linux系统的文件系统结构,了解Linux常用文件夹的作用。 二、实验内容 1.从网络上下载VMware软件和两个不同Linux发行版镜像文件。 2.安装VMware虚拟机软件。 3.在VMware中利用第一个镜像文件完成第一个Linux的安装,期间完成网络 信息、用户信息、文件系统和硬盘分区等配置。 4.在VMware中利用第二个镜像文件完成第二个Linux的安装,并通过LILO或 者GRUB解决两个操作系统选择启动的问题。 5.启动Linux系统,打开文件浏览器查看Linux系统的文件结构,并列举出 Linux常用目录的作用。 三、实验过程及结果 1、启动VMware,点击新建Linux虚拟机,如图所示: 2、点击下一步,选择经典型,点击下一步在选择客户机页面选择 Linux,版本选择RedHatEnterpriseLinux5,如图所示: 3、点击下一步创建虚拟机名称以及所要安装的位置,如图所示: 4、点击下一步,磁盘容量填一个合适大小,此处选择默认值大小 10GB,如图所示: 5、点击完成,点击编辑虚拟机设置,选择硬件选项中的CD-ROM (IDE...)选项,在右侧连接中选择“使用ISO镜像(I)”选项,点 击“浏览”,找到Linux的镜像文件,如图所示:

磁盘调度实验报告

操作系统实验报告课程名称:计算机操作系统 实验项目名称:磁盘调度实验时间: 班级:姓名:学号: 实验目的: 对操作系统的磁盘调度基础理论和重要算法的理解,加强动手能力。 实验环境: PC机 win7 Visual C++ 实验内容: 编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度,要求设计主界面以灵 活选择某算法,且以下算法都要实现: 1、先来先服务算法(FCFS) 2、最短寻道时间优先算法(SSTF) 3、扫描算法(SCAN) 4、循环扫描算法(CSCAN) 实验过程: 1.依次输入8个磁道数:123 45 31 67 20 19 38,并以0 结束 2.选择调度算法: (1)先来先服务算法(FCFS) (2)最短寻道时间优先算法(SSTF) 成绩: 指导教师(签名):

(3)扫描算法(SCAN) (4)循环扫描算法(CSCAN) 实验心得: 通过本次实验,学习了解磁盘调度的工作原理及四种调度方法的工作原理,并且在当中

发现了自己的不足,对以前所学过的知识理解得不够深刻,掌握得不够牢固,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。 附录: #include #include #include #include #define maxsize 1000 /*********************判断输入数据是否有效**************************/ int decide(char str[]) //判断输入数据是否有效 { int i=0; while(str[i]!='\0') { if(str[i]<'0'||str[i]>'9') { return 0; break; } i++; } return i; } /******************将字符串转换成数字***********************/ int trans(char str[],int a) //将字符串转换成数字 { int i; int sum=0; for(i=0;icidao[j]) { temp=cidao[i]; cidao[i]=cidao[j]; cidao[j]=temp; } } cout<<" 排序后的磁盘序列为:"; for( i=0;i

操作系统实验报告

操作系统实验报告 银行家算法 班级:计算机()班 姓名:李君益 学号:(号) 提交日期: 指导老师: 林穗 一、设计题目 加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和避免死锁的发生。 二、设计要求

内容: 编制银行家算法通用程序,并检测思考题中所给状态的安全性。 要求: (1)下列状态是否安全?(三个进程共享个同类资源) 进程已分配资源数最大需求数 (状态) (状态) (2)考虑下列系统状态 分配矩阵最大需求矩阵可用资源矩阵 问系统是否安全?若安全就给出所有的安全序列。若进程请求(),可否立即分配? 三、设计分析 一.关于操作系统的死锁 .死锁的产生 计算机系统中有许多独占资源,他们在任一时刻只能被一个进程使用,如磁带机,绘图仪等独占型外围设备,或进程表,临界区等软件资源。两个进程同时向一台打印机输出将导致一片混乱,两个进程同时进入临界区将导致数据库错误乃至程序崩溃。正因为这些原因,所有操作系统都具有授权一个进程独立访问某一辞源的能力。一个进程需要使用独占型资源必须通过以下的次序: ●申请资源 ●使用资源 ●归还资源 若申请施资源不可用,则申请进程进入等待状态。对于不同的独占资源,进程等待的方式是有差别的,如申请打印机资源、临界区资源时,申请失败将一位这阻塞申请进程;而申请打开文件文件资源时,申请失败将返回一个错误码,由申请进程等待一段时间之后重试。只得指出的是,不同的操作系统对于同一种资源采取的等待方式也是有差异的。 在许多应用中,一个进程需要独占访问多个资源,而操作系统允许多个进程并发执行共享系统资源时,此时可能会出现进程永远被阻塞的现象。这种现象称为“死锁”。 2.死锁的定义 一组进程处于死锁状态是指:如果在一个进程集合中的每个进程都在等待只能由该集合中的其他一个进程才能引发的时间,则称一组进程或系统此时发生了死锁。 .死锁的防止 .死锁产生的条件: ●互斥条件

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

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

第六讲磁盘调度算法 一、实验概述 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 确定磁头移动的方向,而是规定磁头只能从外向内移动。当磁头移动到最内的被访问磁道时,磁头立即移动到最外的被访问磁道,即将最大磁道号紧接着最小磁道号构成循环,进行扫描。算法流程图如下图所示。

磁盘调度实验报告

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

实验六:磁盘调度算法 一.实验目的 复习模拟实现一种磁盘调度算法,进一步加深对磁盘调度效率的理解。 二.实验属性 该实验为设计性实验。 三.实验仪器设备及器材 普通PC386以上微机 四.实验要求 本实验要求2学时完成。 本实验要求完成如下任务: (1)建立相关的数据结构,作业控制块、已分配分区及未分配分区 (2)实现一个分区分配算法,如最先适应分配算法、最优或最坏适应分配算法(3)实现一个分区回收算法 (4)给定一批作业/进程,选择一个分配或回收算法,实现分区存储的模拟管理

实验前应复习实验中所涉及的理论知识和算法,针对实验要求完成基本代码编写并完成预习报告、实验中认真调试所编代码并进行必要的测试、记录并分析实验结果。实验后认真书写符合规范格式的实验报告(参见附录A),并要求用正规的实验报告纸和封面装订整齐,按时上交。 五 .主要算法分析 各个算法分析 1.先来先服务算法(FCFS) 先来先服务(FCFS)调度:按先来后到次序服务,未作优化。 最简单的移臂调度算法是“先来先服务”调度算法,这个算法实际上不考虑访问者要求访问的物理位置,而只是考虑访问者提出访问请求的先后次序。例如,如果现在读写磁头正在50号柱面上执行输出操作,而等待访问者依次要访问的柱面为130、199、32、159、15、148、61、99,那么,当50号柱面上的操作结束后,移动臂将按请求的先后次序先移到130号柱面,最后到达99号柱面。 采用先来先服务算法决定等待访问者执行输入输出操作的次序时,移动臂来回地移动。先来先服务算法花费的寻找时间较长,所以执行输入输出操作的总时间也很长。 2.最短寻道时间优先算法(SSTF) 最短寻找时间优先调度算法总是从等待访问者中挑选寻找时间最短的那个请求先执行的,而不管访问者到来的先后次序。现在仍利用同一个例子来讨论,现在当50号柱面的操作结束后,应该先处理61号柱面的请求,然后到达32号柱面执行操作,随后处理15号柱面请求,后继操作的次序应该是99、130、148、159、199。 采用最短寻找时间优先算法决定等待访问者执行操作的次序时,读写磁头总共移动了200多个柱面的距离,与先来先服务、算法比较,大幅度地减少了寻找时间,因而缩短了为各访问者请求服务的平均时间,也就提高了系统效率。 但最短查找时间优先(SSTF)调度,FCFS会引起读写头在盘面上的大范围移动,SSTF查找距离磁头最短(也就是查找时间最短)的请求作为下一次服务的对象。SSTF查找模式有

操作系统实验报告.

学生学号0121210680225 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称操作系统 开课学院计算机科学与技术学院 指导老师姓名刘军 学生姓名李安福 学生专业班级软件sy1201 2014 — 2015 学年第一学期

《操作系统》实验教学大纲 课程编号: 课程名称:操作系统/Operating System 实验总学时数:12学时 适应专业:计算机科学与技术、软件工程 承担实验室:计算机科学与技术学院实验中心 一、实验教学的目的和任务 通过实验掌握Linux系统下常用键盘命令、系统调用、SHELL编程、后台批处理和C程序开发调试手段等基本用法。 二、实验项目及学时分配 序号实验项目名称实验学时实验类型开出要求 01 Linux键盘命令和vi 2 设计必开 02 Linux下C编程 2 设计必开 03 SHELL编程和后台批处理 2 设计必开 04 Linux系统调用(time) 2 设计必开 05 Linux进程控制(fork) 4 设计必开 三、每项实验的内容和要求: 1、Linux键盘命令和vi 要求:掌握Linux系统键盘命令的使用方法。 内容:见教材p4, p9, p40, p49-53, p89, p100 2、Linux下的C编程 要求:掌握vi编辑器的使用方法;掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。 内容:设计、编辑、编译、连接以及运行一个C程序,其中包含键盘输入和屏幕输出语句。 3、SHELL编程和后台批处理 要求:掌握Linux系统的SHELL编程方法和后台批处理方法。 内容:(1) 将编译、连接以及运行上述C程序各步骤用SHELL程序批处理完成,前台运行。 (2) 将上面SHELLL程序后台运行。观察原C程序运行时输入输出情况。 (3) 修改调试上面SHELL程序和C程序,使得在后台批处理方式下,原键 盘输入内容可以键盘命令行位置参数方式交互式输入替代原键盘输入内容, 然后输出到屏幕。 4、Linux系统调用使用方法。

磁盘调度算法实验报告 (2)

磁盘调度算法 学生姓名: 学生学号: 专业班级: 指导老师: 2013年6月20日

1、实验目的: 通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法的实现方法。 2、问题描述: 设计程序模拟先来先服务FCFS、最短寻道时间优先SSTF、SCAN 和循环SCAN算法的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。 3、需求分析 通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法的实现方法。 通过已知开始磁道数、访问磁道总数、磁道号访问序列、访问方向及访问方式得到访问序列及移动距离和平均移动距离! (1)输入的形式; int TrackOrder[MaxNumber];//被访问的磁道号序列 int direction;//寻道方向 int Num;//访问的磁道号数目

int start;// (2)输出的形式; int MoveDistance[MaxNumber]={0};//移动距离 double AverageDistance=0;//平均寻道长度 移动的序列! (3)程序所能达到的功能; 模拟先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。 (4)测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。 开始磁道号:100 磁道号方向:内(0)和外(1) 磁道号数目:9 页面序列:55 58 39 18 90 160 150 38 184 4、概要设计 说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。

操作系统实验报告

实验报告 实验课程名称:操作系统 实验地点:南主楼七楼机房 2018—2019学年(一)学期 2018年 9月至 2019 年 1 月 专业: 班级: 学号: 姓名: 指导老师:刘一男

实验一 实验项目:分时系统模拟 实验学时:2实验日期: 2018-10-25 成绩: 实验目的利用程序设计语言模拟分时系统中多个进程按时间片轮转调度算法进行进程调度的过程; 假设有五个进程A,B,C,D,E,它们的到达时间及要求服务的时间分别为:进程名 A B C D E 到达时间0 1 2 3 4 服务时间 4 3 4 2 4 时间片大小为1,利用程序模拟A,B,C,D,E五个进程按时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间。 执行过程并计算各进程的周转时间及带权周转时间。 轮转调度:BDACE

(1)修改时间片大小为2,利用程序模拟A,B,C,D,E五个进程按时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间。 轮转调度:ADBCE (2)修改时间片大小为4,利用程序模拟A,B,C,D,E五个进程按时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间.

顺序:ABCDE 1、思考 时间片的大小对调度算法产生什么影响?对计算机的性能产生什么影响?答:通过对时间片轮转调度算法中进程最后一次执行时间片分配的优化,提出了一种改进的时间片轮转调度算法,该算法具有更好的实时性,同时减少了任务调度次数和进程切换次数,降低了系统开销,提升了CPU的运行效率,使操作系统的性能得到了一定的提高。 A B C D E 时间片为1 周转时间12 9 14 8 13 3 3 3.5 4 3.25 带权周转 时间 时间片为2 周转时间8 12 13 7 13 2 4 3.25 3.5 3.25 带权周转 时间 时间片为4 周转时间 4 6 9 10 13 1 2 2.25 5 3.25 带权周转 时间

操作系统实验报告

操作系统实验报告班级:软件1042 姓名:****** 学号:101***** 指导老师:***老师 安徽工业大学工商学院2012年12月

目录 实验一 WINDOWS进程初识 (2) 1、实验目的 (2) 2、实验内容和步骤 (2) 3、实验结论 (4) 实验二进程管理 (4) 1、实验目的 (4) 2、实验内容和步骤 (4) 3、实验结论 (9) 实验三进程同步的经典算法 (9) 1、实验目的 (9) 2、实验内容和步骤 (10) 3、实验结论 (12) 实验四存储管理 (12) 1、实验目的 (12) 2、实验内容和步骤 (12) 3、实验结论 (19)

实验一WINDOWS进程初识 1、实验目的 (1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。 (2)掌握WINDOWS API的使用方法。 (3)编写测试程序,理解用户态运行和核心态运行。 2、实验内容和步骤 (1)编写基本的Win32 Consol Application 步骤1:登录进入Windows,启动VC++ 6.0。 步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。创建一个新的控制台应用程序工程。 步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。 步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。 步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows “命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:E:\课程\os课\os实验\程序\os11\debug>hello.exe 运行结果 (如果运行不成功,则可能的原因是什么?) : 刚开始由于命令输入有误经改正后,正确调试出结果 (2)计算进程在核心态运行和用户态运行的时间 步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。 步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。 步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。 E:\课程\os课\os实验\程序\os12\debug>time TEST.exe 步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) :

操作系统磁盘调度算法

操作系统课程设计任务书 题目: 磁盘调度算法 院系: 专业: 班级: 姓名: 学号: 指导教师: 设计时间:2018.1.1-2018.1.5 指导教师评语

目录 1、需求分析?4 1.1课题描述 (4) 1.2课题目的 (4) 1.3理论依据?7 2、概要设计?8 2.1设计方法 ............................................................................................... 82.2技术?8 2.3运行环境?8 3、详细设计?9 3.1流程图 (11) 3.2程序主要代码? 13 14 4、运行结果及分析? 4.1运行结果? 15 4.2结果详细分析?6 1 16 5、总结和心得? 7 1 6、参考文献? 2 7、附录:程序源代码? 3

1、需求分析 1.1课题描述 这次课程设计我研究的题目是:磁盘调度算法。具体包括三种算法分别是:先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(电梯调度算法)(SCAN)。 1.2课题目的 通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS,最短寻道时间优先SSTF,扫描SCAN算法的实现方法。 1.3理论依据 设备的动态分配算法与进程调度相似,也是基于一定的分配策略的。常用的分配策略有先请求先分配、优先级高者先分配等策略。在多道程序系统中,低效率通常是由于磁盘类旋转设备使用不当造成的。操作系统中,对磁盘的访问要求来自多方面,常常需要排队。这时,对众多的访问要求按一定的次序响应,会直接影响磁盘的工作效率,进而影响系统的性能。访问磁盘的时间因子由3部分构成,它们是查找(查找磁道)时间、等待(旋转等待扇区)时间和数据传输时间,其中查找时间是决定因素。因此,磁盘调度算法先考虑优化查找策略,需要时再优化旋转等待策略。 平均寻道长度(L)为所有磁道所需移动距离之和除以总的所需访问的磁道数(N),即:L=(M1+M2+……+Mi+……+MN)/N

操作系统实验报告

操作系统实验报告 学生学院计算机学院 专业班级计算机科学与技术3班学号3213005910 学生姓名林虹 指导教师丁国芳 2015 年12月15 日

目录 1 实验一进程调度 (1) 2 实验二银行家算法 (16) 3 实验三动态分区分配方式的模拟 (20) 4 实验四仿真各种磁盘调度算法 (26)

实验一进程调度 1. 实验目的 编写并调试一个模拟的进程调度程序,分别采用“短进程优先”、“时间片轮转”、“高响应比优先”调度算法对随机产生的五个进程进行调度,并比较算法的平均周转时间。以加深对进程的概念及进程调度算法的理解。 2. 实验要求 1.每个进程由一个进程控制块(PCB)表示,进程控制块可以包含如下信息:进程 名、优先数(响应比)、到达时间、需要运行时间(进程的长度)、已运行时间、进 程状态等等(可以根据需要自己设定)。 2.由程序自动生成进程(包括需要的数据,要注意数据的合理范围),第一个进程到 达时间从0开始,其余进程到达时间随机产生。 3.采用时间片轮转调度算法时,进程的运行时间以时间片为单位进行计算。 4.每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种 状态之一。 5.每进行一次调度,程序都要输出一次运行结果:正在运行的进程、就绪队列中的进 程、完成的进程以及各个进程的PCB,以便进行检查。 6.最后计算各调度算法的平均周转时间,并进行比较、分析。 3. 实验内容 a.算法原理 (1)短进程优先调度算法 “短进程优先”调度算法的基本思想是把CPU分配给就绪队列中需要时间最短的进程。 (2)时间片轮转算法 将系统中所有的就绪进程按照FCFS原则,排成一个队列。每次调度时将CPU 分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。在一个时间片结束时,发生时钟中断。调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程。进程可以未使用完一个时间片,就出让CPU。 (3)高响应比优先算法 HRRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。 每个作业完成后要打印该作业的开始运行时刻、完成时刻、周转时间和带权周转时间,这一组作业完成后要计算并打印这组作业的平均周转时间、带权平均周转时间。

操作系统实验报告

本科实验报告 课程名称:操作系统学号: 姓名: 专业: 班级: 指导教师: 课内实验目录及成绩 信息技术学院 2016年 12 月日

实验(实验1) 1 实验名称:基本shell命令及用户管理 2 实验目的 2.1 掌握安装Linux操作系统的方法。 2.2 掌握Linux操作系统的基本配置。 2.3 了解GNOME桌面环境。 2.4 掌握基本shell命令的使用。 3 实验准备 3.1 下载VMware Workstation虚拟机软件(版本不限)。 3.2 准备Linux操作系统的安装源(内核版本和发行版本均不限)。 注:实验准备、实验内容4.1和4.2作为回家作业布置,同学们利用课余时间可在私人计算机上完成。 4 实验要求、步骤及结果 4.1 安装虚拟机软件。 【操作要求】安装VMware Workstation虚拟机软件,并填写以下4.1.1和4.1.2的内容。 4.1.1【VMware Workstation虚拟机版本号】 4.1.2【主要配置参数】 4.2 安装Linux操作系统。

【操作要求】安装Linux操作系统,版本不限。 Linux发行版本: Linux内核版本: 【主要操作步骤:包括分区情况】 1、创建一台虚拟机安装操作系统时客户机操作系统选择Linux 2、修改虚拟机的安装路径。 3、建一个新的虚拟磁盘,磁盘的空间20GB,并且将单个文件存储虚拟磁盘。 4、设置分区完毕,安装虚拟机

4.3 了解Linux操作系统的桌面环境之一GNOME。 【操作要求】查看桌面图标,查看主菜单,查看个人用户主目录等个人使用环境。【操作步骤1】桌面图标 【操作步骤2】主菜单

相关文档
最新文档