王道操作系统笔记——— 进程与线程

Posted Xiu Yan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了王道操作系统笔记——— 进程与线程相关的知识,希望对你有一定的参考价值。

文章目录


一、进程的概念和特征

1.1 进程的概念

程序:静态的,就是个存放在磁盘里的 可执行文件,如:QQ.exe。
进程:动态的,是程序的一次 执行过程,或者是一个正在运行的是程序,如:可同时启动多次QQ程序。
进程实体: 即进程映像,是 静态的,可理解为进程的 一次时刻的状态
作业:静态的,如:一个应用软件(对应多个进程)、一个程序(对应一个进程)。
    作业装入内存,OS 会为该作业创建进程,作业装入后会变成进程。

注:同一个程序多次执行会对应多个进程。


1.2 进程的组成

进程是程序的一次执行过程,进程的组成实际上是进程实体(即进程映像)的组成。
进程组成包括:PCB、程序段、数据段。

注:① PCB,即 进程控制块,操作系统需要对各个并发运行的进程进行管理, 但凡管理时所需要的信息,都会被放在 PCB 中。
  ② PCB 是进程存在的唯一标志。 当进程被创建时,OS 会为其创建 PCB。当进程结束时,OS 会回收 PCB。
  ③ PCB 存于内存的内核区,注意内存的内核区和 OS 的内核态的区别,内核程序运行在内核态。

注:① PCB 是给操作系统用的,程序段和数据段是给进程自己用的。
  ② 引入进程实体的概念后,可把 进程 定义为是进程实体的 运行过程,是系统进行 资源分配调度 的一个独立单位。


1.3 进程的特征

注:① 动态性是进程最基本的特征。
  ② 异步性会导致并发程序执行结果的不确定性。


1.4 进程的状态与转换


注:单核 CPU同一时刻只会有一个进程处于运行态,多核 CPU 可能有多个进程处于运行态。

举例:运行态阻塞态:申请打印机。阻塞态就绪态:打印机可用了。

注:① “其他”,指代 “其他所需资源”。
  ② 运行态阻塞态,是进程自身的主动行为。
  ② 阻塞态就绪态,是被动行为。

创建新进程后,能进行处理及调度( ✓ )
在系统调用完成并返回用户态时能进行处理机调度( ✓ )
解析:能 ≠ 一定,可假设进程优先级很高,且采用剥夺式调度策略
(来源:12年408第30题)


1.5 进程控制

  进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。在操作系统中,一般把进程控制用的程序段称为 原语,原语执行具有原子性,即执行过程 一气呵成,不可中断。这种不可被中断的操作即为 原子操作。因此,原语可用 关中断和开中断指令 这两个特权指令实现原子性。

无论哪个进程控制原语,要做的无非三类事:
① 更新 PCB 中的信息
② 将 PCB 插入合适的队列
③ 分配 / 回收资源

引起 进程创建 的事件用户登录、作业调度、提供服务、应用请求
引起 进程终止 的事件正常结束、异常结束、外界干预
引起 进程阻塞 的事件等待系统分配某种资源、等待相互合作的其他进程完成
引起 进程唤醒 的事件等待的事件发生
引起 进程切换 的事件当前进程时间片到、当前进程主动阻塞、当前进程终止、有更高优先级的进程到达(剥夺式调度)

补充: 进程的组织
进程的组织方式有两种:链接方式和索引方式


1.6 进程的通信

  进程通信是指进程之间的信息交换,PV操作是低级通信方式,高级通信方式是指以比较高的效率传输大量数据的通信方式,高级通信方式有三种:共享存储、消息传递和管道通信。
  进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。因此,为了保证安全,一个进程不能直接访问另一个进程的地址空间,所以进程通信需要操作系统支持。

1.6.1 共享存储

基于存储区的共享:操作系统在内存中划出一块共享存储区,数据的形式、存放位置都由通信进程控制,而不是操作系统。这种共享方式速度很快,是一种高级通信方式。

基于数据结构的共享:比如共享空间里只能放一个长度为10的数组。这种共享方式速度慢、 限制多,是一种低级通信方式。

各进程对共享空间的访问应该是互斥的,各进程可使用操作系统内核提供的 P V 操作实现互斥。


1.6.2 消息传递

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

  1. 直接通信方式

    发送进程要知名接收进程的ID,直接把消息发送给接收进程,并将他挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息。

  2. 间接通信方式
    发送进程通过 信箱 间接地通信,将消息发送到某个中间实体,接收进程从中间实体取得消息。

    注:可以多个进程往同一个信箱 send 消息,也可以多个进程从同一个信箱中 receive 消息。


1.6.3 管道通信

管道 是一个特殊的 共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的内存缓冲区。

