第二章 进程与线程
2.1.1 进程的概念、组成与特征
本节总览
- PCB + 程序段(指令序列) + 数据段(数据、变量)
- 特征:动态、并发、独立(独立获得资源、独立接受调度) 异步、结构
- 进程是系统进行资源分配和调度的一个独立单位
- PCB 记录进程信息:status, envs context,cpu info,res
- 特征:五大特性,重要的有动态性,独立性,异步性
程序是静态的,进程是动态的
PID —— 进程的身份证
PCB —— 有关于进程的详细信息
有印象即可
进程的组成 —— PCB + 程序段 + 数据段
PCB 给操作系统用
程序段、数据段 给进程用
程序的运行 与 进程的创建
程序或数据属于某个进程?
严格来说 ,进程是动态的;进程实体(映像)是静态的,相当于快照
再次反思,PCB 是给系统用的,程序段和数据段是给进程本身用的
PCB 是进程存在的唯一标志
2.1.2 进程的状态与转换、进程的组织
- 进程有几种状态? 5 = 3+ 2
- 就绪态和阻塞态的区别:就绪态万事俱备,只欠cpu;阻塞态,缺其他资源或事件
- 进程状态间的转换:
- 就绪态 -> 运行态。 进程被调度,cpu 竭诚为您服务!
- 运行态 -> 就绪态。服务结束,请您先暂作休息。
- 运行态 -> 阻塞态。 没有系统资源,或主动等待一个事件发生。
- 阻塞态 -> 就绪态。 就等你pua了。不对,就等你cpu了
New and ready
- 进程正在被创建,那就是创建态 New
- 进程被创建完成,其他资源也分配给它了,但CPU资源还不能给它,便进入“就绪态”Ready
Are you ready? Come on~~
运行态 Running
cpu 正在为您服务
阻塞态 Block
- 等待系统其他资源的分配,或等待其他进程的效应 (有CPU资源,但却一些其他的系统资源)
我等待的外卖还没来~ 还不能上车。
终止态 terminated
exit 886
一鲸落万物生。不带走一片尘土。
进程状态的转换关系图
还没进入状态的 UNUSED
- 正在创建的 EMBRYO
- 整装待发的 RUNNABLE
- 正在运行的 RUNNING
- 晚高峰堵车的 SLEEPING
- 即将逝去的 ZOMBIE
5 = 3 + 2
- 为什么分成3 + 2
- state 记录进程状态
进程的组织 —— 链接方式
像不像线性表??像不像队列?
进程的组织——索引方式
有点像hash 表
2.1.3 进程控制
2.1_3_进程控制.pdf
本节总览
- 进程控制,控制的是什么? 控制的是进程的转态转换。
- 为什么原语那么重要?原语的应用场景?原语的实现原理 ?
- 原语,一气呵成,不可被中断,所以其具备可靠性。
- 原语的重要应用场景就包括本节要学的,进程的状态转换。
- 原语的实现原理—— 关中断与开中断之间的程序执行 不可被打扰
提问:为什么用原语?原语的实现原理是什么?
答:原语执行后将一气呵成,不可中断;原语利用了开、关中断
提问:为什么需要用到原语?如果不用原语会出现哪些翻车的情况?
答:原语一气呵成;如果不用原语,有可能会存在 进程状态字被修改,但所处队列还没改过来的情况。
提问:如何实现原语?
答:“关中断”到“开中断”之间的所有指令都不会被中断所干扰,这些指令会被cpu一气呵成地执行。期间接受的中断,会在开中断指令执行后才被处理。
cpu 执行关中断指令后,就不会再检查/例会中断信号。直到执行开中断指令后才会恢复中断检查。
创建原语
提问:什么情况下会创建进程?
答:
用户登陆:分时系统,用户登陆成功。(java 中学过多线程,用户登陆会创建一个新的线程,可以类比一下)
作业调度:多道批处理系统,为进入内存的新作业创建新进程
提供服务:操作系统创建新的进程为用户提供服务
应用请求:创建子进程
撤消原语
提问:什么情况下会终止进程?
答:
正常结束:exit
异常结束:exception 整数除以0等异常
外界干预:用户主动杀死进程 ctrl + alt + del
阻塞与唤醒原语
为什么阻塞原语和唤醒原语必须成对使用啊?
阻塞原语干了啥?
找到pcb
保护进程的现场,将state 设置成 阻塞态
将pcb 插入相应事件的等待队列
引起阻塞的原因
等待系统分配资源
配合其他进程
等待事件
进程的唤醒要干啥?
在阻塞队列中找到pcb
state 改为就绪态
将pcb 挪到就绪队列,等待被调度
何时被唤醒?
等待的事件发生了!
切换原语
注:切换原语,是在运行态和就绪态之间的切换。前面的阻塞与唤醒,是在阻塞态和就绪态之间转换。
切换原语要保存运行环境的上下文。例如,切换前一时刻的PSW,PC 等寄存器 的值。
All in All