OS-2-1-进程管理(概略)
2021-08-12 09:28:30 16 举报
AI智能生成
操作系统第二章 第一节 进程管理 基本概念 知识点梳理
作者其他创作
大纲/内容
进程通信
背景
为了保证安全,进程不可直接访问其他进程的地址空间
OS提供方法以供进程进行通信
方法
共享存储
OS分配一块共享空间供进程通信
该空间的访问是互斥的,
通过OS提供的同步-互斥工具实现
该空间的访问是互斥的,
通过OS提供的同步-互斥工具实现
基于数据结构的共享
如“仅存放长10的数组”
如“仅存放长10的数组”
速度慢、限制多
基于存储区的共享
OS划出共享存储区
对数据形式存放位置不做要求
交由进程控制
交由进程控制
管道通信
管道是一个连接读写进程的共享文件
在内存中是一块固定大小缓冲区
一般与页面等大
在内存中是一块固定大小缓冲区
一般与页面等大
仅支持半双工通信
双向通信需要两根管道
双向通信需要两根管道
访问仍要互斥
读写
写进程以字符流形式写入管道
写满时wirte()系统调用被阻塞
写满时wirte()系统调用被阻塞
读进程将数据全部取走,管道
变空此时read()系统调用被阻塞
变空此时read()系统调用被阻塞
只能一对一,读了就会被丢弃,一次性
消息传递
通过发送消息/接收消息原语
以格式化的消息为单位进行
以格式化的消息为单位进行
消息的结构
直接通信
消息挂载带接收进程的消息缓冲队列的队尾
间接通信
(信箱通信)
(信箱通信)
消息发送到信箱中
线程
基本概念
背景:进程自身只能串行,但是一些任务需要更高的并发度
进程中包含了多个线程,取代进程成为程序执行流之最小单位
线程更小
进程间可以并发,线程间亦可以并发
线程被调用不会因此生成多个线程实体
进程仍然是除CPU外的系统资源的最小分配单元
Compare:进程
进程不再是调度的基本单位,被线程取代。
进程仍然是除CPU外的系统资源的最小分配单元
线程间如进程一样具有并发性
同一进程内线程间的并发无需切换环境,系统开销小
线程的属性
调度
是处理机调度的单位
多CPU计算机中,各个线程可以占用不同的CPU
线程具备线程ID和线程控制块TCB
线程也具有就绪、阻塞、运行三种基本状态
系统资源
线程几乎不拥有系统资源
统一进程的不同线程共享进程的资源
共享内存地址空间,同一进程的线程间通信无需OS干预
系统开销
同一进程间线程切换不会引起进程切换
同一进程间线程切换开销很小
不同进程间线程切换会引起进程切换
不同进程间切换开销很大
线程实现方式
用户级线程
User-Level Thread(ULT)
User-Level Thread(ULT)
多出现在早期OS不支持线程时
线程由线程库实现,OS不能感知线程存在
线程是逻辑上的线程,管理由线程库完成
线程切换无需OS介入
线程是逻辑上的线程,管理由线程库完成
线程切换无需OS介入
优势:管理不涉及CPU模式切换,开销很小
劣势:无法处理阻塞问题,一阻塞全阻塞
并发度不高,无法多核并行
并发度不高,无法多核并行
内核级线程
Kernel-Level Thread(KLT)
Kernel-Level Thread(KLT)
管理由OS完成,线程切换需要CPU状态切换
并发能力强,可以多核并行,不受阻塞影响
用户进程占用多个内核级线程,管理开销大
内核级线程才是处理机调度的单位
多线程模型
一对一
一个用户级线程映射到一个内核级线程
并发能力强,可多核并行
管理开销大
多对一
多个用户级线程映射到一个内核级线程
用户级线程的切换在用户空间完成,无需CPU模式切换
有阻塞问题,并发度不高
一般默认一个进程只分配了一个内核级线程
多对多
n个用户线程映射到m个内核级线程(n≥m)
每个用户进程均可对应m个内核级线程
并发度高,开销也可以不大
基本概念
进程
一种动态的,“程序的一次执行过程”
Compare:程序:静态的“指令集合”
同一个程序执行多次对应多个进程
是OS分配资源、进行调度的最小单位
进程实体
(又称进程映像)进程运行时某个瞬间进程的存在,即是静态的
组成
PCB进程控制块
进程存在的唯一标志
程序运行前创建
进程结束时回收
进程存在的唯一标志
程序运行前创建
进程结束时回收
进程描述信息
PID:Process id,唯一区分进程的编码
UID:进程所属用户ID
进程控制和管理信息
CPU使用时间、磁盘、网络使用状况等
进程当前状态:就绪态/阻塞态/运行态……
资源分配清单
正在使用的文件
正在使用的内存区域
正在使用的设备
处理机相关信息
PSW、PC等寄存器的值
程序段
程序代码(指令序列)
数据段
运行过程产生的数据(如变量)
特征
动态性
进程是程序执行一次的过程,是动态产生、变化、结束的
并发性
内存中有多个进程实体,可以并发执行
进程并发失去封闭性
封闭性指的是程序执行结果取决于进程本身,不受外界影响
并发进程共享变量,速度快慢影响读写顺序,影响结果。
独立性
可以独立运行,独立获得资源、独立接受调度的基本单位
进程被调用不会因此生成多个进程实体
异步性
各个进程独立运行,进度不可预知
OS必须提供进程同步机制来解决异步问题
OS必须提供进程同步机制来解决异步问题
结构性
每个进程会配置一个PCB,结构上看,
进程是程序段、数据段、PCB的结构
进程是程序段、数据段、PCB的结构
进程的状态和转换
状态
运行状态
占有CPU
在CPU上运行
就绪状态
具备运行条件
不占有CPU
阻塞状态
因等待某一事件
而暂时不能运行
而暂时不能运行
创建状态
OS为进程分配资源、初始化PCB
终止状态
OS回收分配的资源,撤销PCB(进程结束)
对于单处理机系统,除了死锁状态,其余任何时候都有且仅有一个执行态的进程
转换
就绪→运行
运行→就绪
时间片到期时通
常可以降低优先级
常可以降低优先级
运行→阻塞
阻塞→就绪
进程的组织方式
链式方式
执行指针
指向当前处于执行态的进程(PCB)
单处理机计算机中同一时刻只有一个执行态进程
就绪队列指针
指向当前处于就绪态的进程
通常优先级高的在队头
→PCB6→PCB4→PCB7...
等待打印机的阻塞队列
等待磁盘的阻塞队列
*其他原因阻塞队列
索引方式
执行指针
指向当前处于执行态的进程(PCB)
单处理机计算机中同一时刻只有一个执行态进程
就绪表指针
指向就绪索引表
索引表表项指向就绪态PCB
进程控制
实现进程状态转换
实现进程状态转换
实现
原语
Primitive
Primitive
是一种特殊的应用程序
原子性
执行必须一次性完成
实现
关中断指令
特权指令
特权指令
执行后CPU不再例行检查中断信号
直到执行了开中断指令
直到执行了开中断指令
开中断指令
特权指令
特权指令
控制方法
创建进程
允许一个进程创建另一个进程
创建者称父进程
被创建者称子进程
子进程可继承父进程资源
允许一个进程创建另一个进程
创建者称父进程
被创建者称子进程
子进程可继承父进程资源
应用场景
用户登录
分时系统中,用户登录成功,OS会为其建立一个新进程
作业调度
多道批处理系统中,新的作业放入内存,为其建立新进程
作业就是外存中尚未运行的程序
系统提供服务
用户/用户程序向OS提出请求
用户程序应用请求
用户程序主动请求创建子线程
创建原语
分配PID,申请空白PCB
若申请失败则创建失败
分配资源(内存等)
若资源不足,进入阻塞态
初始化PCB:标志信息、处理机状态、处理机控制信息、设置优先级
若就绪队列能接受新进程,则插入就绪队列
终止进程
子进程撤销时资源归还父进程
撤销父进程时同时撤销子进程
子进程撤销时资源归还父进程
撤销父进程时同时撤销子进程
使用场景
正常结束:进程任务完成准备退出运行
异常结束:运行时发生异常,使程序不能
继续运行,如存储区越界、非法指令、特权
指令、运行超时、算数运算错、IO故障等
继续运行,如存储区越界、非法指令、特权
指令、运行超时、算数运算错、IO故障等
外界干预:进程因外部请求而终止,如
操作员或OS干预、父进程请求/终止
操作员或OS干预、父进程请求/终止
撤销原语
根据对象进程的PID检索PCB,确认其状态
若其处于执行态,立即终止其执行,将处理机分配给其他进程
若其还有子孙进程,终止之
将所有资源归还给父进程或OS
自PCB所在链表删除之
阻塞&唤醒
阻塞原语
Block
Block
根据PID找到PCB
若该进程为运行态,保护其现场,
转至阻塞态并停止运行
转至阻塞态并停止运行
将PCB插入对应事件的等待队列
并将处理机资源调度给其他就绪线程
并将处理机资源调度给其他就绪线程
唤醒原语
Wakeup
Wakeup
在该时间的等待队列中找到对象PCB
移出等待序列,并设为就绪态
将PCB插入就绪队列等待调度程序调度
进程切换
使用场景
时间片到期
有优先级更高的进程到达
当前进程主动阻塞
当前进程终止
Compare:CPU模式切换
切换原语
保存处理机上下文(Context)(包括PC和其他寄存器)到PCB
移动PCB到相应队列
选择另一进程执行,更新其PCB
根据PCB恢复所需运行环境
更新内存管理的数据结构
恢复处理机上下文
死锁
死锁状态下没有运行态的进程
如果甲进程需要AB资源,而仅被分配了A
同时乙进程需要AB资源,而仅被分配了B
此时两个进程都陷入阻塞且永不可能就绪
,谓之死锁
同时乙进程需要AB资源,而仅被分配了B
此时两个进程都陷入阻塞且永不可能就绪
,谓之死锁
0 条评论
下一页