课堂练习4.4:页式虚存

2023-12-14 00:52:01

4-7?课堂练习4.4:页式虚存

缺页异常在 Linux 内核处理中占有非常重要的位置,很多 Linux 特性,如写时复制,页框延迟分配,内存回收中的磁盘和内存交换,都需要借助缺页异常来进行。 本实训分析 Linux 0.11 的缺页处理机制。

bf52bde3c6254a1481868f1b1d2b5589.png

?

第1关版本 0 内核的第一次缺页页故障

任务描述

本关任务:分析版本 0 内核的第一次缺页页故障,回答下列问题: 1.该页故障由几号进程引发? 2.在该故障发生前,该进程执行的最后一个可执行文件是什么?该可执行文件的第 2 块(每块 1KB )的头 16 字节的内容是什么? 3.引发该页故障的线性地址是什么?该进程的代码段起始地址是多少? 4.该页故障处理前,该线性地址对应的页目录项的地址和值分别是什么? 5.该页故障处理时,申请到的空闲页帧的起始地址是什么?该页帧的头 16 字节的内容是什么? 6.该页故障处理过程中、读入硬盘数据后,上述页帧的头 16 字节的内容是什么? 7.该页故障处理过程中、修改对应的页表项后,上述线性地址对应的页表项的值是什么?

相关知识

为了完成本关任务,你需要掌握: 1.如何跟踪到缺页页故障的发生; 2.如何跟踪可执行文件的执行; 3.如何显示 bochs 虚拟机硬盘中某个可执行文件的内容; 4.在 gdb 中如何知道引发缺页页故障的线性地址是多少; 5.函数 do_no_page 的处理过程是怎样的; 6.在 gdb 中如何查看当前进程的(用户)代码段的起始地址; 7.如何分析线性地址空间到物理地址空间的映射关系; 8.如何计算一个线性地址对应的物理地址; 9.如何计算一个线性地址的高 10 位和中间 10 位的值; 10.页目录项和页表项的格式是什么; 11.如何查看某个页目录项的值; 12.在 gdb 调试时,如何知道某页帧的头 16 字节的内容。

实验准备

本关卡使用版本 0 内核进行分析,内核文件为 ~/os/linux-0.11-lab/0

编程要求

分析版本 0 内核的第一次缺页页故障,回答下列问题:将第一关答案填写在/data/workspace/myshixun/第一关.txt 1.该页故障由几号进程引发? 2.在该故障发生前,该进程执行的最后一个可执行文件是什么?该可执行文件的第 2 块(每块 1KB )的头 16 字节的内容是什么? 3.引发该页故障的线性地址是什么?该进程的代码段起始地址是多少? 4.该页故障处理前,该线性地址对应的页目录项的地址和值分别是什么? 5.该页故障处理时,申请到的空闲页帧的起始地址是什么?该页帧的头 16 字节的内容是什么? 6.该页故障处理过程中、读入硬盘数据后,上述页帧的头 16 字节的内容是什么? 7.该页故障处理过程中、修改对应的页表项后,上述线性地址对应的页表项的值是什么?

实验过程及答案

实验过程

默认为0内核所以本次不需额外配置

cd os/linux-0.11-lab
./rungdb

7d11d3027c154dcd98e98cbf444fee29.png23f0bde27ee344dd940cda4d4cb7acf8.png

另开一个终端

cd os/linux-0.11-lab
./mygdb

164f5c0adaf1445daea419b6f8c24e68.png

595a8dfc2b004bf288dfaefc2e4d503e.png2c41108ff95646239a20b0fbe0d9cbec.png

3478ab99bd0c42e7bbbca194b39d21a1.png14f5ccebe82f48ee85dc8fc9709f221b.png

[/usr/root]hexdump /bin/sh | less

b0a766ccd6e24bb69f8a62c4c8e9af5a.png

输入q退出

90982977e9cc4b85abb72a6c05cd0151.png

再次进入gdb调试

