导图社区 进程的描述与控制
这是一篇关于进程的描述与控制的思维导图,主要内容包括:线程的实现,线程的概念,进程通信,进程控制,进程的描述,前趋图和程序执行。
编辑于2024-10-15 21:39:12进程的描述与控制
前趋图和程序执行
前趋图
是指一个有向无环图
不允许有循环
程序顺序执行
顺序性,封闭性,可再现性
程序并发执行
间断性,失去封闭性,不可再现性
进程的描述
进程的定义与特征
进程的组成
程序段
程序的代码
数据段
运行过程中产生的各种数据(程序段、数据段是给进程自己用的,与进程自身的运行逻辑有关
PCB
进程标识符
处理机状态
进程调度信息
进程控制信息(PCB是给操作系统用的)
定义
进程是程序的执行过程,是系统进行资源分配和调度的一个独立单位
特征
动态性、并发性、独立性、异步性
与程序的区别
进程
动态
内存
暂时
程序段+数据段+PCB
程序
静态
外存
永久
进程的基本状态与转换
状态
就绪状态
进程已分配到除CPU外的所有必须资源
运行状态
占有CPU,并在CPU上执行
阻塞状态
正在执行的进程因等待某事件,而暂时无法执行
创建状态
进程正在被创建,os为进程分配资源、初始化pcb
终止状态
os回收进程拥有的资源、撤销pcb
状态转换
就绪→运行
进程被调度
运行→就绪
时间片到,或cpu被其他高优先级的进程抢占
运行→阻塞
等待系统资源分配,或等待某件事件发生(主动行为)
阻塞→就绪
资源分配到位,或等待的事件发生(被动行为)
创建→就绪
系统完成创建进程相关的工作
运行→终止
进程运行结束,或运行过程中遇到不可修复的错误
挂起操作和进程状态的转换
活动就绪
静止就绪
执行
活动阻塞
静止阻塞
进程管理中的数据结构
pcb的作用
作为独立运行基本单位的标志
实现间断性运行方式
提供进程管理所需要的信息
提供进程调度所需要的信息
实现与其他进程的同步与通信
pcb的使用
进程创建
生成该进程的pcb
进程终止
回收它的pcb
进程的组织与管理
通过对pcb的组织和管理来实现
pcb的组织方式
线性方式
链接方式
索引方式
pcb的存储结构
线性方式
将所有pcb存储在一张线性表中
操作系统持有该表的起始地址
链接方式
按照进程状态将pcb分为多个队列
操作系统持有指向各个队列的指针
索引方式
根据进程状态的不同,建立几张索引表
操作系统有指向各个索引表的指针
进程控制
进程的创建
引起进程创建的事件
用户登录
分时系统中,用户登录成功,系统会为该用户创建一个进程
作业调度
多道批处理系统中,有新的作业放到内存时,会为其创建进程
提供服务
用户向os提出某些请求时,os会专门创建一个进程提供所需服务
应用请求
由用户进程主动请求创建子进程
创建原语
申请空白PCB
分配所需资源
初始化PCB
插入就绪队列
进程的终止
引起进程终止的事件
正常结束
进程自己请求中指exit系统调用
异常结束
如试图去写一个只读文件、等待某时间时间超过指定的最大值
外界干预
进程应外界的请求而终止运行,如使用任务管理器杀死进程
终止原语
从PCB集合中找到终止进程的PCB
若进程正在运行立即剥夺CPU将CPU分配给其他进程
终止其所有子进程
将该进程拥有的所有资源归还给父进程或操作系统
删除PCB 就绪态/阻塞态/运行态/终止态→无
进程的阻塞与唤醒
进程的阻塞
引起进程阻塞的事件
向系统请求共享资源失败
等待某种操作的完成
新数据尚未到达
等待新任务的到达
阻塞原语
找到要阻塞进程对应的PCB
保护进程运行现场,将PCB状态信息设置为阻塞态,暂停进程运行
将PCB插入相应事件的等待队列
进程的唤醒
引起进程唤醒的事件
被阻塞进程所期待的事情发生
唤醒原语
在事件阻塞队列中找到PCB
将PCB从阻塞队列中移除,设置进程状态为就绪态
将PCB插入就绪队列等待被调度
进程的挂起与激活
进程的挂起
引起进程挂起的事件
挂起原语
进程的激活
引起进程激活的事件
激活原语
进程的切换
引起进程切换的事件
当前进程时间片到
有更高优先级的进程到达
当前进程主动阻塞
当前进程终止
切换原语
将运行环境信息存入PCB
PCB移入相应队列
选择另一个进程执行并更新其PCB
根据PCB恢复新进程所需的运行环境
进程通信
进程通信的类型
共享存储
设置一个共享空间
对共享空间的访问是互斥的
基于数据结构 (低级)
基于存储区的共享 (高级)
管道通信
设置一个特殊的共享文件,实质上是一个缓冲区
写满时,写进程被阻塞;读空时,读进程被阻塞
各进程互斥访问管道
一个管道只能实现半双工通信
实现全双工通信需要建立两个管道
消息传递
传递结构化的消息(消息头+消息体)
发送原语、接受原语
直接通信方式 消息直接挂到接受饭的消息队列中
间接通信方式消息先发送到中间体(信箱)
客户机-服务器
套接字
远程过程调用
远程方法调用
消息传递通信的实现方式
实例:Linux进程通信
基本概念
进程控制就是要实现进程状态的转换
进程控制用原语来实现
原语用关/开中断来实现
原语是一种特殊的程序
原语的执行必须一气呵成不可中断
相关原语
创建原语
终止原语
阻塞原语与唤醒原语
挂起原语与激活原语
切换原语
线程的概念
线程的引入
线程的切换
同一进程中线程的切换不会引起进程的切换
不同进程中线程的切换会引起进程切换
线程与进程的比较
处理机调度、资源分配
线程是处理机调度的单位,进程是资源分配的单位
同一进程的各线程共享进程拥有的资源
同一进程内的线程切换不会导致进程切换
并发性
进程之间可并发执行
线程之间可并发执行 也许
系统开销
进程间并发,系统开销大
同一进程内,线程间并发,系统开销小
独立性
进程间的地址空间互相独立
同一进程内,线程间共享进程资源,独立性较弱
支持多处理机
传统进程即单线程进程只能运行在一个处理器上
同一进程内的多个线程可分配到多个处理器上
线程状态和线程控制块
线程的实现
线程的实现方式
用户级线程
由线程库实现
操作系统视角不可见
内核级线程
由操作系统实现
操作系统视角可见
组合方式
多对一模型
优点是线程管理开销小效率高
缺点是一个线程阻塞会导致整个进程都被阻塞并发度低
一对一模型
优点是各个线程可分配到多核处理机并行执行并发度高
缺点是线程管理都需要操作系统支持开销大
多对多模型
n个用户级线程映射到m个内核级线程(n>等于m)
集二者之所长
内核级线程的特征
由内核维护PCB和TCB
线程执行系统调用而被阻塞不影响其他线程
线程的创建终止和切换相对较大
通用系统调用/内核函数,在内核实现
以线程为单位进行CPU时间分配
多线程的进程可获得更多CPU时间
用户级线程的特征
不依赖于操作系统的内核
内核不了解用户线程的存在
可用于不支持线程的多进程操作系统
在用户空间实现的线程机制
TCB由线程库函数维护
同一进程内的用户线程切换速度快
无需用户态/核心态切换
允许每个进程拥有自己的线程调度算法
线程的具体实现
无论是进程还是线程都必须直接或间接地取得内核的支持
线程在调度和切换上所花费的开销要比进程的小得多
线程的创建与终止
线程的创建
应用程序在启动时通常仅有一个线程在执行我们把该线程称为初始化线程它的主要功能是创建新线程
线程的终止
若指定线程尚未被中止则调用连接命令的线程将会阻塞,直至指定线程被终止后,其才能与指定线程进行连接并继续执行;若指定线程已被终止,则调用线程不会被阻塞,而是会继续执行