不可剥夺型内核

不可剥夺型内核(或非抢占式内核,Non-Preemptive Kernel)

不可剥夺型内核要求每个任务自我放弃CPU的所有权.

不可剥夺型调度法也称作合作型多任务,各个任务彼此合作共享一个CPU.

异步事件还是由中断服务来处理。中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。但中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃CPU的使用权时,那个高优先级的任务才能获得CPU的使用权。

不可剥夺型内核优点

不可剥夺型内核的一个优点是响应中断快

在任务级,不可剥夺型内核允许使用不可重入函数

每个任务都可以调用非可重入性函数,而不必担心其它任务可能正在使用该函数,从而造成数据的破坏。因为每个任务要运行到完成时才释放CPU的控制权。当然该不可重入型函数本身不得有放弃CPU控制权的企图。

不可剥夺型内核几乎不需要使用信号量保护共享数据。

运行着的任务占有CPU,而不必担心被别的任务抢占。但这也不是绝对的,在某种情况下,信号量还是用得着的。处理共享I/O设备时仍需要使用互斥型信号量。

例如,在打印机的使用上,仍需要满足互斥条件


不可剥夺型内核缺点

不可剥夺型内核的最大缺陷在于其响应时间.高优先级的任务已经进入就绪态,但还不能运行,要等,也许要等很长时间,直到当前运行着的任务释放CPU.与前后系统一样,不可剥夺型内核的任务级响应时间是不确定的,不知道什么时候最高优先级的任务才能拿到CPU的控制权,完全取决于应用程序什么时候释放CPU.

不可剥夺型内核允许每个任务运行,直到该任务自愿放弃CPU的控制权.中断可以打入运行着的任务.中断服务完成以后将CPU控制权还给被中断了的任务。任务级响应时间要大大好于前后系统,但仍是不可知的,商业软件几乎没有不可剥夺型内核.

不可剥夺型内核运行原理

keepalived非抢占模式工作原理 非抢占式内核_可重入

可剥夺型内核

当系统响应时间很重要时,要使用可剥夺型内核(或抢占式内核,Preemptive Kernel)。

最高优先级的任务一旦就绪,总能得到CPU的控制权。

当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权。

如果是中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断了的任务被挂起,优先级高的那

个任务开始运行。

# 使用可剥夺型内核,最高优先级的任务什么时候可以执行,可以得到CPU的控制权是可知的。

# 使用可剥夺型内核使得任务级响应时间得以最优化。

# 使用可剥夺型内核时,应用程序不应直接使用不可重入型函数。调用不可重入型函数时,要满足互斥条件,这一点可以用互斥型信号量来实现。如果调用不可重入型函数时,低优先级的任务CPU的使用权被高优先级任务剥夺,不可重入型函数中数据有可能被破坏。

#时优先级最高的任务运行(不一定是那个被中断了的任务)。任务级系统响应时间得到了最优化,且是可知的。

可剥夺型内核运行原理

keepalived非抢占模式工作原理 非抢占式内核_keepalived非抢占模式工作原理_02

区别

keepalived非抢占模式工作原理 非抢占式内核_高优先级_03