?92c5f38d933d47c187d525d65dcabbb6.pngf7a9d05576144da5bc0a7a06049d76d2.png67241350dbc44fdfbeda51951f7c6e67.png32f4a43365404ba09f4958614e0eb80a.png04c9f4d9edfc4ee89da6653b727cd5e6.png0ed828d08c484ce9976018bbee7bfa90.pngf57ec48df2ad4631b5fb0c3078ec5385.pnge939691b8d614f37a8b309c8a9234a7b.png1843d36b02c74355a9db7da33c25797d.png

答案

c71f6a8570d04ee8998c98d5fcc10a2d.png

?

?

第2关第一次使用零页的缺页页故障

任务描述

本关任务回答问题:在版本 0 内核中处理第一次使用零页的缺页页故障时: 1.该页故障由几号进程引发? 2.在该故障发生前,该进程执行的最后一个可执行文件是什么?该可执行文件的未初始化数据段( BSS )的起始虚拟地址( VMA )是什么? 3.引发该页故障的线性地址是什么? 4.该页故障处理前,该线性地址对应的页表项的地址和值分别是什么? 5.该页故障处理后,上述线性地址对应的页表项的值是什么?该线性地址被映射到的零页(新页帧)的起始地址是什么? 6.该新页帧的头 16 个字节是什么?

相关知识

为了完成本关任务,你需要掌握: 1.如何跟踪到缺页页故障的发生; 2.如何跟踪可执行文件的执行; 3.如何分析一个可执行文件的结构和指令; 4.如何将文件放入 bochs 虚拟机; 5.在 bochs 虚拟机中如何编辑文件; 6.如何将一个文件从 bochs 虚拟机拷入 Ubuntu 容器; 7.在 gdb 中如何知道引发缺页页故障的线性地址是多少; 8.函数 do_no_page 的处理过程是怎样的; 9.在 gdb 中如何查看当前进程的(用户)代码段的起始地址; 10.如何分析线性地址空间到物理地址空间的映射关系; 11.如何计算一个线性地址对应的物理地址; 12.如何计算一个线性地址的高 10 位和中间 10 位的值; 13.页目录项和页表项的格式是什么; 14.如何查看某个页目录项的值; 15.在 gdb 调试时,如何知道某页帧的头 16 字节的内容。

实验准备

本关卡使用版本 0 内核进行分析。

编程要求

本关任务回答问题:在版本 0 内核中处理第一次使用零页的缺页页故障时: 1.该页故障由几号进程引发? 2.在该故障发生前,该进程执行的最后一个可执行文件是什么?该可执行文件的未初始化数据段( BSS )的起始虚拟地址( VMA )是什么? 3.引发该页故障的线性地址是什么? 4.该页故障处理前,该线性地址对应的页表项的地址和值分别是什么? 5.该页故障处理后,上述线性地址对应的页表项的值是什么?该线性地址被映射到的零页(新页帧)的起始地址是什么? 6.该新页帧的头 16 个字节是什么?

实验过程及答案

实验过程

默认为0内核所以本次不需额外配置

cd os/linux-0.11-lab
./rungdb

7d11d3027c154dcd98e98cbf444fee29.png23f0bde27ee344dd940cda4d4cb7acf8.png

另开一个终端

cd os/linux-0.11-lab
./mygdb

164f5c0adaf1445daea419b6f8c24e68.png

?

00292f2ef59b4028b8f1dd17e19d5f0e.png34314bb29f554882af5bb0eae741ce57.png

?

进入虚拟机

d22e948b869545a78b756ca097530265.png6aa01fc1dc334388af8bacd3d42bb188.pngf8adb96a5c964969b42ddfc27c7ad288.pngaa46b33c84d24f97aa5f2306839044eb.png

点yes

7d61c4d4cde44009bd0c003705bcbd52.pnga25f5412970246beba2562a04d3a3ebd.png

eba56e8e6fd74751bcdd5b1dc1cfda34.png

然后一直c,直到第一次跳到376行

2335ecb7dbbe45e08ba97dfab4c44aec.pngb7fdcc73eedf4ecda032dcba20e26c9b.pngc4d9bc00e1f24b619de61a4599c0e02c.png96e90639ab8a470bae58974a6479cf0f.png8f5a4daa2c3b4006b27ad53275d9d396.pngf5b820b6dafe41d2be7af0a0eff6ab47.png

