操作系统一个小型操作系统的设计与实现课程设计

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

南通大学计算机科学与技术学院

操作系统课程设计报告

专业:

学生姓名:

学号:

时间:

操作系统模拟算法课程设计报告

设计要求

将本学期三次的实验集成实现:

A.处理机管理;

B.存储器管理;

C.虚拟存储器的缺页调度。

设计流程图

主流程图

2)时间片轮转法

时间片轮转算法流程图B.存储器管理(可变式分区管理)

1)首次适应法

分配流程图

首次适应算法回收流程图

2)最佳适应法

回收内存流程

2)LRU

实现原理 主界面

设计一个框架分别去链接处理机管理、存储器管理和缺页调度相关的程序。

A.处理机调度 1)先来先服务FCFS

(一)任务

先来先服务的调度算法实现处理机调度。

(二)要求

1.实现对FCFS算法的模拟实现

2.计算出该算法的平均作业周转时间、平均带权作业周转时间。

(三)原理

按作业到达CPU时间先后顺序进行非剥夺式调度,先到达CPU的作业先被执行。

(四)数据结构

structtask_struct

{

charname;/*进程名称*/

intnumber;/*进程编号*/

floatcome_time;/*到达时间*/

floatrun_begin_time;/*开始运行时间*/

floatrun_time;/*运行时间*/

floatrun_end_time;/*运行结束时间*/

intpriority;/*优先级*/

intorder;/*运行次序*/

intrun_flag;/*调度标志*/

}tasks[MAX];

intfcfs()/*先来先服务算法*/

进程控制块结构

(五)实现方法

建立一个链表按照到达CPU的时间从小到大排列,只需从第一个作业(头结点)依次调度到最后一个作业(尾结点)。

(六)运行界面

测试数据:

执行FCFS算法如下:

2)时间片轮转法

(一)任务

只对进程的运行模拟,将其运行时间加一,判断要求运行时间与已运行时间是否相等,若相等则表示进程结束,进程退出调度,释放资源。

(二)要求

1.实现对RR算法的模拟实现

2.显示执行完一个时间片的结果。

(三)原理

时间片轮转算法中,系统将所有的就程序按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。当执行的时间片用完时,调度程序停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。

(四)数据结构

储器管理(可变式分区管理)

1)首次适应法

(一)任务

通过采用首次适应算法实现内存的分配与回收,并可以查看和显示当前内存现状。

(二)要求

1.实现对FF算法的模拟实现

2.输入要进行分配内存的进程ID和相应所需内存大小,回收内存时输入已运行的进程ID。

(三)原理

FF算法要求空闲链已地址递增的次序连接。分配内存时,从链首开始顺序查找,直到找到第一个满足要求的空间并分配给进程,把分配后余下的空间仍然留在链表中。若从链首至链尾都不满足要求,则分配失败。该算法倾向于优先使用低地址的空间。

(四)数据结构

intconstMEMO=256;现对BF算法的模拟实现

2.输入要进行分配内存的进程ID和相应所需内存大小,回收内存时输入需要回收的内存块。

(一)原理

最佳适应算法扫描整个未分配表或链表,从空闲区中挑选一个能满足用户进程要求的最小分区进行分配。此算法保证不会分割一个更大的区域,使得装入大作业的要求容易得到满足,同时,通常把空闲区按长度递增顺序排列,查找时总是从最小的一个空闲区开始,直至找到满足要

求的分区为止,这时,最佳适应分配算法等同于首次适应算法。此算法的主存利用率好,所找出的分区如果最好满足要求则是最合适的。(二)数据结构

intconstMEMO=256;

拟存储器的缺页调度

1)先进先出FIFO

(一)任务

采用先进先出FIFO算法实现分页管理的缺页调度,并输出每次调入调出的页号和运行结果。

(二)要求

1.实现对FIFO算法的模拟实现

2.输出每次执行的结果。

(三)原理

基于程序总是按线性顺序来访问物理空间这一假设,总是淘汰最先调入主存的页面,即淘汰在主存中驻留时间最长的页面,认为驻留时间最长的页不再使用的可能性较大。

(四)数据结构

voidFIFO(){

intlength;

intfifo[100]={0};

intpageLength;

intfifoPage[100]={0};

inti,j;

cout<<"***********************先进先出算法**************************"<

pageLength=3;

length=9;

for(i=1;i<=length;i++){

intflag=0;

for(j=1;j<=pageLength;j++){

if(fifo[i]==fifoPage[j]){

flag=1;

j=pageLength+1;

}elseif(fifoPage[j]==0){

fifoPage[j]=fifo[i];

j=pageLength+1;

flag=1;

}

}

if(flag==1)

{

相关文档
最新文档