2操作系统-进程
2.1_1 进程的定义、组成、组织方式、特征
组成:PCB(进程存在唯一的标志),程序段,数据段
组织方式:链接方式,指针指向不同的队列;索引方式,索引表
特征:动态性、并发性、独立性、异步性、结构性
2.1_2 进程的状态与转换
(1)状态:
- 运行状态:占有CPU,并在CPU上运行,单核只能一个进程(双核两个)(CPU√,其它资源√)
- 就绪状态:已经具备运行条件,但是没有空闲的CPU,暂时不能运行(CPUX,其它资源√)
- 阻塞状态:等在某个事件的发生,暂时不能运行(CPUX,其它资源X)
- 创建状态:创建PCB,程序段,数据段
- 终止状态:回收内存,程序段,数据段,撤销PCB
(2)进程状态间的转换(图,且只能这样转化)
- 创建态->就绪态
- 就绪态->运行态
- 运行态->就绪态
- 运行态->中止态(比如数组越界)
- 运行态->阻塞态(主动)
- 阻塞态->就绪态(被动)
2.1_3 进程控制
1 基本概念:
- 什么是进程控制?
答:实现各种进程状态转换。
- 为什么进程控制要一气呵成?
答:就绪和堵塞是两个队列指针,转换状态时要至少进行两个操作才能完成,如果中途中断,会导致信息不一致。
- 如何实现进程控制?
答:用“原语”实现一气呵成,因为原语可以用“关中断指令”,就不会检查是否有中断指令了,自然是一气呵成的执行下去。
- 原语做的事情:
- 更新PCD中的信息
- 将PCD插入合适的队列
- 分配/回收资源
2 进程控制相关的原语
(1)进程的创建:
- 创建原语:申请空白PCB、为新进程分配所需资源、初始化PCB、将PCB插入就绪队列
- 引起进程创建的事件:用户登录、作业调度、提供服务、应用请求
(2)进程的终止:
- 撤销原语:终止进程,删除PCB
- 引起进程中止的事件:正常结束、异常结束、外界干预
(3)进程的阻塞:
- 阻塞原语:运行态->阻塞态
- 引起进程阻塞的事件:需要等待系统分配某种资源、需要等待相互合作的其他进程完成工作
(4)进程的唤醒:
- 唤醒原语:阻塞态->就绪态
- 引起进程唤醒的事件:等待的事件发生
(5)进程的切换
- 切换原语:更新PCB
- 引起进程切换的事件:当前进程事件片到、有更高优先级的进程到达、当前进程主动阻塞、当前进程终止
2.1_4 进程通信(IPC)
概念:两个进程之间的数据交互,如软件之间的一键分享
1、共享存储 (分配共享空间,且互斥(P、V操作)
- 基于数据结构的共享:固定分配(低级通信)
- 基于存储区的共享:划分存储区(高级通信),不管你具体怎么用这个存储区
2、消息传递
数据交换以格式化的消息为单位,格式化的消息=消息头+消息体
- 直接通信方式(直接点名发给谁,消息直接挂载到接受队列)
- 间接通信方式(间接利用信箱(中间人)发送消息)
3、管道通信(pipe)
-
- 管道/共享文件/内存缓冲区/循环队列
- 只能实现半双工通信
- 互斥地访问(没写满,不能读,反之同理)
- 写满/读空——堵塞
2.1_5 线程概念
- 什么是线程,为什么要引入线程?
答:线程是一个基本的CPU执行单元,也是程序执行流的最小单位,进一步提高了系统的并发度
- 引入线程机制后,有什么变化?
- 资源分配、调度:进程是资源分配的基本单位,线程是调度的基本单位
- 并发性:各线程间也能并发,提升了并发度
- 系统开销:可以只在进程中切换,减小了CPU切换环境的系统开销
- 线程有哪些重要的属性?
- 线程是处理机调度的基本单位
- 多CPU计算机中,各个线程可占用不同的CPU
- 每个线程都有一个线程ID、线程控制块(TCB)
- 线程也有就绪、阻塞、运行三种基本状态
- 线程几乎不拥有系统资源(系统资源都在进程中)
- 同一进程的不同线程间共享进程的资源
- 由于共享内存地址空间,同一进程中的线程间通信甚至无需系统干预
- 同一进程中的线程切换,不会引起进程切换
- 不同进程中的线程切换,会引起进程切换
- 切换同进程内的线程,系统开销很小
- 切换进程,系统开销较大
2.1_6线程的实现方式和多线程模型
1、线程的实现方式
- 用户级线程(ULT):由应用管理,从用户的视角看能看到的线程。
优点:管理不用涉及到CPU转换态,故线程管理系统开销小效率高
缺点:当其中一个用户级被堵塞,其他都会被堵塞,进而整个进程都会被堵塞。
- 内核级线程(KLT):由操作系统管理,从操作系统内核视角看能看到的线程。内核级线程才是处理机分配的单位。
2、多线程模型
- 多对一模型
n个ULT映射到1个KLT
优点:开销小,效率高
缺点:容易阻塞,并发度不高
- 一对一模型
n个ULT映射到n个KLT
优点:并发能力很强
缺点:占用成本高,开销大
- 多对多模型
n个ULT映射到m个KLT上(n>=m)
中和以上两种优缺点