【MIT 6.S081】2020, 实验记录(3),Lab: page tables

目录

    • Task
      • Task 1: Print a page table

Task

Task 1: Print a page table

该实验需要增加一个 vmprint 函数,用于打印一个 page table,实现过程可以参考 vm.c 文件中的 freewalk() 函数。

在 defs.h 中增加 vmprint 的定义:

void            vmprint(pagetable_t);

在 vm.c 中代码如下:

// 打印一行 PTE
void print_pte(int index, pte_t pte, uint64 pa, int level) {for (int j = level; j > 0; j--) {if (j != 1) {printf(".. ");} else {printf("..");}}printf("%d: pte %p pa %p\n", index, pte, pa);
}// 递归地打印 page table
void display_pt(pagetable_t pagetable, int level) {static const int PTE_NUMBERS = 512;  // 每个 page 的 PTE 数量for (int i = 0; i < PTE_NUMBERS; i++) {pte_t pte = pagetable[i];if ((pte & PTE_V) && (pte & (PTE_R|PTE_W|PTE_X)) == 0) {uint64 child = PTE2PA(pte);print_pte(i, pte, child, level);display_pt((pagetable_t) child, level + 1);} else if (pte & PTE_V) {print_pte(i, pte, PTE2PA(pte), level);}}
}/*** display the page table*/
void
vmprint(pagetable_t pagetable)
{printf("page table %p\n", pagetable);display_pt(pagetable, 1);
}

在 exec.c 的 exec() 函数中,return argc 之前增加对 vmprint 的调用:

int
exec(char *path, char **argv)
{...if (p->pid == 1) {vmprint(p->pagetable);}return argc;...
}

实现结果:输入 make qemu

task-1 测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/345914.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5.3 Verilog 带参数例化

5.3 Verilog 带参数例化 分类 Verilog 教程 关键词&#xff1a; defparam&#xff0c;参数&#xff0c;例化&#xff0c;ram 当一个模块被另一个模块引用例化时&#xff0c;高层模块可以对低层模块的参数值进行改写。这样就允许在编译时将不同的参数传递给多个相同名字的模块…

考研经验总结——目录

文章目录 一、写作顺序二、个人情况说明三、读评论四、一些小牢骚五、一些注意事项&#xff08;持续更新&#xff09; 一、写作顺序 我将准备从三个阶段开始介绍吧 考研前考研中考研后&#xff08;也就是现在我的这种情况&#xff09; 考研前我会分为&#xff1a;数学、专业…

MOE介绍 混合专家模型

GShard arxiv链接 GShard 模型架构图&#xff1a; 参考GShard论文笔记&#xff08;1&#xff09;-MoE结构可知&#xff0c;MOE具备以下几种特点&#xff1a; 改造了原本的FFN层&#xff0c;变成Gaten个FFN层。n个FFN层的训练数据集不同。推理时会计算token与每个FFN的匹配…

如何为数据保护加上“安全锁”?

伴随着数字经济的日趋活跃&#xff0c;数据安全和隐私保护成为了各国政府和企业都十分重视的问题&#xff0c;纷纷加强了数据安全防护。但实际上&#xff0c;近几年数据泄露问题接连不断&#xff0c;虽然没有造成严重的后果&#xff0c;但也足以证明目前数据安全防护的紧迫性。…

Pytest测试 —— 如何使用属性来标记测试函数!

在软件开发领域&#xff0c;单元测试是确保代码质量和可维护性的关键一环。随着项目的不断发展&#xff0c;测试用例的管理变得愈发复杂&#xff0c;而一些测试可能需要特殊的处理、环境或者标记。在Python中&#xff0c;我们可以通过使用属性&#xff08;Attribute&#xff09…

半导体抛光用PFA容量瓶耐强酸碱定容瓶

PFA容量瓶又称可溶性聚四氟乙烯容量瓶、特氟龙容量瓶容量瓶&#xff0c;我司新推出螺纹和插口两种可供选择&#xff0c;目前有10ml、25ml、50ml、100ml、250ml、500ml、1000ml的规格可提供&#xff0c;产品质量有保障。 Teflon系列PFA容量瓶是一个透明的长颈瓶&#xff0c;瓶体…

scroll-view在小程序页面里实现滚动

要实现红框中的区域进行滚动,scroll-view必须写高 <template><!-- 合同-待确认 --><view class"viewport"><!-- 上 --><view class"top-box"><!-- tab --><view class"tabs"><textv-for"(ite…

基于Springboot的私人健身与教练预约管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的私人健身与教练预约管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三…

【每日小bug】mybatis plus id注解错误导致的问题

插入数据 id不为自增 指定了主键&#xff0c;没有指定自增。会导致出现 修改如上 报错 Data truncation: Out of range value for column ‘id’ at row 1 数据库是bigint&#xff0c;java中是Integer。 修改如上

JAVA开发的源码-供应商采购招标管理系统源码

SRM系统的主要功能包括&#xff1a; 私信获取源码 缩短采购周期时间&#xff1a;SRM数字化供应商管理系统提升企业之间的协作能力&#xff0c;将多个流程整合在一起&#xff0c;实现采购全流程线上化&#xff0c;在线审批流程的完整性&#xff0c;数字化供应商系统能够有效节约…

PPT文档怎么转换PDF?一个方法教你快速实现

在我们的办公、学习中难免会遇到需要将ppt转pdf文件的需求。现在的网络中有各种各样的PDF转换工具&#xff0c;有些操作很复杂&#xff0c;有些需要下载软件非常麻烦。接下来&#xff0c;给大家分享一款草最简单还不用下载软件的PPT转PDF&#xff08;https://www.yasuotu.com/p…

层次选择器

层次选择器 1.后代选择器二、子代选择器三、兄弟选择器四、相邻选择器 后代选择器&#xff0c;选择M元素内部后代的N元素&#xff08;所有N元素&#xff09; 选择器说明M N后代选择器&#xff0c;选择M元素内部后代的N元素&#xff08;所有N元素M>N子代选择器&#xff0c;选…