调度单位 进程 / 线程#
进程由 PCB,程序段,数据段组成
进程控制:创建、终止、阻塞 / 唤醒
进程通信
- 共享内存,如全局变量,环境变量
- 消息传递,操作系统提供的进程通信机制
- 管道通信,Linux 中管道是单向的
多线程
调度方面,在适配多线程的操作系统中,是基本调度单位。资源方面,分配给进程,而不是线程
多个线程共享同一个地址空间,不同进程不共享地址空间。线程总体开销较小
线程具有 执行、就绪、阻塞三种状态,由 TCB 表示
实现上分为内核级线程(操作系统支持的线程),用户级线程(如 Goroutine)
多线程模型
CPU 三层调度
高级调度(作业),从外存中取出作业,建立起相应的 PCB,获得进一步调度的机会(多道批处理中配备,但是其他系统通常没有)
中级调度(内存),将暂时不能运行的进程调度到外存中,暂时保存。
低级调度(进程),CPU 分配给对应进程,进程不同状态的切换
关系:作业调度创建进程,送入就绪队列,进程调度从中取出执行,中级调度将不能执行的挂起进程放入外存。
调度性能指标#
调度实现
三部分:排队器、分派器、上下文切换器
调度时机
不可调度的情况:中断处理中,位于内核临界区,其他完全屏蔽中断的原子操作中
需要调度的情况:发生引起调度的条件且当前进程无法继续执行(非剥夺),中断处理结束或自陷结束前,被置上请求调度标志(剥夺式调度)
调度方式:非抢占调度,抢占调度(有利于吞吐率、响应时间)
如果没有可调度进程就调度闲逛进程(ilde)
用户级线程调度,由用户线程库决定,内核级线程调度由内核调度,给一个时间片,结束后强制挂起。
进程切换过程
挂起进程,保存 CPU 上下文(寄存器)
更新 PCB
将 PCB 移入队列
选择另外进程,更新 PCB
切换 CPU 上下文,开始执行新进程
上下文切换时需要大量 CPU 耗时