接前一篇文章:Linux内核进程管理子系统有什么第七十三回 —— 进程主结构详解(69)
本文内容参考:
Linux内核进程管理专题报告_linux rseq-优快云博客
《趣谈Linux操作系统 核心原理篇:第三部分 进程管理》—— 刘超
《图解Linux内核 基于6.x》 —— 姜亚华 机械工业出版社
特此致谢!
之前用了七十回左右的篇幅,讲解了进程管理主结构 —— struct task_struct,本回开始就着上一回task_struct结构中进程调度相关成员的热乎劲儿,开启一个新的篇章 —— 进程调度。
进程调度的概念
前文书已提到,一个计算机中可以同时执行的进程的数量是有限的,进程的数量往往多于处理器的个数,进程争用处理器的情况在所难免。系统不可能让某些任务一直占用CPU,而其它任务一直等待,于是就有了进程的调度。
进程调度就是从就绪队列中,按照一定的算法(公平、髙效)选出最合适的一个进程,并将处理器分配给它运行。进程调度的本质是让进程更好地分时复用处理器资源。
进程调度的核心知识点
- 调度策略
就绪进程有很多,为什么要选择某一个进程X而不选择其它进程(比如Y、Z),依据是什么?
- 调度时机
调度什么时候发生?进程X正在运行,现在要用进程Y替换进程X,什么时候进行替换?
- 调度步骤
当发生调度的时候,怎么去完成调度,具体需要做哪些工作?
进程调度的相关概念
- 时间片
时间片(TimeSlice)指的是分时复用过程中每个进程允许持续运行的最大时间配额单位。假设进程1持续运行了一个TimeSlice,那么它必须考虑让出CPU资源给其它进程。不过有两点需要注意:一是进程持续运行时间可以小于TimeSlice(上文描述中强调了“最大”);二是进程持续运行时间也可以大于TimeSlice,比如当进程1的时间片耗尽,考虑让出CPU,但此时并没有其它可运行进程,那么进程1会持续运行(上文描述中强调了“单位”)。
- 优先级
优先级(Priority)指的是在所有进程中,谁更有资格优先获得处理器资源。一般来说,现代的进程调度器是基于优先级的调度,也就是说倾向于先运行优先级高的进程,再运行优先级低的进程,同优先级之间轮转调度。不过凡事也有例外,也会存在“优先级倒挂(反转)”的情况,即某些高优先级进程挂起而低优先级进程运行的情况。
Linux内核中的优先级分为静态优先级和动态优先级(见前文书struct task_struct结构中进程调度相关成员)。静态优先级一般是进程创建时确定的,也可以通过特定的系统调用改变;动态优先级的初始值取决于静态优先级,但是随着进程的运行不断低调整改变。调度策略选择进程时考量的是动态优先级。


更多进程调度的相关概念请看下回。

被折叠的 条评论
为什么被折叠?



