预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

《操作系统》上机实验报告 专业和班级 成绩 姓名学号 课程名称操作系统实验名称进程调度 1.进程调度是处理机管理的核心内容。 2.本实验要求用C语言编写和调试一个简单的进程调度程序。 3.通过本实验可以加深理解有关进程控制块、进程队列的概念,并体会和了解优 实验目 先数和时间片轮转调度算法的具体实施办法。 的和要 求 1、处理机调度的基本概念。 处理器是计算机系统中的重要资源,处理器调度算法不仅对处理器的利用效率 和用户进程的执行有影响,同时还与内存等其他资源的使用密切相关,对整个计算 机系统的综合性能指标也有重要影响。 2、进程调度方式: 1、抢占式(剥夺式): 当一个进程正在处理器上运行时,系统可以根据规定的原则剥夺分配给它的处 理器,而把处理器分配给其他进程使用。 理论基2、非抢占式(非剥夺式): 础 一旦某个进程开始执行后便不再出让处理器,除非该进程运行结束或发生了某 个事件不能继续执行。 3、本实验所用调度算法 a)优先数调度; 为每个进程设置一个优先数,进程调度程序每次选择就绪队列中优先数最大者 占有处理器。 b)循环轮转调度。 基本思想是:系统确定一个适当大小的时间片,所有进程排成一个就绪队列按 #include<stdio.h> #include<dos.h> #include<stdlib.h> #include<conio.h> #include<iostream.h> #defineP_NUM5//共有5个进程 #defineP_TIME50//作为优先数计算时所用的值 enumstate{ ready, execute, block,finish };//进程的状态,使用枚举 structpcb { charname[4];//进程名称 intpriority;//进程优先级 intcputime;//已经占有cpu运行的时间 intneedtime;//还需要运行的时间 intcount;//在时间片轮转法中使用的 intround;//在时间片轮转法中使用的 stateprocess;//进程的状态 pcb*next;//指向下一个进程的pcb }; pcb*get_process()//通过输入各进程的值来建立pcb队列,并返回其首元素的指针 { pcb*q; 实pcb*t; pcb*p; 验inti=0; 算请输入进程名与时间 法while(i<P_NUM) 主 { 体q=(structpcb*)malloc(sizeof(pcb)); 内cin>>q->name;cin>>q->needtime;q->cputime=O; 容q->priority=P_TIME-q->needtime; 及q->round=0;q->count=0; q->process=ready; q->next=NULL; if(i==0) { p=q; t=q; } else {t->next=q;t=q;}i++; } returnp; } voiddisplay(pcb*p)//显示本轮运行后的进程各状态情况 { 进程各状态情况 名称进入时间还需时间优先级状态 while(p) { coutvvp->name; coutvvp->cputime; coutvvp->needtime; cout<vp_>priority; switch(p->process)//对枚举类型的输出方法 { 就绪 执行 阻塞 完成 }p=p->next; } } intprocess_finish(pcb*q)//判断所有的进程是否运行结束 {- intb=1; while(q&&b) { b=b&&q->needtime==O;q=q_>next; }returnb; } voidcpuexe(pcb*q)//优先级调度算法的一次执行 { pcb*t; t=q; inti=0; while(q) { if(q->process!=finish) { q_>process=ready; if(q->needtime==0)q->process=finish; }if(i<q->priority)if(q->process!=finish) {t=q; i=q->priority; }q=q->next; } t->needtime-=1; t_>priority_=3;if(t->needtime==0) t->process=finish;t->cputime+=1; } voidpriority_cal()//优先级调度算法 { pcb*p; P=get_process();〃取得进程队列 intcpu=0; while(!process_finish(p))//若进程并未全部