进程的定义、组成、组织方式、特征
进程的定义
程序:一个指令序列 早期的计算机只支持单道程序
系统为每个运行的程序配置一个数据结构,称为进程控制块(PCB),用来描述进程的各种信息(如程序代码存放的位置)
PCB、程序段、数据段三部分构成了进程实体(进程映像),一般来说,进程实体简称进程,创建进程实际上是创建进程中的PCB,撤销进程则是撤销进程中的PCB;PCB是进程存在的唯一标志。进程强调动态性。
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
注:严格来说,进程实体和进程是不一样的,进程实体是静态的,进程是动态。
进程的组织
进程的组织方式:连接方式、索引方式
连接方式:按照进程状态将PCB分为多个队列;操作系统持有指向各个队列的指针。
索引方式:根据进程状态不同,建立几张索引表;操作系统持有指向各个索引表的指针。
进程的特征
- 动态性:进程是程序的一次执行过程,是动态的产生变化和消亡的
- 并发性:内存中有多个进程实体,各进程可并发执行
- 独立性:进程是能够独立进行,独立获得资源、独立接受调度的基本单位
- 异步性:各进程按照各自独立的,不可预知的速度向前推进,操作系统要提供“进程同步机制”来解决异步问题
- 结构性:每个进程会配置一个PCB,结构上看,进程由程序段、数据段、PCB组成
进程的状态和转换
进程的三种基本状态:运行态、就绪态、阻塞态
运行态:占有CPU,并在CPU上运行
就绪态:已经具备运行条件,由于没有空闲CPU,而暂时不能运行
阻塞态:因等待某一事件而暂时不能运行
另外两种状态:创建态、终止态
创建态:进程正在被创建,操作系统为进程分配资源,初始化PCB
终止态:进程正在从系统中撤销,操作系统会回收进程拥有的资源,撤销PCB
进程的转换
就绪态—运行态:进程被调度
运行态—就绪态:时间片到,或CPU被其他高优先级的进程抢占
运行态—阻塞态:等待系统资源分配,或等待某事件发生(主动行为)
阻塞态—就绪态:资源分配到位,等待的事件发生(被动行为)
创建态—就绪态:系统完成创建进程的相关工作
运行态—终止态:进程运行结束,或运行过程中遇到不可修复的错误
进程控制
进程控制的主要功能是对系统中所有进程所实施的有效管理,具有创建新进程、撤销已有进程、实现进程状态转换等功能(就是实现进程状态的转换)
用原语实现进程控制,原语的特点的执行过程中不允许被中断,只能一气呵成。不可中断的操作称为原子操作。
原语采用关中断指令和开中断指令实现
相关原语:进程的创建、终止、阻塞、唤醒、切换(阻塞和唤醒成对出现)
进程通信
进程通信指的是进程之间的信息交换
共享存储
基于数据结构(低级)和存储器的共享
两个进程对共享空间的访问必须是互斥的
消息传递
直接、间接通信方式
进程之间的数据交换以格式化的消息为单位,进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换
直接通信方式:消息直接挂到接收进程的消息缓冲队列上
间接通信方式:消息先要发到中间实体(信箱)中,也称“信箱通信方式”,例如:电子邮件系统
管道通信
管道是指用于链接读写进程的一个共享文件,又名pipe文件,其实是在内存中开辟一个大小固定的缓冲区
管道只能采用半双工通信,某一时间段内只能单向传输,若想实现双向传输,需要设置两个管道。
线程概念和多线程模型
传统进程机制中,进程是资源分配调度的基本单位,引入线程机制后,进程是资源分配的基本单位,线程是调度的基本单位;
传统进程机制中,只能线程间并发进行,引入线程后,各个线程之间也能并发进行,提升了并发度;
传统的进程间并发,需要切换进程的运行环境,系统开销很大,线程间并发,如果是同一进程内的线程切换,则不需要切换进程环境,系统开销小
线程的属性
多线程模型
多对一:多个用户及线程映射到一个内核级线程。每个用户级线程,只对应一个内核级线程。
优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的开销小,效率高。
缺点:当一个用户级线程被堵塞后,整个进程都会被堵塞,并发度不高。多个线程不可在多核处理机上并行运行。
一对一:一个用户及线程映射到一个内核级线程,每个用户进程有与用户级线程同数量的内核级线程。
优点:当一个线程被阻塞后,别的线程可以继续执行,并发能力强,多线程可以在多核处理机上并行执行。
缺点:一个用户进程,会占用多个内核级线程,线程切换有操作系统内核完成,需要切换到核心态,县城管理成本高,开销大。
多对多:n用户及线程,映射到m个内核级线程,(n>=m),每个用户进程对应m个内核级进程。
克服了多对一模型并发度不高的缺点,又克服了一对一模型中用户进程占用太多内核级线程,开销太大的缺点。
成,需要切换到核心态,县城管理成本高,开销大。
多对多:n用户及线程,映射到m个内核级线程,(n>=m),每个用户进程对应m个内核级进程。
克服了多对一模型并发度不高的缺点,又克服了一对一模型中用户进程占用太多内核级线程,开销太大的缺点。
|