操作系统原理及安全
第二章 进程与线程
“原理 机制 算法”
参考:
参考链接
1 程序的执行顺序
- 顺序执行:
- 一个程序通常由若干个程序段所组成,它们必须按照某种先后次序来执行,仅当前一个操作执行完后才能执行后继操作,这类计算过程就是程序的顺序执行过程。
- 顺序执行的特征:
- 顺序性
- 封闭性:程序一旦开始执行,其执行结果不受外界因素影响。
- 可再现性:只要程序执行时的初始条件和执行环境相同,当程序重复执行时,都将获得相同的结果。
- 并发执行:
-
若干个程序(或程序段)同时在系统中运行。这些程序(或程序段)的执行在时间上时重叠的。一个程序(或程序段)的执行尚未结束,另一个程序(或程序段)的执行已经开始。
-
并发执行的特征:
- 间断性:并发程序具有”执行–暂停–执行“,间断地执行
- 非封闭:多个程序共享系统中的资源,资源的状态将由多个程序来改变,致使程序之间相互影响。
- 不可再现性:在初始条件相同的情况下,程序的执行结果依赖于执行的次序。
-
程序并发执行的条件(Bernstein条件):
1. R ( S j ) ∩ W ( S j ) = ∅ R(S_j) \cap W(S_j) = \emptyset R(Sj)∩W(Sj)=∅
2. R ( S j ) ∩ W ( S i ) = ∅ R(S_j) \cap W(S_i) = \emptyset R(Sj)∩W(Si)=∅
3. W ( S j ) ∩ W ( S i ) = ∅ W(S_j) \cap W(S_i) = \emptyset W(Sj)∩W(Si)=∅其中, S i S_i Si和 S j S_j Sj是两个程序段, R ( S i ) R(S_i) R(Si)为语句执行期间要引用的变量集合, W ( S i ) W(S_i) W(Si)为语句执行期间要改变的变量集合。
-
2 进程的引入
进程的定义
- 进程是程序在处理器上的一次执行过程。
- 进程是程序在一个数据集合上运行的过程,是系统进行资源分配和调度的一个独立单位。
- 进程是一个具有一定功能的程序关于某个数据集合的一次运行活动。
进程的特征
- 动态性:进程是程序的一次执行过程。进程是有“生命”的,动态性还表现为它因创建而产生,因调度而执行,因无资源而暂停,因撤消而消亡。而程序是静态实体。
- 并发性:多个进程实体同时存在于内存中,能在一段时间内同时运行。
- 独立性:在传统OS中,进程是独立运行的基本单位,也是系统分配资源和调度的基本单位。凡是未建立进程的程序,很难作为独立单位参与调度和运行
- 异步性:进程以各自独立的不可预知的速度向前推进。
- 结构性:进程实体由程序段、数据段及进程控制块组成,又称为进程映像。
- 共享性:同一程序同时运行于不同的数据集合上时,将构成不同的进程。进程之间也可以共享公用变量,通过公用变量交换信号。
进程的描述
- 进程映像(某时刻进程内容及其状态的集合)
- 进程映像 = 控制块 + 程序块 + 核心栈 + 数据块
- 一个进程的存储映像 = 系统级上下文 + 用户级上下文;
- 系统级上下文(内核空间信息)= 进程控制块 + 主存管理信息 + 核心栈…
- 用户级上下文(用户空间信息)= 用户堆栈 + 用户数据块 + 用户程序块 + 共享地址空间+…
- 寄存器上下文/硬件上下文(现场信息)=处理器中各寄存器的内容
- 进程控制块(PCB):
- PCB是描述和管理进程的数据结构。它是进程实体的一部分,是进程存在的唯一标志。
- 操作系统创建、修改、查询、回收PCB
- PCB的组成:
1.进程标识信息
2.进程现场信息:保留进程在运行时存放在处理器中的各种信息。
3.进程控制信息
进程的状态与转换
-
进程模型:
1.三状态模型
2.五状态模型
3.七状态模型
-
状态含义
1.就绪状态(ready):进程已获得除处理器以外的所有资源,一旦分配了处理机就可以立即执行。2.运行状态(running):一个进程获得必要的资源并正在处理机上执行。
3.阻塞状态(block):又称等待状态(wait)、睡眠状态(sleep)。正在执行的进程,由于发生某事件而暂时无法执行下去(如:等待输入/输出完成)。这时即使把处理器分配给该进程,它也无法运行。
4.新建状态:进程刚刚建立,但还未进入就绪队列。又称创建状态。
5.终止状态:当一个进程正常或异常结束,操作系统已释放它所占用的资源,但尚未将它撤消时的状态,又称退出状态。
6.挂起状态:由于进程的不断创建,系统资源已不能满足进程运行的要求,就必须将某些进程切换到静止状态,因此需要把某些进程挂起(suspend),对换到磁盘镜像区中,暂时不参与进程调度,起到减少系统操作负荷的作用。
进程的控制管理与组织
-
进程的管理:进程的创建、终止、阻塞与唤醒等。这依靠操作系统原语来实现。
- 原语:是由若干条机器指令构成的,完成特定功能的一段程序,这段程序在执行期间不可分割。
-
进程的组织:系统中有许多进程,为了能对它们进行有效的管理,应将PCB组织起来。
- 常用的组织方式有:线性方式、链表方式、索引方式。
-
线性方式:将PCB顺序存放在一片连续内存中。
-
链表方式:将同一状态的PCB组成一个链表。
-
索引方式将同一状态的进程归入一个索引表,再由索引指向相应的PCB。
-
- 常用的组织方式有:线性方式、链表方式、索引方式。
进程切换与CPU模式切换
-
进程切换:中断处于运行态的进程的运行,让出处理器。完成一次进程上下文切换,即保存老进程状态而装入被保护了的新进程的状态,以便新进程运行。
-
CPU模式切换:当中断/系统调用发生时,暂时中断正在执行的用户进程,把进程从用户状态切换到内核状态,去执行操作系统服务程序以获得服务,这就是一次模式切换。此时,内核仍在被中断的进程的上下文中进行处理。
-
CPU上所执行的进程所处活动范围:
- 用户空间中,处于进程上下文,用户进程在运行,使用用户栈。
- 进程正常运行
- 内核空间中,处于进程上下文,内核代表某进程在运行,使用核心栈。
- 进程请求系统调用,陷入内核
- 内核空间中,处于中断上下文,与任何进程无关,中断服务程序正在处理特定中断。
- 进程被中断
- 用户空间中,处于进程上下文,用户进程在运行,使用用户栈。
进程间通信(InterProcess Communication, IPC)
-
指进程之间的信息交换,是进程之间的一种协作机制
-
进程协作的原因:信息共享;提高运算速度;系统模块化要求;方便。
-
两种基本模型:
-
消息传递模型:
例1 信号机制
例2 消息传递机制(直接传递)
- 直接传递
- 间接传递:mailbox、port
2.共享内存模型:
-