静态优先权优先算法地进程调度程序

上传人:人*** 文档编号:470031573 上传时间:2022-10-31 格式:DOC 页数:20 大小:354KB
返回 下载 相关 举报
静态优先权优先算法地进程调度程序_第1页
第1页 / 共20页
静态优先权优先算法地进程调度程序_第2页
第2页 / 共20页
静态优先权优先算法地进程调度程序_第3页
第3页 / 共20页
静态优先权优先算法地进程调度程序_第4页
第4页 / 共20页
静态优先权优先算法地进程调度程序_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《静态优先权优先算法地进程调度程序》由会员分享,可在线阅读,更多相关《静态优先权优先算法地进程调度程序(20页珍藏版)》请在金锄头文库上搜索。

1、word静态优先权优先算法的进程调度程序学 院专 业学 生 姓 名学 号指导教师某某 21014年 3 月 19 日目 录析1描述112.总体设计112据结构设计33.详细设计3344455.使用说明76.心得体会87.附录87.1 源代码87.2 参考文献17 / 1.系统需求分析问题描述1)设计并实现一个采用静态优先权算法的进程调度演示程序。并且求出每个进程的周转时间以与带权周转时间。2)静态优先权是在创建进程时确定的,且在进程的整个运行期间保持不变.一般地,优先权是利用某一X围内的一个整数来表示的,例如,07或0255中的某一整数, 又把该整数称为优先数.只是具体用法各异:有的系统用0表

2、示最高优先权,当数值愈大时,其优先权愈低;而有的系统恰恰相反.确定进程优先权的依据有如下三个方面:a.进程类型.(系统进程/用户进程)b.进程对资源的需求.(需求量的大小)c.用户要求.(用户进程紧迫程度)3)本程序采用优先级数字大的优先权大。功能要求1每一个进程有一个PCB,其内容可以根据具体情况设定。2进程数、进入内存时间、要求服务时间、优先级等均可以在界面上设定。3可读取样例数据要求存放在外部文件中进展进程数、进入内存时间、进程优先级的初始化。4可以在运行中显示各进程的状态:就绪、执行 由于不要求设置互斥资源与进程间的同步关系,故只有两种状态。5具有一定的数据容错性。2.总体设计总体设计

3、图系统总体设计如图2.1所示。0、完毕1、进程的创建与模拟输入进程数输入优先级输入进入内存时间输入服务时间输出运行结果静态优先权优先算法2、读取文件数据与模拟输出运行结果图2.1系统总体设计 各模块功能1)void buildProcess():手动创建进程。2)struct PCB * callMemory():将符合条件的进程调入内存。3)void ListAllPCB(struct PCB *h):打印所有进程到屏幕上。4)void Menu():菜单以与执行。5)void newPCB():创建进程。在1中被调用。6)void readFromFile():从文件中读取数据。7)voi

4、d readyList(struct PCB *pcb):就绪列表。8)void release(struct PCB *pcb),void releaseR(struct PCB *pcb):释放进程。9)void run():执行静态优先级进程调度算法。10)struct PCB * runTheProcess():标识要执行的进程。11)void setNewPCB(char *name,int pri,int entime,int sertime):创建进程。在6中被调用。12)int timeOfData(FILE *f):计算文件中进程数量。在6中被调用。相关数据结构设计结构体:s

5、truct PCB *head,*readyHead;3.详细设计采用C语言定义的相关数据类型struct PCBint ArrivalTime;int ServiceTime;char number10;struct PCB *head,*thisP,*newP;/动态接收进程与详细struct PCB *readyHead;/动态存储就绪队列采用结构体数组,创建一个进程,包含进程相关信息:进程名称、进程优先级、进程到达时间、进程服务时间。调度算法的主要实现struct PCB * callMemory()/调入内存,返回调入内存的链表节点。将达到进程进入内存时间的所有进程调入内存。void

