操作系统课程设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机科学与技术学院

操作系统课程设计

2014年07月

设计目的

1、融会贯通教材各章的内容,通过知识的综合运用,加深对操作系统的认识。

2、学习设计和调试计算机的基本步骤和方法,培养科学研究的独立工作能力,取得工程设计和调试的实践和经验。

设计内容及要求

完成:1、进程/作业调度算法至少3个

2、页面置换算法至少3个

3、驱动调度算法至少3个

4、银行家算法

做一个系统界面,将这些算法全部纳入界面,在界面中选择相应算法,则开始相应算法的演示。

设备与环境

1、硬件设备:PC机一台。

2、Visual C++ 6.0

3、软件环境:WINDOWS 7

概要设计

1.模块划分

1.1银行家算法

1.2驱动调度算法

1.3页面调度算法

1.4进程调度算法

2.算法介绍

2.1.1 银行家算法思路介绍

银行家算法是避免死锁的一种重要方法,本实验要求用高级语言编写和调试一个简单的银行家算法程序。

用银行家算法实现资源分配。

设计五个进程{p0,p1,p2,p3,p4}共享三类资源{A,B,C}的系统, {A,B,C}的资源书量分别为10,5,7。进程可动态地申请资源和释放资源,系统按进程的申请动态地分配资源,要求程序具有显示和打印各进程的某一个时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源号以及为某进程分配资源后的有关资源数据。

2.2 驱动调度算法思路介绍

1、先来先服务算法(FCFS)

这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此

算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。

2、最短寻道时间优先算法(SSTF)

该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。

3、电梯算法(elevator algorithm)

电梯算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。例如,当磁头正在自里向外移动时,扫描算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。这时,同样也是每次选择这样的进程来调度,即其要访问的磁道,在当前磁道之内,从而避免了饥饿现象的出现。此算法基本上克服了最短寻道时间优先算法的服务集中于中间磁道和响应时间变化比较大的缺点,而具有最短寻道时间优先算法的优点即吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法,两侧磁道被访问的频率仍低于中间磁道。

2.3页面调度算法思路介绍

因为先进先出页面替换算法是将停留时间最长的页面替换出去,所以可以利用一个线性的数据结构将停留时间最长的页面放在队首,时间最短的放在队尾。另外最近最少访问页面替换算法是将最近最不长使用的页面放在队首,刚刚访问过得数据放在队尾,这样就可以在每次发生缺页中断时替换掉在队首的页面,然后将刚刚访问过得页面插入到队尾。而且由于最佳页面替换算法,是基于以后不再使用该页面而将其替换出去,所以需要事先了解页面的访问顺序,这个也可以利用线性的数据结构来实现。所以综上所述,在本次程序设计当中采用数组这一个线性结构,用来存放当前内存中的页面号。

算法详细设计

1.最近最少使用页面替换算法(LRU):

首先基本思想是:

⑴根据最近最少使用页面替换算法,将经常访问过得页面放入队尾,对于不是经常访

问的页面放入到队首。

⑵将每次要访问的页面放在0号数组单元中,然后将其与内存中的页面进行比较。

⑶如果内存中存在这个页面,则将这个页面插入到队尾

⑷如果内存中没有这个页面,那么在内存仍有空闲的情况下,直接放到队尾就可以了;

如果内存中已满,那么则将放在队首的页面进行淘汰,将刚刚访问过的页面放入到

队尾。

算法实现:

定义了变量count用来标识页面的访问次数

如果小于内存中页面的数量,则表明内存中还有空闲的空间,可以将页面直接的插入。

if(count

否则利用最近最少使用页面替换算法

cout<<"此次淘汰的数据是:"<

for(i=1;i

a[i]=a[0];

2.最佳页面替换算法(OPT):

首先基本思想是:

⑴根据最近最佳页面替换算法,将访问过的页面依次放入到页面队列中。

⑵将每次要访问的页面放在0号数组单元中,然后将其与内存中的页面进行比较。

⑶如果内存中存在这个页面,则不做任何的修改。

⑷如果内存中没有这个页面,那么在内存仍有空闲的情况下,直接放到队尾就可以了;

如果内存中已满,那么将内存已有队列中的页面依次与页面组成队列中的页面进行

比较,找出最不常访问的页面。将其出内存,将访问的页面放入到内存中。

算法实现:

定义了变量count用来标识页面的访问次数

如果小于内存中页面的数量,则表明内存中还有空闲的空间,可以将页面直接的插入。

if(count

否则利用最佳页面替换算法

3.先来先服务算法:

首先基本思想是:

⑴根据先来先服务算法的思想,利用队列这一个特殊得到数据结构,使得每次先进来

的数据放在队首,后进来的数据放在数据的末尾。

⑵将每次要访问的页面放在0号数组单元中,然后将其与内存中的页面进行比较。

⑶如果内存中没有这个页面,那么在内存还有空余的情况下,直接将页面放入队尾,

如果内存已满,就在淘汰队首的页面后,将页面插入到队尾。

⑷如果内存中有这个页面,就不做任何的改变。

其次算法实现:

定义了变量count用来标识页面的访问次数

如果小于内存中页面的数量,则表明内存中还有空闲的空间,可以将页面直接的插入。

if(count

否则利用先进先出页面替换算法

cout<<"此次淘汰的数据是:"<

for(i=1;i

a[i]=a[0];

2.4进程调度算法思路介绍

1.先来先服务算法(FCFS)

先来先服务算法按照作业进入系统后备作业队列的先后次序挑选作业,先进入系统的作业将优先被挑选进入主存,创建用户进程,分配所需资源,然后,移入就绪队列.这是一种非剥夺式调度算法,易于实现,但效率不高.只顾及作业的等候时间,未考虑作业要求服务时间的长短,不利于短作业而优待长作业,不利于I/O繁忙型作业而有利于CPU繁忙型作业.有时为了等待场作业执行结束,短作业的周转时间和带全周转时间将变得很大,从而若干作业的平均周转时间和平均带权周转时间也变得很大。

相关文档
最新文档