人人范文网 范文大全

操作系统课设

发布时间:2020-03-03 01:19:36 来源:范文大全 收藏本文 下载本文 手机版

操作系统课程设计

一实验目的

在多道程序或多任务系统中,系统中同时处于就绪态的进程有若干个,也就是说能运行的进程数远远大于处理机个数。为了使系统中的各进程能有条不紊地进行,必须选择某种调度策略,以选择一进程占用处理机。要求学生设计一个模拟单处理机调度的算法,以加深对处理机调度的概念理解。

通过自己变成来实现页面调度算法,进一步理解页面调度算法 的概念及含义,提高对页面调度算法的认识,同时提高自己的动手实践能力。加深我们对主存与辅助存储器统一管理、逻辑地址与物理地址转换、部分装入和部分替换问题的理解,同时,有利于我们对虚拟存储技术的理解。

为了了解系统的资源分配情况,假定系统的任何一种资源在 任一时刻只能被一个进程使用。任何进程已经占用的资源只能由进程自己释放,而不能由其他进程抢占。当进程申请的资源不能满足时,必须等待。因此,只要资源分配算法能保证进程的资源请求,且不出现循环等待,则系统不会出现死锁。

编写模拟系统进行资源调度的程序,一个是随机算法,即只 要系统剩余资源能满足进程的当前请求,就立即将资源分配给进程,以观察死锁产生情况;一个是采用银行家算法,有效地避免死锁的产生。

模拟进程的资源分配算法,了解死锁的产生和避免的办法。 通过设计一个磁盘调度模拟系统,深入理解磁盘的工作原理,从而使磁盘调度更加形象化,容易使人理解,使磁盘调度的特点更简单明了,能使使用者加深对磁盘调度算法的理解。具体实现为,运用一门高级编程语言编写程序模拟磁盘调度的过程,采用先来先服务算法和电梯算法,模拟并输出存取臂的移动顺序,并计算存取臂移动的磁道总数。能够处理以下的情形:

(1)可根据需要输入当前磁头的位置,磁头移动方向; (2)能够输入柱面数,磁道访问序列等参数,并能够显示调度结果(磁盘访问请求的磁道号以及磁头移动的总磁道数)。

二、实验内容

利用C++实验以下算法: 处理机管理中:

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

实验题目:

假设系统中有3~5个进程,每个进程由一个进程控制块(PCB)来标识。

设置一个队首指针head,用来指出最先进入系统的进程,各就绪进程通过链接指针连在一起。

处理机调度时总是选择队首指针指向的进程投入运行。 由于本实验是模拟实验,所以对被选中进程并不实际启动运行,而只是执行。 估计运行时间减1,用这个操作来模拟进程的一次运行,而且省去进程的现场保护和现场恢复工作。

在所设计的程序中应有显示或打印语句,能显示或打印正运行的进程名字、已运行时间、还剩时间、就绪对列中进程名字等。所有进程运行完成时,给出各进程的周转时间和平均周转时间.数据结构设计如下:

struct PCB

//定义进程控制块

{

char ID[3];

//进程号

char name[10];

//进程名

char state;

//运行状态

int arrivetime; //到达时间

int starttime; //进程开始时间

int finishtime; //进程结束时间

int servicetime;

//运行时间

float turnaroundtime;//周转时间

float weightedturnaroundtime;//带权周转时间

struct PCB *next; //指向下个进程

};

(2) 时间片轮算法

实验题目:

假设系统中有3~5个进程,每个进程由一个进程控制块(PCB)来代表。

按照进程到达的先后顺序排成一个循环队列,设一个队首指针指向第一个到达的进程的首址。另外再设一个当前运行进程指针,指向当前正运行的进程。

执行处理机调度时,首先选择队首的第一个进程运行。 由于本实验是模拟实验,所以对被选中进程并不实际启动运行,而只是执行:

估计运行时间减1 用这个操作来模拟进程的一次运行。

进程运行一次后,以后的调度则将当前指针依次下移一个位置,指向下一个进程,即调整当前运行指针指向该进程的链接指针所指进程,以指示应运行进程,同时

还应判断该进程的剩余运行时间是否为0.若不为0,则等待下一轮的运行,若该进程的剩余运行时间为0,则将该进程的状态置为完成状态“C”,并退出循环队列。 若就绪队列不空,则重复上述的步骤(4)和(5)直到所有进程都运行完为止。

在所设计的调度程序中,应包含显示或打印语句吧,已便显示或打印每次选中进程的名称及运行一次后队列的变化情况。 数据结构设计如下:

typedef struct pcb

//进程控制块定义

{

char pname[N];

//进程名

int runtime;

//运行时间

int arrivetime;

char state;

struct pcb*next;

}PCB; PCB head_input;

PCB head_run;

PCB *pcb_input;

void inputproce();

函数

int readydata();

int runproce();

进程的函数

