课堂练习4.2:页式内存管理

e0bc5c8456264166ba6b469771408567.png

4-3 课堂练习4.2:页式内存管理

创建一个进程(创建进程是在磁盘中),进程以字节为单位编号,然后再进程分为许多页(每页 4KB ),内存中有对应的页框(设定同页)。通过页表(记录页和页框的对应关系),将最需要的页调入内存,其他页留在磁盘中。根据 CPU 的需要动态的更新页表,并调入调出页,实现对内存的充分利用。 本实训分析 Linux 0.11 的页式内存管理技术。

175bf762cc404a55bd5fc6c65fd6953f.png

 

第1关1 号进程的 mynext 变量的物理地址

任务描述

本关任务通过调试版本 1.3 内核回答问题:

  1. 1 号进程第 1 次调用函数 output_char 时,它的 mynext 变量的物理地址是多少?
  2. 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 号进程第 1 次调用函数 output_char 时,它的 mynext 变量的物理地址是多少?
  2. 1 号进程第 2 次调用函数 output_char 时,它的 mynext 变量的物理地址是多少?

实验过程及答案

实验过程

ls /data/workspace/myshixun/exp1
cp /data/workspace/myshixun/exp1/1.3.tgz ~/os

2747009b88eb4f4796330c7db24c33b5.png

cd os/linux-0.11-lab
tar -zxvf ../1.3.tgz 1.3

5f0412a122c8491aba75762d9745f537.png

rm -rf cur
ln -s 1.3 cur
ls

56e29921a8614196b7760a913b7a3113.png

cd 1.3/linux
make

8ca61fc91296413aa4fe3c7ed4fdf283.png

cd ../..
./rungdb

23f0bde27ee344dd940cda4d4cb7acf8.png

另开一个终端

cd os/linux-0.11-lab
./mygdb

164f5c0adaf1445daea419b6f8c24e68.png

1

cd2c881ed03d4786977c32a7589f9179.pngd5f43c55a1c64ccfba7de517e69e47a4.png69d2414058904d3e9539e38ea9994953.png96255f200f6641d59c4278958fd956f0.png

 

./rundbg

2110721f1a4e415fac9e05b4ec1b9537.png18cc532ed8b548bbbdd6f0432515ba08.pngc9e6e059232743dfa11e88a4eb22f803.png43e04cc22dd140aa82de31c126c3bc23.png13403626527f410188fc4dd034b7022a.pnga9cfb998124d4f0997bc588425574933.png

答案

5a00a7fef114495e9e8745abfdd9b1ea.png

 

第2关0 号进程的 mynext 变量的物理地址

任务描述

本关任务通过调试版本 1.3 内核回答问题:

  1. 0 号进程第 1 次调用函数 output_char 时,它的 mynext 变量的物理地址是多少?
  2. 0 号进程第 2 次调用函数 output_char 时,它的 mynext 变量的物理地址是多少?

相关知识

为了完成本关任务,你需要掌握: 1.如何查看 1 号进程的函数调用 output_char() 所对应的汇编指令; 2.如何计算 1 号进程的 mynext 变量的逻辑地址(段地址:段内偏移); 3.在 bochsdbg 中,如何查看一个逻辑地址处的值; 4.如何计算一个线性地址对应的物理地址; 5.如何查看 CR3 寄存器的值; 6.页目录项和页表项的格式是什么; 7.如何查看某个页目录项的值; 8.在 bochsdbg 中,如何直接查看某物理地址处的值。

环境准备

本关卡使用版本 1.3 内核进行分析,内核文件存放在/data/workspace/myshixun/exp1中。

实验过程及答案

非必要不重新配置环境

实验过程

ls /data/workspace/myshixun/exp1
cp /data/workspace/myshixun/exp1/1.3.tgz ~/os

2747009b88eb4f4796330c7db24c33b5.png

cd os/linux-0.11-lab
tar -zxvf ../1.3.tgz 1.3

5f0412a122c8491aba75762d9745f537.png

rm -rf cur
ln -s 1.3 cur
ls

56e29921a8614196b7760a913b7a3113.png

cd 1.3/linux
make

8ca61fc91296413aa4fe3c7ed4fdf283.png

cd ../..
./rungdb

23f0bde27ee344dd940cda4d4cb7acf8.png

另开一个终端

cd os/linux-0.11-lab
./mygdb

164f5c0adaf1445daea419b6f8c24e68.png

 0

dc4b58543939492caa37e029c97c07fa.png3458d08f4009454992861e07602df06a.pngc6b1bb0f662c402ba49de77bdff13f1c.pngfdf41964a3a74ec9b6c0726b54efc218.png

