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