int readyproce();

static char R=\'r\',C=\'c\';

unsigned long current;

//到达时间

//进程状态 //链接指针

//就绪队列头指针 //运行队列头指针

//判断是否有就绪进程的

//运行进程的函数

//检查就绪队列并准备运行

//声明一个文件指针

//记录系统当前时间的变

//建立进程的函数

(3) 优先级调度算法

实验题目:

假设系统中有3~5个进程,每个进程由一个进程控制块(PCB)来代表。进程的优先数、要求运行时间和估计运行

时间由用户程序任意设计,且优先数越低,优先级越高。调度时,总是选择优先级最高的进程运行。

为了调度方便,设计一个指针指向就绪队列的第一个进程。另外再设一个当前运行进程指针,指向当前正运行的进程。

处理机调度时,总是选择已经到达队列的优先级最高的进程运行。为了采用 动态优先级调度,进程每运行一次,其优先级就减1。由于本实验是模拟实验,所以对被选中进程并不实际启动运行,而只是执行:

优先数加1和估计运行时间减1 用这个操作来模拟进程的一次运行。

进程运行一次后,若剩余的运行时间不为0,且其优先级低于就绪队列的其他进程的优先级,则选择一个高优先级进程抢占CPU;若剩余运行时间为0,则把它

的状态改为完成状态“C”,并撤出就绪队列。

若就绪队列不空,则重复上述的步骤(3)和(4)直到所有进程都运行完为止。

在所设计的程序中应有显示或打印语句,以显示或打印每次被选中进程的进程名字、运行一次后进程的变化以及就绪队列中的各进程排队情况等。 数据结构设计如下:

struct pcb {

/* 定义进程控制块PCB */

char name[10];

//进程名

char state;

//进程状态

int super;

//优先级数

int ntime;

//需要运行时间

int rtime;

//已运行时间 页面替换算法中:

(1) 先进先出页面替换算法(FIFO) (2) 最近最少使用页面替换算法(LRU) (3) 最少使用频率页面替换算法(LFU)

数据结构设计如下:

struct PageFrame

//页框结构 {

int id;

//页框号

int pageId;

//驻留的页号

int visitedCount; //驻留页计数器,访问加1 int unvisitedCount; //最近访问,访问清零,未访问加1 bool replace; //将被淘汰为true int stayTime;

//驻留时间计数 int nextsite; }; 银行家算法 实验题目

为了观察死锁产生和避免的情况,要求设计3~4个并发进程,共享系统的10个同类补课抢占的资源。各进程是动态进行资源的申请和释放。

用随机算法和银行家算法分别设计一个资源分配程序,运行这两个程序,观察系统运行情况,并对系统运行的每一步情况进行显示。

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

初始化这组进程的最大资源请求和依次申请的资源序列,把进程已占用和需求的资源情况记录在进程控制块中,假定进程控制块的格式如下图所示;

进程状态有:就绪、等待和完成。当系统不能满足进程的资源请求时,进程处于等待态。

“资源需求总量”表示进程运行过程中对资源的最大需求量。显然每个进程的资源需求总量不应超过系统拥有的资源总量。 “已占资源量”表示进程目前已经得到但还未归还的资源量。因此,进程在以后还需要的剩余资源量等于资源需要总量减去已占资源量。 “当前申请量”指进程都拿过去按运行时需要申请的资源量。 银行家算法分配资源的原则是:

(1) 当某个进程提出资源请求时,假定先分配给它,之后调用系统安全性检查算法,进行系统安全性检查,若系统安全,须分配变为真分配。否则作废假分配,让进程等待。 (2) 系统安全性检查算法。 驱动调度算法中:

作为操作系统的辅助存储器,用来存放文件的磁盘是一类高速大容量旋转型存储设备,在繁重的I/O负载下,同时会有若干传输请求来到并等待处理,系统必须采用一种调度策略,按照最佳次序执行要求访问的诸多请求,减少为若干I/O请求服务所需消耗的总时间。

磁盘驱动调度对磁盘的效率有重要影响。磁盘驱动调度算法的好坏直接影响辅助存储器的效率,从而影响计算机系统的整体效率。 (1) 电梯调度算法 (2) 最短查找时间优先算法 (3) 先来先服务算法

三、实验心得

通过本次课程设计,我认识到要将操作系统这门计算机专业课学好不易——不仅仅是要把书上的基本知识学好,而且还要不断进行实践,将所学与实践操作结合起来才能更好地巩固所学,才能提高自己实践能力。在以后的学习中一方面我要不断的巩固自己所学的理论知识,一方面还要多参加实际操作工作以便提高自己的实际操作能力。

操作系统课设

操作系统课设任务

操作系统课设程序源

单片机课设

EDA课设

计算机网络课设

课设心得体会

Matlab课设

课设规范

课设说明

操作系统课设
《操作系统课设.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档