2f43089cc99f47fd967732691b3a4bd2.pngdd0f6623b4a748cca30a00f744903ec8.png9d8cb4f29ca34fe099b163a744bfafcc.pngbe0d14750e934a1f9146e5c661dc1114.png74b95b353cce400eb99b1413a58e1098.pngf036d3003be344b798aad456088cad32.png1a438bc4c6fa4c58b165abd78ca36379.png7ef84c79dde0461e9c17b33cc0e97a6a.png

答案

7653d0fe3b5f404e9ac8adba2b995e6a.png

4-4 课堂练习4.2:页式内存管理

创建一个进程(创建进程是在磁盘中),进程以字节为单位编号,然后再进程分为许多页(每页 4KB ),内存中有对应的页框(设定同页)。通过页表(记录页和页框的对应关系),将最需要的页调入内存,其他页留在磁盘中。根据 CPU 的需要动态的更新页表,并调入调出页,实现对内存的充分利用。 本实训分析 Linux 0.11 的页式内存管理技术。

937a634f83d24aa5bb984a188d3b62e9.png

 

第1关页目录和页表的变化

任务描述

本关任务通过调试版本 1.3 内核回答问题: 1.在 1 号进程第 1 次开始执行 output_char 函数调用时,线性地址空间到物理地址空间的映射关系是怎样的? 2.在 1 号进程第 2 次开始执行 output_char 函数调用时,线性地址空间到物理地址空间的映射关系是怎样的? 3.在 1 号进程的第 1、2 次 output_char 函数调用之间,页目录和页表发生了怎样的变化?

相关知识

为了完成本关任务,你需要掌握: 1.如何分析线性地址空间到物理地址空间的映射关系; 2.如何查看 1 号进程的函数调用 output_char() 所对应的汇编指令; 3.如何计算 1 号进程的 mynext 变量的逻辑地址(段地址:段内偏移); 4.在 bochsdbg 中,如何查看一个逻辑地址处的值; 5.如何计算一个线性地址对应的物理地址; 6.如何查看 CR3 寄存器的值; 7.页目录项和页表项的格式是什么; 8.如何查看某个页目录项的值; 9.在 bochsdbg 中,如何直接查看某物理地址处的值。

环境准备

本关卡使用版本 1.3 内核进行调试,内核文件存放在/data/workspace/myshixun/exp1中。

编程要求

通过 gdb 和 dbg 调试查找答案,将第三关的答案填写在/data/workspace/myshixun/第三关.txt中。

1.在 1 号进程第 1 次开始执行 output_char 函数调用时,线性地址空间到物理地址空间的映射关系是怎样的? 2.在 1 号进程第 2 次开始执行 output_char 函数调用时,线性地址空间到物理地址空间的映射关系是怎样的? 3.在 1 号进程的第 1、2 次 output_char 函数调用之间,页目录和页表发生了怎样的变化?

实验过程及答案

实验过程

ls /data/workspace/myshixun/exp1
cp /data/workspace/myshixun/exp1/1.3.tgz ~/os

2747009b88eb4f4796330c7db24c33b5.png

cd os/linux-0.11-lab
tar -zxvf ../1.3.tgz 1.3

5f0412a122c8491aba75762d9745f537.png

rm -rf cur
ln -s 1.3 cur
ls

56e29921a8614196b7760a913b7a3113.png

cd 1.3/linux
make

8ca61fc91296413aa4fe3c7ed4fdf283.png

cd ../..
./rundbg
eb695b4e37c143449184a91bc5b644b2.png 1d2588abeda841119ca8490a337db0a7.png

 

44cc0466d9ba4d7db293d792bbaed5d9.png86dacbb04fbd4b9f904902b2e0c6c370.pngbb02dd4683194326a8d5256a1de4d74b.png5a3639b45581441d96ffbb038f70ea6b.png6683b18ab9724c4491dad9d3497a5782.pnga7df748b30c848259882ffe92897ab1e.png3f08167b9cea4f86a6e5c89f46991ff0.pnge32420b8a4a54ba7a53c1919b7e26921.pngb5bf33f63edc4248b08eb11fd3dcfa9d.pnge4aeb5d8964c46f3bd7784e770020c5b.pngf2b8e0675cd340aea7eb3ce2612905a7.png0dc044a3a6ba4403850488cde63b61df.png9bf0119fe92f4b01934eb207daf67523.png7d5c618eb1c14adab8a32147ec993589.png5c26342f685d49c9aa578cece3a371b0.pngfeb0befa91e24bfa867fc9f800e14c5f.pngd9254b51b0f2445d85f75db10b284ae4.png6fa98649e46e4d7e813f4735fa791162.png79fd3bc8b90a4bb9bcc74596150ee184.png78c5b620ce8c452b8d8ca51b5cac4535.png

