From ec80779249194d2887b104e59fadde48c5087d70 Mon Sep 17 00:00:00 2001 From: SepComet <2428390463@qq.com> Date: Sat, 18 Apr 2026 08:56:15 +0800 Subject: [PATCH] finish --- Assets/Prefabs/CommonButton.prefab | 2 +- Assets/Scenes/Main.unity | 2 +- ProjectSettings/EditorBuildSettings.asset | 5 +- ProjectSettings/InputManager.asset | 3 +- README.md | 180 +++++ doc/process.md | 770 ++++++++++++++++++++++ doc/虚拟存储器——黄俊.pptx | Bin 0 -> 158214 bytes 7 files changed, 958 insertions(+), 4 deletions(-) create mode 100644 README.md create mode 100644 doc/process.md create mode 100644 doc/虚拟存储器——黄俊.pptx diff --git a/Assets/Prefabs/CommonButton.prefab b/Assets/Prefabs/CommonButton.prefab index 977b6d7..a3f33ae 100644 --- a/Assets/Prefabs/CommonButton.prefab +++ b/Assets/Prefabs/CommonButton.prefab @@ -224,7 +224,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Navigation: - m_Mode: 3 + m_Mode: 0 m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} diff --git a/Assets/Scenes/Main.unity b/Assets/Scenes/Main.unity index bd095b4..be2e03f 100644 --- a/Assets/Scenes/Main.unity +++ b/Assets/Scenes/Main.unity @@ -11955,7 +11955,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &1887115188 RectTransform: m_ObjectHideFlags: 0 diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index 82ab0f5..d0d5ce6 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -5,7 +5,10 @@ EditorBuildSettings: m_ObjectHideFlags: 0 serializedVersion: 2 m_Scenes: - - enabled: 1 + - enabled: 0 path: Assets/Scenes/SampleScene.unity guid: 2cda990e2423bbf4892e6590ba056729 + - enabled: 1 + path: Assets/Scenes/Main.unity + guid: 85bc7cc748291a344ba0188b5c2c378b m_configObjects: {} diff --git a/ProjectSettings/InputManager.asset b/ProjectSettings/InputManager.asset index b16147e..2a23aa0 100644 --- a/ProjectSettings/InputManager.asset +++ b/ProjectSettings/InputManager.asset @@ -268,7 +268,7 @@ InputManager: negativeButton: positiveButton: enter altNegativeButton: - altPositiveButton: space + altPositiveButton: gravity: 1000 dead: 0.001 sensitivity: 1000 @@ -485,3 +485,4 @@ InputManager: type: 2 axis: 5 joyNum: 0 + m_UsePhysicalKeys: 1 diff --git a/README.md b/README.md new file mode 100644 index 0000000..7359cde --- /dev/null +++ b/README.md @@ -0,0 +1,180 @@ +# VMdemo + +一个基于 Unity 的虚拟存储器地址转换可视化项目,用来演示从虚拟地址到物理地址的翻译过程,以及 TLB、二级页表、缺页中断与页面置换在一次内存访问中的作用。 + +项目目标不是做一个“黑盒计算器”,而是把一次地址访问拆成可观察、可暂停、可回放的步骤,方便课程讲解、实验演示和自学理解。 + +## 项目内容 + +当前项目围绕一次虚拟地址访问,提供以下可视化能力: + +- 单步执行地址翻译流程 +- 连续播放整段访问过程 +- 展示 TLB、页表、FIFO 队列的实时状态 +- 展示当前访问路径、关键决策原因和事件时间线 +- 实时统计 TLB 命中率、页表命中率、缺页次数、平均访问开销 +- 支持不同地址生成方式,观察局部性对命中率的影响 + +## 模拟规格 + +本项目当前采用固定核心规格: + +| 项目 | 设定 | +| --- | --- | +| 机器位数 | 32-bit | +| 虚拟地址有效位 | 24-bit | +| 页大小 | 4 KB | +| 物理内存 | 1 MB | +| TLB | 8 项,全相联,LRU 替换 | +| 页表 | 二级页表,稀疏结构 | +| 页面置换 | FIFO | + +可调参数主要包括: + +- 访问次数 `N` +- 缺页惩罚 `pageFaultPenalty` +- 地址生成模式 +- 顺序数组访问模式下的数组长度、元素大小、数组基址 + +目前支持两种地址生成模式: + +- `RandomUniform`:在虚拟地址空间内均匀随机生成地址 +- `SequentialArrayLoop`:按数组元素顺序循环访问,适合观察局部性 + +## 地址翻译流程 + +项目中的翻译引擎按以下步骤推进: + +1. `GenerateVA`:生成本轮虚拟地址 +2. `SplitVA`:拆分出 `VPN / offset / L1 / L2` +3. `LookupTLB`:查询 TLB +4. `LookupPageTable`:TLB 未命中后查询二级页表 +5. `HandlePageFault`:页表未命中时分配页框并处理 FIFO 置换 +6. `ComposePA`:合成物理地址 +7. `Finalize`:记录统计信息并结束本轮访问 + +访问开销模型如下: + +- TLB 命中:`+1` +- TLB miss + 页表命中:`+4` +- 缺页:`+4 + pageFaultPenalty` + +## 可视化界面 + +主场景中会展示几类关键信息: + +- 控制区:单步、连续播放、暂停、重置 +- 配置区:访问次数、缺页惩罚、地址生成模式等输入 +- 流程区:当前处于哪一个地址翻译步骤 +- 表格区:TLB、页表关键项、FIFO 队列 +- 追踪区:地址拆分、查询路径、当前决策原因 +- 时间线区:每轮访问的事件日志 +- 统计区:命中率、缺页次数、平均开销 + +## 技术栈 + +- Unity `2022.3.62f3c1` +- C# +- TextMesh Pro +- Unity UI +- Unity Test Framework +- DOTween + +## 运行方式 + +### 1. 打开项目 + +使用 Unity Hub 安装并选择 `Unity 2022.3.62f3c1`,然后打开项目根目录: + +```text +C:\UnityProjects\VMdemo +``` + +### 2. 打开主场景 + +在 Unity 中打开: + +```text +Assets/Scenes/Main.unity +``` + +### 3. 运行 + +点击 Play 后: + +1. 根据需要调整访问次数、缺页惩罚和地址模式 +2. 点击“单步”逐阶段观察地址翻译 +3. 点击“连续播放”观察批量访问统计变化 +4. 点击“暂停”或“重置”中断当前模拟 + +## 项目结构 + +```text +Assets/ + Scenes/ 主场景 + Scripts/ + Core/ 配置、校验、地址拆分等基础模型 + Simulation/ TLB、页表、物理内存、翻译引擎、统计模块 + UI/ 界面控制、表格渲染、日志时间线、流程动画 + Tests/ + EditMode/ 核心逻辑的编辑器测试 +doc/ 讲解材料、设计草稿与 TODO +Packages/ Unity 包依赖 +ProjectSettings/ Unity 项目设置 +``` + +## 关键脚本 + +- `Assets/Scripts/Core/SimulationConfig.cs`:模拟配置与固定规格定义 +- `Assets/Scripts/Core/ConfigValidator.cs`:参数合法性校验与派生量计算 +- `Assets/Scripts/Simulation/TranslatorEngine.cs`:地址翻译主流程状态机 +- `Assets/Scripts/Simulation/TlbCache.cs`:TLB 查询与 LRU 替换 +- `Assets/Scripts/Simulation/TwoLevelPageTable.cs`:二级页表实现 +- `Assets/Scripts/Simulation/PhysicalMemoryManager.cs`:页框分配与 FIFO 管理 +- `Assets/Scripts/Simulation/StatsCollector.cs`:统计指标计算 +- `Assets/Scripts/UI/SimulationUIController.cs`:主界面交互与数据绑定 + +## 测试 + +项目包含一组编辑器测试,覆盖核心逻辑: + +- Step 1:参数与核心数据模型 +- Step 2:地址拆分 +- Step 3:TLB 与 LRU +- Step 4:二级页表与 FIFO 置换 +- Step 5:翻译引擎状态机 +- Step 6:统计模块 + +相关测试位于: + +```text +Assets/Tests/EditMode +``` + +可在 Unity Test Runner 中运行 EditMode Tests。 + +## 适用场景 + +这个项目适合用于: + +- 操作系统课程中讲解虚拟存储器和地址翻译流程 +- 展示 TLB 命中、页表命中、缺页之间的区别 +- 对比随机访问与顺序访问对局部性的影响 +- 作为后续扩展页面置换算法、页表结构或缓存模型的基础工程 + +## 后续可扩展方向 + +- 增加更多页面置换算法,例如 LRU / Clock +- 增加多种页表组织方式的切换 +- 加入更细的访问耗时模型 +- 增加截图、录屏或实验报告导出能力 +- 增加更多教学案例预设 + +## 文档 + +仓库中的 `doc/` 目录保存了开发过程中的讲解资料与草稿,例如: + +- `doc/MVP-TODO.md` +- `doc/dialog.md` + +这些文档更偏向设计记录,正式使用说明以本 README 为准。 diff --git a/doc/process.md b/doc/process.md new file mode 100644 index 0000000..c159bc6 --- /dev/null +++ b/doc/process.md @@ -0,0 +1,770 @@ +## 课前准备(5分钟) + +### 1. 环境检查脚本(`check_env.sh`) + +```bash +#!/bin/bash +echo "========== WSL2 虚拟存储器演示环境 ==========" +echo "" + +echo "系统架构与地址空间" +echo "CPU 架构: $(uname -m)" +echo "虚拟地址位数: $(getconf LONG_BIT) bit" +echo "用户空间地址范围: 0x0000000000000000 ~ 0x00007FFFFFFFFFFF (128TB)" +echo "理论可寻址空间: $((2**47 / 1024**4)) TB" + +echo "" +echo "物理资源限制" +echo "物理内存:" +free -h | grep Mem +echo "" +echo "Swap 空间:" +free -h | grep Swap +echo "" + +echo "内核内存管理参数" +echo "Overcommit 策略: $(cat /proc/sys/vm/overcommit_memory) (0=启发式, 1=总是允许, 2=严格)" +echo "Overcommit 比例: $(cat /proc/sys/vm/overcommit_ratio)%" +echo "页大小: $(getconf PAGE_SIZE) bytes ($(($(getconf PAGE_SIZE)/1024)) KB)" + +echo "" +echo "WSL2 特有配置" +echo "WSL 版本:" +wsl.exe --status 2>/dev/null || echo "请在 Windows PowerShell 运行: wsl --status" +echo "" +echo "当前进程限制:" +ulimit -v # 虚拟内存限制 +echo "" + +echo "准备演示程序" +ls -lh *.c 2>/dev/null || echo "请确保已编译所有演示程序" +``` + +**运行**: +```bash +chmod +x check_env.sh +./check_env.sh +``` + +--- + +## 演示环节一:突破物理内存限制(10分钟) + +### 核心程序(`demo1_overcommit.c`) + +```c +#include +#include +#include +#include +#include +#include + +#define GB (1024ULL * 1024 * 1024) + +volatile int stop = 0; +void handler(int sig) { stop = 1; } + +void print_status(const char* label) { + printf("\n┌─ %s ──────────────────────┐\n", label); + char cmd[512]; + snprintf(cmd, sizeof(cmd), + "echo \"│ 虚拟内存(VmSize):\" && cat /proc/%d/status | grep VmSize | awk '{print \"│ \" $2 \" \" $3}' && " + "echo \"│ 物理驻留(RSS):\" && cat /proc/%d/status | grep VmRSS | awk '{print \"│ \" $2 \" \" $3}' && " + "echo \"│ 交换空间(VmSwap):\" && cat /proc/%d/status | grep VmSwap | awk '{print \"│ \" $2 \" \" $3}'", + getpid(), getpid(), getpid()); + system(cmd); + printf("└────────────────────────────────┘\n"); +} + +int main() { + signal(SIGINT, handler); + printf("【演示1】突破物理内存限制\n"); + printf("PID: %d | 按 Ctrl+C 随时暂停\n\n", getpid()); + + // 获取物理内存 + long pages = sysconf(_SC_PHYS_PAGES); + long page_size = sysconf(_SC_PAGE_SIZE); + double phys_gb = (double)pages * page_size / GB; + printf("► 系统物理内存: %.1f GB\n", phys_gb); + + // 分配 3倍物理内存的虚拟空间 + size_t alloc_size = (size_t)(phys_gb * 3 * GB); + printf("► 尝试分配: %.1f GB 虚拟内存 (3倍物理内存)\n", alloc_size / (double)GB); + printf(" 按回车继续..."); + getchar(); + + void *mem = mmap(NULL, alloc_size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0); + if (mem == MAP_FAILED) { + perror("mmap 失败"); + return 1; + } + + printf("✓ 分配成功! 虚拟地址: %p\n", mem); + print_status("分配后(未访问)"); + printf(" → 注意: VmSize ≈ %.1f GB, RSS ≈ 0\n", alloc_size/(double)GB); + + printf("\n► 开始稀疏访问(只使用 10%% 空间)...\n"); + printf(" 按回车继续..."); + getchar(); + + // 稀疏访问:每100页访问1页 + long page_count = alloc_size / page_size; + for (int i = 0; i < page_count / 100 && !stop; i++) { + ((char*)mem)[i * 100 * page_size] = 'A'; + if (i % 1000 == 0) { + printf(" 已标记 %d 页 (%.2f MB)\r", i, i*100*page_size/(1024.0*1024)); + fflush(stdout); + } + } + + print_status("稀疏访问后"); + printf(" → RSS 应该很小(仅实际访问的页)\n"); + + printf("\n► 现在密集访问,直到触发 swap 或 OOM...\n"); + printf(" 按回车继续(Ctrl+C 停止)..."); + getchar(); + + size_t accessed = 0; + while (!stop && accessed < alloc_size) { + memset((char*)mem + accessed, 'X', 10 * 1024 * 1024); // 10MB 每步 + accessed += 10 * 1024 * 1024; + if (accessed % (256 * 1024 * 1024) == 0) { + printf(" 已访问 %.0f MB\n", accessed/(1024.0*1024)); + print_status("密集访问中"); + } + } + + print_status("最终状态"); + munmap(mem, alloc_size); + return 0; +} +``` + +**演示要点**: +1. **对比**:`VmSize` 立即达到 3GB,`RSS` 保持很小 +2. **稀疏访问**:证明大地址空间 + 小物理内存 = 高效 +3. **密集访问**:观察 `RSS` 增长 → `VmSwap` 增长 → 可能的 OOM + +**配合监控**(另一个终端): +```bash +watch -n 0.3 'cat /proc//status | grep -E "VmSize|VmRSS|VmSwap"' +``` + +--- + +## 演示环节二:进程隔离与内存保护(8分钟) + +### 核心程序(`demo2_isolation.c`) + +```c +#include +#include +#include +#include +#include + +int global = 100; // 数据段 + +void print_maps(const char* who) { + printf("\n【%s的内存映射】\n", who); + char cmd[256]; + snprintf(cmd, sizeof(cmd), + "cat /proc/%d/maps | grep -E 'stack|heap|global' | head -5", getpid()); + system(cmd); +} + +void print_vars(const char* who, int* local, int* dynamic) { + printf(" %s: global=%d @ %p, local=%d @ %p, dynamic=%d @ %p\n", + who, global, &global, *local, local, *dynamic, dynamic); +} + +int main() { + printf("【演示2】进程隔离与内存保护\n"); + printf("PID: %d\n\n", getpid()); + + int local = 200; // 栈 + int *dynamic = malloc(sizeof(int)); + *dynamic = 300; // 堆 + + printf("► 父进程初始状态:\n"); + print_vars("父进程", &local, dynamic); + print_maps("父进程"); + + printf("\n► fork() 创建子进程...\n"); + printf(" (子进程将复制父进程的虚拟地址空间,但物理页共享)\n"); + printf(" 按回车继续..."); + getchar(); + + pid_t pid = fork(); + if (pid == 0) { + // 子进程 + printf("\n┌─ 子进程 (PID: %d) ─┐\n", getpid()); + print_vars("子进程", &local, dynamic); + + printf("\n► 子进程修改所有变量...\n"); + global = 1000; + local = 2000; + *dynamic = 3000; + print_vars("修改后", &local, dynamic); + + printf("\n► 查看 /proc/%d/maps(与父进程独立)\n", getpid()); + char cmd[256]; + snprintf(cmd, sizeof(cmd), "cat /proc/%d/maps | head -10", getpid()); + system(cmd); + + printf("\n 注意: 虚拟地址相同,但物理页已复制(COW)\n"); + exit(0); + } else { + wait(NULL); + printf("\n└─ 父进程 (PID: %d) ─┘\n", getpid()); + print_vars("父进程(子进程已退出)", &local, dynamic); + printf(" → 父进程变量未被修改!进程完全隔离\n"); + } + + free(dynamic); + return 0; +} +``` + +**进阶:验证 COW(写时复制)** + +```c +// 添加这段代码观察 COW 前后的页状态 +#include + +void print_cow_stats(const char* label) { + struct rusage usage; + getrusage(RUSAGE_SELF, &usage); + printf(" %s: 次要缺页=%ld, 主要缺页=%ld\n", + label, usage.ru_minflt, usage.ru_majflt); +} +``` + +--- + +## 演示环节三:内存共享机制(8分钟) + +### 核心程序(`demo3_sharing.c`) + +```c +#include +#include +#include +#include +#include +#include +#include + +#define SIZE (100 * 1024 * 1024) // 100MB + +int main() { + printf("【演示3】内存共享机制\n\n"); + + // 创建共享内存对象 + int fd = shm_open("/demo_shm", O_CREAT | O_RDWR, 0666); + ftruncate(fd, SIZE); + + printf("► 创建共享内存: /demo_shm (%.1f MB)\n", SIZE/(1024.0*1024)); + + // 映射到虚拟地址空间 + void *addr = mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + printf("► 映射到虚拟地址: %p\n", addr); + + // 填充数据 + strcpy((char*)addr, "Hello from shared memory!"); + + printf("\n► fork() 创建子进程...\n"); + printf(" 父子进程共享同一段物理内存!\n"); + + pid_t pid = fork(); + if (pid == 0) { + printf("\n┌─ 子进程 ─┐\n"); + printf(" 读取共享内存: %s\n", (char*)addr); + printf(" 修改共享内存..."); + strcpy((char*)addr, "Modified by child!"); + printf("完成\n"); + exit(0); + } else { + wait(NULL); + printf("\n└─ 父进程 ─┘\n"); + printf(" 读取共享内存: %s\n", (char*)addr); + printf(" → 子进程的修改立即可见!\n"); + } + + // 对比:普通内存 vs 共享内存 + printf("\n► 对比:普通堆内存 vs 共享内存\n"); + char *heap_mem = malloc(1024); + strcpy(heap_mem, "Heap data"); + + printf(" 堆内存地址: %p (仅本进程可见)\n", (void*)heap_mem); + printf(" 共享内存地址: %p (多进程共享)\n", addr); + + // 查看映射 + printf("\n► 查看 /proc/%d/maps 中的共享内存\n", getpid()); + char cmd[256]; + snprintf(cmd, "cat /proc/%d/maps | grep demo_shm", getpid()); + system(cmd); + + munmap(addr, SIZE); + shm_unlink("/demo_shm"); + free(heap_mem); + return 0; +} +``` + +**编译需要**: +```bash +gcc -o demo3_sharing demo3_sharing.c -lrt +``` + +--- + +## 演示环节四:内存保护(5分钟) + +### 核心程序(`demo4_protection.c`) + +```c +#include +#include +#include +#include +#include + +sigjmp_buf env; + +void segfault_handler(int sig) { + printf("✓ 捕获到段错误 (SIGSEGV) - 内存保护生效!\n"); + siglongjmp(env, 1); +} + +int main() { + printf("【演示4】内存保护机制\n\n"); + + signal(SIGSEGV, segfault_handler); + + // 分配内存,设置不同权限 + size_t size = 4096 * 3; + char *mem = mmap(NULL, size, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + + printf("► 分配 3 页内存,初始权限: PROT_NONE(完全不可访问)\n"); + printf(" 虚拟地址: %p\n", (void*)mem); + + if (sigsetjmp(env, 1) == 0) { + printf("\n► 尝试读取(应失败)..."); + fflush(stdout); + char x = mem[0]; // 触发 SIGSEGV + printf("错误:未触发保护!\n"); + } + + // 修改第一页为只读 + printf("\n► 修改第一页为 PROT_READ(只读)\n"); + mprotect(mem, 4096, PROT_READ); + + if (sigsetjmp(env, 1) == 0) { + printf(" 尝试读取: %d ✓\n", mem[0]); + printf(" 尝试写入..."); + fflush(stdout); + mem[0] = 'A'; // 应失败 + printf("错误:未触发保护!\n"); + } + + // 修改第二页为可读写 + printf("\n► 修改第二页为 PROT_READ | PROT_WRITE(读写)\n"); + mprotect(mem + 4096, 4096, PROT_READ | PROT_WRITE); + mem[4096] = 'X'; + printf(" 读写成功: %c ✓\n", mem[4096]); + + // 第三页保持 PROT_NONE + + printf("\n► 查看权限设置:\n"); + printf(" 页1 (%p): 只读\n", (void*)mem); + printf(" 页2 (%p): 读写\n", (void*)(mem + 4096)); + printf(" 页3 (%p): 不可访问\n", (void*)(mem + 8192)); + + printf("\n► 验证 /proc/%d/maps:\n", getpid()); + char cmd[256]; + snprintf(cmd, "cat /proc/%d/maps | grep %p", getpid(), (void*)mem); + system(cmd); + + munmap(mem, size); + return 0; +} +``` + +--- + +## 演示环节五:简化内存管理与屏蔽底层差异(4分钟) + +### 快速演示(`demo5_management.c`) + +```c +#include +#include +#include + +// 展示虚拟内存如何简化编程:连续大数组,无需关心物理碎片 +int main() { + printf("【演示5】简化内存管理 & 屏蔽底层差异\n\n"); + + printf("► 程序员视角:申请 1GB 连续数组\n"); + size_t size = 1024 * 1024 * 1024; + int *big_array = malloc(size); + + if (!big_array) { + printf(" 分配失败\n"); + return 1; + } + + printf(" ✓ 成功: big_array[0] @ %p\n", (void*)&big_array[0]); + printf(" ✓ 成功: big_array[262144] @ %p (中间)\n", + (void*)&big_array[262144]); + printf(" ✓ 成功: big_array[268435455] @ %p (末尾)\n", + (void*)&big_array[268435455]); + + printf("\n► 物理现实(由内核处理):\n"); + printf(" - 物理内存可能是碎片化的\n"); + printf(" - 通过页表映射为'连续'的虚拟地址\n"); + printf(" - 程序员无需关心物理地址、NUMA 节点、内存 bank\n"); + + printf("\n► 查看实际物理页分布:\n"); + system("cat /proc/self/pagemap 2>/dev/null | head -5 || echo '需要 root 权限读取 pagemap'"); + + printf("\n► 跨平台一致性:\n"); + printf(" 这段代码在以下环境表现一致:\n"); + printf(" - WSL2 (Hyper-V 虚拟化)\n"); + printf(" - 原生 Linux (x86_64)\n"); + printf(" - 云服务器 (KVM/Xen)\n"); + printf(" - 嵌入式 ARM\n"); + printf(" 虚拟存储器屏蔽了硬件差异!\n"); + + free(big_array); + return 0; +} +``` + +--- + +## 完整演示流程表 + +| 时间 | 环节 | 操作 | 可视化重点 | +|:---|:---|:---|:---| +| **0-5'** | 环境检查 | 运行 `check_env.sh` | 地址位数、物理内存、overcommit 策略 | +| **5-15'** | 突破物理限制 | 运行 `demo1` + `watch` 监控 | `VmSize` vs `RSS` 巨大差异,swap 增长 | +| **15-23'** | 进程隔离 | 运行 `demo2`,对比父子进程 | 相同虚拟地址,独立物理空间,COW 机制 | +| **23-31'** | 内存共享 | 运行 `demo3`,对比 `mmap` 共享 vs 堆内存 | 多进程看到相同数据,映射名称可见 | +| **31-36'** | 内存保护 | 运行 `demo4`,触发段错误 | `mprotect` 权限变化,`maps` 中 r/w/x 标志 | +| **36-40'** | 简化管理 | 运行 `demo5`,总结 | 连续虚拟地址 vs 物理碎片,跨平台一致性 | + +--- + +## 课堂互动设计 + +### 预测-验证环节 +在每个演示前,先让学生预测结果: + +> "我要分配 3 倍物理内存,malloc 会成功吗?" +> - 预测 A:失败,内存不够 +> - 预测 B:成功,但会立即占用大量物理内存 +> - 预测 C:成功,且几乎不占用物理内存 +> +> **验证**:运行代码,观察 `VmSize` 和 `RSS` + +### 实时对比(双终端投影) + +**左屏**:运行程序,显示输出 +**右屏**:持续运行监控命令 + +```bash +# 推荐监控组合 +watch -n 0.5 'clear; echo "=== 进程 ==="; cat /proc//status | grep -E "Vm|Rss|Swap"; echo ""; echo "=== 系统 ==="; free -h' +``` + +### 关键结论板书 + +```plaintext +┌─────────────────────────────────────────┐ +│ 虚拟存储器 = 物理内存的"魔术师" │ +├─────────────────────────────────────────┤ +│ 1. 空间魔法: 小物理 → 大虚拟地址空间 │ +│ 2. 隔离魔法: 多进程互不干扰 │ +│ 3. 共享魔法: 相同物理页多视角映射 │ +│ 4. 保护魔法: 硬件级权限控制 │ +│ 5. 简化魔法: 连续地址屏蔽物理复杂性 │ +└─────────────────────────────────────────┘ +``` + + +```bash +#!/bin/bash +# 进程内存隔离实时监控 - 纯外部版本 (Plan B) +# 通过 /proc 文件系统直接分析,无需修改目标程序 + +TARGET_PID="" +REFRESH_INTERVAL=0.5 + +# 清屏 +clear_screen() { + printf "\033[2J\033[H" +} + +# 绘制标题 +draw_header() { + local title=$1 + printf "════════════════════════════════════════════════════════════════\n" + printf " %s\n" "$title" + printf "════════════════════════════════════════════════════════════════\n\n" +} + +# 获取进程基本信息 +get_proc_basic() { + local pid=$1 + if [ ! -d "/proc/$pid" ]; then + echo "进程不存在" + return 1 + fi + + local name=$(cat /proc/$pid/comm 2>/dev/null) + local ppid=$(grep PPid /proc/$pid/status 2>/dev/null | awk '{print $2}') + local state=$(grep State /proc/$pid/status 2>/dev/null | awk '{print $2}') + printf "进程名: %-15s | PPID: %-6s | 状态: %s\n" "$name" "${ppid:-0}" "$state" +} + +# 获取内存统计 +get_mem_stats() { + local pid=$1 + if [ ! -f "/proc/$pid/status" ]; then + return 1 + fi + + local vmsize=$(grep VmSize /proc/$pid/status 2>/dev/null | awk '{print $2}') + local vmrss=$(grep VmRSS /proc/$pid/status 2>/dev/null | awk '{print $2}') + local vmdata=$(grep VmData /proc/$pid/status 2>/dev/null | awk '{print $2}') + local vmstk=$(grep VmStk /proc/$pid/status 2>/dev/null | awk '{print $2}') + + printf " 虚拟内存(VmSize): %8s KB (%6.2f MB)\n" "${vmsize:-0}" $(echo "scale=2; ${vmsize:-0}/1024" | bc 2>/dev/null || echo "0") + printf " 物理驻留(VmRSS): %8s KB (%6.2f MB)\n" "${vmrss:-0}" $(echo "scale=2; ${vmrss:-0}/1024" | bc 2>/dev/null || echo "0") + printf " 数据段(VmData): %8s KB\n" "${vmdata:-0}" + printf " 栈段(VmStk): %8s KB\n" "${vmstk:-0}" +} + +# 获取关键内存映射(堆、栈、全局数据) +get_key_mappings() { + local pid=$1 + if [ ! -f "/proc/$pid/maps" ]; then + return 1 + fi + + printf " %-20s %-18s %-10s %s\n" "区域" "虚拟地址范围" "权限" "大小" + printf " %-20s %-18s %-10s %s\n" "────────────────────" "──────────────────" "──────────" "────" + + # 堆 + local heap=$(grep "\\[heap\\]" /proc/$pid/maps 2>/dev/null | head -1) + if [ -n "$heap" ]; then + local range=$(echo "$heap" | awk '{print $1}') + local perm=$(echo "$heap" | awk '{print $2}') + local size_kb=$(echo "$heap" | awk '{print $3}') + printf " %-20s %-18s %-10s %s\n" "[堆] heap" "$range" "$perm" "${size_kb:-动态增长}" + fi + + # 栈 + local stack=$(grep "\\[stack\\]" /proc/$pid/maps 2>/dev/null | head -1) + if [ -n "$stack" ]; then + local range=$(echo "$stack" | awk '{print $1}') + local perm=$(echo "$stack" | awk '{print $2}') + printf " %-20s %-18s %-10s %s\n" "[栈] stack" "$range" "$perm" "动态扩展" + fi + + # 全局数据段(通过 maps 中的 data 段或程序段识别) + local data_seg=$(grep -E "\.data|rw-p.*[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ .*$" /proc/$pid/maps 2>/dev/null | grep -v heap | head -1) + if [ -n "$data_seg" ]; then + local range=$(echo "$data_seg" | awk '{print $1}') + local perm=$(echo "$data_seg" | awk '{print $2}') + printf " %-20s %-18s %-10s %s\n" "[数据段] data" "$range" "$perm" "全局变量" + fi +} + +# 获取 COW 相关信息(通过 smaps) +get_cow_info() { + local pid=$1 + if [ ! -f "/proc/$pid/smaps_rollup" ]; then + printf " (内核不支持 smaps_rollup,跳过 COW 分析)\n" + return 1 + fi + + local shared_clean=$(grep "Shared_Clean" /proc/$pid/smaps_rollup 2>/dev/null | awk '{print $2}') + local shared_dirty=$(grep "Shared_Dirty" /proc/$pid/smaps_rollup 2>/dev/null | awk '{print $2}') + local private_clean=$(grep "Private_Clean" /proc/$pid/smaps_rollup 2>/dev/null | awk '{print $2}') + local private_dirty=$(grep "Private_Dirty" /proc/$pid/smaps_rollup 2>/dev/null | awk '{print $2}') + + printf " 共享内存(Shared): %8s KB (Clean: %s, Dirty: %s)\n" \ + "$((${shared_clean:-0} + ${shared_dirty:-0}))" "${shared_clean:-0}" "${shared_dirty:-0}" + printf " 私有内存(Private): %8s KB (Clean: %s, Dirty: %s)\n" \ + "$((${private_clean:-0} + ${private_dirty:-0}))" "${private_clean:-0}" "${private_dirty:-0}" + + # COW 判断:Private_Dirty 增加表示发生了写时复制 + if [ "${private_dirty:-0}" -gt 0 ]; then + printf " → Private_Dirty: %s KB (可能发生 COW 或写入操作)\n" "$private_dirty" + fi +} + +# 单进程监控视图 +monitor_single() { + local pid=$1 + local label=$2 + + clear_screen + draw_header "进程内存监控 - $label (PID: $pid)" + + printf "【基本信息】\n" + get_proc_basic $pid + + printf "\n【内存统计】\n" + get_mem_stats $pid + + printf "\n【关键映射】\n" + get_key_mappings $pid + + printf "\n【COW / 共享状态】\n" + get_cow_info $pid + + printf "\n────────────────────────────────────────────────────────────────\n" + printf "提示: 按 Ctrl+C 退出 | 检测到 fork 将自动切换对比模式\n" +} + +# 双进程对比视图 +monitor_compare() { + local parent_pid=$1 + local child_pid=$2 + + clear_screen + draw_header "父子进程内存隔离对比" + + # 检查进程是否存在 + if [ ! -d "/proc/$parent_pid" ] || [ ! -d "/proc/$child_pid" ]; then + printf "错误: 父进程或子进程已退出\n" + return 1 + fi + + # 获取数据 + local parent_vmrss=$(grep VmRSS /proc/$parent_pid/status 2>/dev/null | awk '{print $2}') + local child_vmrss=$(grep VmRSS /proc/$child_pid/status 2>/dev/null | awk '{print $2}') + local parent_private=$(grep Private_Dirty /proc/$parent_pid/smaps_rollup 2>/dev/null | awk '{print $2}') + local child_private=$(grep Private_Dirty /proc/$child_pid/smaps_rollup 2>/dev/null | awk '{print $2}') + + # 计算指标 + local total_rss=$(( (${parent_vmrss:-0} + ${child_vmrss:-0}) )) + local rss_diff=$(( ${child_vmrss:-0} - ${parent_vmrss:-0} )) + + printf "┌────────────────────────────┬────────────────────────────┐\n" + printf "│ 父进程 (PID: %-11s)│ 子进程 (PID: %-11s)│\n" "$parent_pid" "$child_pid" + printf "├────────────────────────────┼────────────────────────────┤\n" + + # 基本信息 + local parent_name=$(cat /proc/$parent_pid/comm 2>/dev/null) + local child_name=$(cat /proc/$child_pid/comm 2>/dev/null) + printf "│ 名称: %-20s │ 名称: %-20s │\n" "$parent_name" "$child_name" + + printf "├────────────────────────────┼────────────────────────────┤\n" + + # 内存对比 + printf "│【虚拟内存(VmSize)】 │【虚拟内存(VmSize)】 │\n" + local parent_vm=$(grep VmSize /proc/$parent_pid/status 2>/dev/null | awk '{print $2}') + local child_vm=$(grep VmSize /proc/$child_pid/status 2>/dev/null | awk '{print $2}') + printf "│ %8s KB (%6.2f MB) │ %8s KB (%6.2f MB) │\n" \ + "${parent_vm:-0}" $(echo "scale=2; ${parent_vm:-0}/1024" | bc 2>/dev/null || echo "0") \ + "${child_vm:-0}" $(echo "scale=2; ${child_vm:-0}/1024" | bc 2>/dev/null || echo "0") + + printf "├────────────────────────────┼────────────────────────────┤\n" + printf "│【物理内存(VmRSS)】 │【物理内存(VmRSS)】 │\n" + printf "│ %8s KB (%6.2f MB) │ %8s KB (%6.2f MB) │\n" \ + "${parent_vmrss:-0}" $(echo "scale=2; ${parent_vmrss:-0}/1024" | bc 2>/dev/null || echo "0") \ + "${child_vmrss:-0}" $(echo "scale=2; ${child_vmrss:-0}/1024" | bc 2>/dev/null || echo "0") + + printf "├────────────────────────────┼────────────────────────────┤\n" + printf "│【私有脏页(Private_Dirty)】 │【私有脏页(Private_Dirty)】 │\n" + printf "│ %8s KB │ %8s KB │\n" "${parent_private:-0}" "${child_private:-0}" + + printf "├────────────────────────────┼────────────────────────────┤\n" + printf "│【虚拟地址空间】 │【虚拟地址空间】 │\n" + printf "│ 与 fork 前相同 │ 继承父进程(初始相同) │\n" + + printf "├────────────────────────────┼────────────────────────────┤\n" + printf "│【物理页状态】 │【物理页状态】 │\n" + if [ "${child_private:-0}" -gt "${parent_private:-0}" ] && [ "${child_private:-0}" -gt 4 ]; then + printf "│ 部分共享 (COW 可能已触发) │ 已独立 (COW 已触发) │\n" + else + printf "│ 共享 (只读,等待写入) │ 共享 (只读,等待写入) │\n" + fi + + printf "└────────────────────────────┴────────────────────────────┘\n" + + # COW 分析总结 + printf "\n【COW (写时复制) 分析】\n" + printf " 父子 RSS 总和: %d KB (%.2f MB)\n" "$total_rss" $(echo "scale=2; $total_rss/1024" | bc 2>/dev/null || echo "0") + printf " 子进程 RSS 增量: %d KB\n" "${rss_diff:-0}" + + if [ "${child_private:-0}" -gt 4 ]; then + printf " → 检测到子进程有 %s KB 私有脏页,COW 已触发!\n" "${child_private:-0}" + printf " → 子进程修改了共享页,内核已复制物理页框\n" + else + printf " → 子进程 Private_Dirty 较低,COW 尚未触发或修改较少\n" + fi + + printf "\n────────────────────────────────────────────────────────────────\n" + printf "提示: 按 Ctrl+C 退出 | 子进程退出将返回单进程视图\n" +} + +# 主监控循环 +main() { + if [ $# -lt 1 ]; then + echo "用法: $0 <目标进程PID>" + echo "" + echo "功能:" + echo " 1. 监控单进程内存状态(堆、栈、数据段)" + echo " 2. 自动检测 fork() 创建的子进程" + echo " 3. 对比父子进程的 COW (写时复制) 状态" + echo "" + echo "示例:" + echo " 终端1: ./demo2_isolation" + echo " 终端2: $0 \$(pgrep demo2_isolation | head -1)" + exit 1 + fi + + local parent_pid=$1 + local child_pid="" + + # 验证初始进程存在 + if [ ! -d "/proc/$parent_pid" ]; then + echo "错误: 进程 $parent_pid 不存在" + exit 1 + fi + + trap 'clear_screen; echo "监控已退出"; exit 0' INT + + while true; do + # 检测子进程(通过 PPID 匹配) + if [ -z "$child_pid" ] || [ ! -d "/proc/$child_pid" ]; then + # 查找目标进程的子进程 + child_pid=$(pgrep -P $parent_pid 2>/dev/null | head -1) + fi + + # 如果父进程退出,结束监控 + if [ ! -d "/proc/$parent_pid" ]; then + clear_screen + echo "目标进程已退出,监控结束" + exit 0 + fi + + # 选择视图 + if [ -n "$child_pid" ] && [ -d "/proc/$child_pid" ]; then + monitor_compare $parent_pid $child_pid + else + monitor_single $parent_pid "父进程" + fi + + sleep $REFRESH_INTERVAL + done +} +``` diff --git a/doc/虚拟存储器——黄俊.pptx b/doc/虚拟存储器——黄俊.pptx new file mode 100644 index 0000000000000000000000000000000000000000..8869dc8f7a30521d21e2e8f5d47cf05cc3a228f8 GIT binary patch literal 158214 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 literal 0 HcmV?d00001