接前一篇文章:Linux内核进程管理子系统有什么第二回 —— 进程与线程
本文内容参考:
Linux内核进程管理专题报告_linux rseq-CSDN博客
《趣谈Linux操作系统 核心原理篇:第三部分 进程管理》—— 刘超
《图解Linux内核 基于6.x》 —— 姜亚华 机械工业出版社
特此致谢!
上回书讲了线程的概念以及与进、线程之间的区别,本回讲解进程的进阶知识。
3. 进程进阶
(1)进程四要素
1)有一段程序供其执行。这段程序并不一定是某个进程所独有,可以与其它进程共用。
2)有进程专用的系统堆栈空间。
3)有task_struct数据结构,即通常所说的进程控制块(PCB)。有了这个数据结构,进程才能成为内核调度的一个基本单位,接受内核的调度。同时,该结构也记录着进程所占用的各项资源以及相关状态。
4)有独立的用户空间。
以上四个条件缺一不可。
(2)进程分类
从调度器的角度来看,进程可以分为以下三大类:
1)交互式进程
此类进程有大量的人机交互,因此进程不断地处于睡眠状态,等待用户输入。此类进程对系统响应事件要求比较高,否则用户会感觉系统反应迟缓。典型的应用如编辑器。
2)批处理
此类进程不需要人机交互,在后台运行,需要占用大量的系统资源。但能够忍受响应延迟,如编译器和各种服务器程序。
3)实时进程
实时进程对调度延迟的要求最高(有最后期限即Deadline的约束),这些进程往往执行非常重要的操作,要求立即响应并执行,比如视频播放软件(软实时)或飞机飞行控制系统(硬实时)。很明显这类程序不能容忍长时间的调度延迟(超过Deadline约束)。软实时进程超过Deadline会影响用户体验,而硬实时进程超过Deadline会导致灾难。
在Linux内核中,实际上只分为了两种类别:普通进程与实时进程。也就是将交互式进程和批处理进程统称为普通进程。很显然,内核对实时进程和普通进程所采用的调度策略肯定是不同的。
仍然举一例以作类比:
普通进程好比大部分客户的项目,只要按照正常流程完成就可以,时间并不是很紧;而实时进程就好比有些(少数)客户的项目,要求必须在短时间(如一两个月)内完成。人家不光嘴上说急,关键人家还加钱了。那这就得先紧着加钱的这些客户的项目做了,一般客户的项目也做,只是优先级放得低一些。当然,也不能完全不给人家做。这就是后文书要讲到的进程调度的宏观原则和策略。
插曲
既然上边提到了软实时和硬实时得概念,那么这里也讲一下软实时系统和硬实时系统得概念。
- 软实时系统(soft real-time system)
能够容忍一定程度的时间延迟及其引起的服务质量下降的实时系统。 软实时系统的时限是一个柔性灵活的,它可以容忍偶然的超时错误,失败造成的后果并不严重。例如在网络中仅仅是轻微地降低了系统的吞吐量。
- 硬实时系统(hard real-time system)
严格遵循时间约束,超出时间限制会造成严重的系统失效的实时系统。 硬实时系统有一个刚性的、不可改变的时间限制,它不允许任何超出时限的错误。超时错误会带来损害甚至导致系统失败、或者导致系统不能实现它的预期目标。例如上边提到的飞机飞行控制系统。
更多进程进阶知识请看下回。