答案

6b531bc63a594f93b4bd1177b4450c09.png

 

第2关用户栈和核心栈的物理位置

任务描述

本关任务回答问题: 使用版本 1 内核时,在第 2 次进程调度后:

  1. 0 号进程和 1 号进程的进程控制块的地址分别是多少?
  2. 执行到函数 task0 时,0 号进程的用户栈栈顶位于物理内存何处?
  3. 0 号进程执行到函数 sys_pause 时,核心栈栈顶位于物理内存何处?
  4. 执行到函数 task1 时,1 号进程的用户栈栈顶位于物理内存何处?
  5. 1 号进程执行到函数 sys_pause 时,核心栈栈顶位于物理内存何处?

相关知识

为了完成本关任务,你需要掌握: 1.在 bochsdbg 中,如何跟踪到第 2 次进程调度; 2.如何得到一个函数的地址; 3.如何知道当前栈顶的物理位置; 4.什么时候使用核心栈?什么时候使用用户栈? 5.进程的核心栈与进程控制块之间的位置关系是什么; 6.在 bochsdbg 调试模式下,如何判断当前进程是几号进程; 7.如何计算一个线性地址对应的物理地址; 8.如何查看 CR3 寄存器的值; 9.如何计算一个线性地址的高 10 位和中间 10 位的值; 10.页目录项和页表项的格式是什么; 11.如何查看某个页目录项的值; 12.在 bochsdbg 中,如何直接查看某物理地址处的值。

实验准备

本关卡使用版本 1 内核进行调试分析,内核文件存放在/data/workspace/myshixun/exp4中。

编程要求

通过 gdb 和 dbg 调试查找答案,将第四关的答案填写在/data/workspace/myshixun/第四关.txt中。 使用版本 1 内核时,在第 2 次进程调度后:

  1. 0 号进程和 1 号进程的进程控制块的地址分别是多少?
  2. 执行到函数 task0 时,0 号进程的用户栈栈顶位于物理内存何处?
  3. 0 号进程执行到函数 sys_pause 时,核心栈栈顶位于物理内存何处?
  4. 执行到函数 task1 时,1 号进程的用户栈栈顶位于物理内存何处?
  5. 1 号进程执行到函数 sys_pause 时,核心栈栈顶位于物理内存何处?

实验过程及答案

实验过程

ls /data/workspace/myshixun/exp4
cp /data/workspace/myshixun/exp4/1.tgz ~/os

5e4109b52b96489f8cfa853ff715a0e7.png

cd os/linux-0.11-lab
tar -zxvf ../1.tgz 1

da9ddae162f54e318d0d331b8417d099.png

rm -rf cur
ln -s 1 cur
ls

6539dd0a977c408389b66c978c68e6a5.png

5576b132b9e346ee943f41e3c63734c6.png6dace1f9d2c941ed8483c781f529b913.pngb4b5f1e2ad76445abe7b7f84a7dc47c8.png

另开一个终端

0fd3008804ca4cffbddee234cd02d602.png7bc6ddc4b53a4832a17ad16ba2e7311d.png

e5824b4f84c448359b9bf0296118c992.png4fd482585612477bb7f2c26b5cf6a9d1.png

f75f5da68c5e4b098bc7a27c88a8339b.png3d1a41e070ab4402bccaf067b54dc2ee.pngf22dd77bfdfe4449bbc209bcc428cbb4.png

6c5081b018a64a4497c03f35e7d146a2.png66b44a807a894047b15efaccf4593540.pnga9e12af430534616bf7873be6ccf0a7a.pngb70e4601f6094ad28104806894f21859.png7451993585524caa8d8158fa6664202e.png

08178fdc8f1c4e1d9a4868b7a50d03d4.png07ac025614924316a74f9c60b0a89e5a.png6316b4bfb5e04f73afd24456916d4a0c.pngc629a759beac4acfb950a2a4b4425287.png

d5662eea823a4e49b73e685e523a74e4.png003482af5928466e8023e62836f2c402.pnge7bb786aa6d5484bba7211f5fe1a48b0.pngb383ea3499a841538b50be646b910f78.pnga2fa93318ebb4485b38984b5b849e0d5.png

3672a51bd0584c1d9ad8975117ebb136.pngdb6d74fa53874db7ac5e2d872c4e7453.png20c91180f5c94ae996994f64fec982d7.pngc1cce55e56f04e82906496b73d8b2691.png5f222e546a6e4496ad71909aa3cc0f4c.png

答案

b5654c8ad0204257b95067e78cad8575.png

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ItsNorth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值