操作系统——进程管理

CGC Lv4

进程的概念、组成、特征

进程的概念

从程序入手

程序为静态的,存放在磁盘里的可执行文件,一系列的指令集合

进程

动态的,程序的一次执行过程
引入进程实体的概念后,进程定义为:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
PCB是进程存在的唯一标志

进程的组成

PID

当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的ID——PID(Process ID)即进程ID

PCB

操作系统所记录的PID,进程所属用户ID(UID),给进程分配的资源,进程运行情况等等,均被保存在一个数据结构PCB(Process Control Block)中,即进程控制块

操作系统需要对各个并发运行的进程进行管理,但凡管理时需要的信息,都会被放在PCB中

进程实体

一个进程实体(进程映像)由PCB、程序段、数据段组成。
进程是动态的,进程实体是静态的
进程实体反应了进程在某一时刻的状态

进程的组成

进程的特征

动态性

进程是程序的一次执行过程,是动态产生、变化、消亡的

并发性

内存中有多个进程实体,各进程可并发执行

独立性

进程是能独立运行、独立获得资源、独立接收调度的基本单位

异步性

各进程各自独立、不可预知的速度向前推进

结构性

每个进程对应配置一个PCB,结构上看,进程由程序段、数据段、PCB组成

进程的状态和状态的转换

进程的状态

创建态(新建态)

进程正在被创建时,状态为“创建态”,操作系统会为进程分配资源、初始化PCB

就绪态

进程创建完成后,进入“就绪态”,该进程已经具备运行条件,但由于没有空闲cpu,暂时无法运行

运行态

进程在cpu上运行,cpu正在执行对应的指令序列

阻塞态(等待态)

进程运行过程中,可能会请求等待某个事件的发生(如等待系统资源分配),在事件发生前,进程无法继续往下运行,此时操作系统会让进程下cpu,并让他进入“阻塞态”

终止态(结束态)

进程执行exit系统调用,请求操作系统终止该进程,此时该进程进入“终止态”,操作系统让该进程下cpu并回收内存空间等资源,最后回收该进程的PCB
当终止进程工作完成后该进程彻底消失

进程状态的转换

进程的组织

链接方式

使用指针将各个状态的PCB进行组织,如有执行指针指向当前处于运行态的进程,就绪队列指针指向处于就绪态的进程

索引方式

操作系统给各个状态的进程建立索引表,操作系统持有指向各个索引表的指针

大部分操作系统采用链接方式

进程控制

进程控制的主要功能是对系统中的所有进程实施有效的管理,实现进程状态的转化

原语

原语的执行具有原子性,执行过程不允许被中断
可以使用“关中断指令”和“开中断指令”两个特权指令实现原子性

执行关中断指令后就不在检查中断信号,指导执行开中断指令之后才恢复检查

进程通信

进程间通信(Inter-Process Communication, IPC)是指两个进程之间产生数据交互

共享存储

基于储存区的共享

使用共享存储区,使其中的数据可以被多个进程进行读写,数据形式、存放位置都由通信进程控制,而不是操作系统。
这种共享方式速度很快,为高级通信方式

为避免出错,各个进程对共享空间的访问应该是互斥的
各个进程可以使用操作系统内核提供的同步互斥工具如P、V操作

基于数据结构的共享

例如在共享空间内申请长度为10的数组,而后储存在该数组中的数据会被受到这个固定长度和类型的数组的限制
该方式速度慢,限制多,为低级通信方式

信息传递

数据交换以格式化的信息为单位,进程通过操作系统提供的“发送/接收消息”两个原语进行数据交换

直接通信方式

消息发送进程要指明接收进程的ID

间接通信方式

通过“信箱”作为中间实体间接地通信,因此又称“信箱通信方式”

管道通信

“管道”是一个特殊的共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的内存缓冲区(FIFO),对于数据进出有严格要求,本质上是一个循环队列

注意事项
1、管道只能采用半双工通信,某一时间段内只能实现单向的传输,如果要实现双向同时通信,则需要设置两个管道
2、各进程要互斥地访问管道(由操作系统实现)
3、当管道写满的时候,写进程将阻塞,指导都进程将管道中的数据取走
4、当管道为空时,读进程将阻塞,指导写进程往管道中写入数据
5、管道中的数据一旦被读出,就彻底消失,因此当多个进程读同一个管道时可能会错乱

  • 解决方案1:一个管道允许多个写进程,一个读进程
  • 解决方案2:允许多个写、读进程,但系统会让各个读进程轮流从管道中读数据(Linux方案)

线程

线程是一个基本的CPU执行单元,也是程序执行流的最小单位
不仅进程之间可以并发,线程之间也可以缤纷噶,从而进一步提高了系统的并发度

引入线程后,进程只作为除了CPU之外的系统资源分配单元

引入线程带来的变化

线程的属性

线程的属性

线程的实现方式和多线程模型

线程的实现方式

用户级线程

使用线程库

切换线程在用户态下进行
操作系统无法意识到用户级线程的存在

用户级线程优点

线程切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高

用户级线程缺点

如果其中一个线程被阻塞后,整个进程都会被阻塞,并发度不高
多个线程不可以在多个核心上运行

内核级线程

由操作系统完成,由内核支持

内核级线程优点

当一个线程被阻塞后,别的线程还可以继续执行,并发能力强,多线程可在多核处理机上并发执行

内核级线程缺点

一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理成本高,开销大

多线程模型

集合用户级线程和内核级线程

根据用户级线程和内核级线程的映射关系,可以划分为几种多线程模型

一对一模型

一个用户级线程映射到一个内核级线程

一对一模型优点

并发能力强,多线程可在多核处理机上并发执行

一对一模型缺点

线程管理成本高,开销大

多对一模型

多个用户级线程映射到一个内核级线程,且一个进程只分配一个内核级线程

多对一模型优点

用户级线程的切换在用户空间即可完成,不需要切换到到核心态,系统开销小,效率高

多对一模型缺点

当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高

操作系统只能感知内核级线程,因此只有内核级线程才是处理机分配的单位

多对多模型

n个用户及线程映射到m个内核级线程 (n >= m) 每个用户对应m个内核级线程

多对多模型优点

克服了多对一模型并发度波高的缺点,又克服了一对一模型中一个用户进程占用太多内核级线程开销太大的缺点

线程的状态与转换

线程的组织与控制

TCB 线程控制块

  • Title: 操作系统——进程管理
  • Author: CGC
  • Created at: 2023-08-12 14:59:51
  • Updated at: 2023-08-16 18:26:33
  • Link: https://redefine.ohevan.com/2023/08/12/操作系统——进程管理/
  • License: This work is licensed under CC BY-NC-SA 4.0.