操做系统中进程调度策略有哪几种?

FCFS(先来先服务),优先级,时间片轮转,多级反馈-调度算法。算法

  先来先服务调度算法:是一种最简单的调度算法,每次调度是从进程队列中选择一个最早进入该队列的进程,为之分配资源投入运行。该进程一直运行完成或发生某事件而阻塞后才继续处理后面的进程。函数

  优先级调度算法:有短进程优先级、高优先权优先级、高响应比优先级等,按照优先级来执行就绪进程队列中的调度。  (高响应比:(等待时间+服务运行时间)/服务运行时间)spa

  时间片轮转调度算法:系统仍是按照先来先服务调度就绪进程,但每次调度时,CPU都会为队首进程分配并执行一个时间片(几ms~ms)。执行时间片用完后计时器即产生时钟中断,中止该进程并将它送到队尾,其余依次执行。这样保证系统能在给定的时间内执行全部用户进程的请求。继承

  多级反馈调度算法:前面都有局限性,综合-> 多级反馈调度算法则没必要事先知道各进程所需的执行时间,并且还能够知足各种型进程的须要,于是它是目前被公认的一种较好的进程调度算法。队列

(1)设置多个就绪队列,每一个队列优先级依次减少。为各个队列分配的时间片大小不一样,优先级队列越高,里面进程规定的执行时间片就越小。进程

(2)队列中仍是按照FCFS原则排队等待,若是第一队列队首进程在规定的时间片内未执行完,则直接调送至第二队尾,依次向后放一个队列的队尾。所以一个长做业进程会分配到n个队列的时间片执行。事件

(3)按照队列前后依次执行,若是新进的待处理进程优先级较高,则新进程将抢占正在运行的进程,被抢占的进程放置正在运行的队尾。内存

 

1.抢占式内核与非抢占式内核

  1.1.UNIX采用抢占式内核,Windows、Linux采用多任务非抢占式内核。资源

抢占式:  内核空间中,有一个更高优先级的任务出现时,则能够将当前任务挂起,执行优先级更高的进程内存管理

非抢占式:高优先级的进程不能停止正在内核中运行的低优先级的进程而抢占CPU运行。 则除非进程自愿放弃CPU,不然该进程将一直运行下去,直至完成或退出内核

多任务系统中, 内核负责管理各个任务, 或者说为每一个任务分配CPU时间, 而且负责任务之间的通信。

  1. 2.LinuxCPU抢占分两种状况:

1)用户抢占(发生时机:从系统调用返回用户空间、从中断(异常)处理程序返回用户空间时);

2)内核抢占(是指在内核中运行的进程, 可能在执行内核函数期间被另外一个进程取代。发生时机:若是内核中的任务堵塞,任务主动放弃CPU使用权时)

  1.3.须要内核抢占的缘由:

当内核处于相对耗时的操做中, 好比文件系统或者内存管理相关的任务,其余进程没法执行, 没法调度, 这就形成了系统的延迟增长用户体验到”缓慢”的响应

2.优先级翻转问题:

  高优先级任务要访问共享资源,而此时低优先级任务正在占用,此时中等优先级任务到来先执行完毕后,低优先级任务释放资源高优先级任务才得以执行,这就发生了优先级翻转问题。

解决方式:优先级天花板,优先级继承

优先级天花板:

  当任务申请某资源时就将当前任务的优先级提升到可访问该资源任务的最高优先级。

优先级继承:

  当任务申请某资源时,此资源已被占用,那么判断当前任务是否比占用资源的任务优先级高,若高,则将占用资源任务的优先级提升到当前任务的优先级,等释放资源后再恢复其自己的优先级。

相关文章
相关标签/搜索