mirror of
https://github.com/gatieme/LDD-LinuxDeviceDrivers.git
synced 2026-08-20 22:04:56 +08:00
进程调度...
This commit is contained in:
@@ -6,22 +6,22 @@ Linux进程调度的演变
|
||||
| ------- |:-------:|:-------:|:-------:|:-------:|:-------:|
|
||||
| 2016-06-14 | [Linux-4.6](http://lxr.free-electrons.com/source/?v=4.6) | X86 & arm | [gatieme](http://blog.csdn.net/gatieme) | [LinuxDeviceDrivers](https://github.com/gatieme/LDD-LinuxDeviceDrivers) | [Linux进程管理与调度](http://blog.csdn.net/gatieme/article/category/6225543) |
|
||||
|
||||
#前沿
|
||||
-------
|
||||
|
||||
##进程调度
|
||||
-------
|
||||
|
||||
|
||||
内存中保存了对每个进程的唯一描述, 并通过若干结构与其他进程连接起来.
|
||||
|
||||
**调度器**面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为两个不同的部分, 其中一个涉及**调度策略**, 另外一个涉及**上下文切换**.
|
||||
|
||||
|
||||
##进程的分类
|
||||
-------
|
||||
|
||||
当涉及有关调度的问题时, 传统上把进程分类为"I/O受限(I/O-dound)"或"CPU受限(CPU-bound)".
|
||||
|
||||
| 类型 | 别称 | 描述 | 示例 |
|
||||
| ------- |:-------:|:-------:|:-------:|
|
||||
| I/O受限型 | I/O密集型 | 频繁的使用I/O设备, 并花费很多时间等待I/O操作的完成 | 数据库服务器, 文本编辑器 |
|
||||
| CPU受限型 | 计算密集型 | 花费大量CPU时间进行数值计算 | 图形绘制程序 |
|
||||
|
||||
另外一种分类法把进程区分为三类:
|
||||
linux把进程区分为实时进程和非实时进程, 其中非实时进程进一步划分为交互式进程和批处理进程
|
||||
|
||||
| 类型 | 描述 | 示例 |
|
||||
| ------- |:-------:|:-------:|:-------:|
|
||||
@@ -29,15 +29,12 @@ Linux进程调度的演变
|
||||
| 批处理进程(batch process) | 此类进程不必与用户交互, 因此经常在后台运行. 因为这样的进程不必很快相应, 因此常受到调度程序的怠慢 | 程序语言的编译程序, 数据库搜索引擎以及科学计算 |
|
||||
| 实时进程(real-time process) | 这些进程由很强的调度需要, 这样的进程绝不会被低优先级的进程阻塞. 并且他们的响应时间要尽可能的短 | 视频音频应用程序, 机器人控制程序以及从物理传感器上收集数据的程序|
|
||||
|
||||
>**注意**
|
||||
>
|
||||
>前面的两类分类方法在一定程序上相互独立
|
||||
>
|
||||
>例如, 一个批处理进程很有可能是I/O受限的(如数据库服务器), 也可能是CPU受限的(比如图形绘制程序)
|
||||
|
||||
在linux中, 调度算法可以明确的确认所有实时进程的身份, 但是没办法区分交互式程序和批处理程序, linux2.6的调度程序实现了基于进程过去行为的启发式算法, 以确定进程应该被当做交互式进程还是批处理进程. 当然与批处理进程相比, 调度程序有偏爱交互式进程的倾向
|
||||
|
||||
|
||||
##不同就能成的调度策略
|
||||
-------
|
||||
|
||||
根据进程的不同分类Linux采用不同的调度策略.
|
||||
|
||||
对于实时进程,采用FIFO或者Round Robin的调度策略.
|
||||
@@ -46,8 +43,12 @@ Linux进程调度的演变
|
||||
|
||||
注意Linux通过将进程和线程调度视为一个,同时包含二者。进程可以看做是单个线程,但是进程可以包含共享一定资源(代码和/或数据)的多个线程。因此进程调度也包含了线程调度的功能.
|
||||
|
||||
目前非实时进程的调度策略比较简单, 因为实时进程值只要求尽可能快的被响应, 基于优先级, 每个进程根据它重要程度的不同被赋予不同的优先级,调度器在每次调度时, 总选择优先级最高的进程开始执行. 低优先级不可能抢占高优先级, 因此FIFO或者Round Robin的调度策略即可满足实时进程调度的需求.
|
||||
|
||||
#linux调度器的演变
|
||||
但是普通进程的调度策略就比较麻烦了, 因为普通进程不能简单的只看优先级, 必须公平的占有CPU, 否则很容易出现进程饥饿, 这种情况下用户会感觉操作系统很卡, 响应总是很慢,因此在linux调度器的发展历程中经过了多次重大变动, linux总是希望寻找一个最接近于完美的调度策略来公平快速的调度进程.
|
||||
|
||||
|
||||
##linux调度器的演变
|
||||
-------
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user