概述
学习目标:
- 理解逻辑流、并发流基本概念
- 理解进程概念、结构与描述
- 理解进程基本状态及状态转换关系图,了解进程PCB组织,分辨进程与程序的区别与联系
- 掌握利用进程创建、程序加载、进程终止、进程撤销进行多进程并发编程基本方法
- 理解多进程并发执行特征,掌握程序并发运行的基本分析方法
- 理解信号机制与应用,掌握利用信号机制编程基本框架
- 理解守护进程概念,了解应用编程方法
- 进程基本概念(属性、结构、组织、基本状态与转换)
- 进程创建与程序加载
- 多进程并发特征
- 进程等待、终止、回收 非本地跳转与应用
- 信号机制及应用
- 守护进程编程
5.1 逻辑控制流和并发流
逻辑控制流
- 逻辑流:在多进程运行环境下,一个程序(或进程)按程序员意图,从main函数开始,一个一个语句,一条一条指令执行,执行轨迹为一系列程序计数器(PC)的值,给人一种每个程序都独占处理器的假象,而一般整个系统可能仅有一个CPU,各进程轮流执行,我们称进程为一个逻辑流
- 实际上,每个进程的执行过程是不连续的,它们交替使用处理器
- 处理器在不同进程间切换有两种原因:
- 主动放弃CPU:如进程执行耗时的I/O操作时(比如执行C语言的scanf语句)
- 进程被动放弃CPU:比如本次分配给进程的时间配额已经用完,或有紧迫程度更高的任务要执行,操作系统强行夺走CPU
- CPU控制发生转移的时机:一般都在中断响应之时,因为只有这个节骨眼操作系统能介入控制,中断有外部中断、时钟中断等
- 逻辑流示例:进程、中断(异常)处理程序、信号处理程序、线程和Java进程。
并发概念
- 并发:指多个活动在同一时间段内同时进行。
- 日常生活中并发:日常生活中普遍存在,也是操作系统最基本的特征。
- 计算机系统中并发:体现为多任务、多进程、多线程的并发执行
- 并发有何用途
- 操作系统的多任务管理能力,使我们能够很好地驾驭对并发活动的复杂管理,开发出各种功能强大的信息管理系统、网络应用、购物平台;
- 充分发挥计算机硬件系统强大的处理能力,满足信息查询、网络购物等应用需求
并发流及相关概念
- 并发流:一个逻辑流的执行在时间上与另一个流存在重叠情况,这两个流被称为并发地运行,生命周期存在重叠的2个进程是并发流,或称并发进程。
- 并发(concurrency):多个流并发地执行的一般现象
- 多任务(multitasking):一个进程和其他进程轮流运行的概念
- 时间片(time slice) :每次分配给一个进程的执行时间称之为时间片(time slice),进程也因此划分为多个时间分片(time slicing)。
- 判断方法:某种可能的执行模式在时间上存在重叠,它们就是并发流。
并发与并行
- 并发流:如果两个流在时间上重叠,那么它们就是并发的,即使它们是运行在同一个处理器上的。
- 并行流:如果两个流同一时刻运行在不同的处理器核或者计算机上,那么我们称它们为并行流(parallel flow),并行流在某段时间内同时执行。
- 并行流是并发流的一个真子集。
5.2 进程的概念
5.2.1 进程概念、结构与描述
进程
- 不严格的定义:进程是正在执行中的程序
- 较为严格的定义:进程是程序在一个独立数据集上的执行过程。
- 示例: Shell窗口、Linux 命令执行过程
- Linux系统进程家庭: Linux允许多个用户同时登录系统。每个用户可以同时运行许多个程序,或者同时运行同一个程序的许多个实例,每个程序运行实例都是一个进程。系统本身也运行着一些管理系统资源和控制用户访问的程序
进程结构
作为程序执行过程的进程,至少需包含三项内容:程序代码、数据集和进程控制块(PCB, Process Control Block)
- 程序代码:一般是一个包括main函数的可执行程序,程序装载到内存,进程才能启动
- 数据集:进程的处理对象,可认为是变量内容,保存初始化信息、环境变量、命令行参数和文件的数据
- PCB:保存程序代码、数据变量地址、进程其他属性,PCB是进程存在的唯一标志,以后操作系统就通过PCB来对进程实施管理和控制
进程属性(保持在PCB中)
(1)进程描述信息:
- 进程号(PID)
- 用户标识
- 用户组标识
- 进程族亲信息:父进程标识、兄弟进程标识
(2)进程控制信息
- 进程状态
- 调度信息:优先级、剩余时间片和调度策略
- 记时信息:CPU使用时间等
- 通信信息:未处理信号、管道、信号量、消息队列、共享内存等
(3)进程资源信息
- 存储器地址
- 打开文件的信息
(4)CPU现场信息
- 当前进程CPU寄存器副本:程序计数器PC、通用寄存器、
- 标识寄存器FLAGS
PCB实例(Linux任务结构体:task_struct)
5.2.2 进程的基本状态及状态转换
一般根据CPU对资源拥有情况,定义三种基本状态:
- 就绪状态(ready state)。进程已分配到除CPU以外的所有必要资源,只要获得CPU,便可立即执行,该状态为就绪状态
- 运行状态(也称执行状态, running state):进程已包括CPU在内的所有运行所需资源,正在执行中
- 阻塞状态(blocked state):正在执行的进程因请求资源、等待事件发生、等待I/O等原因,而暂时无法继续执行时,进入阻塞状态
实际操作系统设计中,往往还需增加2个状态:
- 创建状态:正在创建且尚未完成创建过程的进程(处于胎儿期)所处的状态称为创建状态
- 终止状态:进程终止后并不立即将其清理,而是让其进入终止状态。
5.2.3 对进程PCB进行组织
Linux系统以双向链表、树形链表等多种形式进行组织:
(1)双向链表队列
- 根据进程状态将进程PCB按双向链表组织成多个双向链表,
- Linux用prev_task和next_task两个指针来构建进程队列
- 可设置一个就绪队列和多个阻塞队列,每种等待事件设置一个等待队列
- 好处:方便快速取得队列中第一个进程PCB