注:① 管道只能采用 半双工通信,某一时间段内只能实现 单向的传输。如果要实现 双向同时通信,则需要设置两个管道
  ② 各进程要互斥地访问管道(由操作系统实现)
  ③ 当管道写满时,写进程将阻塞,直到读进程将管道中的数据取走,即可唤醒写进程。
  ④ 当管道读空时,读进程将阻塞,直到写进程往管道中写入数据,即可唤醒读进程。

管道中的数据一旦被读出,就彻底消失。因此,当多个进程读同一个管道时,可能会错乱。对此,通常有两种解决方案:

  1. 一个管道允许多个写进程,一个读进程(来源:2014年408第31题)
  2. 允许有多个写进程,多个读进程,但系统会让各个读进程轮流从管道中读数据(Linux 的方案)。

补充:
 写进程往管道写数据,即便管道没被写满,只要管道没空,读进程就可以从管道读数据
 读进程从管道读数据,即便管道没被读空,只要管道没满,写进程就可以往管道写数据


1.7 父进程与子进程

父进程与子进程可以并发执行,有不同的进程控制块,且不能同时使用同一临界资源。(注意并发与并行的区别)

父进程与子进程有可共享虚拟地址空间。(×)
解析:同一进程的不同线程间可共享虚拟空间,而不同进程之间的虚拟空间是相互独立的。
(来源:2020年408第29题)


二、线程概念和多线程模型

  未引入线程之前,系统之间只能串行执行程序,如:QQ和音乐播放器只能串行执行。
  引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如:QQ中的视频、文字聊天与传文件)

2.1 线程的概念

线程可理解为轻量级进程,它是一个基本的CPU执行单元,也是程序执行流的最小单位
引入线程后,进程 只作为 除 CPU 外的系统资源的分配单元(如:打印机、内存地址空间等都是分配给进程的)。
线程则作为处理机的分配单元。


2.2 线程的属性


注:线程是处理机调度的单位,这里的线程指的是 操作系统看得见的内核级线程,内核级线程是处理机分配的单位

在支持多线程的系统中,进程P创建的若干线程可共享进程P的代码段、进程P的打开的文件、进程P的全局变量,不可共享的是进程P中某线程的栈指针。
(来源:2011年408第25题)


2.3 线程的实现方式

线程的实现可以分为两类:用户级线程内核级线程。内核级线程又称内核支持的线程。

用户级线程内核级线程
线程的管理工作由谁来完成应用程序 通过线程库实现所有的 线程管理工作 ,包括线程切换线程管理工作 操作系统内核完成
线程切换是否需要 CPU 变态用户级线程切换 可以在 用户态下即可完成 ,无需操作系统干预线程调度、切换等工作都由内核负责,因此 内核级线程的切换 必然需要在 核心态 下才能完成。
OS 是否能意识到用户级线程的存在OS 内核意识不到用户级线程的存在
用户级线程就是从用户视角看能看到的线程
OS 会为每个内核级线程建立相应的 TCB(线程控制块)
通过TCB对线程进行管理
内核级线程就是从操作系统内核视角看能看到的线程
优点用户级线程的切换在用户空间即可完成,
不需要切换到核心态,线程管理的系统开销小,效率高
当一个线程被阻塞后,其他线程还可以继续执行,并发能力强
多线程可在多核处理机上并行执行
缺点当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高
因为进程是处理机调度的基本单位,同一进程的多个线程不可在多核处理机上并行运行
一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成
需要切换到核心态,因此线程管理的开销大,效率低,成本高

用户级线程可以在不支持内核级线程的操作系统上实现(✓)
解析:早期操作系统中,还没有内核级线程,进程是处理机分配的基本单位,而用户级线程是在线程库支持下实现的,如下图。
(来源:2019年408第23题)


2.4 多线程模型

  1. 多对一模型: 多个用户级线程 映射到 一个内核级线程,且一个进程只被分配一个内核级线程。
    优点:上文用户级线程的优点。
    缺点:上文用户级线程的缺点。
  2. 一对一模型: 一个用户级线程映射到 一个内核级线程,每个用户进程有与用户级线程同数量的内核级线程。
    优点:上文内核级线程的优点。
    缺点:上文内核级线程的缺点。
  3. 多对多模型: n 用户及线程映射到 m 个内核级线程(n >= m),每个用户进程对应 m 个内核级线程。
    克服了多对一模型并发度不高的缺点(一个阻塞全体阻塞),又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点。

2.5 线程的状态与转换


2.6 线程的组织与控制


以上是关于王道操作系统笔记——— 进程与线程的主要内容,如果未能解决你的问题,请参考以下文章

专栏必读王道考研408操作系统万字笔记(有了它不需要你再做笔记了):各章节内容概述导航和思维导图

OS 学习笔记 进程与线程

王道操作系统笔记———— 进程同步与互斥

王道操作系统笔记———— 进程同步与互斥

王道操作系统笔记———— 处理机调度

王道操作系统笔记———— 处理机调度