沃·滋基索德: 操作系统是一种运行在内核态的软件,隔离用户态软件和最底层硬件。
进程与线程
进程:正在运行的程序实例,包括程序计数器,寄存器,和变量的当前值。
线程:一个进程包含地址空间和多个线程,线程差不多就是分离的进程(共享地址空间除外)
进程间通信
三个问题:
- 一个进程如何把信息传递给另一个
- 确保两个或更多的进程在关键活动中不会出现交叉
- 进程的正确顺序
竞态条件:两个或多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时序。
临界区:怎样避免竞态条件,关键在于互斥,只能有一个线程在临界区去做写操作。
忙等待的互斥:几种实现互斥的方案
- 屏蔽中断
- 锁变量
- 严格轮换法,自旋锁
- Peterson解法
- TSL指令,硬件支持
睡眠和唤醒:解决忙等待的消耗CPU时间的问题
信号量:累积唤醒次数
互斥量:只处于两个状态——解锁和加锁
管程:管程是一个由过程,变量和数据结构组成的集合,任一时刻管程中只能有一个活跃线程。
消息传递:系统调用原语——send & receive
屏蔽:进程组同步,一个进程到达屏障时,会被屏障阻拦,直到所有进程都到达屏障处。
避免锁:读—复制—更新RCU
调度
进程行为:计算密集型;IO密集型
批处理系统中的调度:
- 先来先服务
- 最短作业优先
- 最短剩余时间优先
交互式系统中的调度:
- 轮转调度
- 优先级调度
- 多级队列 CTSS
- 最短进程优先,作业时间推测
- 保证调度
- 彩票调度
- 公平分享调度
实时系统中的调度:
- 硬实时
- 软实时
内存管理
虚拟内存
地址空间:地址空间是一个进程可用于寻址内存的一套地址集合,其实就是物理地址的抽象。每个进程都有自己的地址空间,并且相互独立。
- 基址寄存器与界限寄存器
- 交换技术:进程在内存和磁盘的换入换出
- 空闲内存管理:跟踪内存使用情况
- 位图:空闲与占用标记分配单元
- 空闲区链表:维护一个记录已分配内存段和空闲内存段的链表
虚拟内存:解决管理软件膨胀的问题,每个程序拥有自己的地址空间,这个空间被分割成多个块,每一块称作一页或者页面。每一页都有连续的地址范围,这些页被映射到物理内存,但并不是所有页都必须在内存中才能运行程序。当程序引用到一部分在物理内存中地址空间时,由硬件立刻执行必要的映射;当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。
分页:在物理内存中对应的单元叫作页框,通常和页面大小一样。
虚拟地址——>内存管理单元MMU——>物理内存地址
页表:页表的目的是把虚拟页面映射为页框
加速分页过程:转换检测缓冲区,即快表TLB,相当于一个缓存表
针对大内存的页表:
- 多级页表
- 倒排页表
页面置换算法
- 最优页面置换算法
- 最近未使用页面置换算法
- 先进先出页面置换算法
- 第二次机会页面置换算法
- 时钟页面置换算法
- 最近最少使用页面置换算法
- 用软件模拟LRU
- 工作集页面置换算法
- 工作集时钟页面置换算法
分页 & 分段
分段:为程序的不同部分建立互相独立的地址空间
分段和分页结合:对段的分页支持
文件系统
输入/输出
死锁
资源:可抢占资源;不可抢占资源
请求资源——>使用资源——>释放资源
死锁:如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么,该进程集合就是死锁的。
资源死锁的条件:
- 互斥条件,每个资源要么已经分配给了一个进程,要么就是可用的。
- 占有和等待条件,已经得到了某个资源的进程可以再请求新的资源。
- 不可抢占条件,已经分配给一个进程的资源不能强制被抢占,只能被占有它的进程显式释放。
- 环路等待条件,死锁发生时,系统中一定有由两个或两个以上的进程组成的一条环路,该环路中的每个进程都在等待着下一个进程所占有的资源。
处理死锁的四种策略:
- 鸵鸟算法
- 死锁检测和死锁恢复:利用抢占恢复;利用回滚恢复;杀死进程恢复
- 死锁避免:银行家算法
- 死锁预防:破坏互斥条件;破坏占用并等待条件;破坏不可抢占条件;破坏环路等待条件