王道操作系统:2.1、线程与进程
进程与线程
进程概念和特征
概念
进程控制块(Process Control Block, PCB)
概念
描述进程的基本情况和
运行状态,进而控制和管理进程
作用
进程存在的唯一标志
进程实体(映像)
程序段
相关数据段
PCB(核心)
进程定义
1) 进程是程序的一次执行过程。
2) 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
3) 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
进程是进程实体的运行过程,是系统进行资源分配和调度(按时间片分配)的一个独立单位
实体是静态的
进程是动态的
特征
动态性
程序的一次执行
最基本的特征
并发性
多个进程实体同存于内存中,能在一段时间内同时运行
独立性
进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位
异步性
进程的相互制约,使得进程按各自独立的、可不预知的速度向前推进
导致执行结果的不可再现性
进程的状态与切换
五大状态
运行态
正在处理及上运行
就绪态
(等待态)
万事俱备,只欠cpu
就绪队列
阻塞态
等待某一事件而暂停运行
阻塞队列
创建态
1.申请PCB,填写用于控制和管理进程的信息
2.进程分配运行时所必须资源
3.把该进程转入就绪态并插入就绪队列
结束态
1.进程置为结束态
2.理资源释放和回收等工作
基本状态
状态切换
进程的组织
PCB
定位
进程实体的一部分,是进程存在的唯一标志
内容
组织方式
链接方式
将同一状态的PCB链接成一个队列
根据其阻塞原因的不同,排成多个阻塞队列
索引方式
索引表的表项指向相应的PCB
就绪索引表和阻塞索引表
程序段
是能被进程调度程序调度到CPU执行的程序代码段
注:多个进程可以运行同一个程序
数据段
进程对应的程序加工处理的原始数据
是程序执行时产生的中间或最终结果
进程的控制
进程的创建
过程(创建原语)
1.分配一个唯一的进程标识号,并申请一个空白PCB
2.分配其运行所需的资源,如内存、文件、I/O设备和CPU时间等
3.初始化PCB,主要包括初始化标志信息、初始化处理机状态信息和初始化处理机控制信息,以及设置进程的优先级等
4.插入就绪队列,等待被调度运行
事件
终端用户登录系统、作业调度、系统提供服务、用户程序的应用请求等
注
允许一个进程创建另一个进程,此时创建者称为父进程,被创建的进程称为子程
子进程可以继承父进程所拥有的资源。当子进程被撤销时,应将其从父进程那里获得的资源归还给父进程。
在撤销父进程时,通常也会同时撤销其所有的子进程。
进程的终止
过程(终止原语)
1.根据被终止进程的标识符,检索出该进程的PCB,从中读出该进程的状态
2.若被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程
3.若该进程还有子孙进程,则应将其所有子孙进程终止
4.拥有的全部资源归还给其父进程,或归还给操作系统
5.将该PCB从所在队列(链表)中删除
事件
①正常结束,表示进程的任务已完成并准备退岀运行
②异常结束,表示进程在运行时,发生了某种异常事件,使程序无法继续运行
如存储区越界、保护错、 非法指令、
特权指令错、运行超时、算术运算错、IO故障等
③外界干预,指进程应外界的请求而终止运行
操作员或操作系统干预、父进程请求和父进程终止
进程的阻塞和唤醒
过程
阻塞过程(阻塞原语)
1.找到将要被阻塞进程的标识号对应的PCB
2.若该进程为运行态,则保护其现场,将其状态转为阻塞态,停止运行。
3.把该PCB插入相应事件的等待队列,将处理机资源调度给其他就绪进程。
唤醒过程(唤醒原语)
1.在该事件的等待队列中找到相应进程的PCB
2.将其从等待队列中移出,并置其状态为就绪态
3.把该PCB插入就绪队列,等待调度程序调度
注
Block原语和Wakeup原语是一对作用刚好相反的原语,必须成对使用
进程的通信
概念
进程间的信息交换
通信方式分类
低级
PV操作
高级
概念
以高效率传输大量数据
分类
共享存储
-
图示
-
概念
- 通过对一片共享空间进行写/读操作实现
进程之间的信息交换,需要同步互斥工具(PV操作)
- 通过对一片共享空间进行写/读操作实现
-
类型
-
基于数据结构(低级)
-
基于存储区(高级)
-
-
注:进程运行期间一般不能访问其他进程的空间,想让两个
进程共享空间,必须通过特殊的系统调用实现
消息传递
-
图示
-
数据交换单位
- 格式化的消息(Message)
-
类型
-
直接通信方式
- 发送放—>接收方的消息缓冲队列
-
间接通信方式
- 发送方—>邮箱—>接收方
-
管道通信
-
管道
- 用于连接一个读进程和一个写进程以实现它们之间的通信的一个共享文件
(pipe文件)
- 用于连接一个读进程和一个写进程以实现它们之间的通信的一个共享文件
-
数据交换形式
- 字符流
-
协调能力
- 互斥、同步和确定对方的存在。
-
特点
-
管道大小固定
-
读速度>写
-
写满才读,读完才写
-
-
注
-
从管道读数据是一次性操作,数据一旦被读取,就释放空间以便写更多数据
-
采用半双工通信,也可定义两个管道实现互动
-
线程和多线程模型
线程的基本概念
“轻量级进程”,进程中的一个实体。它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成
线程与进程的比较
目的上
进程的目的是更好地使多道程序并发执行,提高资源利用率和系统吞吐量
线程的目的则是减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能
调度上
传统的操作系统中,拥有资源和独立调度的基本单位都是进程
在引入线程的操作系统中,线程是独立调度的基本单位
注
同一进程中线程的切换不会引起进程切换。
一个进程中的线程切换到另一个进程中的线程时会引起进程切换
并发上
都可以并发执行
拥有资源上
进程是系统中拥有资源的基本单位
线程不拥有系统资源,仅有一点必不可少、能保证独立运行的资源, 访问隶属进程的资源
独立性上
每个进程都拥有独立的地址空间和资源,除了共享全局变量,不允许其他进程访问
进程中的线程对其他进程不可见,共享进程的地址空间和资源
系统开销上
线程<进程
对多处理机系统的支持上
传统单线程进程,进程只能运行在一个处理机上
多线程进程,可以将进程中的多个线程分配到多个处理机上执行
线程的属性
线程是一个轻型实体,它不拥有系统资源,但每个线程都应有一个唯一的标识符和一个线程控制块
不同的线程可以执行相同的程序
同一进程中的各个线程共享该进程所拥有的资源
线程是处理机的独立调度单位,多个线程是可以并发执行
单cpu时交替占用
多cpu时一个进程的多个进程可占用不同cpu
生命周期
类比进程
线程的状态与切换
同进程
线程的组织与控制
线程控制块(TCB)
作用
,用于记录控制和管理线程的信息
内容
①线程标识符;
②一组寄存器,包括程序计数器、状态寄存器和通用寄存器;
③线程运行状态,用于描述线程正处于何种状态;
④优先级;
⑤线程专有存储区,线程切换时用于保存现场等;
⑥堆栈指针,用于过程调用时保存局部变量及返回地址
线程创建
1.利用一个线程创建函数(或系统调用),并提供相应的参数
线程主程序的入口指针、堆栈的大小、线程优先级
2.线程创建函数执行完后,将返回一个线程标识符
线程终止
由终止线程调用相应的函数执行终止操作
注
通常线程被终止后并不立即释放它所占有的资源
只有当进程中的其他线程(对被终止线程)执行了分离函数后,被终止线程才与资源分离
被终止但尚未释放资源的线程仍可被其他线程调用,以使被终止线程重新恢复运行
线程的实现方式
用户级线程(ULT)
User-Level Thread
概念
用户进行线程管理(用户逻辑上的线程,对OS来说只有一个进程),操作系统看不到用户级线程
调度单位
进程,处理机为每个进程分配相同的时间
优点
①线程切换不需要转换到内核空间,节省了模式切换的开销
②调度算法可以是进程专用的,不同的进程对自己的线程选择不同的调度算法
③线程的实现与操作系统平台无关,对线程管理的代码是属于用户程序的一部分
缺点
①系统调用的阻塞问题,当线程执行一个系统调用时,不仅该线
程被阻塞,而且进程内的所有线程都被阻塞
②不能发挥多处理机的优势,内核每次分配给一个进程的仅有一个CPU,因此进程中仅有一个线程能执行
实现举例
内核级线程(KLT)
Kernel-Level Thread
负责
无论是系统进程还是用户进程、线程管理工作,都是在操作系统内核的支持下运行
调度单位
线程
优点
①能发挥多处理机的优势,内核能同时调度同一进程中的多个线
程并行执行
②如果进程中的一个线程被阻塞,内核可以调度该进程中的其他线程占用处理机,也可运行其他进程中的线程
③内核支持线程具有很小的数据结构和堆栈,线程切换比较快、开
销小
④内核本身也可采用多线程技术,可以提高系统的执行速度和效率
缺点
同一进程中的线程切换,需要从用户态转到核心态进行,系统开销较大
原因
- 用户进程的线程在用户态运行,而线程调度和管理是在内核实现
组合方式
概念
内核支持多个内核级线程的建立、调度和管理,同时允许用户程序建立、调度和管理用户级线程
户级线程通过时分多路复用内核级线程,一个内核线程对应多个用户线程
图示
线程库
概念
为程序员提供创建和管理线程的API
实现方式
①在用户空间中提供一个没有内核支持的库
②实现由操作系统直接支持的内核级的一个库
多线程模型
(类比三种实现方式)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了