1. 内存管理
1.1. 管理责任
1.1.1. 进程隔离
1.1.2. 自动分配和管理
1.1.3. 支持模块化程序设计
1.1.4. 保护和访问控制
1.1.5. 长期储存
1.2. 虚拟内存
1.2.1. 内存页
1.2.1.1. 虚拟页
1.2.1.2. 物理页
1.2.1.3. 页表
1.2.1.3.1. 锁定
1.2.1.4. 缺页
1.2.1.5. 页面置换
1.2.1.5.1. 最优
1.2.1.5.2. FIFO
1.2.1.5.3. LRU
1.2.1.5.4. 时钟
1.2.1.6. 读取
1.2.1.6.1. 请求分页
1.2.1.6.2. 预先分页
1.2.2. 内存段
1.2.2.1. 段表
1.2.2.2. 段页式
1.2.3. 地址翻译
1.2.3.1. TLB
1.2.3.2. 多级页表
1.2.3.3. 倒排页表
1.2.4. 内存映射
1.3. 堆
1.3.1. brk (break) 堆顶
1.3.2. 分配器
1.3.2.1. 垃圾回收
1.3.3. 碎片
1.3.3.1. 内部碎片
1.3.3.2. 外部碎片
1.3.3.3. 合并空闲块
1.4. 放置算法
1.4.1. 最佳匹配
1.4.1.1. 效果最差
1.4.2. 首次匹配
1.4.2.1. 效果最好
1.4.3. 下次匹配
1.5. 伙伴系统
1.5.1. 分裂
1.5.2. 合并
1.5.3. 列表
1.6. 重定位
1.6.1. 逻辑地址
1.6.2. 物理地址
1.6.3. 转换
1.6.3.1. 基址寄存器
1.6.3.2. 界限寄存器
1.7. 内存表
1.7.1. 分配给进程的内存
1.7.2. 分配给进程的外存
1.7.3. 内存块或虚拟内存块的保护属性
2. 二进制
2.1. 字长
2.2. 布尔代数
2.2.1. 异或
2.3. 位移
2.3.1. 逻辑位移
2.3.2. 算数位移
2.4. 字节序
2.4.1. 大端
2.4.2. 小端
3. 调度
3.1. 事件
3.1.1. 时钟中断
3.1.2. IO 中断
3.1.3. 操作系统调用
3.1.4. 信号
3.2. 调度准则
3.2.1. 周转时间
3.2.2. 响应时间
3.2.3. 最后期限
3.2.4. 可预测性
3.2.5. 吞吐量
3.2.6. 处理器利用率
3.2.7. 公平性
3.2.8. 强制优先级
3.2.9. 平衡资源
3.3. 批处理系统
3.3.1. 先来先服务
3.3.2. 最短作业优先
3.3.3. 最短剩余时间优先
3.4. 交互式系统
3.4.1. 时间片轮转
3.4.2. 优先级调度
3.4.3. 多级队列
3.4.4. 最短进程优先
3.4.5. 保证调度
3.4.6. 公平分享调度
4. 进程
4.1. 所需要的相关数据
4.1.1. 变量
4.1.2. 工作空间
4.1.3. 缓冲区
4.2. 执行模式
4.2.1. 用户态
4.2.2. 内核态
4.3. 创建进程
4.3.1. 分配标识符
4.3.2. 分配空间
4.3.3. 初始化进程控制块
4.3.4. 设置正确的连接
4.3.5. 导致
4.3.5.1. 新的批处理作业
4.3.5.2. 交互登录
4.3.5.3. 操作系统创建
4.3.5.4. 现有进程派生
4.3.5.4.1. 子进程
4.3.5.4.2. 父进程
4.4. 进程切换
4.4.1. 原因
4.4.1.1. 中断
4.4.1.2. 陷阱
4.4.1.3. 系统调用
4.4.1.3.1. 陷入内核
4.4.1.3.2. 进程转为阻塞态
4.4.2. 步骤
4.4.2.1. 保存上下文
4.4.2.2. 更新当前进程进程控制块
4.4.2.3. 选择另一个进程执行
4.4.2.4. 更新所选进程的进程控制块
4.4.2.5. 更新内存管理的数据结构
4.4.2.6. 恢复上下文
4.5. 进程控制块
4.5.1. 标识符
4.5.1.1. 进程 ID
4.5.1.2. 父进程 ID
4.5.1.3. 用户 ID
4.5.2. 内存指针
4.5.2.1. 指向程序代码
4.5.2.2. 指向进程相关数据
4.5.2.3. 指向和其他进程共享内存块
4.5.3. I/O 状态信息
4.5.3.1. 显式的 I/O 请求
4.5.3.2. 分配给进程的 I/O 设备
4.5.3.3. 被进程使用的文件列表
4.5.4. 处理器状态信息
4.5.4.1. 用户可见寄存器
4.5.4.2. 控制和状态寄存器
4.5.4.2.1. 程序计数器
4.5.4.2.2. 状态信息
4.5.4.2.3. 进程索引寄存器
4.5.4.2.4. 基址寄存器
4.5.4.2.5. 界限寄存器
4.5.4.2.6. 条件寄存器
4.5.4.3. 栈指针
4.5.5. 进程控制信息
4.5.5.1. 资源的所有权和使用情况
4.5.5.2. 调度和状态信息
4.5.5.2.1. 进程状态
4.5.5.2.2. 优先级
4.5.5.2.3. 调度相关信息
4.5.5.2.4. 等待的事件标识
4.5.5.3. 进程间通信
4.5.5.4. 数据结构:指向其他进程的指针
4.5.5.4.1. 父进程
4.5.5.4.2. 队列
4.5.5.5. 进程特权
4.5.5.6. 储存管理
4.6. 状态
4.6.1. 新建态
4.6.2. 运行态
4.6.3. 就绪态
4.6.4. 阻塞态
4.6.5. 挂起态
4.6.5.1. 就绪
4.6.5.2. 阻塞
4.7. 线程
4.7.1. 状态
4.7.1.1. 基本操作
4.7.1.1.1. 派生
4.7.1.1.2. 阻塞
4.7.1.1.3. 解除阻塞
4.7.1.1.4. 结束
4.7.1.2. joinable
4.7.1.2.1. 被其他线程回收后释放
4.7.1.3. detached
4.7.1.3.1. 自身终止系统释放
4.7.2. 包含
4.7.2.1. 线程上下文
4.7.2.2. 执行栈
4.7.2.3. 线程局部变量静态储存空间
4.7.2.4. 与同一个进程的其他线程共享的,对内存和资源的访问
4.7.3. 分类
4.7.3.1. 用户级线程
4.7.3.1.1. 协程
4.7.3.2. 内核级线程
4.7.3.3. 混合
4.7.3.3.1. 多个用户级线程映射到内核线程
4.7.4. POSIX
5. 储存器
5.1. 层次
5.1.1. 寄存器
5.1.2. 高速缓存
5.1.2.1. L1
5.1.2.2. L2
5.1.2.3. L3
5.1.3. 主存
5.1.4. 辅助储存
5.1.5. 网络
5.2. 缓存
5.2.1. 分块
5.2.2. 分行
5.2.2.1. 有效位标志
5.2.2.2. 校验位
5.2.3. 牺牲算法
5.2.3.1. LRU
5.2.4. 写回 / 直写
5.2.5. 抖动
5.2.6. 局部性
5.2.6.1. 时间局部性
5.2.6.2. 空间局部性
5.3. 磁盘
5.3.1. 结构
5.3.1.1. 柱面
5.3.1.2. 盘片
5.3.1.2.1. 磁道
5.3.2. 访问时间
5.3.2.1. 寻道时间
5.3.2.2. 旋转时间
5.3.2.3. 传送时间
5.3.3. 逻辑块
5.4. 总线
5.4.1. 系统总线
5.4.2. 内存总线
5.5. I/O 方式
5.5.1. DMA 直接内存存取
5.5.2. 可编程 I/O
5.5.3. 事件驱动 I/O
5.6. RAM
5.6.1. SRAM
5.6.2. DRAM
5.6.3. ROM
5.6.3.1. flash
6. 异常控制流
6.1. 种类
6.1.1. 中断
6.1.1.1. 硬件失效中断
6.1.1.2. 程序中断
6.1.1.3. 时钟中断
6.1.1.4. I/O 中断
6.1.2. trap
6.1.2.1. 系统调用
6.1.3. 故障
6.1.3.1. 缺页异常
6.1.4. 终止
6.2. 异常处理程序
7. 处理器
7.1. 指令
7.1.1. 指令集
7.1.2. 流水线
7.1.2.1. 延迟
7.1.2.2. 发射时间
7.1.2.3. 容量
7.1.2.4. 循环展开
7.1.3. 阶段
7.1.3.1. 取指
7.1.3.2. 译码
7.1.3.3. 访存
7.1.3.4. 执行
7.1.3.5. 写回
7.1.4. 操作数
7.1.4.1. 立即数
7.1.4.2. 寄存器
7.1.4.3. 内存引用
7.1.5. 数据传送指令
7.1.5.1. 零扩展
7.1.5.2. 符号扩展
7.1.6. 条件指令
7.1.6.1. cmp
7.1.6.2. set
7.1.6.3. test
7.1.6.4. jump
7.1.6.5. 条件传送
7.1.7. 指令集
7.2. 分支预测
7.3. 程序状态字
7.3.1. 条件码
7.3.1.1. 符号
7.3.1.2. 零
7.3.1.3. 进位
7.3.1.4. 等于
7.3.1.5. 溢出
8. 并发
8.1. 竞争条件
8.2. 死锁
8.2.1. 条件
8.2.1.1. 互斥
8.2.1.2. 占有并等待
8.2.1.3. 不可抢占
8.2.1.4. 循环等待
8.2.2. 解决
8.2.2.1. 检测
8.2.2.2. 预防
8.2.2.2.1. 抢占
8.2.2.2.2. 一次性申请所有资源
8.2.2.2.3. 资源排序
8.2.2.3. 避免
8.2.2.3.1. 银行家算法
8.2.3. 策略
8.2.3.1. 可交换空间
8.2.3.1.1. 一次性分配
8.2.3.2. 进程资源
8.2.3.2.1. 死锁避免
8.2.3.3. 内存
8.2.3.3.1. 抢占
8.2.3.4. 内部资源
8.2.3.4.1. 资源排序
8.3. 饥饿
8.4. 临界区 Critical section
8.5. 互斥
8.6. 原子指令
8.6.1. 比较和交换
8.6.2. 交换
8.7. 条件变量
8.7.1. wait
8.7.2. signal
8.7.3. notify
8.8. 自旋等待
8.8.1. 活锁
8.9. 信号量
8.9.1. wait (P)
8.9.2. signal (V)
8.9.3. 二元信号量
8.9.3.1. mutex
8.9.4. 调度
8.9.4.1. 强信号量
8.9.4.2. 弱信号量
8.10. 消息传递
8.10.1. 阻塞
8.10.2. 非阻塞
8.11. 常见
8.11.1. 读者/写者
8.11.2. 生产者/消费者
8.12. UNIX
8.12.1. 管道
8.12.1.1. 命名管道
8.12.1.2. 匿名管道
8.12.2. 消息
8.12.3. 共享内存
8.12.4. 信号量
8.12.5. 信号
8.12.5.1. 类似硬件中断
8.12.5.2. 没有优先级
8.12.5.3. 多个合并一个
8.12.6. 自旋锁
8.12.7. 读者/写者自旋锁
8.13. 并行
8.13.1. SIMD
9. 信息的表示
9.1. 十六进制
9.2. 无符号整数
9.2.1. 回绕
9.3. 整数
9.3.1. 补码整数
9.3.1.1. INT_min
9.3.1.2. 取反
9.3.1.3. 溢出
9.3.1.3.1. 正溢出
9.3.1.3.2. 负溢出
9.3.1.4. 除法
9.3.1.4.1. 向零舍入
9.4. 浮点数
9.4.1. 结构
9.4.1.1. 符号
9.4.1.2. 阶码
9.4.1.3. 小数
9.4.2. 规格化
9.4.3. (0, 1)
9.4.4. 特殊值
9.4.4.1. INF
9.4.4.2. NaN
9.4.5. 舍入
9.4.6. 指令
10. 程序
10.1. 调用过程
10.1.1. 调用者保存寄存器
10.1.2. 被调用者保存寄存器
10.1.3. 传递参数
10.1.3.1. 栈上参数从后到前,最前面是返回地址
10.1.3.2. 所有数据大小向 8 的倍数对齐
10.1.4. call
10.1.5. ret
10.2. 内存段
10.2.1. 内核内存
10.2.2. 栈
10.2.2.1. 向下增长
10.2.3. 共享库 mmap
10.2.4. 堆
10.2.5. .data .bass
10.2.6. .init .text .rodata
10.3. switch
10.3.1. 跳转表
10.4. struct
10.4.1. 对齐
10.5. 链接
10.5.1. 符号表
10.5.1.1. 全局符号
10.5.1.1.1. 本地
10.5.1.1.2. 外部
10.5.1.1.3. 强
10.5.1.1.4. 弱
10.5.1.2. 静态符号
10.5.2. 静态链接
10.5.3. 重定位
10.5.3.1. 重定位节和符号定义
10.5.3.2. 重定位节中的符号引用
10.5.4. 可执行
10.5.4.1. 入口点
10.5.4.2. 程序头部表
11. 文件管理
11.1. 文件系统
11.1.1. 文件
11.1.1.1. 连续分配
11.1.1.1.1. 碎片
11.1.1.2. 链表分配
11.1.1.2.1. 随机存取很慢
11.1.1.3. 内存中链表分配 FAT
11.1.1.3.1. FAT 必须在内存中,对于大磁盘不合适
11.1.2. 日志结构文件系统
11.1.3. 日志文件系统
11.2. MBR
11.2.1. 分区表
12. I/O
12.1. 文件
12.1.1. 类型
12.1.1.1. 普通文件
12.1.1.2. 目录
12.1.1.3. 命名通道
12.1.1.4. socket
12.1.2. 操作
12.1.2.1. 打开
12.1.2.2. seek
12.1.2.3. 关闭
12.1.2.4. 读写
12.1.2.4.1. 不足值
12.1.3. meta data