程序设计.docx

上传人:b****6 文档编号:5285012 上传时间:2022-12-14 格式:DOCX 页数:10 大小:97.27KB
下载 相关 举报
程序设计.docx_第1页
第1页 / 共10页
程序设计.docx_第2页
第2页 / 共10页
程序设计.docx_第3页
第3页 / 共10页
程序设计.docx_第4页
第4页 / 共10页
程序设计.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

程序设计.docx

《程序设计.docx》由会员分享,可在线阅读,更多相关《程序设计.docx(10页珍藏版)》请在冰豆网上搜索。

程序设计.docx

程序设计

 

答卷封面

(COVER)

评阅结果

Finalmark

评阅人

Examiner

 

课程名称(Subject):

操作系统课程设计

编号(No.):

系别(Department):

信息科学系

专业(Major):

计算机科学与技术

姓名(Name):

学号(Student’sNumber):

注意事项(Notes)

1.考生需将上述有关项目填写清楚

2.字迹要清楚,保持卷面清洁。

3.交卷时请将本答卷和题签一起上交,题签作为封面下一页装订。

1、Candidatesshouldfillintheinformationappropriately.

2、Keepthehandwritingclearandthepapertidy.

3、Candidateshouldhandinthiscoverandpapertogether;theanswersheetshouldbeattachedtothecover.

机密(Confidential)编号(No.):

11-12-1-050154

试题(Test)

课程名称(Subject):

操作系统课程设计考核类别(Typeoftest):

考查

课程类别(Typeofcourse):

实践环节考试形式(Testtype):

论文

使用范围(Targetgroup):

 计算机科学与技术   

要求:

一、通过本课程设计,使学生在上机实验中体会计算机操作系统的基本原理,训练学生模拟实现操作系统管理和控制资源的能力。

二、学生可在下列14个题目中任选1个。

(1)先来先服务调度算法、短作业优先调度算法、时间片轮转调度算法、优先级调度算法

(2)生产者-消费者问题、读者-写者问题

(3)最先适应算法、最佳适应算法、最坏适应算法

(4)先进先出算法、最久未使用淘汰算法、理想淘汰算法

(5)银行家算法

(6)进程通信

(7)小型文件系统

三、模拟实现算法在Windows平台下,可用C语言、C++语言和Java语言等。

 

摘要

本文围绕C编程语言在网络编程方面的具体应用,论述了使用面向对象方法,对Hannoi塔程序进行需求分析、概要设计、详细设计,最后使用C编程实现的全过程。

关键词:

操作系统C语言

 

目录

一、设计题目

二、设计内容

三、设计过程

3.1需求分析

3.2概要设计

3.3详细设计

3.4代码实现

3.5程序运行

四、总结

五、参考文献

 

一、设计题目

《时间片轮转算法》

二、设计内容

进程调度算法:

采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。

每个进程有一个进程控制块(PCB)表示。

进程控制块可以包含如下信息:

进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。

进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。

进程的到达时间为进程输入的时间。

进程的运行时间以时间片为单位进行计算。

每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。

就绪进程获得CPU后都只能运行一个时间片。

用已占用CPU时间加1来表示。

如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。

每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。

重复以上过程,直到所要进程都完成为止。

三、设计过程

3.1需求分析

操作系统的存储管理的基本功能有:

存储分配、地址转换和存储保护、存储共享、存储扩充。

存储分配指为选中的多道运行的作业分配主存空间;地址转换是把逻辑地址空间中的用户程序通过静态重定位或动态重定位转换和映射到分给的物理地址空间中,以便用户程序的执行;存储保护指各道程序只能访问自己的存储区域,而不能互相干扰,以免其他程序受到有意或无意的破坏;存储共享指主存中的某些程序和数据可供不同用户进程共享。

最简单的单道系统中,一旦一个程序能装入主存,它将一直运行直到结束。

如果程序长度超出了主存的实际容量,可以通过覆盖和交换的技术获得解决。

更多的操作系统支持多个用户进程在主存同时执行,能满足多道程序设计需要的最简单的存储管理技术是分区方式,有分固定分区和可变分区。

轮转法规定由各个准备就绪进程顺次轮流使用CPU,而且每一次使用的时间一般规定为一定值

当时间片结束时,就强迫一个现行进程出让CPU。

轮转法实现也较简单,而可以保证不会有进程长期得不到响应,缺点是无法照顾到一些特殊进程,早期分时系统采用的就是简单轮转法。

3.2概要设计

本课程设计就是分析动态分区法,与固定分区法相比,动态分区法在作业执行前并不建立分区,分区的建立是在作业的处理过程中进行的。

且其大小可随作业或进程对内存的要求而改变分区的建立是在作业的处理过程中进行的。

且其大小可随作业或进程对内存的要求而改变。

