操作系统-进程的概念
计算机中,CPU是最宝贵的资源,为了提⾼CPU的利⽤率,引⼊了多道程序设计的概念。当内存中多个程序存在时,如果不对⼈们熟悉的“程序”的概念加以扩充,就⽆法刻画多个程序共同运⾏时系统呈现出的特征。
⼀、进程的引⼊
多道程序系统中,程序具有:并⾏、制约以及动态的特征。程序概念难以便是和反映系统中的情况:
1. 程序是⼀个静态的概念
程序是完成某个功能的指令集和。系统实际上是出于不断变化的状态中,程序不能反映这种动态性。
2. 程序概念不能反映系统中的并⾏特性
例如:两个C语⾔源程序由⼀个编译程序完成编译,若⽤程序概念理解,内存中只有⼀个编译程序运⾏(两个源程序看作编译程序的输⼊数据),但是这样⽆法说明⽩内存中运⾏着两个任务。程序的概念不能表⽰这种并⾏情况,反映不了他们活动的规律和状态变化。就像不能⽤菜谱(程序)代替炒菜(程序执⾏的过程)⼀样(这句话我稍微修改了⼀下,感觉应该是这样表诉才对)
⼆、进程的定义
进程:⼀个具有⼀定独⽴功能的程序关于某个数据集合的⼀次运⾏活动,是系统进⾏资源分配和调度运⾏的基本单位
三、进程与程序的差别
1. 进程是⼀个动态的概念
进程是程序的⼀次执⾏过程,是动态概念程序是⼀组有序的指令集和,是静态概念2. 不同的进程可以执⾏同⼀个程序
区分进程的条件:所执⾏的程序和数据集合。
两个进程即使执⾏在相同的程序上,只要他们运⾏在不同的数据集合上,他们也是两个进程。例如:多个⽤户同时调⽤同⼀个编译程序编译他们编写的C语⾔源程序,由于编译程序运⾏在不同的数据集合(不同的C语⾔源程序)上,于是产⽣了⼀个个不同的进程3. 每个进程都有⾃⼰的⽣命周期
当操作系统要完成某个任务时,它会创建⼀个进程。当进程完成任务之后,系统就会撤销这个进程,收回它所占⽤的资源。从创建到撤销的时间段就是进程的⽣命期4. 进程之间存在并发性
在⼀个系统中,同时会存在多个进程。他们轮流占⽤CPU和各种资源5. 进程间会相互制约
进程是系统中资源分配和运⾏调度的单位,在对资源的共享和竞争中,必然相互制约,影响各⾃向前推进的速度6. 进程可以创建⼦进程,程序不能创建⼦程序
7. 从结构上讲,每个进程都由程序、数据和⼀个进程控制块(Process Control Block, PCB)组成
四、进程的重要特征
1. 动态特征:进程对应于程序的运⾏,动态产⽣、消亡,在其⽣命周期中进程也是动态的、2. 并发特征:任何进程都可以同其他进程⼀起向前推进
3. 独⽴特征:进程是相对完整的调度单位,可以获得CPU,参与并发执⾏4. 交往特征:⼀个进程在执⾏过程中可与其他进程产⽣直接或间接关系
5. 异步特征:每个进程都以相对独⽴、不可预知的速度向前推进6. 结构特征:每个进程都有⼀个PCB作为他的数据结构进程最基本的特征是并发和共享特征
五、进程的状态与转换
1. 进程的三种基本状态
a. 运⾏状态:获得CPU的进程处于此状态,对应的程序在CPU上运⾏着
b. 阻塞状态:为了等待某个外部事件的发⽣(如等待I/O操作的完成,等待另⼀个进程发来消息),暂时⽆法运⾏。也成为等待状态c. 就绪状态:具备了⼀切运⾏需要的条件,由于其他进程占⽤CPU⽽暂时⽆法运⾏
2. 进程状态转换
a. 运⾏状态 ===> 阻塞状态:例如正在运⾏的进程提出I/O请求,由运⾏状态转化为阻塞状态b. 阻塞状态 ===> 就绪状态:例如I/O操作完成之后,由阻塞状态转化为就绪状态
c. 就绪状态 ===> 运⾏状态:例如就绪状态的进程被进程调度程序选中,分配到CPU中运⾏,由就绪状态转化为运⾏状态d. 运⾏状态 ===> 就绪状态:处于运⾏状态的进程的时间⽚⽤完,不得不让出uCPU,由运⾏状态转化为就绪状态
3. 进程的类型
a. 系统进程:操作系统⽤来管理资源的进程,当系统进程处于运⾏态时,CPU处于管态,系统之间的关系由操作系统负责
b. ⽤户进程:操作系统可以独⽴执⾏的的⽤户程序段,当⽤户进程处于运⾏态时,CPU处于⽬态,⽤户进程之间的关系由⽤户负责
六、进程控制块
1. 进程的三个组成部分
a. 程序b. 数据
c. 进程控制块(PCB):为了管理和控制进程,系统在创建每个进程时,都为其开辟⼀个专⽤的存储区,⽤以记录它在系统中的动态特性。系统根据存储区的信息对进程实施控制管理。进程任务完成后,系统收回该存储区,进程随之消亡,这⼀存储区就是进程控制块
PCB随着进程的创建⽽建⽴,撤销⽽消亡。系统根据PCB感知⼀个进程的存在,PCB是进程存在的唯⼀物理标识(这⼀点可以类⽐作业控制块JCB)
2. 进程控制块的内容
PCB在不同的语⾔中,可能⽤不同的数据结构表⽰。为了系统管理和控制进程⽅便,系统常常将所有进程的PCB存放在内存中系统表格区(这是什么区?不懂,待我仔细查查),并按照进程内部标号由⼩到⼤顺序存放。
整个系统中各进程的的PCB集合可⽤数组表⽰。这时进程内部标号可以与数组元素下标联系。各系统预留的PCB空间往往是固定的,如UNIX系统中规定进程数量不超过50个(这⼀点我有点怀疑)操作系统不同,PCB的格式、⼤⼩及内容也不尽相同。⼀般的,应该包含如下四个信息a. 标识信息:进程名
b. 说明信息:进程状态、程序存放位置
c. 现场信息:通⽤寄存器内存、控制寄存器内存、断点地址d. 管理信息:进程优先数、队列指针
七、进程控制块的组织
系统中,有着许多不同状态的进程,处于阻塞状态的进程阻塞原因各不相同,为了便于调度和管理,常将进程控制块PCB⽤适当的⽅法组织起来
1. 线性结构
把所有不同状态的进程的PCB组织在⼀个表格中。
最简单,适⽤于进程数⽬不多的操作系统,如UNIX系统,缺点是调⽤时,往往需要查询整个PCB表,时间复杂度略⾼
2. 索引结构
分别把具有不同状态的进程PCB组织在同⼀个表中,于是有就绪进程表、运⾏进程表(多机系统中,还有现在的多核系统应该也有吧)以及各种等待事件的阻塞进程表
系统中的⼀些固定单元分别指出各表的起始地址
3. 链式结构
采⽤队列形式时,每个进程的PCB中要增加⼀个链指针表项,指向队列的下⼀个PCB起始地址。为了对这些队列进⾏管理,操作系统要做三件事:
a. 把处于同⼀状态的进程的PCB通过各⾃队列的指针链接在⼀起,形成队列b. 为每⼀个队列设⽴⼀个对头指针,总是指向队⾸的PCB
c. 排在队尾的PCB的队列指针项内容应该是“-1”或者⼀个特殊符号,表⽰这是队尾PCB在单CPU系统中,任何时刻都只有⼀个处于运⾏态的进程
所有处于阻塞队列中的PCB应该根据产⽣阻塞的原因今进⾏排队,每⼀个都称为阻塞队列,⽐如等待磁盘I/O的阻塞队列,等待打印机输出的阻塞队列
⼋、进程控制
1. 原语
要对进程进⾏控制,系统中必须设置⼀个机构,它具有创建进程、撤销进程、进程通信和资源管理等功能,这样的结构称为操作系统的内核(kernel)
内核本⾝不是⼀个进程,⽽是硬件的⾸次延伸,它是加在硬件上的第⼀层软件。内核是通过执⾏各种原语操作来完成各种控制和管理功能的原语(primitive)是机器指令的延伸,⽤若⼲条机器指令构成,⽤以完成特定功能的⼀段程序。为保证操作的正确性,原语在执⾏期间是不可分割的(这点可以类⽐数据库中的事务)
⽤于进程控制的原语有:创建进程原语、撤销进程原语、阻塞进程原语、唤醒进程原语、调度进程原语、改变优先级原语等
2. 创建进程原语
⼀个进程如果需要时,可以创建⼀个新的进程。被建⽴的进程称为⼦进程,建⽴者进程称为⽗进程所有的进程都只能通过⽗进程建⽴,不能⾃⽣⾃灭创建进程原语拱进程调⽤,⽤以建⽴⼦进程
该原语的主要⼯作:为被建⽴的进程简历⼀个进程控制块,填⼊相应的初始值。主要操作过程是先向系统的PCB空间申请分配⼀个空闲的PCB,然后根据⽗进程所提供的参数,将⼦进程的PCB表⽬初始化,最后返回⼀个⼦进程内部名
3. 撤销进程原语
由⽗进程撤销⼦进程的PCB,注意,这⾥会撤销⼀个以该⼦进程为根的进程⼦树,并回收占⽤的全部资源
4. 阻塞原语
在阻塞原语的作⽤下,进程由运⾏状态转化为阻塞状态
5. 唤醒原语
在唤醒原语的作⽤下,进程由阻塞状态转化为就绪状态
6. 改变进程优先级原语
进程的优先级是表⽰进程的重要性以及运⾏的优先性,拱进程调度程序调度进程运⾏时使⽤
为了防⽌⼀些进程因优先级较低,⽽长期得不到运⾏,许多系统采⽤动态优先级,进程的优先级按照⼀些原则变化通常,进程优先级和以下因素有关系:
a. 作业开始时的静态优先数:作业的优先数取决于作业的重要程度、⽤户为作业运⾏时所付出的价格和费⽤⼤⼩、作业的类型等因素b. 进程的类型:⼀般系统进程的优先数⼤于⽤户进程的优先数;I/O型进程的优先数⼤于CPU型进程的优先数。这些都是为了充分发挥系统I/O设备的效能
c. 进程所使⽤的资源量:使⽤CPU的时间越多,优先级越低。对其他资源使⽤的情况也类似的考虑d. 进程在系统中的等待时间:等待时间越长,进程优先级越⾼
各系统处于不同的考虑,有不同的优先数计算公式。这些公式主要来⾃于时间经验