单处理机调度
一、实验目的
在多道程序或多任务系统中,系统同时处于就绪态的进程有若干个。也就是说能运行的进程数远远大于处理机个数。为了使系统中的各进程能有条不紊地运行,必须选择某种调度策略,以选择一进程占用处理机。要求学生设计一个摸拟单处理机调度的算法,以巩固和加深处理机调度的概念。
二、实验要求与内容、过程与结果
1、运行例4-1程序,输入进程调度相关信息数据如表4-1:
表4-1 进程信息
进程名 | 运行时间 | 到达时间 |
Pro1 | 20 | 38 |
Pro2 | 80 | 90 |
Pro3 | 40 | 110 |
请记录运行结果,画出进程调度的时序图。
运行结果:
时序图:
2、认真阅读例4-1程序,描述程序中各函数的功能,并画出流程图。
unsigned long current; //记录系统当前时间的变量*
void inputprocess(); //建立进程函数
int readyprocess(); //建立就绪队列函数
int readydata(); //判断进程是否就绪函数
int runprocess(); //运行进程函数
流程图:
3、参照例4-1程序,编写一个程序(程序名为sy4-1.c),实现基于非抢占的优先级进程调度算法。并采用表4-2的数据运行程序,记录运行结果,画出进程调度的时序图。
表4-2 进程信息
进程名 | 优先级 | 运行时间 | 到达时间 |
Pro1 | 2 | 80 | 20 |
Pro2 | 4 | 20 | 30 |
Pro3 | 1 | 40 | 40 |
Pro4 | 3 | 60 | 55 |
注释:优先级值越大,优先级越高。
程序设计:
运行结果:
时序图:
4、修改第3题(编写的程序名sy4-2.c),实现抢占的优先级进程调度算法。并采用表4-2的数据运行程序,记录运行结果,画出进程调度的时序图。
程序设计:
运行结果:
时序图:
总结
单处理机调度是指管理和控制单个处理器执行任务的过程。在单处理机系统中,操作系统需要通过调度算法对进程进行合理的分配和调度,从而达到高效、公平、安全、准确地运行整个系统的目的。
在单处理机调度中,常用的调度算法包括以下几种:
- 先来先服务(FCFS)算法
FCFS算法是最简单的调度算法,即按照进入队列的先后顺序为进程分配处理器,先进入队列的进程先分配处理器。但是,这种算法存在“长作业优先”问题,即长时间执行的作业占用了大量的CPU时间,而短时间执行的作业需要等待较长的时间才能得到处理器的资源。
- 短作业优先(SJF)算法
SJF算法是按照作业执行时间的长度为进程分配处理器,即优先分配执行时间短的进程。这种算法实现了让短作业先完成的目标,减小了平均等待时间和平均周转时间,但是可能导致长作业永远无法获得CPU时间。
- 优先级调度算法
优先级调度算法将进程按照优先级大小为其分配处理器,优先级高的进程先执行。可以通过用户指定进程的优先级或者根据进程的历史行为自动调整优先级。但是,常常存在优先级反转的问题,即低优先级的进程可能在等待高优先级的进程运行时等待了很长时间。
- 时间片轮转(RR)算法
时间片轮转算法是将处理器时间划分为固定长度的时间片,每个进程被分配一个时间片进行执行,时间片用完后,系统将进程暂停并放回到就绪队列中,并为下一个进程分配时间片。这种算法实现了公平性,保证了每个进程都有机会获得处理器时间,但是可能存在上下文切换的开销和时间片长度的选择问题。
除了以上四种常见的调度算法外,还有一些变种算法,如多级反馈队列调度算法、最高响应比优先(HRRN)算法等,它们针对不同的场景和需求,具有不同的特点和优劣势。
总的来说,单处理机调度算法需要考虑诸多因素,如公平性、执行效率、等待时间、响应时间等,不能只兼顾其中之一,需要通过不同的算法进行权衡和选择。同时还需要结合实际应用场景,灵活运用调度算法,从而提高单处理机系统的整体性能和稳定性。