OS调度算法实验.docx
- 文档编号:3745709
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:7
- 大小:15.78KB
OS调度算法实验.docx
《OS调度算法实验.docx》由会员分享,可在线阅读,更多相关《OS调度算法实验.docx(7页珍藏版)》请在冰豆网上搜索。
OS调度算法实验
上机一进程调度
一、上机目的:
用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。
二、上机要求:
设计一个有N个进程并发的进程调度程序。
进程调度算法:
采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)算法。
每个进程有一个进程控制块(PCB)表示。
进程控制块可以包含如下信息:
进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。
进程的到达时间为进程输入的时间。
进程的运行时间以时间片为单位进行计算。
每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。
就绪进程获得CPU后都只能运行一个时间片,运行后已占用CPU时间加1。
如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。
每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。
重复以上过程,直到所要进程都完成为止。
#include
#include
#include
#include
#include
#include
#include
#include
constintMax=100000;
usingnamespacestd;
typedefstructPCB
{
stringpro_name;//进程名
intpri_num;//优先数
intarrive_time;//到达时间
intrun_time;//需要运行时间
intcost_time;//已占用CPU时间
charflag;//进程状态
intID;
friendbooloperator<(PCBA,PCBB)//定义优先级pri_num大的在前
{
returnA.pri_num } }; PCBp[Max]; priority_queue priority_queue intmain() { intn,m,i,j; intlen; intall_time;//所有进程需要运行的总时间 intnow_time;//系统当前时间 intpos; while(true) { len=0; all_time=0; now_time=0; cout<<"请输入进程个数: "; cin>>n; cout<<"请依次输入: 进程名,优先数,到达时间,需要运行时间"< for(i=1;i<=n;i++) { cin>>p[i].pro_name>>p[i].pri_num>>p[i].arrive_time>>p[i].run_time; all_time+=p[i].run_time; p[i].cost_time=0; p[i].flag='W'; p[i].ID=i; que_one.push(p[i]); } /*for(i=1;i<=n;i++) { cout< que_one.pop(); }*/ while(all_time) { while(! que_one.empty()) { cout<<"系统当前时间: "< if(que_one.top().arrive_time<=now_time) { p[que_one.top().ID].flag='R'; cout<<"正在运行的进程: "< cout<<"系统当前时间: "< cout<<"进程名: "< cout<<"优先数: "< cout<<"到达时间: "< cout<<"需要运行时间: "< cout<<"已经运行时间: "< cout<<"运行状态: "< cout< p[que_one.top().ID].cost_time+=1; all_time-=1; //que_one.top().cost_time+=1; if(p[que_one.top().ID].cost_time { p[que_one.top().ID].flag='W'; p[que_one.top().ID].pri_num-=1; //que_one.top().pri_num-=1; que_two.push(p[que_one.top().ID]); que_one.pop(); for(i=0;i { que_one.push(que_two.top()); que_two.pop(); } len=0; cout<<"就绪队列的进程: "< //cout<<"yes"< while(! que_one.empty()) { //cout<<"yes1"< cout<<"系统当前时间: "< cout<<"进程名: "< cout<<"优先数: "< cout<<"到达时间: "< cout<<"需要运行时间: "< cout<<"已经运行时间: "< cout<<"运行状态: "< cout< que_two.push(que_one.top()); que_one.pop(); } //cout<<"yes2"< while(! que_two.empty()) { que_one.push(que_two.top()); que_two.pop(); } //cout<<"yes3"< } else { //cout<<"yes4"< p[que_one.top().ID].flag='F'; //que_one.top().flag='F'; cout<<"该进程已经运行完毕! "< cout<<"系统当前时间: "< cout<<"进程名: "< cout<<"优先数: "< cout<<"到达时间: "< cout<<"需要运行时间: "< cout<<"已经运行时间: "< cout<<"运行状态: "< cout< que_one.pop(); } for(i=0;i { que_one.push(que_two.top()); que_two.pop(); } len=0; pos=0; } else { //cout<<"yes5"< pos=0; while(! que_one.empty()) { que_two.push(que_one.top()); if(que_one.top().arrive_time<=now_time) { pos=1; break; } que_one.pop(); len++; } } if(pos! =1) now_time++; //cout<<"yes6"< } //cout<<"yes7"< for(i=0;i { que_one.push(que_two.top()); que_two.pop(); } len=0; } cout<<"所有进程已经运行完毕! "< cout<<"总耗时: "< } return0; } /* 2 D423 B304 3 a343 b101 c264 */
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OS 调度 算法 实验