👆如题先画个饼,最近打算整理一下操作系统相关的知识,以操作系统 / 虚拟化为主要内容吧,也涉及一些编译器、体系结构的知识。不得不说东西是真的多且杂,先写个目录放这里来提醒自己,但可能很难坚持下去并整理得完,预计内容涵盖以下几个方面:
1. Linux系统
1.1 内存管理
分为两部分来介绍虚拟内存 + 物理内存
虚拟内存:用户和内核的虚拟地址空间、VMA数据结构、malloc实现、mmap、sbrk
lazy-allocation、多级页表映射、大页等
物理内存:zone、page数据结构、内存模型、UMA/NUMA、伙伴系统、slab、水位线
内存碎片、内存迁移等
1.2 进程管理
一些概念说明:进程、线程、纤程、协程
fork、exec等系统调用、上下文切换、写时复制
内核调度器:CFS、EEVDF、DL、RT
组调度、负载跟踪、负载均衡、进程迁移和绑定
中断嵌套对调度的影响等
1.3 驱动程序
简单字符设备(I2C、tty、SPI等)、块设备(NVME、NBD)
网络设备(e1000)及其驱动
(平台)总线驱动模型、设备树、BSP、热插拔
中断上半部和下半部
设备节点、设备号、驱动程序与系统调用的关系
1.4 文件系统
superblock、inode、GPT、MBR、磁盘存储布局、硬链接、符号链接
page-cache、有名/匿名文件映射
虚拟文件系统VFS、ramdisk、基于内存的文件系统、网络文件系统、根文件系统
fat、ext2、ext4文件系统等
1.5 虚拟化
两类虚拟化:KVM + QEMU 和 Xen、Xvisor
完全的虚拟化、半虚拟化
CPU虚拟化、内存虚拟化、设备虚拟化
virtio、vfio、sriov等相关技术
影子页表、二级MMU映射(IOMMU/SMMU)、执行/异常级别
1.6 杂项
ELF格式、库函数、系统调用、RCU、同步原语、cgroup、docker、热启动kexec等
2. 体系结构
3. 编译器
写完目录感觉真的要写很久,随缘更新吧。