1、程序设计答卷封面(COVER)评阅结果Final mark评阅人Examiner课程名称(Subject): 操作系统课程设计 编 号 (No.): 系 别 (Department): 信息科学系 专 业 (Major): 计算机科学与技术 姓 名 (Name): 学 号 (Students Number): 注意事项(Notes)1.考生需将上述有关项目填写清楚2.字迹要清楚,保持卷面清洁。3.交卷时请将本答卷和题签一起上交,题签作为封面下一页装订。1、Candidates should fill in the information appropriately.2、Keep the han
2、dwriting clear and the paper tidy.3、Candidate should hand in this cover and paper together; the answer sheet should be attached to the cover.机密(Confidential) 编号(No.): 11-12-1-050154试 题(Test)课程名称(Subject):操作系统课程设计考核类别(Type of test):考查课程类别(Type of course) : 实践环节 考试形式(Test type) : 论文 使用范围(Target group)
3、: 计算机科学与技术 要求:一、通过本课程设计,使学生在上机实验中体会计算机操作系统的基本原理,训练学生模拟实现操作系统管理和控制资源的能力。二、学生可在下列14个题目中任选1个。(1)先来先服务调度算法、短作业优先调度算法、时间片轮转调度算法、优先级调度算法(2)生产者-消费者问题、读者-写者问题(3)最先适应算法、最佳适应算法、最坏适应算法(4)先进先出算法、最久未使用淘汰算法、理想淘汰算法(5)银行家算法(6)进程通信(7)小型文件系统三、模拟实现算法在Windows平台下,可用C语言、C+语言和Java语言等。摘 要本文围绕C编程语言在网络编程方面的具体应用,论述了使用面向对象方法,对
4、Hannoi塔程序进行需求分析、概要设计、详细设计,最后使用C编程实现的全过程。关键词:操作系统 C语言目 录一、设计题目 二、设计内容 三、设计过程 3.1需求分析 3.2概要设计 3.3详细设计 3.4代码实现 3.5程序运行 四、总结 五、参考文献 一、 设计题目时间片轮转算法二、设计内容进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)
5、。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。重复以上过程,直到所要
6、进程都完成为止。三、设计过程3.1需求分析操作系统的存储管理的基本功能有:存储分配、地址转换和存储保护、存储共享、存储扩充。存储分配指为选中的多道运行的作业分配主存空间;地址转换是把逻辑地址空间中的用户程序通过静态重定位或动态重定位转换和映射到分给的物理地址空间中,以便用户程序的执行;存储保护指各道程序只能访问自己的存储区域,而不能互相干扰,以免其他程序受到有意或无意的破坏;存储共享指主存中的某些程序和数据可供不同用户进程共享。最简单的单道系统中,一旦一个程序能装入主存,它将一直运行直到结束。如果程序长度超出了主存的实际容量,可以通过覆盖和交换的技术获得解决。更多的操作系统支持多个用户进程在主
7、存同时执行,能满足多道程序设计需要的最简单的存储管理技术是分区方式,有分固定分区和可变分区。轮转法规定由各个准备就绪进程顺次轮流使用CPU,而且每一次使用的时间一般规定为一定值当时间片结束时,就强迫一个现行进程出让CPU。轮转法实现也较简单,而可以保证不会有进程长期得不到响应,缺点是无法照顾到一些特殊进程,早期分时系统采用的就是简单轮转法。3.2概要设计本课程设计就是分析动态分区法,与固定分区法相比,动态分区法在作业执行前并不建立分区,分区的建立是在作业的处理过程中进行的。且其大小可随作业或进程对内存的要求而改变分区的建立是在作业的处理过程中进行的。且其大小可随作业或进程对内存的要求而改变。这
8、就改变了固定分区法中那种即使是小作业也要占据大分区的浪费现象,从而提高了内存的利用率。结构体定义进程分别用两种调度算法对伍个进程进行调度。每个进程可有三种状态;执行状态(RUN)、就绪状态(READY,包括等待状态)和完成状态(FINISH),并假定初始状态为就绪状态。(一)进程控制块结构如下: NAME进程标示符 PRIO/ROUND进程优先数/进程每次轮转的时间片数(设为常数2) CPUTIME进程累计占用CPU的时间片数 NEEDTIME进程到完成还需要的时间片数 STATE进程状态 NEXT链指针注: 1.为了便于处理,程序中进程的的运行时间以时间片为单位进行计算; 2.各进程的优先数
9、或轮转时间片数,以及进程运行时间片数的初值,均由用户在程序运行时给定。(二)进程的就绪态和等待态均为链表结构,共有四个指针如下: RUN当前运行进程指针 READY就需队列头指针 TAIL就需队列尾指针 FINISH完成队列头指针 3.3详细设计1. 变量申明与数据结构 1. 在优先数算法中,进程优先数的初值设为: 50-NEEDTIME每执行一次,优先数减1,CPU时间片数加1,进程还需要的时间片数减1。在轮转法中,采用固定时间片单位(两个时间片为一个单位),进程每轮转一次,CPU时间片数加2,进程还需要的时间片数减2,并退出CPU,排到就绪队列尾,等待下一次调度。 2. 程序的模块结构提示
10、如下:整个程序可由主程序和如下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 #incl
11、ude typedef struct node char name20; /*进程的名字*/ int prio; /*进程的优先级*/ int round; /*分配CPU的时间片*/ int cputime; /*CPU执行时间*/ int needtime; /*进程执行所需要的时间*/ char state; /*进程的状态,W就绪态,R执行态,F完成态*/ int count; /*记录执行的次数*/ struct node *next; /*链表指针*/ PCB; PCB *ready=NULL,*run=NULL,*finish=NULL; /*定义三个队列,就绪队列,执行队列和完
12、成队列*/ int num; void GetFirst(); /*从就绪队列取得第一个节点*/ void Output(); /*输出队列信息*/ void InsertPrio(PCB *in); /*创建优先级队列,规定优先数越小,优先级越高*/ void InsertTime(PCB *in); /*时间片队列*/ void InsertFinish(PCB *in); /*时间片队列*/ void PrioCreate(); /*优先级输入函数*/ void TimeCreate(); /*时间片输入函数*/ void Priority(); /*按照优先级调度*/ void Rou
13、ndRun(); /*时间片轮转调度*/ int main(void) char chose; 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(); return 0; 3.5程序运行 输
14、入第一个进程输入第二个进程输入第三个进程结果四、总结 先模拟建立进程就绪链表-置所有进程的到达时间均为0,依PCB链接顺序从第一个进程PCB开始,使进程编号依次为0,1,2,3,4;就绪链表中进程的数量,由常量num 控制;再 模拟建立调度函数-取表头PCB,修改进程执行时间,得到的新时间,即为剩余执行时间,当剩余时间小于或等于0时,将此进程的PCB取出,依完成的先后次序链到完成链表中,记录当前完成进程的完成时间,同时修改就绪链表表头;最后 计算和打印里程调度信息-计算出各进程周转时间及所有进程的平均周转时间。五、参考文献1 计算机操作系统教程(第3版) 清华大学出版社 张尧学 主编2 计算机操作系统教程习题解答与实验指导 清华大学出版社 张尧学 主编3 C+程序设计教程 武汉理工大学出版社 闵联营 何克右 主编
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1