CPU 虚拟化相关笔记
CPU 虚拟化概述
-
调度机制:使用进程间的调度来虚拟化 CPU。
-
受限的直接执行:将整个空间划分为用户空间和内核空间,因为一个 process 控制一个 CPU,所以要限制。使用时钟中断确保控制权能回到内核手中。
I/O 操作与调度器
I/O 如何受到调度器操作
进程间的状态转换:
- 运行中 ➔ 就绪:调度
- 运行中 ➔ 阻塞(Blocked):因 I/O 操作启动
- 阻塞(Blocked)➔ 就绪:I/O 操作完成
当一个进程进入 I/O 操作时,会有其他进程代替其执行(状态切换)。
模式切换机制
- 响应时间
- FIFO
- SJF(最短作业优先)
- SJF(最短响应优先)
- 周期时间
在这个基础上,引入了多级反馈队列(MBFQ 机制),同时在周期时间和响应时间之间存在一对矛盾。
多级反馈队列(MLFQ)
四条准则:
- 优先级高的优先执行。
- 同一优先级,共同划分轮转时间片执行。
- 从最高优先级开始执行。
- 如果一个进程占用了整个时间片(slice),就将该进程降级;否则,保持优先级。
虚拟化相关笔记
CPU 总结
机制
- 进程抽象
- syscall(系统调用)
- system call for protection(用于保护的系统调用)
- 分时共享的上下文切换
策略
- 一系列调度指标:响应时间等
- MLFQ 的权衡(存在一对矛盾)
内存虚拟化
在一开始,我们认为一个进程控制了整个 CPU,但是一个进程使用整个机器,会造成多个任务使用内存的混叠,无法阻止恶意程序。
我们有以下一些目标用来规范多任务运行:
- 透明性 :程序认为自己独享 CPU、内存。
- 保护 :在进程与进程之间,在进程与内核之间添加隔离保护。
- 效率 :不能浪费内存和减慢进程(所以需要使用硬件来执行的地址转换的任务)。
- 共享 :运行许多任务通过通信协作。
内存分时共享笔记
抽象:地址空间
我们需要什么样的地址空间?
- Static :代码和全局变量
- Dynamic :堆和栈
同步运行多任务的问题
- 如何同步运行多任务?
- 如果地址是 “硬编码” 的,如何避免内存碎片化?
四种机制
- Time sharing
- Static Relocation
- Base
- Base + Bounds