4-3 课堂练习4.2:页式内存管理
创建一个进程(创建进程是在磁盘中),进程以字节为单位编号,然后再进程分为许多页(每页 4KB ),内存中有对应的页框(设定同页)。通过页表(记录页和页框的对应关系),将最需要的页调入内存,其他页留在磁盘中。根据 CPU 的需要动态的更新页表,并调入调出页,实现对内存的充分利用。 本实训分析 Linux 0.11 的页式内存管理技术。
第1关1 号进程的 mynext 变量的物理地址
任务描述
本关任务通过调试版本 1.3 内核回答问题:
- 1 号进程第 1 次调用函数 output_char 时,它的 mynext 变量的物理地址是多少?
- 1 号进程第 2 次调用函数 output_char 时,它的 mynext 变量的物理地址是多少?
相关知识
为了完成本关任务,你需要掌握: 1.如何查看 1 号进程的函数调用 output_char() 所对应的汇编指令; 2.如何计算 1 号进程的 mynext 变量的逻辑地址(段地址:段内偏移); 3.在 bochsdbg 中,如何查看一个逻辑地址处的值; 4.如何计算一个线性地址对应的物理地址; 5.如何查看 CR3 寄存器的值; 6.页目录项和页表项的格式是什么; 7.如何查看某个页目录项的值; 8.在 bochsdbg 中,如何直接查看某物理地址处的值; 9.如何计算一个线性地址的高 10 位和中间 10 位的值。
环境准备
本关卡使用版本 1.3 内核进行分析,内核文件存放在/data/workspace/myshixun/exp1
中。
编程要求
通过 gdb 和 dbg 调试查找答案,将第一关的答案填写在/data/workspace/myshixun/第一关.txt
中。
- 1 号进程第 1 次调用函数 output_char 时,它的 mynext 变量的物理地址是多少?
- 1 号进程第 2 次调用函数 output_char 时,它的 mynext 变量的物理地址是多少?
实验过程及答案
实验过程
ls /data/workspace/myshixun/exp1 cp /data/workspace/myshixun/exp1/1.3.tgz ~/os
cd os/linux-0.11-lab tar -zxvf ../1.3.tgz 1.3
rm -rf cur ln -s 1.3 cur ls
cd 1.3/linux make
cd ../.. ./rungdb
另开一个终端
cd os/linux-0.11-lab ./mygdb
1
./rundbg