实验七 地址映射与共享
实验目的
- 深入理解操作系统的段、页式内存管理,深入理解段表、页表、逻辑地址、线性地址、物理地址等概念;
- 实践段、页式内存管理的地址映射过程;
- 编程实现段、页式内存管理上的内存共享,从而深入理解操作系统的内存管理。
实验内容
- 用 Bochs 调试工具跟踪 Linux 0.11 的地址翻译(地址映射)过程,了解 IA-32 和 Linux 0.11 的内存管理机制;
- 在 Ubuntu 上编写多进程的生产者—消费者程序,用共享内存做缓冲区;
- 在信号量实验的基础上,为 Linux 0.11 增加共享内存功能,并将生产者—消费者程序移植到 Linux 0.11。
1 跟踪地址翻译过程
首先以汇编级调试的方式启动 Bochs,引导 Linux 0.11,在 0.11 下编译和运行 test.c。它是一个无限循环的程序,永远不会主动退出。然后在调试器中通过查看各项系统参数,从逻辑地址、LDT 表、GDT 表、线性地址到页表,计算出变量 i 的物理地址。最后通过直接修改物理内存的方式让 test.c 退出运行。
test.c 的代码如下:
本文详细介绍了如何在Linux环境下跟踪地址翻译过程,包括逻辑地址、线性地址、物理地址的转换,并通过Bochs调试工具分析了段表、页表等。此外,还展示了基于共享内存实现生产者-消费者程序的方法,包括Ubuntu上的实现和在Linux 0.11上添加共享内存功能。最后,文章提供了详细的实验步骤和代码示例,帮助读者深入理解操作系统内存管理。
订阅专栏 解锁全文
5万+