答案

3016fe6f64024d96910d8fdbd0ed53ca.png

4-8?课堂练习4.4:页式虚存

缺页异常在 Linux 内核处理中占有非常重要的位置,很多 Linux 特性,如写时复制,页框延迟分配,内存回收中的磁盘和内存交换,都需要借助缺页异常来进行。 本实训分析 Linux 0.11 的缺页处理机制。

?

第1关可执行文件的执行

任务描述

本关任务:在 bochs 虚拟机中编译程序 01.c ,可以得到一个可执行文件。请分析该程序的运行,回答下列问题: 1.执行该文件的 execve 系统调用刚开始执行时,当前进程的用户虚空间是什么?该空间的第一个页表项和最后一个页表项分别是什么? 2.执行该文件的 execve 系统调用执行结束时,该进程的用户虚空间是什么?该空间占据几个页目录项?第一个页目录项的地址和值分别是什么? 3.该可执行文件的代码段和数据段的长度之和是多少?

相关知识

为了完成本关任务,你需要掌握: 1.如何跟踪可执行文件的执行; 2.如何确定一个进程的用户虚空间范围; 3.如何分析一个可执行文件的结构和指令; 4.如何将文件放入 bochs 虚拟机; 5.在 bochs 虚拟机中如何编辑文件; 6.如何将一个文件从 bochs 虚拟机拷入 Ubuntu 容器; 7.如何显示 bochs 虚拟机硬盘中某个可执行文件的内容; 8.如何计算一个线性地址对应的物理地址; 9.如何计算一个线性地址的高 10 位和中间 10 位的值; 10.页目录项和页表项的格式是什么; 11.如何查看某个页目录项的值。

实验准备

本关卡使用版本 0 内核进行分析,01.c 文件存放在/data/workspace/myshixun/exp1下。

编程要求

本关任务:在 bochs 虚拟机中编译程序 01.c ,可以得到一个可执行文件。请分析该程序的运行,回答下列问题: 1.执行该文件的 execve 系统调用刚开始执行时,当前进程的用户虚空间是什么?该空间的第一个页表项和最后一个页表项分别是什么? 2.执行该文件的 execve 系统调用执行结束时,该进程的用户虚空间是什么?该空间占据几个页目录项?第一个页目录项的地址和值分别是什么? 3.该可执行文件的代码段和数据段的长度之和是多少?

实验过程及答案

实验过程

直接简单粗暴手动把/data/workspace/myshixun/exp1的01.复制到os/linux-0.11-lab/bf32d9529b27e49909b6597a4b6f3c3b5.png

?

cd os/linux-0.11-lab
./run
65139ef469d749888ded3103fae0b58c.png

?

?

6f71b790208d46278db3b333aad71a00.png5961cc67c90f4dffbc8368abd1d4ed55.png

d59c74552eef471793b83d0423178d7f.png

点yes

打开gdb

9b1351c5936f4f1d819d681135e7a4de.png然后一直c96beba7ea046423cbb03c7f29a1d8ee3.png

转到虚拟机

0a100a525897414c8b9d1f5e34e29395.png

回到gdb

14c3cde728064eb5955ce35d83f3eabd.pngd6588c19d64a4a908f855d0eb88473e6.png5dcaae2925284a44b63f2fe48d66d002.png5fb7185cf5e54f1591f42eb90eef6cd1.png661b4b4730274ba9a3d1fe799eab4c31.pnga89eed204f954ae0bce1a327e6093103.pngb8b737ef95414f9eac9b6a0b5ee62b05.png2192ffeff36c499781a4b5c175442b35.png27295657ca6443b9a3d535e3bb143eb0.pngb0e4ac6d19a047acbc4caa899f4b8567.png2b9706580ed24272b3f27ca381708a68.png

答案

fe16c3d5f99c4fa9a1222f88e9507cfb.png

第2关可执行文件的加载

?

文章来源:https://blog.csdn.net/han_lx_/article/details/134908078
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。