文档介绍:目录
需求分析………………………2
系统总框图……………………2
程序运行平台…………………2
模块的设计分析………………3
程序的说明……………………3
特色算法………………………5
调试分析………………………9
设计总结………………………10
参考文献………………………10
需求分析
社会的发展,计算机的用途越来越重要了,操作系统是计算机的一个很重要部分。在OS中调度的实质是一种资源分配,调度算法就是资源分配策略所规定的资源分配算法。
由于运行性能(吞吐量的大小、周转时间的长短、响应的及时性等等),很大程度都要取决于调度,各项作业进程进入系统后要处理,如果不使用算法进行各进程优先权调度处理,会直接降低系统的运行性能。而算法为调度提供了必要的支持。
因此,设计关于调度的一些算法,让系统能够有最优化的调用系统资源,对各作业、进程的调度有最佳的调度,提高系统的运行性能,使计算机达到最佳运行状态,这是非常有必要的。
系统总框图
主函数
时间片轮转
先来先服务
抢占优先
非抢占优先
短作业优先
打印结果
随机生成进程
输出结果
程序运行平台
Windows XP 系统下的Visual C++ 。
模块设计分析
主函数模块:要求输入进程个数,选择菜单:1、时间片轮转 2、非抢占优先 3、抢占优先 4、先来先服务 5、短作业优先然后调用各个函数运行
PCB结构定义:包括了进程的名称、状态、开始时间、服务时间、完成时间、周转时间、带权周转时间等等…
PCBnode类:运行、结束运行、队列结点操作……等,以及对PCBnode类的访问函数等等…
随机生成进程:通过随机函数,随机生成进程的各项属性……
打印进程状态:。
时间片轮转算法:每执行一次,cpu时间加1,还需时间减1,每次执行时间片指定次数,时间片执行完毕排到就绪队列尾部。在这里要考虑三个因素:。。。
抢占式优先调度算法:从就绪队列中取出最优先的进程送到运行队列,每运行一次,正在运行的进程优先数减1,等待的进程优先数加1,如果就绪队列中的最大优先数进程的优先数大于正在运行的优先数,则运行的进程让出cpu,排到就绪队列的尾部,将最大优先数的进程送进运行队列。
非抢占优先调度算法:从就绪队列中取出最优先的进程送到运行队列,该进程便一直执行下去,直至完成;如果运行结束或要执行IO再重新调度。
先来先服务算法:当在作业调度中采用该算法时,每次调度时从后备作业队列中,选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列中。然后每次调度就从就绪队列中取出最先到达的进程送到运行队列,如果运行结束或要执行IO再重新调度。
短作业(进程)调度算法:短作业调度算法是从后备队列中选择一个或若干个估计时间最短的作业,将它们调入内存中运行。短进程调度算法是从就绪队列中选出一估计运行时间最短的进程,将处理机分配给它,使它立即执行到完成,或发生某事件而被阻塞放弃处理机再重新调度。两种都是从就绪队列中取出最短的进程送到运行队列,如果运行结束或要执行IO再重新调度
程序的说明
类的说明
Pcbnode类中的函数和功能说明:
pcbnode();//构造函数,初始化
~pcbnode();//析构函数
int run(); //运行操作
int runend();//运行结束
void runio();//IO操作
int ioend();//IO结束
int insertnode(pcbnode *p,pcbnode *q);
//在q后插入结点p
int deletenode(pcbnode *p,pcbnode *q);
//删除p结点,q为p的前驱
int addnode(pcbnode *p);//增加结点
int pcbnode::isio();//是否开始IO
Pcbnode
pcbs *pcb;
pcbnode *link;
pcbnode();
~pcbnode();
int run();//运行操作
int runend();//运行结束?
void runio();//IO操作
int ioend();//io结束?
int insertnode(pcbnode *p,pcbnode *q);//在q后插入结点p
int deletenode(pcbnode *p,pcbnode *q);//删除p结点,q为p的前驱
int addnode(pcbnode *p);//增加结点
int p