2-进程管理(思维导图)
2022-03-13 15:05:09 0 举报
AI智能生成
进程管理
作者其他创作
大纲/内容
进程通信
背景
为了保证安全,进程不可直接访问其他进程的地址空间
OS提供方法以供进程进行通信
类型
共享存储
OS分配一块共享空间供进程通信
该空间的访问是互斥的,
通过OS提供的同步-互斥工具实现
该空间的访问是互斥的,
通过OS提供的同步-互斥工具实现
基于数据结构的共享
如“仅存放长10的数组”
如“仅存放长10的数组”
速度慢、限制多
基于存储区的共享
OS划出共享存储区
对数据形式存放位置不做要求
交由进程控制
交由进程控制
管道通信
管道是一个连接读写进程的共享文件
在内存中是一块固定大小缓冲区
一般与页面等大
在内存中是一块固定大小缓冲区
一般与页面等大
访问仍要互斥
读写
写进程以字符流形式写入管道
写满时wirte()系统调用被阻塞
写满时wirte()系统调用被阻塞
读进程将数据全部取走,管道
变空此时read()系统调用被阻塞
变空此时read()系统调用被阻塞
消息传递
直接通信
发送进程利用OS所提供的发送命令,直接把消息发送给目标进程
发送进程和接收进程都以显式方式提供对方的标识符
系统提供两条通信命令(原语)
间接通信(信箱通信)
通信需要通过作为共享数据结构的实体进行
这个中间实体称为信箱:暂存发送给目标进程的消息。
消息在信箱中保存,只允许核准的目标用户读取,可实现实时通信和非实时通信。
系统提供若干条原语,用于信箱的创建、撤消和消息的发送、接收等
3种类型信箱
私有信箱
公用信箱
共享信箱
线程
基本概念
背景:由于进程是资源的拥有者,在创建、撤消和切换过程中,系统必须付出较大的时空开销。所以,系统中所设置的进程,其数目不宜过多,进程切换的频率也不宜过高,这也就限制了并发程度的进一步提高
进程中包含了多个线程,取代进程成为程序执行流之最小单位
线程开销很小
进程间可以并发,线程间亦可以并发
线程被调用不会因此生成多个线程实体
进程仍然是除CPU外的系统资源的最小分配单元
线程控制块TCB
每个线程都可以用线程标识符和一组状态参数进行描述
① 寄存器状态 ② 堆栈 ③ 运行状态
④ 优先级 ⑤ 专有存储器 ⑥ 信号屏蔽
④ 优先级 ⑤ 专有存储器 ⑥ 信号屏蔽
线程运行状态
执行状态
就绪状态
阻塞状态
线程的创建和终止
应用程序启动时,通常仅有一个线程在执行,该线程被称为“初始化线程”。它可根据需要再去创建若干个线程。
与进程对比
进程不再是调度的基本单位,被线程取代。
进程仍然是除CPU外的系统资源的最小分配单元
线程间如进程一样具有并发性
同一进程内线程间的并发无需切换环境,系统开销小
线程的属性
调度
是处理机调度的单位
多CPU计算机中,各个线程可以占用不同的CPU
线程具备线程ID和线程控制块TCB
线程也具有就绪、阻塞、运行三种基本状态
系统资源
线程几乎不拥有系统资源
统一进程的不同线程共享进程的资源
共享内存地址空间,同一进程的线程间通信无需OS干预
系统开销
同一进程间线程切换不会引起进程切换
同一进程间线程切换开销很小
不同进程间线程切换会引起进程切换
不同进程间切换开销很大
线程实现方式
用户级线程
User-Level Thread(ULT)
User-Level Thread(ULT)
线程由线程库实现,OS不能感知线程存在
线程是逻辑上的线程,管理由线程库完成
线程切换无需OS介入
线程是逻辑上的线程,管理由线程库完成
线程切换无需OS介入
优势:管理不涉及CPU模式切换,开销很小
劣势:无法处理阻塞问题,一阻塞全阻塞
并发度不高,无法多核并行
并发度不高,无法多核并行
内核级线程
Kernel-Level Thread(KLT)
Kernel-Level Thread(KLT)
管理由OS完成,线程切换需要CPU状态切换
并发能力强,可以多核并行,不受阻塞影响
用户进程占用多个内核级线程,管理开销大
内核级线程才是处理机调度的单位
基本概念
进程
进程 = 程序 + 执行
早期程序执行方式为顺序执行
缺点:效率低,浪费资源
进程:让每个用户独占CPU
是OS分配资源、进行调度的最小单位
进程内容
PCB进程控制块
进程控制和管理信息
程序和数据的地址
进程同步和通信机制,如消息队列指针、信号量等
资源清单
链接指针
进程标识符
进程存在的唯一标志
处理机状态
处理机的各种寄存器的内容组成(通用寄存器、指令计数器、程序状态字PSW、用户栈指针)
调度信息
①进程状态;
②进程优先级;
③进程调度所需的其它信息;
④事件
程序段
程序代码(指令序列)
数据段
运行过程产生的数据(如变量)
特征
动态性
由创建而产生,由调度而执行,由撤消而消亡
并发性
内存中有多个进程实体,可以并发执行
并发性是进程重要特征
进程并发失去封闭性
封闭性指的是程序执行结果取决于进程本身,不受外界影响
并发进程共享变量,速度快慢影响读写顺序,影响结果。
独立性
可以独立运行,独立获得资源、独立接受调度的基本单位
进程被调用不会因此生成多个进程实体
异步性
各个进程独立运行,进度不可预知
进程的状态和转换
状态
执行(Running)状态
占有CPU
就绪(Ready)状态
具备运行条件
不占有CPU
阻塞(Waiting)状态
因等待某一事件
而暂时不能运行
而暂时不能运行
创建状态
OS为进程分配资源、初始化PCB
终止状态
OS回收分配的资源,撤销PCB(进程结束)
挂起状态
进程因某种原因暂停执行
创建状态
创建新进程的PCB
终止状态
将进程PCB清零
对于单处理机系统,除了死锁状态,其余任何时候都有且仅有一个执行态的进程
三种基本状态转换
就绪→运行
运行→就绪
时间片到期时通
常可以降低优先级
常可以降低优先级
运行→阻塞
阻塞→就绪
具有挂起而添加的转换
活动就绪→ 静止就绪
活动阻塞→ 静止阻塞
静止就绪→ 活动就绪
静止阻塞→ 活动阻塞
添加创建和终止状态的转换
创建→活动就绪
创建→静止就绪
执行→终止
进程的组织方式
链式方式
执行指针
指向当前处于执行态的进程(PCB)
单处理机计算机中同一时刻只有一个执行态进程
就绪队列指针
指向当前处于就绪态的进程
通常优先级高的在队头
→PCB6→PCB4→PCB7...
阻塞队列
空闲队列
索引方式
执行指针
指向当前处于执行态的进程(PCB)
单处理机计算机中同一时刻只有一个执行态进程
就绪表指针
指向就绪索引表
索引表表项指向就绪态PCB
阻塞表指针
指向阻塞索引表
索引表表项指向阻塞态PCB
进程控制和同步
实现
原语
Primitive
Primitive
是一种特殊的应用程序
原子性
执行必须一次性完成
实现
关中断指令
特权指令
特权指令
执行后CPU不再例行检查中断信号
直到执行了开中断指令
直到执行了开中断指令
开中断指令
特权指令
特权指令
控制方法
创建进程
允许一个进程创建另一个进程
创建者称父进程
被创建者称子进程
子进程可继承父进程资源
允许一个进程创建另一个进程
创建者称父进程
被创建者称子进程
子进程可继承父进程资源
引起创建的事件
用户登录
分时系统中,用户登录成功,OS会为其建立一个新进程
作业调度
多道批处理系统中,新的作业放入内存,为其建立新进程
作业就是外存中尚未运行的程序
系统提供服务
用户/用户程序向OS提出请求
用户程序应用请求
用户程序主动请求创建子线程
创建步骤
申请空白PCB
若申请失败则创建失败
分配资源(内存等)
若资源不足,进入阻塞态
初始化PCB
标志信息、处理机状态、处理机控制信息、设置优先级
插入就绪队列
终止进程
子进程撤销时资源归还父进程
撤销父进程时同时撤销子进程
子进程撤销时资源归还父进程
撤销父进程时同时撤销子进程
引起终止的情况
正常结束:进程任务完成准备退出运行
异常结束:运行时发生异常,使程序不能
继续运行。
继续运行。
存储区越界错误
非法指令
特权指令错
运行超时
等待超时
算数运算错
IO故障
保护错
外界干预:进程因外部请求而终止
操作员或OS干预
父进程请求
父进程终止
撤销过程
从PCB集合检索出该进程PCB
终止所有子孙进程
进程资源归还系统/父进程
进程移出所在PCB队列
阻塞&唤醒
阻塞过程
调用原语:调用block()进入阻塞状态
更改状态:先立即停止执行,将现行状态由“执行”改为“阻塞”,并将其插入相应的阻塞队列
剔旧换新:转调度程序进行重新调度
唤醒过程
用唤醒原语wakeup()
移出等待序列,并设为就绪态
将PCB插入就绪队列等待调度程序调度
死锁
死锁状态下没有运行态的进程
如果甲进程需要AB资源,而仅被分配了A
同时乙进程需要AB资源,而仅被分配了B
此时两个进程都陷入阻塞且永不可能就绪
,谓之死锁
同时乙进程需要AB资源,而仅被分配了B
此时两个进程都陷入阻塞且永不可能就绪
,谓之死锁
经典进程的同步问题
两种形式的制约关系
间接相互制约关系(互斥)
直接相互制约关系(同步)
临界资源
一次只能提供一个进程使用
实现原理
临界区:进程中访问临界资源的代码段
进入区:临界区前用于检查临界资源的代码段
退出区:临界区后用于恢复未被访问标志的代码段
同步遵循规则
空闲让进
忙则等待
有限等待
让权等待
信号量机制
整型信号量(Binary semaphore)
记录型信号量(Counting semaphore)
AND型信号量
信号量集
三个经典问题
生产者消费者问题
哲学家进餐问题
"读者-写者"问题
0 条评论
下一页