一、进程的定义、组成、组织方式、特征
进程的定义
程序:就是一个指令序列。
引入多道程序技术后:为了方便操作系统管理,完成各程序并发执行,引入了进程、进程实体的概念。
程序段、数据段、PCB三部分组成了进程实体(进程映像)。一般情况下,我们把进程实体就简称为进程,例如,所谓创建进程,实质, 上是创建进程实体中的 PCB;而撤销进程,实质上是撤销进程实体中的 PCB。
注意: PCB 是进程存在的唯一标志!
引入进程实体的概念后,可把进程定义为:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
进程和进程实体严格来说是不同的,进程实体是静态的,进程是动态的。
进程的组成
进程(进程实体)由程序段、数据段、PCB三部分组成。
进程的组织
在一个系统中,通常有数十、数百乃至数千个 PCB。为了能对他们加以有效的管理,应该用适当的方式把这些 PCB 组织起来。
注:进程的组成讨论的是一个进程内部由哪些部分构成的问题,而进程的组织讨论的是多个进程之间的组织方式问题。
进程的组织方式
1.链接方式
- 按照进程状态将 PCB 分为多个队列
- 操作系统持有指向各个队列的指针
- 执行指针:同一时刻只会有一个进程处于运行态
- 就绪队列指针:通常把优先级高的进程放在队头
- 阻塞队列指针:指向当前处于阻塞态的进程
2.索引方式
- 根据进程状态的不同,建立几张索引表
- 操作系统持有指向各个索引表的指针
- 执行指针
- 就绪表指针:建立就绪索引表
- 阻塞表指针:建立阻塞表
进程的特征
进程的特征
总结
二、进程的状态与转换
进程的三种基本状态
另外两种状态
创建态(New, 又称:新建态)
- 进程正在被创建,操作系统为进程分配资源、初始化 PCB
终止态(Terminated, 又称:结束态) - 进程正在从系统中撤销,操作系统会回收进程拥有的资源、撤销 PCB
进程状态的转换
总结
三、进程控制
进程控制:就是要实现进程状态转换。
用原语实现进程控制。原语的特点是执行期间不允许中断,只能一气呵成。这种不可被中断的操作即原子操作。
原语采用“关中断指令”和“开中断指令”实现。
关/开中断指令的权限非常大,必然是只允许在核心态下执行的特权指令。
进程控制会导致进程状态的转换。无论哪个原语,要做的无非三类事情:
- 1.更新 PCB 中 的信息(如修改进程状态标志、将运行环境保存到 PCB、从 PCB 恢复运行环境)
- 2.将 PCB 插入合适的队列
- 3.分配/回收资源。
进程的创建
进程的终止
进程的阻塞与唤醒
进程的切换
总结
四、进程通信
顾名思义,进程通信就是指进程之间的信息交换。
进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。
为了保证安全,一个进程不能直接访问另一个进程的地址空间。但是进程之间的信息交换又是必须实现的。为了保证进程间的安全通信,操作系统提供了一些方法。
共享存储
两个进程对共享空间的访问必须是互斥的( 互斥访问通过操作系统提供的工具实现)。
共享存储
- 基于数据结构的共享
- 比如共享空间里只能放 一个长度为 10 的数组。这种共享方式速度慢、 限制多,是一种低级通信方式。
- 基于存储区的共享
- 在内存中画出一块共享存储区,数据的形式、存放位置都由进程控制,而不是操作系统。相比之下,这种共享方式速度更快,是一种高级通信方式。
管道通信
1.管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。
2.各进程要互斥地访问管道。
3.数据以字符流的形式写入管道,当管道写满时,写进程的 write() 系统调用将被阻塞,等待读进程将数据取走。当读进程将数据全部取走后,管道变空,此时读进程的 read()系统调用将被阻塞。
4.如果没写满,就不允许读。如果没读空,就不允许写。
5.数据一旦被读出,就从管道中被拋弃,这就意味着读进程最多只能有一个,否则可能会有读错数据的情况。
消息传递
进程间的数据交换以格式化的消息( Message)为单位。进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。
总结
五、线程、多线程模型
线程的概念、属性
可以把线程理解为“轻量级进
程”
线程是一个基本的 CPU 执行单元,也是程序执行流的最小单位。
引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如 QQ 视频、文字聊天、传文件)
引入线程后,进程只作为除 CPU 之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)。
引入线程机制后,有什么变化?
线程的属性
线程的实现方式
用户级线程
用户级线程由应用程序通过线程库实现。所有的线程管理工作都由应用程序负责(包括线程切换)。用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。
在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在。可以这样理解,“用户级线程” 就是“从用户视角看能看到的线程”。
内核级线程
内核级线程的管理工作由操作系统内核完成。线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。
可以这样理解,“内核级线程”就是“从操作系统内核视角看能看到的线程”。
在同时支持用户级线程和内核级线程的系统中,可采用二者组合的方式: 将 n 个用户级线程映射到 m 个内核级线程上( n>=m)
重点:
操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位。
在同时支持用户级线程和内核级线程的系统中,由几个用户级线程映射到几个内核级线程的问题引出了“多线程模型”问题。
- 多对一模型:多个用户及线程映射到一个内核级线程。每个用户进程只对应一个内核级线程。
- 多对一模型:多个用户及线程映射到一个内核级线程。每个用户进程只对应一一个内核级线程。
- 多对多模型: n 用户及线程映射到 m 个内核级线程(n>=m)。每个用户进程对应 m 个内核级线程。
总结
标题:(2)进程的描述与控制——计算机操作系统复习笔记
作者:AlgerFan
地址:https://www.algerfan.cn/articles/2019/12/28/1577540339439.html