这就改变了固定分区法中那种即使是小作业也要占据大分区的浪费现象,从而提高了内存的利用率。

结构体定义进程

分别用两种调度算法对伍个进程进行调度。

每个进程可有三种状态;执行状态(RUN)、就绪状态(READY,包括等待状态)和完成状态(FINISH),并假定初始状态为就绪状态。

(一)进程控制块结构如下:

NAME——进程标示符

PRIO/ROUND——进程优先数/进程每次轮转的时间片数(设为常数2)

CPUTIME——进程累计占用CPU的时间片数

NEEDTIME——进程到完成还需要的时间片数

STATE——进程状态

NEXT——链指针

注:

1.为了便于处理,程序中进程的的运行时间以时间片为单位进行计算;

2.各进程的优先数或轮转时间片数,以及进程运行时间片数的初值,均由用户在程序运行时给定。

(二)进程的就绪态和等待态均为链表结构,共有四个指针如下:

RUN——当前运行进程指针

READY——就需队列头指针

TAIL——就需队列尾指针

FINISH——完成队列头指针

3.3详细设计

1.变量申明与数据结构

1.在优先数算法中,进程优先数的初值设为:

50-NEEDTIME

每执行一次,优先数减1,CPU时间片数加1,进程还需要的时间片数减1。

在轮转法中,采用固定时间片单位(两个时间片为一个单位),进程每轮转一次,CPU时间片数加2,进程还需要的时间片数减2,并退出CPU,排到就绪队列尾,等待下一次调度。

2.程序的模块结构提示如下:

整个程序可由主程序和如下7个过程组成:

(1)INSERT1——在优先数算法中,将尚未完成的PCB按优先数顺序插入到就绪队列中;

(2)INSERT2——在轮转法中,将执行了一个时间片单位(为2),但尚未完成的进程的PCB,插到就绪队列的队尾;

(3)FIRSTIN——调度就绪队列的第一个进程投入运行;

(4)PRINT——显示每执行一次后所有进程的状态及有关信息。

(5)CREATE——创建新进程,并将它的PCB插入就绪队列;

(6)PRISCH——按优先数算法调度进程;

(7)ROUNDSCH——按时间片轮转法调度进程。

主程序定义PCB结构和其他有关变量。

3.流程图

 

3.4代码实现

#include

#include

#include

typedefstructnode

{

charname[20];/*进程的名字*/

intprio;/*进程的优先级*/

intround;/*分配CPU的时间片*/

intcputime;/*CPU执行时间*/

intneedtime;/*进程执行所需要的时间*/

charstate;/*进程的状态,W——就绪态,R——执行态,F——完成态*/

intcount;/*记录执行的次数*/

structnode*next;/*链表指针*/

}PCB;

PCB*ready=NULL,*run=NULL,*finish=NULL;/*定义三个队列,就绪队列,执行队列和完成队列*/

intnum;

voidGetFirst();/*从就绪队列取得第一个节点*/

voidOutput();/*输出队列信息*/

voidInsertPrio(PCB*in);/*创建优先级队列,规定优先数越小,优先级越高*/

voidInsertTime(PCB*in);/*时间片队列*/

voidInsertFinish(PCB*in);/*时间片队列*/

voidPrioCreate();/*优先级输入函数*/

voidTimeCreate();/*时间片输入函数*/

voidPriority();/*按照优先级调度*/

voidRoundRun();/*时间片轮转调度*/

intmain(void)

{

charchose;

printf("请输入要创建的进程数目:

/n");

scanf("%d",&num);

getchar();

printf("输入进程的调度方法:

(P/R)/n");

scanf("%c",&chose);

switch(chose)

{

case'P':

case'p':

PrioCreate();

Priority();

break;

case'R':

case'r':

TimeCreate();

RoundRun();

break;

default:

break;

}

Output();

return0;

3.5程序运行

输入第一个进程

输入第二个进程

输入第三个进程

结果

四、总结

先模拟建立进程就绪链表----置所有进程的到达时间均为0,依PCB链接顺序从第一个进程PCB开始,使进程编号依次为0,1,2,3,4……;就绪链表中进程的数量,由常量num控制;再模拟建立调度函数--------取表头PCB,修改进程执行时间,得到的新时间,即为剩余执行时间,当剩余时间小于或等于0时,将此进程的PCB取出,依完成的先后次序链到完成链表中,记录当前完成进程的完成时间,同时修改就绪链表表头;最后计算和打印里程调度信息-----计算出各进程周转时间及所有进程的平均周转时间。

五、参考文献

[1]《计算机操作系统教程(第3版)》清华大学出版社张尧学主编

[2]《计算机操作系统教程习题解答与实验指导》清华大学出版社张尧学主编

[3]《C++程序设计教程》武汉理工大学出版社闵联营何克右主编

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1