操作系统实验报告

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

操作系统实验报告

一、实验目的

1、处理机调度:在多道程序或多任务系统中,系统中同时处于就绪状态有

若干,也就是说能运行的进程数远远大于处理机个数。为了使系统中的

各进程能有条不紊地运行,必须选择某种调度策略,以选择一进程占用

处理机。

2、银行家算法:模拟进程的资源分配算法,了解死锁的产生和避免。

3、页面替换:在分页虚拟存储系统中,当硬件发出缺页中断后转操作系统

处理缺页中断。如果主存中已无空闲块,采用合适算法进行缺页处理。

4、移臂调度:在启动之前按驱动调度策略对访问的请求优化其排序十分必

要。就应该考虑使移动臂的移动时间最短的调度策略。

将上述算法放在一个程序中进行调度,就是本次课程设计的主要内容。二、实验要求

书写实验报告,应该包括以下几项内容:

1、实验题目

2、程序中使用的数据结构及主要符号说明。

3、程序流程图和带有注释的源程序。

4、执行程序名,并打印程序运行时的初值和运行结果,其中包括:

I、各程序进程块的初始状态。

II、选中运行进程的名字、运行后各进程控制块状态以及每次调度时,就绪队列的进程排列顺序。

5、通过实验后的收获和体会及对实验的改进意见和见解。

三、实验内容

该程序中包括了处理机调度、页面置换算法、移臂调度算法;这三种算法中各包含了三种调度方式。最后还有银行家算法。

四、实验结果展示

1、初始界面如下

2、处理机调度过程

3、页面替换调度的界面

4、银行家算法界面

5、移臂调度界面

五、实验收获与体会

本次课程设计将平时做的实验综合在一起,通过界面的控制来调度不同的算法,实现不同的目的。当初单个实验执行没有错误,放在一起就出现了很多问题,比如重定义问题,整个实验中也只能出现一个main( )函数。

通过本次课程设计,收获颇多,当调出没错误时,一种前所未有的成就感油

然而生,同时也对各种算法有了更深层次的认识。

附录:

源程序:#include

#include

using namespace std;

struct PCB1

{char name[20]; //进程名

int arrivetime; //进程到达时间

int runtime; //估计运行时间

int grade; //进程的优先级(优先数越低,优先级越高)

PCB1 *next; //链表指针

};

class processes

{ PCB1 *head;//指向初始化的进程队列

PCB1 *run;//指向就绪进程队列,队首为正在运行的进程

PCB1 *run_tail;//指向就绪队列队尾

int num;//记录进程个数

int current;//记录系统当前时间的变量

public:

processes(int n);//构造函数

processes::~processes();//析构函数

void Set_Run();//run为空时初始化或构造run链表

void Move1();//run队列队首结点移至队尾

void Move2();//head队首元素移至run队首

void Move3();//进程运行后优先级改变且未运行完成有序插入就绪队列PCB1* Sort_Insert_arrivetime(PCB1 *head,PCB1 *n);//按到达时间排序

void inputprocess(int l);//建立进程的函数

void Delete_processes();//构造已完成的进程队列

void runprocess_FCFS();//先来先服务算法

void runprocess_RR();//时间片轮算法

void runprocess_Grade();//按优先级调度

};

processes::processes(int n)//构造函数

{ num=n;current=0;

run=head=NULL;

}

processes::~processes()//析构函数

{ delete head,run,run_tail;

}

void processes::Set_Run()

{ run=head;

run_tail=head;

head=head->next;

run->next=NULL;

}

void processes::Move1()

{ PCB1 *just_run=run;

run=run->next;

run_tail->next=just_run;

just_run->next=NULL;

run_tail=just_run;

}

void processes::Move2()

{ PCB1 *t=head;

head=head->next;

t->next=run;

run=t;

}

void processes::Move3()

{ PCB1 *just_run=run;

run=run->next;

PCB1 *r=run,*q=run->next;

while(q&&just_run->grade>=q->grade) r=q,q=q->next;

r->next=just_run;just_run->next=q;

if(!q) run_tail=just_run;

}

PCB1* processes::Sort_Insert_arrivetime(PCB1 *head,PCB1 *n)//按到达时间排序

{ PCB1 *p1,*p2;

if(head==NULL)

{head=n;n->next=NULL;

相关文档
最新文档