王道操作系统笔记——— 进程与线程
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) 为单位。进程通过操作系统提供的“发送消息/接收消息”两个 原语 进行数据交换。
-
直接通信方式
发送进程要知名接收进程的ID,直接把消息发送给接收进程,并将他挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息。
-
间接通信方式
发送进程通过 信箱 间接地通信,将消息发送到某个中间实体,接收进程从中间实体取得消息。
注:可以多个进程往同一个信箱 send 消息,也可以多个进程从同一个信箱中 receive 消息。
1.6.3 管道通信
管道 是一个特殊的 共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的内存缓冲区。
注:① 管道只能采用 半双工通信,某一时间段内只能实现 单向的传输。如果要实现 双向同时通信,则需要设置两个管道。
② 各进程要互斥地访问管道(由操作系统实现)。
③ 当管道写满时,写进程将阻塞,直到读进程将管道中的数据取走,即可唤醒写进程。
④ 当管道读空时,读进程将阻塞,直到写进程往管道中写入数据,即可唤醒读进程。
管道中的数据一旦被读出,就彻底消失。因此,当多个进程读同一个管道时,可能会错乱。对此,通常有两种解决方案:
一个管道允许多个写进程,一个读进程(来源:2014年408第31题)
- 允许有多个写进程,多个读进程,但系统会让各个读进程轮流从管道中读数据(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 多线程模型
- 多对一模型: 多个用户级线程 映射到 一个内核级线程,且一个进程只被分配一个内核级线程。
优点:上文用户级线程的优点。
缺点:上文用户级线程的缺点。 - 一对一模型: 一个用户级线程映射到 一个内核级线程,每个用户进程有与用户级线程同数量的内核级线程。
优点:上文内核级线程的优点。
缺点:上文内核级线程的缺点。 - 多对多模型: n 用户及线程映射到 m 个内核级线程(n >= m),每个用户进程对应 m 个内核级线程。
克服了多对一模型并发度不高的缺点(一个阻塞全体阻塞),又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点。
2.5 线程的状态与转换
2.6 线程的组织与控制
以上是关于王道操作系统笔记——— 进程与线程的主要内容,如果未能解决你的问题,请参考以下文章