之前在进程管理的初步学习中了解到进程在操作系统看来是程序的运行态表现形式。现在主要讨论进程调度程序,它是确保进程能有效工作的一个内核子系统。
调度程序负责将哪个进程投入运行,何时运行以及运行多长时间。
进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统。
调度程序是Linux这样多任务操作系统的基础。只有通过调度程序的合理调度,系统资源才能最大限度的发挥作用,多进程才会有并发执行的效果。
调度程序的原理:只要有可以执行的进程,那么就总会有进程正在执行 。但是只要系统中可运行的进程数目比处理器的个数多,就注定某一给定时刻有一些进程不能执行。这些进程在等待运行。在一组处于可运行状态的进程中选择一个来执行,是调度程序所需完成的基本工作。
在分析进程调度之前我们先来看几个基本的概念:
- 进程互斥:进程互斥指的是若干个进程都要使用某一共享资源,任何时刻最多允许一个进程使用,其他使用该资源的进程必须等待,直到占用该资源的进程释放了该资源为止。
临界区:进程中访问临界资源的那段程序代码称为临界区
因此为了实现临界资源的互斥访问,应该保证进程间互斥进入各自临界区。
- 进程同步:一组并发进程按一定顺序执行的过程称为进程间的同步(类似于流水线的过程)
合作进程间互相发送的信号称为消息或事件
- 进程调度:按照一定的算法,从一组待运行的进程中选出一个来占有CPU运行
- 死锁:多个进程因竞争资源而形成的一种僵局。若无外力作用,谁也无法继续往前
进程调度
进程的调度方式主要有:抢占式和非抢占式
调度算法有:
1)先来先服务
2)短进程优先算法
短进程优先算法:主要是根据进程的运行长短来决定,假设A运行时间为5秒,B为1秒,C为3秒。则在进程调度中,先进行B,再C,最后A
3)高优先级优先调度算法
在Linux操作系统中,数值越大,优先级越小,但是在有些操作系统中,数值越大,优先级越高
再来看短进程优先算法中的A/B/C,则在进程调度中,先运行A再运行C,接着运行B
4)时间片轮转法
依然按照上述的A/B/C而言,时间片是一个数值,它表明进程在被抢占前所能持续运行的时间。关于时间片大小的选择,在此不做详细的分析。但是如果时间片过小会明显增大进程切换带来的处理器耗时,而时间排尿过长会导致系统对交互的响应表现欠佳。
对于上述的A/B/C而言,如果时间片选择0.2s,则A先运行0.2秒,A释放CPU,由B来运行。ABC是按照队列序列运行。