系列文章:
- 第一部分 背景知识
- 第二部分 进程、线程
-
-
目录
加油呀各位!
这篇文章是我学操作系统做的笔记,适合要复习的同学看
进程
进程的定义
进程实体:也叫进程映像,简称进程。程序段(放代码)、数据段(放程序运行时的数据)、PCB(进程控制块,放描述进程的各种信息(操作系统通过这个来管理进程),是进程存在的唯一标志)组成了进程。
进程是进程实体的运行过程,是系统进行资源分配和调度的基本单位。
PCB里有:进程标识符(系统分配的唯一ID)、处理机状态(各种寄存器值)、进程调度信息、进程控制信息(进程当前状态,进程优先级)
进程的组织
分为链接方式和索引方式。
按进程状态将PCB分为队列或索引表。
进程的特征
动态性(是程序的一次执行过程)、并发性(可并发执行)、独立性(是独立运行获得资源接收调度的基本单位)、异步性(各进程各自独立运行)、结构性(每个进程配置PCB)
进程的状态
三种基本状态:
运行态(占有CPU)、就绪态(有运行条件,没有空闲CPU)、阻塞态(等待某事件而暂时不能运行)另外两种状态:
创建态:新建进程时操作系统为进程分配资源、初始化PCB
终止态:从系统撤销,回收资源、撤销PCB进程状态的转换
进程控制
进程控制的定义:实现进程状态的转换
用原语实现进程控制,特点是不允许中断(通过关中断、开中断指令来实现)
相关原语:
进程通信
进程通信:进程之间的信息交换
为了安全,一个进程不能直接访问另外一个进程的地址空间。
操作系统提供三个方法:共享存储、管道通信、消息传递共享存储
共享空间是互斥的,只能一个进程访问:基于数据结构(慢、限制多)、基于存储区的共享(数据形式位置都由进程控制,速度快,高级通信方式)
管道通信
管道其实就是一个缓冲区。一个管道只能半双工通信,写满时不能再写,读空时不能再读,没写满不能读,没读空不能写。
消息传递
直接通信方式、间接通信方式(信箱)
线程
线程的概念
传统的进程只能串行执行一系列程序,引入线程后能增加并发度。
线程是基本的CPU执行单元,程序执行流的最小单位。引入线程后,进程只作为资源分配的基本单位,线程是调度基本单位。
引入线程后,线程也能并发,提升并发度。
引入线程后,并发带来的系统开销减小(切换进程系统开销很大)。线程的属性
线程分类
用户级线程:对用户不透明,对操作系统透明。所有的线程管理工作都由应用程序负责,无需操作系统干预。
内核级线程:线程管理工作有操作系统内核完成,包括线程调度、切换都要操作系统来完成。(内核级线程才是处理机分配的单位!)
多线程模型
进程同步和互斥
概念
进程同步:进程具有异步性(各进程独立运行,不可预知),同步也叫直接制约关系,协调多个进程的工作次序
进程互斥:对临界资源的访问是互斥的,互斥也叫间接制约关系。
进程互斥四个部分:进入区、临界区、退出区、剩余区
进程互斥的原则:空闲让进、忙则等待、有限等待、让权等待。
互斥的软件实现
软件实现方法:单标志法、双标志先检查、双标志后检查、Peterson算法
单标志法
每个进程进入临界区的权限只能被另一个进程赋予。实现同一时刻最多只有一个进程进入临界区。
缺点:违背空闲让进原则,如果当前进程一直不进入临界区,就不能把权限交给另外一个进程。
双标志先检查法
设一个布尔型数组flag[]用来放每个进程想要进入临界区的意愿,每个进程想进入临界区之前先循环等到没有别的进程想进入临界区。
缺点:违背忙则等待原则,先检查后上锁,可能出现两边同时检查后两边同时访问临界区的问题。
双标志后检查法
先上锁后检查。
缺点:违背了空闲让进和有限等待的原则,可能出现两个进程长期无法访问临界资源。Peterson算法
如果两个进程都想进入临界区,尝试“孔融让梨”,让对方先使用临界区。
缺点:不遵循让权等待原则,发生忙等。互斥的硬件实现
中断屏蔽方法
利用开中断、关中断指令,不发生进程切换。
缺点:不适用多处理机、只适用操作系统内核进程,不适用用户进程。
TestAndSetLock指令
简称TS指令或TSL指令,不允许被中断,只能一气呵成。
用lock表示当前临界区是否上锁。缺点:不满足让权等待原则,暂时无法进入临界区的进程会一直占用CPU,导致忙等。
swap指令
也叫exchange指令或XCHG指令。
逻辑和TSL一样。信号量
信号量机制:信号量是用来表示系统某种资源的数量,可以用系统提供的一对原语wait和signal来操作信号量,从而实现进程互斥和同步。
信号量:整型信号量
整型信号量
记录型信号量
信号量机制实现进程互斥
信号量机制实现进程同步