当前位置:首页 > 进程调度算法的模拟实现—毕业设计论文
3.3 全局变量的使用
为了实现各个进程调度算法,本系统使用了五个全局变量。
因各种调度算法都是从就绪队列中选择进程进行调度,故将就绪队列设计为LinkQueue类型的全局变量,其变量名为readyQueue。
为实现时间片轮转算法,本系统使用了三个指向结构体的指针:reaLQ、runLQ、finLQ,reaLQ表示当前时间尚未开始运行的就绪队列,runLQ表示已开始运行但未结束的各个进程组成的队列,finLQ则记录当前已经执行完的进程。
各个进程调度算法,都涉及到时间,故将时间设为全局变量current,以秒为单位输入,其类型为float。在本系统中,current在先来先服务、短进程优先和高优先权优先算法中表示当前时间,而在时间片轮转算法中,current表示时间片。
4 系统总体模块设计
系统总体可分为四个大的模块,即创建进程、输出进程、进程调度算法以及显示系统信息,而进程调度算法又可分为先来先服务、短进程优先、高优先权优先和时间片轮转四个模块。其总体模块如图4-1所示。
图4-1 系统总体模块图
为实现系统以上各个模块,本模拟系统将功能相对完整的代码定义为一个函数。本系统中主要的函数及其功能如表4-1所示。
表4-1 系统主要函数及其功能
函数名 showMainMenu() showSubMenu() createProc() 功能说明 显示系统主菜单 显示进程调度子菜单 创建一个不带有头结点的按到达时间有序的链队列 4
showProc(lq) FCFS(lq) SPF_FPF(lq,flag) RR(lq) copyQueue(lq1,lq2) 输出进程信息 先来先服务算法 短进程优先或高优先权算法,具体由flag确定 时间片轮转调度算法 复制进程队列 refrashCon(phead,current,con) 统计进程队列中到达时间大于current的进程数 readyproc() slicerun() getLev(const PcbPoint &pcb) 将current之前到来的就绪进程全部插入执行队列 对满足执行条件的各个进程分配时间片并执行 求进程的动态优先权
5主要界面的设计与实现
5.1菜单设计
本模拟系统主要有两个菜单,一个主菜单,列出了系统具有的五项功能,可以输入相应字符进行选择操作,其界面如图5-1所示。
图 5-1 主菜单
在主菜单是输入字符C就进入了选择调度算法子菜单,其界面如图5-2所示。
5
图 5-2 选择调度算法子菜单
在主菜单输入字符D就进入了系统信息子菜单,显示本系统的功能信息,其界面设计如图5-3所示。
图 5-3 选系统信息子菜单
5.2菜单的实现
主菜单界面的实现方法主要是调用C语言中的系统函数system(),其参数不同实现不同功能。system(\实现清屏,system(\设置默认控制台前景和背景颜色,system(\〖进程管理模拟器〗 Version[1.0]\设置界面的标题和版本信息。其它就是对菜单项的格式输出。showMainMenu()函数的实现代码如下所示。
void showMainMenu() //显示主菜单 {
system(\ cout< 6 cout<<\ cout<<\ cout<<\ ╔════════════╗\\n\ ║ ☆ 进 程 管 理 器 ☆ ║\\n\ ╚════════════╝\\n\ cout<<\n\ cout<<\欢迎使用该系统,请选择菜单!---------\\n\ cout< [A] 创建进程\\n\\n\[B] 浏览进程信息\\n\\n\[C] 选择调度算法\\n\\n\[D] 系统信息\\n\\n\[E] 退出程序\\n\ cout<<\\\n\ cout<<\请您键入菜单字母代码:\} 子菜单的实现是利用showSubMenu()函数,其实现方法类似主菜单的实现。在此不再赘述。 5.3 系统模拟动态效果的实现 在创建进程,输入要创建的进程信息后,系统会有一个延时,以显示动态效果。其实现方法主要调用C语言系统函数sleep()函数,其实现关键代码如下: Sleep(200); //使程序暂停200秒 printf(\系统正在创建进程中,请稍候...\\n\ Sleep(500); printf(\使光标回到本行行首 printf(\ for(i=0;i<65;i++) { Sleep(18); printf(\ 7
共分享92篇相关文档