小白莲的操作系统day03-2.1

进程管理

进程的概念、组成、特征

概念:理解“进程”和“程序”的区别。

组成:一个进程由哪些部分组成。

特征:进程有哪些重要的特征。

进程的概念

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

进程(Process):是动态的,是程序的一次执行过程,同一个程序多次执行会对应多个进程。
在这里插入图片描述
思考:操作系统是这些进程的管理者,它怎么区分各个进程?

进程的组成–PCB

当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的“身份证号”–PID(Process ID,进程ID)。
在这里插入图片描述
操作系统要记录PID、进程所属用户ID(UID);基本的进程描述信息,可以让操作系统区分各个进程。

还要记录给进程分配了哪些资源(如:分配了多少内存、正在使用哪些I/O设备、正在使用哪些文件);可用于实现操作系统对资源的管理

还要记录进程的运行情况(如:CPU使用时间、磁盘使用情况、网络流量使用情况);可用于实现操作系统对进程的控制、调度

这些信息都被保存在一个数据结构PCB(Process Control Block)中,即进程控制块;操作系统需要对各个并发运行的进程进行管理,但凡管理时所需要的信息,都会被放在PCB中。
在这里插入图片描述
PCB是给操作系统用的。

程序段、数据段是给进程自己用的。
在这里插入图片描述
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。

一个进程实体(进程映像)由PCB、程序段、数据段组成。
进程是动态的,进程实体(进程映像)是静态的。
进程实体反映了进程在某一时刻的状态(如:x++后,x=2)。
在这里插入图片描述

进程的特征

程序是静态的,进程是动态的,相比与程序,进程拥有以下特征:
在这里插入图片描述
动态性是进程最基本的特征。

知识点回顾与重要考点

在这里插入图片描述

进程的状态与转换

知识总览

在这里插入图片描述

进程的状态–创建态、就绪态

进程正在被创建时,它的状态是“创建态”,在这个阶段操作系统会为进程分配资源、初始化PCB。

当进程创建完成后,便进入“就绪态”,处于就绪态的进程已经具备运行条件,但由于没有空闲CPU,就暂时不能运行。

如果一个进程此时在CPU上运行,那么这个进程处于“运行态”;CPU会执行该进程对应的程序(执行指令序列)。

在这里插入图片描述
在进程运行的过程中,可能会请求等待某个事件的发生(如等待某种系统资源的分配,或者等待其他进程的响应)。
在这个事件发生之前,进程无法继续玩下执行,此时操作系统会让这个进程下CPU,并让它进入“阻塞态”。
当CPU空闲时,又会选择另一个“就绪态”进程上的CPU运行。

一个进程可以执行exit系统调用,请求操作系统终止该进程。此时该进程会进入“终止态”,操作系统会让该进程下CPU,并回收内存空间等资源,最后还要回收该进程的PCB。
当终止进程的工作完成之后,这个进程就彻底消失了。

在这里插入图片描述
注意:不能由阻塞态直接转换为运行态,也不能由就绪态直接转换为阻塞态;运行态可以直接转换为就绪态(如:时钟中断)。

在这里插入图片描述
进程PCB中,会有一个变量state来表示进程的当前状态。如:1表示创建态、2表示就绪态、3表示运行态;为了对同一个状态下的各个进程进行统一的管理,操作系统会将各个进程的PCB组织起来。

进程的组织方式

大多数操作系统用的是链式方式。

链式方式:在这里插入图片描述
索引方式:
在这里插入图片描述

知识点回顾与重要考点

在这里插入图片描述

进程控制

进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程,撤销已有进程,实现进程状态转换等功能。

简化理解:反正进程控制就是要实现进程状态转换。

知识总览

在这里插入图片描述

如何实现进程控制

用“原语”实现进程控制,原语的执行具有“原子性”,一气呵成。

思考:为何进程控制(状态转换)的过程要“一气呵成”?

如果不能“一气呵成”,就有可能导致操作系统中的某些关键数据结构信息不统一的情况,这会影响操作系统进行别的管理工作。
在这里插入图片描述

如何实现原语的“原子性”?

原语的执行具有原子性,即执行过程只能一气呵成,期间不允许被中断。
可以用“关中断指令”和“开中断指令”这两个特权指令实现原子性。

