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