处理机调度实验报告+下载.doc_第1页
处理机调度实验报告+下载.doc_第2页
处理机调度实验报告+下载.doc_第3页
处理机调度实验报告+下载.doc_第4页
处理机调度实验报告+下载.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

黄冈师范学院提高型实验报告实验课题 处理机调度算法基于优先数调度算法实现(实验类型:综合性 设计性 应用性)实验课程操作系统原理实验时间20082009第一学期学生姓名专业班级学 号一、实验目的和要求成绩: 1、让学生能掌握Linux系统结构、实现机理和各种典型算法2、系统地了解操作系统的设计和实现思路3、增强实际应用能力和动手操作能力4、设计进程调度算法,进程数不定5、包含几种调度算法,并加以实现6、输出进程的调度过程进程的状态、链表等二、实验条件Windows 2000/Windows ME/Linux等操作系统,装有PASCAL、C、C+等语言工具的环境三、实验原理分析无论是在批处理系统,分时系统还是实时系统,用户进程数一般都多于处理机数,这将导致用户数相互争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态的把处理机分配给处于就需队列中的某一个进程,以使之执行。在操作系统中,由于进程总数多于处理机,它们必然竞争处理机。进程调度的功能就是按一定策略、动态地把处理机分配给处于就绪队列中的某一进程并使之执行。根据不同的系统设计目标,可有多种选择某一进程的策略。本实验是采用优先数法进程调度算法来模拟演示进程调度,编程语言为 C 语言。四、实验方案或步骤1、需求分析1 题目优先权法算法实现简化假设1) 进程为计算型的(无I/O)2) 进程状态:ready、running、finish3) 进程需要的CPU时间以时间片为单位确定2 算法描述1) 优先权法动态优先权当前运行进程用完时间片后,其优先权减去一个常数。2) 轮转法2、概要设计(各个模块的流程图及主函数的流程图,至少包括3-4 个)本程序用5个进程,每个进程用一个进程控制块PCB来表示 设计流程图3、详细设计(各个模块的算法实现,即各个用户自己的头文件)*/首先定义头结点headnode来标志队首*/ #include #include #include4、代码清单(包含头文件和主函数)#include#includeusing namespace std;#define MAX 10struct task_structchar name10; /*进程名称*/int number; /*进程编号*/float come_time; /*到达时间*/float run_begin_time; /*开始运行时间*/float run_time; /*运行时间*/float run_end_time; /*运行结束时间*/int priority; /*优先级*/int order; /*运行次序*/int run_flag; /*调度标志*/tasksMAX;int counter; /*实际进程个数*/int fcfs(); /*先来先服务*/int ps(); /*优先级调度*/int sjf(); /*短作业优先*/int hrrn(); /*响应比高优先*/int pinput(); /*进程参数输入*/int poutput(); /*调度结果输出*/int main() int option;pinput();printf(请选择调度算法(04):n);printf(1.先来先服务n);printf(2.优先级调度n);printf( 3.短作业优先n);printf( 4.响应比高优先n);printf( 0.退出n);scanf(%d,&option);switch (option) case 0:printf(运行结束。n);break;case 1:printf(对进程按先来先服务调度。nn);fcfs();poutput();break;case 2:printf(对进程按优先级调度。nn);ps();poutput();break;case 3:printf(对进程按短作业优先调度。nn);sjf();poutput();break;case 4:printf(对进程按响应比高优先调度。nn);hrrn();poutput();break;int fcfs() /*先来先服务*/float time_temp=0;int i;int number_schedul;time_temp=e_time;for(i=0;icounter;i+)tasksi.run_begin_time=time_temp;tasksi.run_end_time=tasksi.run_begin_time+tasksi.run_time;tasksi.run_flag=1;time_temp=tasksi.run_end_time;number_schedul=i;tasksnumber_schedul.order=i+1;return 0;int ps() /*优先级调度*/float temp_time=0;int i=0,j;int number_schedul,temp_counter;int max_priority;max_priority=tasksi.priority;j=1;while (jtasksi.priority)max_priority=tasksj.priority;i=j;j+; /*查找第一个被调度的进程*/*对第一个被调度的进程求相应的参数*/number_schedul=i;tasksnumber_schedul.run_begin_time=tasksnumber_e_time;tasksnumber_schedul.run_end_time=tasksnumber_schedul.run_begin_time+tasksnumber_schedul.run_time;tasksnumber_schedul.run_flag=1;temp_time=tasksnumber_schedul.run_end_time;tasksnumber_schedul.order=1;temp_counter=1;while (temp_countercounter)max_priority=0;for(j=0;jcounter;j+) if(e_timemax_priority)max_priority=tasksj.priority;number_schedul=j; /*查找下一个被调度的进程*/*对找到的下一个被调度的进程求相应的参数*/tasksnumber_schedul.run_begin_time=temp_time;tasksnumber_schedul.run_end_time=tasksnumber_schedul.run_begin_time+tasksnumber_schedul.run_time;tasksnumber_schedul.run_flag=1;temp_time=tasksnumber_schedul.run_end_time;temp_counter+;tasksnumber_schedul.order=temp_counter;return 0;int sjf() /*短作业优先*/float temp_time=0;int i=0,j;int number_schedul,temp_counter;float run_time;run_time=tasksi.run_time;j=1;while (jcounter)&(e_time=e_time)if (tasksj.run_timetasksi.run_time)run_time=tasksj.run_time;i=j;j+; /*查找第一个被调度的进程*/*对第一个被调度的进程求相应的参数*/number_schedul=i;tasksnumber_schedul.run_begin_time=tasksnumber_e_time;tasksnumber_schedul.run_end_time=tasksnumber_schedul.run_begin_time+tasksnumber_schedul.run_time;tasksnumber_schedul.run_flag=1;temp_time=tasksnumber_schedul.run_end_time;tasksnumber_schedul.order=1;temp_counter=1;while (temp_countercounter)for(j=0;jcounter;j+)if(e_time=temp_time)&(!tasksj.run_flag) run_time=tasksj.run_time;number_schedul=j;break;for(j=0;jcounter;j+) if(e_time=temp_time)&(!tasksj.run_flag)if(tasksj.run_timerun_time)run_time=tasksj.run_time;number_schedul=j;/*查找下一个被调度的进程*/*对找到的下一个被调度的进程求相应的参数*/tasksnumber_schedul.run_begin_time=temp_time;tasksnumber_schedul.run_end_time=tasksnumber_schedul.run_begin_time+tasksnumber_schedul.run_time;tasksnumber_schedul.run_flag=1;temp_time=tasksnumber_schedul.run_end_time;temp_counter+;tasksnumber_schedul.order=temp_counter;return 0;int hrrn() /*响应比高优先*/ int j,number_schedul,temp_counter;float temp_time,respond_rate,max_respond_rate;/*第一个进程被调度*/tasks0.run_begin_time=e_time;tasks0.run_end_time=tasks0.run_begin_time+tasks0.run_time;temp_time=tasks0.run_end_time;tasks0.run_flag=1;tasks0.order=1;temp_counter=1;/*调度其他进程*/while(temp_countercounter)max_respond_rate=0;for(j=1;jcounter;j+)if(e_timemax_respond_rate)max_respond_rate=respond_rate;number_schedul=j; /*找响应比高的进程*/tasksnumber_schedul.run_begin_time=temp_time;tasksnumber_schedul.run_end_time=tasksnumber_schedul.run_begin_time+tasksnumber_schedul.run_time;temp_time=tasksnumber_schedul.run_end_time;tasksnumber_schedul.run_flag=1;temp_counter+=1;tasksnumber_schedul.order=temp_counter;return 0;int pinput() /*进程参数输入*/ int i;printf(please input the process counter:n);scanf(%d,&counter);for(i=0;icounter;i+) printf(*n);printf(please input the process of %d th :n,i+1);printf(please input the name:n);scanf(%s,);printf(please input the number:n);scanf(%d,&tasksi.number);printf(please input the come_time:n);scanf(%f,&e_time);printf(please input the run_time:n);scanf(%f,&tasksi.run_time);printf(please input the priority:n);scanf(%d,&tasksi.priority);tasksi.run_begin_time=0;tasksi.run_end_time=0;tasksi.order=0;tasksi.run_flag=0;return 0;int poutput() /*调度结果输出*/int i;float turn_round_time=0,f1,w=0;printf(name number come_time run_time run_begin_time run_end_time priority order turn_round_timen);for(i=0;icounter;i+)f1=tasksi.run_end_e_time;turn_round_t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论