在这里插入图片描述

正常情况:CPU每执行完一条指令都会例行检查是否有中断信号需要处理,如果有,则暂停运行当前这段程序,转而执行相应的中断处理程序。

CPU执行了关中断指令之后,就不再例行检查中断信号,直到执行开中断指令之后才会恢复检查。

这样,关中断、开中断之间的这些指令序列就是不可被中断的,这就实现了“原子性”。

进程控制相关的原语

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

知识回顾与重要考点

无论哪个进程控制原语,要做的无非三类事情:
1.更新PCB中的信息(修改进程状态(state)保存/恢复运行环境)
2.将PCB插入合适的队列
3.分配/回收资源
在这里插入图片描述

进程通信

在这里插入图片描述

什么是进程通信?

顾名思义,进程通信就是指进程之间的信息交换。

进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。

在这里插入图片描述

为了保证安全,一个进程不能直接访问另一个进程的地址空间。
但是进程之间的信息交换又是必须实现的。为了保证进程间的安全通信,操作系统提供了一些方法。

在这里插入图片描述

进程通信–共享存储

在这里插入图片描述

进程通信–管道通信

“管道”是指用于连续读写进程的一个共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的缓冲区。
在这里插入图片描述

进程通信–消息传递

进程间的数据交换以格式化的消息(Message)为单位。进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。
在这里插入图片描述

知识回顾与重要考点

在这里插入图片描述

线程的特点和概念

知识总览

在这里插入图片描述

什么是线程,为什么要引入线程

在这里插入图片描述
在这里插入图片描述

线程的特性和优点

在这里插入图片描述

在这里插入图片描述
引入线程前,进程既是资源分配的基本单位,也是调度的基本单位。

引入线程后,进程是资源分配的基本单位,线程是调度的基本单位。线程也有运行态、就绪态、阻塞态。

在多CPU环境下,各个线程也可以分派到不同的CPU上并行地执行。

引入线程后,进程是资源分配的基本单位。而线程几乎不拥有资源,只拥有极少量的资源(线程控制块TCB、寄存器信息、堆栈等)。

知识回顾与重要考点

在这里插入图片描述

线程的实现方式、多线程模式

知识总览

在这里插入图片描述

线程实现的方式

用户级线程(User-Level Thread,ULT)
在这里插入图片描述
很多编程语言提供了强大的线程库,可以实现线程的创建、销毁、调度等功能。

1.用户级线程由应用程序通过线程库实现,所有的线程管理工作都由应用程序负责(包括线程切换)。

2.用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。

3.在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在;“用户级线程”就是“从用户视角看能看到的线程”。

4.优缺点:
优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高。
缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行。

内核级线程(Kernel-Level Thread,KLT,又称“内核支持的线程”)
在这里插入图片描述
1.内核级线程的管理工作由操作系统内核完成。

2.线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。

3.操作系统会为每个内核级线程建立相应的TCB(Thread Control Block,线程控制块),通过TCB对线程进行管理。“内核级线程”就是“从操作系统内核视角看能看到的线程”

4.优缺点
优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可以在多核处理机上并行执行。
缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。

多线程模型

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

一对一模型: 一个用户级线程映射到一个内核级线程。每个用户进程有与用户级线程同数量的内核级线程。

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

缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。
在这里插入图片描述

多对一模型: 多个用户级线程映射到一个内核级线程。且一个进程只被分配一个内核级线程。

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

缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并大度不高。多个线程不可在多核处理机上,并行运行。

重点重点重点: 操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位。
在这里插入图片描述

多对多模型: n用户及线程映射到m个内核级线程(n>=m)。每个用户进程对应m个内核级线程。
克服了多对一模型并发度不高的缺点(一个阻塞全体阻塞),又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点。

可以这么理解:
用户级线程是“代码逻辑”的载体
内核级线程是“运行机会”的载体

内核级线程才是处理机分配的单位。例如:多核CPU环境下,左边这个进程最多能被分配两个核。

一段“代码逻辑”只有获得了“运行机会”才能被CPU执行

内核级线程中可以运行任意一个有映射关系的用户级线程代码,只有两个内核级线程中正在运行的代码逻辑都阻塞时,这个进程才会阻塞。
在这里插入图片描述

知识回顾与重要考点

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值