【计科】从操作系统到虚拟化技术(进程调度,内存映射,设备IO,文件、网络管理)
【计科】操作系统基础与虚拟化技术拓展的关系(进程调度,内存映射,设备IO,文件、网络管理)
文章目录
- 1、进程管理与调度机制(计算)
- 2、内存管理与双重映射
- 3、设备管理与IO机制
- 4、文件管理
- 5、网络与进程通信
- 6、总结
虚拟化技术本质上是基于 操作系统核心机制(如进程管理、内存管理、设备IO管理等) 的高级应用,现代操作系统也越来越多地集成虚拟化功能以支持云计算、容器化等场景。
1、进程管理与调度机制(计算)
系统调用与特权级的扩展
- 操作系统基础:操作系统通过特权级(如Ring 0/3)保护内核空间,用户程序通过系统调用访问硬件。
- 虚拟化技术:
- 传统虚拟化依赖二进制翻译或陷入-模拟(Trap-and-Emulate)处理Guest OS的特权指令。
- 硬件辅助虚拟化(如Intel VT-x)引入“Root/Non-Root”模式,Hypervisor运行在更高特权级(Ring -1)。
- 关系:虚拟化扩展了操作系统的特权级架构,实现安全隔离。
联系:
- 操作系统的进程调度器通过时间片轮转、优先级调度等算法分配CPU资源。
- 虚拟化Hypervisor将每个虚拟机视为一个“超级进程”,需要在物理CPU上调度虚拟CPU(vCPU),可能嵌套使用宿主操作系统的调度策略(如KVM基于Linux的CFS调度器)。
- 虚拟化将操作系统的进程调度逻辑提升到虚拟机级别,需解决公平性、优先级反转等问题。
操作系统
- 进程调度:时间片轮转、优先级调度、多级队列等算法。
- 上下文切换:保存和恢复进程状态(寄存器、页表等)。
- 多核并发:CPU亲和性、负载均衡。
虚拟化
- vCPU调度:Hypervisor将每个虚拟机的vCPU作为宿主机的“进程”调度
- 公平性:防止一个VM独占物理CPU(如Xen的Credit调度器)。
- 隔离性:CPU份额限制(如KVM的
cgroups/cpu
)。 - NUMA优化:虚拟机vCPU与物理NUMA节点的绑定。
- 嵌套虚拟化:Guest OS内再运行Hypervisor,需多层调度(如Windows Hyper-V on KVM)。
- 轻量级虚拟化:容器(如Docker)直接复用宿主OS的进程管理,通过
namespace
隔离进程视图。
实践
- 对比传统进程调度与vCPU调度的异同。
- 分析KVM或Xen的调度器源码(如
kvm/kvm_main.c
中的调度逻辑)。
参考项目:KVM、Xen
- kvm, linux-kvm
KVM(Kernel-based Virtual Machine)Linux内核模块,提供硬件辅助虚拟化。
基于Intel VT-x/AMD-V扩展,将Linux内核转变为Hypervisor。
核心功能:
负责CPU和内存虚拟化,依赖QEMU处理I/O和设备模拟。
支持嵌套虚拟化、热迁移(Live Migration)。
优势:
性能接近原生(因直接复用Linux调度、内存管理等机制)。
集成于主流Linux发行版(如Ubuntu、RHEL)。 - xen
核心功能:
支持全虚拟化(硬件辅助)和半虚拟化(修改Guest OS内核)。
独特的“Dom0/DomU”架构:Dom0特权虚拟机管理其他DomU客户机。
广泛用于云计算(如AWS早期EC2实例)。
优势:
高隔离性和安全性(常用于军事、金融领域)。
支持实时性要求高的场景(如嵌入式系统)。
参考:1,
进程管理概念复习
-
进程与线程
考点1 程序的顺序执行、并发执行、多道程序设计
考点2 进程的定义
考点3 进程的状态与转换
考点4 进程控制块与进程控制
考点5 线程的基本概念及线程的实现机制
考点6 进程调度算法 -
进程同步与互斥
考点1 进程的同步、互斥、临界区
考点2 信号量及P、V操作
考点3 经典的进程同步问题
考点4 管程的概念、组成、条件变量
考点5 进程通信的三种方式 -
死锁
考点1 死锁的定义、产生的原因、产生的必要条件
考点2 死锁预防
考点3 死锁避免
考点4 死锁检测与解除
考点5 资源分配图 -
操作系统运行环境
考点1 处理器相关的概念
考点2 存储器的类型
考点3 中断的概念、中断系统
考点4 中断优先级、中断屏蔽与中断嵌套
考点5 系统调用概念、与函数调用区别、分类 -
进程管理
5.1 进程、线程基础知识
5.2 进程间有哪些通信方式?
5.3 多线程冲突了怎么办?
5.4 怎么避免死锁?
5.5 什么是悲观锁、乐观锁?
5.6 一个进程最多可以创建多少个线程?
5.7 线程崩溃了,进程也会崩溃吗?
6.1 进程调度/页面置换/磁盘调度算法 -
硬件结构与CPU
2.1 CPU 是如何执行程序的?
2.2 磁盘比内存慢几万倍?
2.3 如何写出让 CPU 跑得更快的代码?
2.4 CPU 缓存一致性
2.5 CPU 是如何执行任务的?
2.6 什么是软中断?
2.7 为什么 0.1 + 0.2 不等于 0.3 ?
2、内存管理与双重映射
联系
- 操作系统通过分页、分段、TLB等机制管理物理内存。
- 虚拟化引入二次地址转换(如Intel EPT、AMD NPT),将Guest OS的虚拟地址→Guest物理地址→宿主物理地址,由Hypervisor或硬件MMU完成映射。
- 虚拟化依赖操作系统的内存管理机制,同时需处理隔离性(如内存气球技术)和性能开销(如影子页表优化)。
操作系统
- 分页/分段:虚拟地址到物理地址的转换(页表、TLB)。
- 页面置换:LRU、工作集算法。
- 共享内存:进程间通信机制。
虚拟化
- 二次地址转换:
- 软件方案:影子页表(Shadow Page Table),由Hypervisor维护Guest虚拟→物理→宿主物理的映射。
- 硬件辅助:Intel EPT/AMD NPT,硬件自动完成GVA→GPA→HPA转换。
- 内存超售(Overcommit):
- 气球驱动(Ballooning):动态回收Guest OS内存(如virtio-balloon)。
- 透明大页(THP):减少TLB失效开销。
- 内存隔离:SEV(Secure Encrypted Virtualization)加密VM内存,防止宿主机窥探。
实践
- 理解EPT/NPT的硬件机制(参考Intel手册Volume 3, Chapter 28)。
- 使用QEMU命令
-mem-path
观察内存分配行为。
参考项目:KVM、Xen、QEMU、Cloud Hypervisor
- QEMU
核心功能:
模拟多种CPU架构(x86、ARM、RISC-V等)和外部设备(网卡、磁盘、GPU等)。
支持动态二进制翻译(TCG模式),无需硬件虚拟化辅助即可运行虚拟机。
与KVM结合时(qemu-kvm),利用硬件加速实现高性能虚拟化。
应用场景:
跨平台开发(如在x86主机上模拟ARM环境)。
作为KVM的用户态组件,处理设备模拟和I/O。 - Cloud Hypervisor
核心功能:
基于Rust编写,强调安全性和性能。
集成Virtio和VFIO设备支持,去除了传统虚拟化的冗余功能。
优势:
与Kubernetes生态兼容(如KubeVirt)
内存管理概念复习
- 存储管理
考点1 存储体系、存储管理的任务、地址转换
考点2 可变分区基本思想、紧缩技术空闲分区分配策略、分区管理方案的优缺点
考点3 覆盖技术、交换技术
考点4 虚拟存储技术以及虚拟页式存储管理
考点5 转换检测缓冲区(TLB)
考点6 页面调度策略
考点7 页面置换算法
考点8 虚拟页式存储管理的优缺点
3、设备管理与IO机制
硬件抽象层
- 操作系统:通过硬件抽象层(HAL)管理物理资源(CPU、内存、设备),为应用程序提供统一的接口(如系统调用)。
- 虚拟化:虚拟化(如Type-1 Hypervisor)直接接管硬件抽象层,或通过宿主操作系统(Type-2 Hypervisor)间接访问硬件,创建多个隔离的虚拟机(VM),每个VM运行独立的客户操作系统(Guest OS)。
- 关系:虚拟化扩展了操作系统的硬件抽象能力,实现资源的逻辑分割和多实例化。
联系
- 操作系统 通过设备驱动和中断机制管理外设。
- 虚拟化:
- 全虚拟化:Hypervisor模拟虚拟设备(如QEMU虚拟网卡),截获Guest OS的I/O请求并转发到物理设备。
- 半虚拟化:Guest OS使用优化驱动(如virtio)直接与宿主通信,减少陷入(trap)开销。
- 硬件辅助:Intel VT-d/AMD-Vi支持DMA直接映射,绕过软件模拟。
- 关系:虚拟化复用操作系统的设备驱动模型,同时需解决性能瓶颈和隔离问题。
操作系统
- 设备驱动:内核模块与硬件交互(如网卡驱动)。
- 中断处理:上半部/下半部(软中断)。
- DMA:直接内存访问减少CPU开销。
虚拟化
- I/O虚拟化模型:
- 全虚拟化:QEMU模拟设备(如e1000网卡),性能低。
- 半虚拟化:virtio协议,Guest使用专用驱动(如virtio-net)与宿主通信。
- 硬件辅助:SR-IOV(单根I/O虚拟化),物理设备直接暴露给VM。
- 中断虚拟化:
- APIC虚拟化:虚拟中断控制器(如KVM的
kvm-irqfd
)。 - 中断重映射:Intel VT-d防止DMA攻击。
- APIC虚拟化:虚拟中断控制器(如KVM的
实践
- 实现一个简单的virtio设备(参考《QEMU/KVM源码分析与实战》)。
- 测试SR-IOV网卡的吞吐量(如
iperf3
对比virtio-net和VF直通)。
参考项目:Virtio、QEMU、Xen、KVM
- Virtio-win, Virtio-win-download
半虚拟化I/O框架。
核心功能:
提供虚拟设备标准(网卡virtio-net、磁盘virtio-blk、GPUvirtio-gpu等)。
Guest OS安装驱动后直接与Hypervisor通信,减少陷入(trap)开销。
与QEMU/KVM深度集成,是现代虚拟化的I/O性能优化关键。
应用场景:
云虚拟机的高效I/O(如OpenStack、Kubernetes的KubeVirt)。
IO管理概念复习
- 磁盘高速缓存及RAID
第八章 I/O设备管理
考点1 I/O设备的概念、分类、I/O设备管理的任务
考点2 I/O硬件和软件组成、设备独立性
考点3 四种I/O设备控制方式
考点4 设备分配原则、策略、独占设备的分配
考点5 移臂调度算法及旋转调度优化
考点6 信息的优化分布
考点7 缓冲技术
考点8 SPOOLing技术
4、文件管理
操作系统
- 文件系统:Ext4、NTFS的存储结构、缓存(Page Cache)、一致性(fsync)。
- 磁盘调度:I/O合并、CFQ/Deadline算法。
虚拟化
- 虚拟磁盘镜像:
- 格式:QCOW2(写时复制)、RAW(直接映射)。
- 快照:基于COW(Copy-on-Write)的增量保存。
- 存储虚拟化:
- 块设备透传:直接分配物理磁盘(如VFIO)。
- 分布式存储:Ceph/RBD为虚拟机提供共享存储。
- 容器存储:联合文件系统(OverlayFS)实现镜像分层。
实践
- 使用
qemu-img
创建和管理QCOW2镜像,分析其元数据结构。 - 对比虚拟机与容器的文件隔离机制(如OverlayFS vs. 虚拟磁盘)
文件管理概念复习
- 文件系统
考点1 文件及文件系统的定义
考点2 外存储设备的存储介质及存取方式、文件分类
考点3 文件的逻辑结构和物理结构
考点4 文件控制块及三种文件目录
考点5 磁盘空间管理及分配回收算法
考点6 典型的文件操作和典型的目录操作
5、网络与进程通信
网络与进程间通信(IPC)
- 操作系统的IPC:
- 管道、共享内存、Socket通信。
- 虚拟化:
- 虚拟网络:Libvirt通过Linux网桥或OVS实现虚拟机间通信,复用宿主机的网络栈(如TCP/IP协议栈)。
- 容器网络:LXC使用
veth pair
和network namespace
隔离网络视图。 - Xen的Grant Table:半虚拟化下Guest与Hypervisor共享内存的机制。
- 关键:
- 虚拟化网络本质是操作系统网络栈的延伸。
6、总结
操作系统与虚拟化技术的关系
- 理解两者的关系有助于设计更高效的虚拟化方案(如混合半虚拟化)、优化嵌套虚拟化性能,或开发轻量级容器运行时(如gVisor)。
随着云原生和边缘计算的普及,操作系统与虚拟化的协同创新(如Firecracker微VM)将持续演进。 - 虚拟化开发技术可视为操作系统基础能力的纵向拓展:
向下:虚拟化深化硬件资源的管理粒度(如vCPU、虚拟设备)。
向上:操作系统为虚拟化提供底层支持(如KVM依赖Linux内核模块)。
操作系统模块与虚拟化技术对应
操作系统模块 | 虚拟化技术对应 | 代表项目 | 虚拟化带来的变化 |
---|---|---|---|
进程管理 | vCPU调度、嵌套虚拟化 | KVM, Xen, Firecracker | 两级调度、隔离性增强 |
内存管理 | 二次地址转换、内存超售 | KVM, QEMU, Cloud Hypervisor | 增加转换层级、硬件辅助(EPT/NPT) |
文件系统 | 虚拟磁盘镜像、联合文件系统 | QEMU, LXC, Kata | 隔离性(加密镜像)、性能优化(virtio-fs) |
I/O管理 | 设备虚拟化、中断虚拟化 | Virtio, QEMU, KVM | 半虚拟化(virtio)、硬件直通(VFIO) |
特权级 | Hypervisor模式(Ring -1) | KVM, Xen | 硬件辅助(VT-x/SVM) |
网络/IPC | 虚拟网络设备、网络命名空间 | Libvirt, LXC | 软件定义网络(OVS)、隔离性(namespace) |
虚拟化学习路线
- 1、实验1:
通过修改Linux内核模块(如调度器)加深理解。
使用QEMU/KVM创建虚拟机,分析/proc/kvm
和virsh
命令。
阅读Xen/KVM的架构文档(如KVM官方Wiki)。
研究KVM如何通过/dev/kvm
接口暴露操作系统的硬件虚拟化能力
分析QEMU设备模拟代码(如hw/block/virtio-blk.c
)与Linux块设备驱动的交互 - 2、实验2:
实现一个微型Hypervisor(参考《Writing a Simple x86 Hypervisor》)。 1
使用strace
跟踪虚拟机启动时的系统调用,观察QEMU与KVM的协作流程。
通过perf
分析virtio-net的I/O性能瓶颈。
参与开源项目(如Firecracker、Kata Containers)。
对比Xen半虚拟化和KVM全虚拟化在内存管理上的实现差异(如页表切换频率)
学习容器编排(Kubernetes)如何基于OS/虚拟化技术(如runc
调用namespaces
)。 - 3、书籍论文:
《Operating Systems: Three Easy Pieces》 1
《系统虚拟化:原理与实现》- Intel Press
《现代操作系统》- Andrew Tanenbaum(重点第1、5、8章)
《Xen and the Art of Virtualization》(SOSP 2003)
《kvm: the Linux Virtual Machine Monitor》(OLS 2007)
参考:
- 1-期末操作系统
- 2-408操作系统
- 3-coding操作系统
- 4-从零开始编写一个操作系统
- 5-13180/02326考试操作系统 2 3