进程调度方法

1、非抢占式

先来先服务:

按照请求的顺序进行调度。缺点:排在长进程后面的短进程需要等待很长时间,短进程的响应时间太长,用户交互体验变差。

最短作业优先:

按估计运行时间最短的顺序进行调度。缺点:如果一直有短进程到来,那么长进程永远得不到调度,长进程有可能会饿死,处于一直等待短作业执行完毕的状态。

高响应比优先:

只有当前运行的进程主动放弃 CPU 时(正常/异常完成,或主动阻塞),才需要进行调度,(调度时计算所有就绪进程的响应比,为响应比最高的进程分配 CPU)。响应比 = (进程的等待时间 + 进程需要的运行时间) / 进程需要的运行时间。

2、抢占式

Ø 最短剩余时间优先:

谁先完成,谁先被调度。 当一个新的作业到达时,其整个运行时间与当前进程的剩余时间作比较。如果新的进程需要的时间更少,则挂起当前进程,运行新的进程。否则新的进程等待。

Ø 时间片轮转:

每个进程被分配一个时间片。系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU 分配给队首进程,并令其执行一个时间片,当执行的时间片用完时,停止该进程的执行,并将其送往就绪队列的末尾;然后,再把CPU分配给就绪队列中新的队首进程。

Ø 优先级调度:

每个进程被赋予优先级,率先运行优先级最高的就绪进程。

Ø 多级反馈队列:

设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,其余各队列的优先权逐个降低。只有上一个队列没有进程在排队,才能调度当前队列上的进程。

优先级越高,每个进程执行时间片就愈小。

当一个新进程进入内存后,首先放入第一队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如能在时间片内完成,便撤离系统;如在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾。

页面置换

1、LRU 最近最少使用算法:置换出未使用时间最长的一页;实现方式:维护一个所有页面的链表。当一个页面被访问时,将这个页面移到链表表头。链表表尾的页面是最近最少使用的。

2、LFU 最不经常使用算法:把使用最少的页面淘汰掉。

3、OPT 最佳页面置换算法:置换以后不需要或者最远的将来才需要的页面,是一种理论上的算法,是最优策略;

4、FIFO 先进先出算法:把在内存中停留时间最长的页面置换出去。缺点:有可能将那些经常被访问的页面也被换出,从而使缺页率升高。

内核态/用户态

  • 内核态(kernel mode):当 CPU 处于内核态时,这是操作系统管理程序(也就是内核)运行时所处的状态。运行在内核态的程序可以访问计算机的任何资源,例如协调 CPU 资源,分配内存资源,提供稳定的环境供应用程序运行等。
  • 用户态(user mode):应用程序基本都是运行在用户态的。运行在用户态的程序只能访问当前 CPU 上执行程序所在的地址空间,这样有效地防止了操作系统程序受到应用程序的侵害。