操作系统–进程和线程
进程定义
- 进程 = 程序段+数据段+PCB
- PCB进程存在的唯一标志
进程的特征
- 动态性:进程是程序的一次执行过程,是动态地产生,变化和消亡的
- 并发性:内存中有多个进程实体,可以并执行
- 独立性:进程是独立运行的,独立获得资源,独立接受调度的基本单位
- 异步性:各进程按各独立的,不可预测的速度推进
- 结构性:每个进程都有PCB,进程 = 程序段+数据段+PCB
PCB
- 进程描述信息:进程标识符PID,用户标识符UID
- 进程控制和管理信息:进程当前状态,进程优先级
- 资源分配清单:程序段指针,数据段指针,键盘等
- 处理机相关信息:各种寄存器值
进程组织方式
- 链接方式:按照进程状态将PCB分为多个队列,操作系统持有指向各个队列的指针
- 索引方式:根据进程状态,建立几张索引表,操作系统持有指向各个索引表的指针
进程状态
五态模型
- 就绪态,运行态,阻塞态,创建态,结束态
七态模型
- 就绪态,运行态,阻塞态,创建态,结束态,阻塞挂起,就绪挂起
注:线程有五态模型,但是没有七态,因为进程才是资源调度的基本单位,而线程是处理机执行的基本单位,所以不存在资源的挂起。
进程控制
进程控制就是要实现进程状态的切换
进程控制用原语实现
相关原语:
- 进程的创建
- 进程的终止
- 进程的阻塞(和唤醒成对出现)
- 进程的唤醒(和阻塞成对出现)
- 进程的切换
注:进程的阻塞和唤醒必须成对出现,也就是说,有进程的阻塞就必须有进程唤醒的相关原语。
进程通信
进程通信主要分三种:
- 共享存储
- 管道通信
- 消息传递
共享存储: 设置共享空间,并互斥访问共享空间,有两种实现方式,一种是基于数据结构,一种是基于存储区的共享
管道通信: 设置共享管道(缓冲区),一个管道只能实现半双工通信(就是单向的),并互斥访问管道,写满才能读,读空才能写,并且管道满了不能再写,读空了不能再读。
消息传递: 传递结构化消息,系统提供“发送/接收原语”来实现,,两种方式,一种是直接通信,一种是间接通信(信箱方式,就是有中间商)
多线程模型
线程的目的
引入线程是为了提高并发读,减少并发带来的开销。
线程的属性
- 线程是处理机调度的单位,而进程是资源分配的单位
- 同一进程的各线程共享进程拥有的资源
- 同一进程内的线程切换不会导致进程切换
- 每个线程都有一个线程ID,线程控制块(TCB)
- 线程不拥有系统资源
- 线程切换,系统开销小,比切换进程要小得多
线程的实现
用户级线程:用户视角的线程
内核级线程:操作系统能看到的线程
组合方式:两者结合
注:内核级线程才是处理机分配的单位,用户级线程和内核级线程存在映射关系。
多线程模型
- 多对一:多个用户线程对内核级线程,线程管理交给应用程序
- 一对一:一个用户线程对多个内核级线程,线程管理交给操作系统
- 多对多:多个用户对多个内核级线程,部分线程管理交给操作系统
注:内核级线程才是处理机分配的单元