1、题目:题目: 进程调度进程调度 一、一、 课程设计目的课程设计目的 多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处理 机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。 二、二、 设计要求设计要求 1设计进程调度算法,进程数不定 2包含几种调度算法,并加以实现 3输出进程的调度过程进程的状态、链表等。 三、三、 设计类型设计类型 1题目优先权法、轮转法 简化假设 1)进程为计算型的(无 I/O) 2)进程状态:ready、running、finish 3)进程需要的 CPU 时间以时间片为单位确定 2算法描述 1
2、)优先权法动态优先权 当前运行进程用完时间片后,其优先权减去一个常数。 2)轮转法 四、四、 设计设计流程图流程图 开始 键盘输入进程数 n,和调度方法的选择 优先权法? 轮转法 产生 n 个进程,对每个进程产生一个 PCB,并用 随机数产生进程的优先权及进程所需的 CPU 时间 按优先权大小,把 n 个进程拉成一个就绪队列 初始化其他数据结构区 链首进程投入运行 时间片到, 进程所需的 CPU 时间减 1, 优先权减 3, 输出个进程的运行情况 所需的 CPU 时间=0? 撤销进程 就绪队列为空? 结束 将进程插入就绪队列 N Y N Y Y B N 注意: 1产生的各种随机数的取值范围加以
3、限制,如所需的 CPU 时间限制在 120 之间。 2进程数 n 不要太大通常取 48 个 3使用动态数据结构 4独立编程 5至少三种调度算法 6若有可能请在图形方式下,将 PCB的调度用图形成动画显示。 五设计过程:五设计过程: (1)输入:)输入:进程流文件(1.txt) ,其中存储的是一系列要执行的进程, 每个作业包括四个数据项: 进程名 进程状态(1 就绪 2 等待 3 运行) 所需时间 优先数(0 级最高) 进程 0 1 50 2 进程 1 2 10 4 进程 2 1 15 0 进程 3 3 28 5 进程 4 2 19 1 进程 5 3 8 7 输出: 进程执行流等待时间,平均等待
4、时间 本程序包括:FIFO 算法,优先数调度算法,时间片轮转调度算法 产生 n 个进程,对每个进程用随机数产生进程的轮转时间片数及进程所 需的时间片数,已占用 CPU 的时间片数置为 0 按进程产生的先后次序拉成就绪队列链 链首进程投入运行 时间片到,进程所需时间片数减 1,已占用 CPU 时间片数加 1 输出各进程的运行情况 进程所需时间片数=0? 撤销该进程 就绪队列为空吗? 占用 CPU 的时间片数=轮转时间片数? 占用 CPU 的时间片数置为 0 把该进程插入就绪队列尾 B N Y N Y Y 结束 N (2)程序代码)程序代码 #include #include #include c
5、onst int block_time=10; /定义时间片的长度为 10 秒 const int MAXPCB=100; /定义最大进程数 /定义进程结构体 PCB typedef struct node char name20; /*进程标识符*/ int status;/*进程的状态*/ int time; /*所需时间*/ int privilege;/*优先权*/ int finished; int wait_time; pcb; pcb pcbsMAXPCB; int quantity;/*计数器*/ /初始化函数 void initial() int i; for(i=0;ifn
6、ame; if(fp=fopen(“f:11.txt“,“r“)=NULL) cout“错误,文件打不开,请检查文件名“endl; else while(!feof(fp) fscanf(fp,“%s %d %d %d“,pcbsquantity.name, quantity+; /输出所读入的数据 cout“输出所读入的数据“endl; cout“进程名 进程状态 所需时间 优先数“endl; for(i=0;iquantity;i+) cout“ “pcbsi.name“ “pcbsi.status“ “pcbsi.time“ “pcbsi.privilegeendl; return(1); re