《高级语言程序设计》
课程设计报告。
计算机与信息工程系。
二0一四年四月二十日。
本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(c)》课程后进行的一次全面的综合练习。本课程设计的目的和任务:
1. 巩固和加深学生对c语言课程的基本知识的理解和掌握
2. 掌握c语言编程和程序调试的基本技能
3. 利用c语言进行基本的软件设计。
4. 掌握书写程序设计说明文档的能力。
5. 提高运用c语言解决实际问题的能力。
硬件要求能运行windows 2000/xp操作系统的微机系统。c语言程序设计及相应的开发环境。
熟悉c语言及c语言开发工具。
1. 分析课程设计题目的要求。
2. 写出详细设计说明。
3. 编写程序**,调试程序使其能正确运行。
4. 设计完成的软件要便于操作和使用。
5. 设计完成后提交课程设计报告。
在多道程序环境下,进程数目往往多于处理机数目,致使他们争用处理机。这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之运行。分配处理机的任务是由进程调度程序完成的。
一个进程被建立后,系统为了便于对进程进行管理,将系统中的所有进程按其状态,将其组织成不同点进程队列。于是系统中有运行进程队列、就绪队列和各种事件的进程等待队列。进程调度的功能就是从就绪队列中挑选一个进程到处理机上运行。
本课题模拟实现进程调度算法,选用了优先数调度算法和时间片轮转算法。优先数调度算法常用于批处理系统中。在进程调度中,每次调度时,系统把处理机分配给就绪队列中优先数最高的进程。
它又分为两种:非抢占式优先数算法和抢占式优先数算法。在非抢占式优先数算法下,系统一旦把处理机分配给就绪队列中优先数最高的进程后,这个进程就会一直运行,直到完成或发生某事件使它放弃处理机,这时系统才能重新将处理机分配给就绪队列中的另一个优先数最高的进程。
在抢占式优先数算法下,系统先将处理机分配给就绪队列中优先数最高的进程度让它运行,但在运行的过程中,如果出现另一个优先数比它高的进程,它就要立即停止,并将处理机分配给新的高优先数进程。时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。
如果在时间片结束时进程还在运行,则cpu将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则cpu当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。
进程调度的设计方法
1。数据结构
1)优先级与时间片的设计
进程因等待放弃cpu时,优先级置为1(高优先级)
进程因时间片到放弃cpu时,优先级置为0(低优先级)
优先1对应时间片4;优先级0对应时间片10。
2)进程控制块(pcb)的内容
进程标识3---9
进程优先级 0,1
进程优先级 0,1
进程等待时间 20
链接指针 2:程序算法
pcb结构,变量与主程序
struct pcb
int pname;
int pri;
int runtime;
int waitting;
struct pcb*next;
pcb[7];
struct pcb*running,ready,wait;
int sin=0;
main()
创建pcb[3]--pcb[9]并插入ready队列;/*pname分别为3--9,
pri=0,runtime=10,waittime=0 */
for(;;系统程序,完成初始化和处理机分派功能 */cast
1设计进程进程控制块pcb表结构,分别适用于优先数调度算法和循环轮转调度算法。
pcb结构通常包括以下信息:进程名,进程优先数(或轮转时间片),进程所占用的cpu时间,进程的状态,当前队列指针等。根据调度算法的不同,pcb结构的内容可以作适当的增删。
建立进程就绪队列。对两种不同算法编制入链子程序。编制两种进程调度算法:1)优先度调度;2)循环轮转调度。
本程序用两种算法对五个进程进行调度,每个进程可有三个状态,并假设初始状态为就绪状态。
为了便于处理,程序中的运行时间以时间片为单位计算,各进程的优先数或轮转时间数以及进程需要运行的时间片数的初值均由用户给定。
在优先数算法中,初始优先数为50-needtime,进程每执行一次,优先数减3,cpu时间片数加1,进程还需要的时间片数减1,在轮转算法中,采用固定时间片,时间片数为2进程每执行1次,cpu时间片数加2,进程还需要的时间数减2,并排列到就绪队列的尾上。
主要数据结构。
定义进程。typedef struct node
int pname;//进程名。
int rtime;//进程要求执行时间。
int rtime;//进程已执行时间。
char state;//进程状态。
struct node * next;//指针。
pnode;
主要**结构。
输入运行的进程数。
先定义第一个进程输出剩余的进程,输入时采用尾插法,最终建立一个循环链表。
对循环链表根据算法思想进行相关的处理。
程序流程图如图.2所示。
第一模块:标题输出函数;使用if-else语句编辑。
第二模块:进程pcb输出;使用if-else语句编辑。
第三模块:输出函数;使用if语句和while语句编辑。
第四模块:优先数的插入算法;使用while语句和if-else语句编辑。
第五模块:轮转法插入函数;使用for语句和if-else语句编辑。
第六模块:优先数创建初始pcb信息;使用if-else语句和for语句编辑。
第七模块:轮转法创建进程pcb;使用if-else语句和for语句编辑。
第八模块:优先数调度算法;使用if-else语句,while语句和if语句编辑。
第九模块:时间片轮转法;if-else语句,while语句和if语句编辑。
第十模块:主函数;使用if-else语句编辑。
程序运行结果如图2.3所示。
图 2.3 运行结果。
*8.3.2 源程序*/
#include ""
#include ""
#include ""
typedef struct node
char name[10]; 进程标识符*/
int prio; /进程优先数*/
int round; /进程时间轮转时间片*/
int cputime; /进程占用cpu时间*/
int needtime; /进程到完成还要的时间*/
int count; /计数器*/
char state; /进程的状态*/
struct node *next; /链指针*/
pcb;pcb *finish,*ready,*tail,*run; /队列指针*/
int n; /进程数*/
*将就绪队列中的第一个进程投入运行*/
firstin()
run=ready; /就绪队列头指针赋值给运行头指针*/
实验1进程调度模拟程序设计
一 实验目的。加深对进程概念和进程调度过程 算法的理解。二 实验内容。1 用c语言设计一个对n个并发进程进行调度的程序,每个进程由一个进程控制块 pcb 结构表示,该进程控制块应包括下述信息 进程标识id 进程优先数priority 并规定优先数与优先权成正比 时间片数chip 进程已经占用cpu的...
高级语言程序设计模拟试卷
卷号 abc2011年5月 机密。湖北师范学院普通本科期末考试模拟试卷。高级语言程序设计 一 单选题 本题共15小题,每小题2分,共30分 从下列四个备选答案中选出一个正确答案,并将其代号写入下表中 1.以下叙述中正确的是。a c程序中的注释只能出现在程序的开始位置和语句的后面。b c程序书写格式严...
高级语言程序设计模拟试卷
卷号 abc2011年5月 机密。湖北师范学院普通本科期末考试试卷。高级语言程序设计 一 单选题 本题共15小题,每小题2分,共30分 从下列四个备选答案中选出一个正确答案,并将其代号写入下表中 1.以下叙述中正确的是。a c程序中的注释只能出现在程序的开始位置和语句的后面。b c程序书写格式严格,...