书本是《现代操作系统》第三版
现代操作系统
进程和线程
进程
-
进程模型
-
包括
- 程序计数器
- 寄存器
- 变量的当前值
-
进程和程序
-
-
创建进程
-
四种主要事件 - 系统初始化
- 守护进程 - 前台进程
-
一个批处理作业的初始化
- 仅在大型机的批处理系统中应用
-
执行了正在运行的进程的调用进程创建系统调用
-
用户请求创建一个新进程
-
-
unix
-
fork
-
存储映像
-
就是父进程的整个内存空间
- 代码段
- 数据段
- 其他
-
-
环境字符串
-
打开文件
-
-
允许子进程处理其文件描述符
-
execve
-
-
windows
-
地址空间对比
-
-
进程终止
-
正常退出
-
出错退出
- 进程自己发现了错误,自愿退出
-
严重错误
-
被其他进程杀死
-
-
层次结构
-
状态
- 运行态
- 阻塞态
- 就绪态
-
实现
-
进程表
-
进程管理
- 寄存器
- 程序计数器
- 堆栈指针
- 优先级
- 等等
-
存储管理
- 数据段指针
- 正文段指针
- 堆栈段指针
-
文件管理
- 根目录
- 工作目录
- 等等
-
-
-
多道程序设计模型
线程
-
理由
- 并行实体共享地址空间和所有可用数据
- 更容易创建和撤销
- 性能:在计算和I/O密集的情况下,多线程能提高速度
- 在多CPU系统中,能实现真正的并行
-
经典线程模型
-
区别
- 进程把资源集中在一起
- 线程则是在CPU上被调度执行的实体
-
内容
-
进程中共享的
- 地址空间
- 全局变量
- 打开文件
- 子进程
- 其他
-
线程独有的
-
寄存器
-
堆栈
-
帧
- 过程的局部变量
- 过程调用完成后的返回地址
-
-
状态
-
程序计数器
-
-
-
-
POSIX线程
- Pthread_create
- Pthread_exit
- Pthread_join
- Pthread_yield
- Pthread_attr_init
- Pthread_attr_destroy
-
在用户空间中实现线程
-
实现
- 把线程包放在用户空间中,线程表由运行时系统管理
-
优点
-
可以在不支持线程的操作系统上实现
-
线程切换快
- 本地过程
- 不需要陷阱、上下文切换、对内存高速缓存进行刷新
-
允许进程有自己的调度算法
-
-
缺点
- 一个用户级线程的阻塞将会引起整个进程的阻塞
- 如果一个线程开始运行,那么在该进程中的其他线程就不能继续运行,除非第一个线程自动放弃cpu
-
-
在内核中实现线程
-
实现
- 在内核中有用来记录系统中所有线程的线程表
-
优点
- 线程阻塞时候,内核可以选择同一个进程的另一个线程,或者另一个进程的线程
-
缺点
- 开销大
- 创建新进程时候问题
- 信号问题
-
-
混合实现
- 内核只识别内核级别线程,一个内核级别线程对应一个或多个用户级别线程
-
调度程序激活机制
-
目标
- 模拟内核线程的功能,但是为线程包提供通常在用户空间中才能实现的更好的性能和更大的灵活性
-
内核给每个进程分配一定数量的虚拟处理器,进程给线程分配处理器
-
思路
-
内核了解到一个线程被阻塞
-
通知该进程的运行时系统
- 运行时系统重新调度其线程
-
-
-
-
弹出式线程
-
概念
- 一个消息的到来导致系统创建一个处理该消息的线程
-
进程间通信
-
问题
- 一个进程如何把消息传递给另一个进程
- 确保两个或更多个进程在关键活动中不会交叉
- 正确的顺序
-
竞争条件
- 两个或多个进程读写某些共享数据,而最后的结果取决与进程运行的精确时序
-
互斥
-
临界区
- 对共享内存或变量进行访问的程序片段叫做临界区域,或临界区
-
好的解决方案四个条件
- 任何两个进程不能同时处于临界区
- 不应对cpu的速度和数量进行任何假设
- 临界区外运行的进程不得阻塞其他进程
- 不得使进程无限期等待进入临界区
-
屏蔽中断
- 不好
-
忙等待的互斥
-
锁变量
- 做法
- 缺点
-
严格轮换法
-
缺陷
- 一个进程轮一次,当某个进程在非临界区域里面运行过长时间的话,就会导致其他进程阻塞
-
-
Peterson解法
- turn
- interested
-
TSL和XCHG
-
-
非忙等待
-
目标
- 进程在无法进入临界区时候将阻塞,而不是忙等待
-
生产者-消费者问题
-
sleep
-
wakeup
-
信号量
- up
- down
-
互斥量
- 没有搞懂
-
管程
-
组成
- 过程
- 变量
- 数据结构等
-
-
调度
-
进程调度
-
进程切换顺序
-
用户态切换到内核态
-
保存当前进程的状态
- 调度算法选新进程
- 将新进程的内存映像重新装入MMU
- 新进程开始运行
-
-
使整个内存高速缓存失效,强迫缓存从内存中动态装入两次(进入内核一次,离开内核一次)
-
-
进程行为
- I/O密集型
- 计算密集型
-
何时调度
- 进程创建了新进程
- 进程结束
- 进程阻塞
- I/O中断发生
-
调度类型
- 抢占式
- 非抢占式
-
目标
-
共同
- 公平性
- 强制策略执行
- 平衡
-
批处理
- 吞吐量
- 周转时间
- CPU满载率
-
交互式系统
- 响应时间
- 均衡性
-
实时系统
- 满足截止时间
- 可预测性(有规律)
-
-
调度算法
-
批处理
-
非抢占式
-
先来先服务
-
最短作业优先
- 当所有作业同时到达时候,周转时间最短
-
-
长时间周期的抢占式
- 最短剩余时间优先
-
-
交互式
-
抢占式
- 轮转调度
- 优先级调度
- 多级队列
- 最短进程优先调度
- 保证调度
- 彩票调度
- 公平分享调度
-
-
实时
- 抢占式
- 非抢占式
-
-
策略和机制分离
- 将调度算法以某种形式参数化,而参数可以由用户进程填写。调度机制位于内核,调度策略由用户进程决定
-
-
线程调度
-
用户级线程调度
- 进程的运行时系统自行决定
-
内核级线程调度
-
文件系统
文件
-
文件命名
-
文件类型
-
普通文件
-
文件结构
-
无结构的字节序列
- UNIX,WINDOWS
-
具有固定长度记录的序列
- 古老大型机
-
树形结构
-
-
ASCII文件
-
二进制文件
-
-
目录
-
字符特殊文件
-
块特殊文件
-
-
文件存取
- 顺序存取
- 随机存取
-
文件属性
- 文件保护
- 标记
- 结构化文件信息
- 时间信息
- 大小信息
-
文件操作
-
目录
-
一级目录系统
-
层级目录系统
- 路径名
-
文件系统的实现
-
文件系统布局
-
MBR
-
分区表
-
磁盘分区
- 引导块
- 超级块
- 空闲空间管理
- i节点
- 根目录
- 文件和目录
-
-
文件的实现
-
连续分配
-
优点
- 实现简单
- 读操作性能较好
-
缺点
- 磁盘变得零碎
-
-
链表分配
-
优点
- 空间紧凑
-
缺点
- 随机存取相当缓慢
- 怪异的文件大小
- 额外的开销
-
-
在内存中保存链表分配
-
优点
- 快
-
缺点
- 内存开销大
-
-
i节点
-
-
目录的实现
- 文件名+文件属性
- 文件名+i节点号
-
共享文件
- 硬链接
- 软连接
存储管理
分层存储器体系
存储管理器
无存储器抽象
-
简单物理内存
-
很多情况下,不能同时运行两个程序
-
三种变体
- 操作系统位于ROM底部
- 操作系统位于RAM中
- 操作系统位于ROM中,设备驱动程序(BIOS)位于RAM底部
-
运行多种程序
-
程序在内存上切换
-
保护位:IBM 360
-
缺陷
-
改进
-
缺点
- 不是通用解决方法
- 减慢速度
- 装载器需要辨别地址的常数
-
-
-
-
-
缺点
- 如果用户程序可以寻址所有内存,有可能会破坏操作系统
- 同时运行多个程序很难
多个程序在内存中
- 保护
- 重定位
地址空间
-
动态重定位
-
基址寄存器
-
界限寄存器
-
缺点
- 需要加法运算和比较运算
-
-
交换技术
-
空洞
- 内存紧缩
-
空闲内存管理
-
位图
-
优点
- 简单,方便
-
缺点
- 耗时
-
-
链表
-
组成
- 标记
- 起始地址
- 长度
- 指针
-
分配算法
-
首次适配
-
下次适配
-
最佳适配
- 慢
- 大量无用的小空闲区
-
最差适配
-
快速适配
- 维护数组,里面存储指针
- 进程换出,合并难
-
-
进程段和空闲段分离
- 首次适配
- 最佳适配
-
-
-
-
虚拟内存
-
分页
-
虚拟地址
-
虚拟地址空间
-
内存管理单元
- CPU芯片的一部分
-
缺页中断
-
页表
-
页表项
-
页框号
-
在/不在位
-
修改位
-
保护位
-
访问位
-
高速缓存禁止位
- 对映射到设备寄存器有用
-
-
-
加速分页过程
- 转换监测缓冲区
- 软件TLB管理
-
-
针对大内存的页表
- 多级页表
- 倒排页表
-
页面置换算法
-
最优页面置换算法
-
最近未使用页面置换算法NRU
-
先进先出页面置换算法FIFO
-
第二次机会页面置换算法
-
时钟页面置换算法
-
最近最少使用页面置换算法LRU
-
硬件实现
- 使用计数器
- 矩阵
-
软件模拟
- 最不常用算法NFU
- 老化算法
-
-
工作集页面置换算法
- 移位寄存器
- 子主题 2
-
-
分页系统中的设计问题
-
分配
-
全局分配
-
确定分配大小
- 检测工作集的大小
- 为进程动态分配页框
- 缺页中断率
-
-
局部分配
-
-
负载控制
-
页面大小
-
分离的指令空间和数据空间
-
共享页面
-
共享库
-
优先
- 可执行文件更小
- 修正bug
-
缺点
- 重定位问题
-
-
内存映射文件
-
清理策略
- 分页守护进程
- 双指针时钟
-
虚拟内存接口
- 允许多个进程共享一部分内存
- 高性能的消息传递系统
-
-
实现问题
- 分页的工作顺序
- 缺页中断处理
-
-
分段
-
原因
-
简化对长度经常变动的数据结构的管理
-
修改一部分不影响寻址
-
有助于在几个进程之间共享过程和数据
- 共享库
-
不同的段能够有不同的保护
-
-
缺点
- 增加了复杂度,程序员需要理解这种技术
-
子主题 2
-
XMind: ZEN - Trial Version