计算机操作系统课程设计源代码《通用处理机调度演示程序源代码》
更新时间:2023-10-13 12:11:01 阅读量: 综合文库 文档下载
《通用处理机调度演示程序源代码》
//短作业优先算法 #define MaxNum 100 #include
int Number; //进程编号 char Name[MaxNum]; //进程名称
int ArrivalTime; //到达时间
int ServiceTime; //开始运行时间 int FinishTime; //运行结束时间 int WholeTime; //运行时间
int run_flag; //调度标志
int order; //运行次序
double WeightWholeTime; //周转时间
double AverageWT_FCFS,AverageWT_SJF; //平均周转时间
double AverageWWT_FCFS,AverageWWT_SJF; //平均带权周转时间 }Process[MaxNum];
int N; //实际进程个数 int SJF(); //短作业优先 int SJF(){ //短作业优先算法
int temp_time=0; //当期那时间 int i=0,j;
int number_schedul,temp_counter; //进程编号,当前已执行进程个数 float run_time;
run_time=Process[i].WholeTime; j=1;
while((j 有两个进程同时到达 { if(Process[j].WholeTime e; } { } j++; run_time=Process[i].WholeTime; i=j; //查找下一个被调度的进程 //对找到的下一个被调度的进程求相应的参数 number_schedul=i; Process[number_schedul].ServiceTime=Process[number_schedul].ArrivalTim Process[number_schedul].FinishTime=Process[number_schedul].ServiceTime +Process[number_schedul].WholeTime; Process[number_schedul].run_flag=1; temp_time=Process[number_schedul].FinishTime; Process[number_schedul].order=1; temp_counter=1; while(temp_counter for(j=0;j for(j=0;j if((Process[j].ArrivalTime<=temp_time)&&(!Process[j].run_flag)) if(Process[j].WholeTime run_time=Process[j].WholeTime; if((Process[j].ArrivalTime<=temp_time)&&(!Process[j].run_flag)) { } run_time=Process[j].WholeTime; number_schedul=j; break; } } number_schedul=j; //查找下一个被调度的进程 //对找到的下一个被调度的进程求相应的参数 Process[number_schedul].ServiceTime=temp_time; Process[number_schedul].FinishTime=Process[number_schedul].ServiceTime +Process[number_schedul].WholeTime; } int Pinput(); //进程参数输入 int Poutput(); //调度结果输出 int Pinput() //进程参数输入 { int i; printf(\请输入进程个数:\\n\scanf(\for(i=0;i printf(\printf(\请输入一个进程:\\n\printf(\请输入进程名称:\\n\scanf(\ Process[number_schedul].run_flag=1; temp_time=Process[number_schedul].FinishTime; temp_counter++; Process[number_schedul].order=temp_counter; }return 0; printf(\请输入到达时间:\\n\ scanf(\printf(\请输入服务时间:\\n\ scanf(\ } Process[i].ServiceTime=0; Process[i].FinishTime=0; Process[i].WeightWholeTime=0; Process[i].order=0; Process[i].run_flag=0; }return 0; int Poutput() //调度结果输出 { int i; float turn_round_time=0,f1,w=0; printf(\ 进程名称 到达时间 运行时间 开始运行时间 结束时间 执行顺序 周 转时间 带权周转时间\\n\ printf(\ %s %d %d %d %d %d %f Process[i].WeightWholeTime=Process[i].FinishTime-Process[i].ArrivalTime; f1=Process[i].WeightWholeTime/Process[i].WholeTime; turn_round_time+=Process[i].WeightWholeTime; w+=f1; printf(\时刻%d :\for(i=0;i %f\\n\viceTime,Process[i].FinishTime,Process[i].order,Process[i].WeightWholeTime,f1); } } printf(\printf(\return 0; //时间片轮转算法 typedef struct node { char name[20]; int round; int cputime; int arrivetime; int needtime; char state; int count; struct node *next; }PCB; PCB *ready=NULL,*run1=NULL,*finish=NULL; int num,i; void GetFirst(); void Output(); void InsertTime(PCB *in); void InsertFinish(PCB *in); void TimeCreate(); void RoundRun(); void GetFirst() /*取得第一个就绪队列节点*/ { run1 = ready; if(ready!=NULL) { run1 ->state = 'R'; ready = ready ->next; run1 ->next = NULL; } } void Output() /*输出队列信息*/ { PCB *p; p = ready; printf(\进程名\\tcpu时间\\t需要时间\\t进程状态\\t计数器\\n\ while(p!=NULL) { printf(\e,p->count); p = p->next; } p = finish; while(p!=NULL) { printf(\e,p->count); p = p->next; } p = run1; while(p!=NULL) { printf(\e,p->count); p = p->next; } } void InsertTime(PCB *in) /*将进程插入到就绪队列尾部*/ { PCB *fst; fst = ready; if(ready == NULL) { in->next = ready; ready = in; } else { while(fst->next != NULL) { fst = fst->next; } in ->next = fst ->next; fst ->next = in; } } void InsertFinish(PCB *in) /*将进程插入到完成队列尾部*/ { PCB *fst; fst = finish; if(finish == NULL) { in->next = finish; finish = in; } else { while(fst->next != NULL) { fst = fst->next; } in ->next = fst ->next; fst ->next = in; } } void TimeCreate() /*时间片输入函数*/ { PCB *tmp; int i; printf(\输入进程名字 到达时间 进程所需时间 时间片大小:\\n\ for(i = 0;i < num; i++) { if((tmp = (PCB *)malloc(sizeof(PCB)))==NULL) { perror(\ exit(1); } scanf(\%d %d %d\->round)); getchar(); tmp ->cputime = 0; tmp ->state ='W'; // tmp->prio=0; tmp ->count = 0; InsertTime(tmp); } } void RoundRun() /*时间片轮转调度算法*/ { int flag = 1;
正在阅读:
计算机操作系统课程设计源代码《通用处理机调度演示程序源代码》10-13
青岛版六年制二年级数学上册第二单元测试09-13
《移动通信》西电第四版课后答案12-31
金融会计考试习题汇总05-05
北语15春《汉语写作》作业3满分答案05-02
第2章 - 核酸化学01-29
论村委会成员管理“三难”现象分析论文06-03
人教版音乐七下《乡村花园》word说课稿12-27
特作证复习题06-02
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 源代码
- 处理机
- 调度
- 演示
- 操作系统
- 通用
- 课程
- 计算机
- 程序
- 设计
- 苯甲苯浮阀塔设计
- 五年级综合实践活动教案
- 年产5000吨山梨醇生产工艺
- 贵州事业单位招考:2016年黔西县第三批招聘事业单位工作人员简章
- 概率、理性与经济学方法 - 《凯恩斯传》阅读笔记
- 皖人社发87号 安徽省就业失业登记证管理实施细则(暂行)
- 淘宝用户的马斯洛层次需求分析
- 福建省漳州市2013届高三下学期3月质量检查文科数学试卷
- 市委组织部2018年工作总结和2019年工作要点(多篇范文)
- 砖厂安全生产管理规章制度
- 截长补短法
- 无机及分析化学在线答案
- 《飞夺泸定桥》第一课时教学设计-教学教案
- 2DPSK与2PSK的比较
- 城市化进程中的农民工问题
- 各类接插头焊接方法(HDMI,DVI,VGA等) - 图文
- 科技示范户申报表
- 2014教师节主持词
- 大班体育游戏活动设计
- 中国古代文化常识专题(高考必备题型)