结构
操作系统内核特征:并发、共享、虚拟、异步、持久
分层结构、微内核结构、外核结构、虚拟机管理器
中断及系统调用
内存管理
进程和线程
进程
运行中的程序,记录程序运行状态
一个进程是一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。操作系统中的进程管理需要采用某种调度策略将处理器资源分配给程序并在适当的时候回收,并且要尽可能充分利用处理器的硬件资源。
进程控制块(PCB,Process Control Block)
OS管理进程运行所用的信息集合,进程存在的唯一标示。包括:
- 进程标识信息
- 处理机现场保存
- 进程控制信息
进程控制信息包括:
- 调度和状态信息
- 进程间通信信息
- 存储管理信息
- 进程所用资源
- 有关数据结构连接信息
进程控制块的组织
链表、索引表
进程状态
- 创建:系统初始化;用户请求创建一个新进程;正在运行的进程执行了创建进程的系统调用
- 执行
- 等待
- 抢占
- 唤醒
- 结束
三状态进程模型
- 运行状态
- 就绪状态
- 等待状态
进程挂起模型
处在挂起状态的进程映射在磁盘上,目的是减少进程内存占用
进程控制
进程切换
上下文切换
进程生命周期信息:
寄存器(PC,SP…)
CPU状态
内存地址空间
进程控制块PCB:内核的进程状态记录
- 内核为每个进程维护了对应的进程控制块
- 内核将相同状态的进程PCB放置在同一队列(就绪队列、IO等待队列、僵尸队列)
进程创建
Windows:CreateProcess
Unix:fork/exec
fork创建一个继承的子进程:
复制父进程的所有变量和内存
复制父进程的所有CPU寄存器(有一个寄存器除外)
fork的返回值:
子进程返回0
父进程返回子进程标识符
返回值可方便后续使用,子进程可使用getpid获取PID
进程加载
exec
进程等待和退出
wait调用父进程等待子进程的结束
exit进程结束调用,完成进程资源回收
其他
nice指定进程初始优先级,unix系统中进程优先级会随执行时间而衰减
ptrace允许一个进程控制另一个进程的执行,调试设置断点和查看寄存器
sleep进程在定时器的等待队列中等待指定
线程
多进程存在通信共享数据问题,系统开销问题
线程是进程的一部分,描述指令流执行状态。它是进城中的指令执行流的最小单元,是CPU调度的基本单位。
线程 = 进程 - 共享资源
优点:一个进程中可以同时存在多个线程;各个线程之间可以并发地执行;各个线程之间可以共享地址空间和文件资源。
缺点:一个线程奔溃,会导致其所属进程的所有线程崩溃。
进程是资源分配单元,线程是CPU调度单元;
进程拥有一个完整的资源平台,而线程只独享指令流执行的必要资源,如寄存器和栈;
线程具有执行、等待和运行三种基本状态和状态间的转换关系;
线程能减少并发执行的时间和空间开销;
线程的实现
用户线程
优点:
不依赖操作系统的内核
在用户空间实现的线程机制
同一进程内的用户线程切换速度快
允许每个进程拥有自己的调度算法
缺点:
线程发起系统调用而阻塞时,则整个进程进入等待
不支持基于线程的处理机抢占
线程只能按进程分配CPU时间
内核线程
优点:
由内核维护PCB和TCB
线程执行系统调用而被阻塞不影响其他线程
以线程为单位进行CPU时间分配
缺点:
线程的创建、终止和切换消耗相对较大
轻权进程LightWeight Process
内核支持的用户线程。一个进程可以有一个或多个轻量级进程,每个轻权进程由一个单独的内核线程来支持。
处理机调度
基本概念
处理机调度
从就绪队列中挑选下一个占用CPU运行的进程
从多个可用CPU中挑选就绪进程可使用的CPU资源
调度时机
非抢占系统
可抢占系统 :时间片用完、进程从等待切换到就绪
调度准则
调度策略
确定如何从就绪队列选择下一个执行进程
调度算法
先来先服务算法FCFS:
进入就绪状态的先后顺序排序
优点:简单
缺点:平均等待时间波动较大;IO资源和CPU资源的利用率低
短进程优先算法SPN
选择就绪队列中预期执行时间最短进程占用CPU进入运行状态
优点:具有最优平均周转时间
缺点:可能导致饥饿,需要预知未来(询问用户)
短剩余时间优先SRT
最高响应比优先算法HRRN Highest Response Ratio Next
选择就绪队列中响应比R值最高的进程
R = (w + s)/s;
在短进程优先算法的基础上改进
不可抢占
关注进程等待时间
防止无限期推迟
时间片轮转算法RR Round Robin
额外的上下文切换
时间片设置(经验规则10ms,维持上下文切换开销处于1%以内)
多级反馈队列算法MFQ
多级队列
就绪队列被划分成多个独立的子队列
每个队列拥有自己的调度策略
队列间的调度
进程可以在不同队列间移动的多级队列算法