西安建筑科技大学华清学院课程设计(论文)
2.问题描述
此次做的进程调度模拟系统,用户可以输入各进程信息(包含进程名、到达时间、运行时间)。输入进程数,然后输入进程的提交时间和运行时间,显示先来先服务调度算法和非强占式短进程优先调度算法的作业号、提交时间、运行时间、开始时间、结束时间、周转时间、带权周转时间、执行时间、平均周转时间和平均带权周转时间。 3.需求分析
3.1 数据需求
需要用户自行键入进程数,进程提交时间和运行时间.
3.2 基本功能需求
模拟进程调度,能够处理以下的情形:
⑴ 能够选择不同的调度算法(要求中给出的调度算法); ⑵ 能够输入进程的基本信息,如进程名、到达时间和运行时间等;
⑶ 根据选择的调度算法显示进程调度队列;
⑷ 根据选择的调度算法计算平均周转时间和平均带权周转时间。
3.3 非功能性需求
用户界面需求:简洁、易用、易懂、友好的用户界面。 硬件要求:装有Visual C++6.0的计算机。
可靠性需求:保证用户在正常使用本系统时,用户的操作或误操作不会产生数据的丢失。
第2页 共16页
西安建筑科技大学华清学院课程设计(论文)
4.概要设计
4.1 数据结构
此次程序从大的方面来说是利用链表来实现的,在程序中定义了一个结构体struct PCB用来保存每一条记录,每个结点包括进程名(作业名)、进程的提交时间、运行时间、开始时间、结束时间、周转时间、带权周转时间、平均周转时间和平均带权周转时间。
定义一个double型的handtime(提交时间),一个double型的asktime(运行时间)、starttime(开始时间)、endtime(结束时间)、usetime(周转时间)、right(带权周转时间)以及整型的runorder(执行的顺序)和num(进程数),还定义一个指针next。
4.2 系统包含的函数
4.2.1 先来先服务调度算法: void FCFS(pro p[],int n)
4.2.2非强占式短进程优先调度算法: void SJF(pro p[],int n) 4.2.3主函数:
int main()
4.3 函数间的关系
函数SJF和函数FCFS都在主函数中进行调用
第3页 共16页
西安建筑科技大学华清学院课程设计(论文)
4.4 系统功能模块图
主函数 先来先服务调度算法 短进程优先调度算法 输入程序数 输入运行时间和提交时间 输出 图4-1系统功能模块图
5.详细设计
5.1 结构体的详细定义
Struct pro的定义如下: struct pro {
double handtime; double asktime;
第4页 共16页
西安建筑科技大学华清学院课程设计(论文) double starttime; double endtime; double usetime; double right; int runorder; int num; pro *next; };
5.2 系统函数详细介绍
先来先服务调度算法有两种情况:一是进程的提交时间不一样,是根据到达的先后顺序来执行的,先到达先执行;二是进程的提交时间一样,即所有的进程的到达时间是一样的,要看进程的执行顺序,在前的进程先执行。
非强占式短进程优先调度算法,有两种情况:一是进程的到达的时间不一样,那么首先执行第一个到达的进程,执行完后,然后比较剩下进程的到达时间和运行时间,先到达的和运行时间短的进程先运行;二是进程的到达时间一样,比较所有的进程的运行时间,运行时间短的进程先执行。
5.3 系统功能模块介绍
系统功能模块主要分为两大部分:先来先服务调度算法和非强占式短进程优先调度算法.
第5页 共16页
西安建筑科技大学华清学院课程设计(论文)
5.4 具体模块设计
5.4.1先来先服务调度算法(图1)
图5-1先来先服务调度
第6页 共16页