Mit6.S081-实验3-Page tables

Mit6.S081-实验3-Page tablesMit6 S081 实验 2 Systemcalls 一 Printapageta 实验准备 2 实验要求 3 systemcall 调用链路 4 tracesystemc 具体实现 4 执行效果 5 测试效果一 Printapageta 实验准备 1 阅读 xv6book 章节 32 内存布局代码 kern memlayout h3 虚拟内存代码 kernel vm c4 分配 释放物理内存代码 kernel kalloc c2 实验要求 3 systemcall 调用链路

一、Print a page table

1,实验准备

2,实验要求

为了帮助学习RISC-V page tables,也可能是帮助未来的调试,第一个任务是写一个函数来打印页表内容。 定义一个函数vmprint()。它应该接收一个pagetable_t参数,并且用下面格式打印页表。 在exec.c中return argc之前,插入if(p->pid==1) vmprint(p-pagetable),来打印第一个进程的页表。 当启动xv6时,应该打印以下内容,描述第一个进程的页表信息,在刚执行完exec()时。 

在这里插入图片描述

第一行显示了vmprint()的参数。在那之后每行对应一个PTE,包含树中指向page-table pages的PTE。 每个PTE行由一些".."(表明树的深度)缩进。 每个PTE行显示PTE在page-table page中的索引、pte地址、pte中的物理页地址。不要打印无效PTE。 在上面的例子中,有顶级page-table page:0、255。entry 0的下一级仅有索引0, 这个索引0的下一级有0、1、2三个PTE。 你的代码可能生成与上面那些代码不同的物理地址。entry和虚拟地址的数量应该一样。 

3,具体实现

4,执行效果

在这里插入图片描述

5,测试效果

在xv6-labs-2020中,执行下面指令,测试程序

make grade 

在这里插入图片描述

二、A kernel page table per process

1,实验要求

无论何时在内核执行时,xv6使用同一个内核页表。内核页表是一个物理地址的直接映射,因此内核虚拟地址x对应物理地址x。 xv6也有一个单独的页表给每个进程的用户地址空间,仅包含那个进程用户内存的映射,起始于虚拟地址0。 因为内核页表不包含这些映射,用户地址在内核无效。因此,当内核需要使用一个用户指针传到system call时,内核必须首先翻译指针到物理地址。 这个和下个实验的目的是为了允许内核直接解析用户指针。 第一个任务是更改内核,为了当在内核执行时,每个进程使用它自己的内核页表拷贝。 更改struct proc来让每个进程保持一个内核页表,更改scheduler(),当切换进程时切换内核页表。 对于这一步,每个进程的内核页表应该和已存在的全局内核页表完全相同。 读xv6书、理解作业一开始提到的代码如何起作用,将更容易正确地更改虚拟内存代码。 页表设置中的bug会因为缺少映射导致缺陷,导致加载、存储会影响到不可预期的物理内存页,也会导致执行不正确的物理内存页。 

2,具体实现

3,测试效果

三、Simplify copyin/copyinstr

1,实验要求

内核的copyin函数读取用户指针指向的内存。它先将它们翻译为物理地址(内核可以直接用)。通过代码walk进程页表实现翻译。 在此实验中,你的工作是给每个进程的内核页表添加用户映射,使得copyin可以直接使用用户指针。 

2,具体实现

3,测试结果

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/198145.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午3:41
下一篇 2026年3月26日 下午3:42


相关推荐

  • Dirsearch_torrentsearch下载

    Dirsearch_torrentsearch下载dirsearch下载下载网址:https://github.com/maurosoria/dirsearch下图是下载好的文件夹这样就下载好了我在使用的时候出现了下面的这个问题百度了很久也没有找到,kali也不太会用,就继续找继续找,终于????,解决办法找到了!!!是用户权限的问题!依然对dirsearch修改用户权限还是在属性->安全里面选择想要添加的用户,并允许该用户完全控制如下图…

    2022年10月5日
    3
  • 【Linux】Linux中常用操作命令

    【Linux】Linux中常用操作命令

    2021年9月22日
    49
  • oracle11g数据库导入导出方法教程[通俗易懂]

    oracle11g数据库导入导出方法教程[通俗易懂]oracle11g数据库导入导出:①:传统方式——exp(导出)和(imp)导入:②:数据泵方式——expdp导出和(impdp)导入;③:第三方工具——PL/sqlDevelpoer;一、什么是数据库导入导出?oracle11g数据库的导入/导出,就是我们通常所说的oracle数据的还原/备份。数据库导入:把.dmp格式文件从本地导入到数据库服务器中(本地oracle测试数据库中…

    2022年6月7日
    52
  • 2005中文博客排名报告「建议收藏」

    2005中文博客排名报告「建议收藏」2005中文博客排名报告发布机构:时代财富科技公司 摘要:2004年11月时代财富科技公司推出了中文Blog排行榜,得到了大众及媒介的广泛关注,也成为众多同行和资本市场了解中文博客网站的重要参考。历经2005年上半年中文Blog托管网站的飞速发展时期,博客网站也正经历着重新的洗牌和残酷的市场竞争。经过长时间的调查和分析,结合大量的用户体验,时代财富科技公司于2005年8月隆重推出《

    2022年7月12日
    20
  • Python运维常用的脚本,提高工作效率就靠它了

    Python运维常用的脚本,提高工作效率就靠它了前言用Python做运维的小伙伴肯定会进行重复的工作,这个时候脚本的重要性就体现出来了一个好的脚本工具可以帮你省去很多重复的工作,创造更大的价值下面小编就带你们看看Python运维最常用的脚本吧清除指定redis缓存#!/usr/bin/envpython3#-*-coding:utf-8-*-#@Time:2018-12-2015:19…

    2022年7月12日
    23
  • 豆包大语言模型负责人乔木飞书被暂停使用

    豆包大语言模型负责人乔木飞书被暂停使用

    2026年3月12日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号