6、 readyList(struct PCB *pcb)/单链表的形式创建就绪队列。将进入内存的进程调入就绪列表。struct PCB * runTheProcess()/执行的进程,返回要执行进程的节点。将就绪列表中满足运行条件的进程标识下来并返回节点。void run()/静态优先权算法。将执行的程序释放。调入新的满足执行条件的进程。就绪列表释放。系统调试在程序设计初期。本想采用冒泡排序将进入内存的进程进展优先级排序,不过最后总是排序失败。最后想到我进展的是进程调度模拟,应该就有进程调入内存以与调入CPU,因此之后设计其他函数进展调入内存、CPU的模拟。而且最后选择新建就绪列表,进展选择插入

7、就绪列表中。以与随时使用屏幕打印语句printf来测试程序各个阶段执行状态。功能实现界面1主菜单:如图4.1所示。图4.1主菜单2进程调度模拟。图4.2创建进程2)图4.3进程运行过程3)进程在调度算法中,计算出的具体的完成时间,周转时间,带权时间。如图4.4所示。图4.4进程运行结果3选择2:从文件读取数据。如图4.5。在f:test.txt中,数据如下。/从文件读取数据/*数据格式如下进程名优先级到达时间服务时间proc12110proc22111proc3322*/图4.6 文件读取数据与运行结果5.使用说明根据屏幕提示输入即可。需要用户注意的是优先级整数表示越大优先权越大。6.心得体会

8、本次课程设计,第一天上午去拿课程设计题目采用静态优先权优先算法的进程调度程序,下午开始查找资料并且构思。在网上看到一些课程设计用到的有数据结构体struct,便再度拿出C语言书本以与数据结构课本,主要看了数据结构体和单链表方面的知识。上面也曾说到,程序设计初期打算在单链表中直接使用冒泡排序法进程优先级的排序,总是失败。后来意识到,进程调度不仅要考虑到进程优先级,同时还有进入内存的时间。因为只有到达进入内存的时间,进程才会被调入内存中,进一步通过满足条件被调入CPU中执行,或者说分配CPU进而执行。所以索性模拟出调入内存方法以与调入CPU方法,与此有极大关系的是单链表就绪列表的建立。进展代码编写

9、以与测试,从而模拟进程调度算法完成。7.附录7.1 源代码#include#include#includeint SequenceNumber=1;/进程编号int ProcessAmount;/进程数量int StartCount=0;/调入内存进程计数struct PCB/进程控制块int No;/进程号char name16;/进程名int enterMemoryTime;/进入内存时间int serviceTime;/服务时间int priority;/优先级struct PCB *next;struct PCB *head,*thisP,*newP;/动态接收进程与详细struct

10、PCB *readyHead;/动态存储就绪队列/函数声明int getch();int timeOfData(FILE *);void ListAllPCB();void Menu();void printPCB(struct PCB *,int,int,int,double);void printPCBP(struct PCB *);void printField();void printFieldP();void release(struct PCB *);void releaseR(struct PCB *);void setNewPCB(char *,int,int,int);str

11、uct PCB * runTheProcess();void newPCB()/建立PCBnewP=(struct PCB *)malloc(sizeof(struct PCB);if(head=NULL)/判断头节点是否为空head=newP;/为空,头节点指向新开辟的内存elsethisP=head;while(thisP-next!=NULL)thisP=thisP-next;thisP-next=newP;/遍历单链表,找到最后一个元素thisP=newP;thisP-No=SequenceNumber;SequenceNumber+;printf(进程号 %dn,thisP-No);

12、printf(输入进程名:);scanf(%s,thisP-name);printf(输入优先级:);scanf(%d,&thisP-priority);printf(输入进入内存时间:);scanf(%d,&thisP-enterMemoryTime);printf(输入服务时间:);scanf(%d,&thisP-serviceTime);thisP-next=NULL;void buildProcess()/创建进程int i=0;printf(输入进程数量:);scanf(%d,&ProcessAmount);while(inext!=NULL)thisP=thisP-next;thisP-next=newP;thisP=newP;strcpy(thisP-name,pcb-name);thisP-No=pcb-No;thisP-priority=pcb-priority;thisP-enterMemoryTime=pcb-enterMemoryTime;thisP-serviceTime=pcb-serviceTime;thisP-next=NULL;struct PCB * callMemory()/调入内存,返回调入内存的链表节点int at;/到达时间struct PCB *markP;if(head=NULL)printf(程序没有找到。n);else

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号