ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

xv6 lab3

2022-04-01 21:32:15  阅读:250  来源: 互联网

标签:映射 exec 用户 xv6 lab3 内核 进程 页表


https://pdos.csail.mit.edu/6.S081/2020/labs/pgtbl.html

简述

这个lab有三个task:

  1. 写一个打印页表内容的函数
  2. 给每个进程都创建一个内核页表,这个主要的优化点是具体点,就是将用户态页表的映射也放到每个进程的内核页表中,那么从用户态传入到内核态的指针就可以直接按照内核页表解引用了
  3. 修改copyin/copyinstr两个函数,它们主要是用来从用户态拷贝数据到内核态,由于原来的内核页表没有存放用户态页表的映射,那么这两个函数就需要去查找用户页表,由于上一个task的修改,现在可以直接读取内核页表了,又由于内核页表是虚拟地址与物理地址直接映射,所有就等于是直接通过物理地址读取数据了,所以可以简化copyin/copyinstr

A kernel page table per process

有三个函数会涉及到进程用户态页表的修改:

  • fork,fork的时候会将父进程的页表PTE与物理地址拷贝到fork出来的子进程,因为之后一般要执行exec,这个子进程从父进程复制过来的页表一般就是trapframetrampoline会在用户态页表中保存,trapframe是在初始化进程的时候分配在用户页表的,分配空页表的时候会在用户态页表映射trapframetrampoline
    那么同样需要去将子进程的用户态页表复制到子进程的内核页表
  • exec,exec是装载可执行文件(映像文件)的过程,也就是建立虚拟地址空间与可执行文件的映射,exec会装载映像文件的.text.data段到物理内存,同时写入用户态进程页表还会分配用户栈与guard页,也会写到用户态页表,

    这些都需要复制到进程的新的内核态页表
  • sbrksbrk对应的sys_sbrk会调用growproc,也就是扩充进程虚拟地址空间中的heap,这个时候用户态页表会改变所以这些都需要复制到进程的新的内核态页表

Simplify copyin/copyinstr

标签:映射,exec,用户,xv6,lab3,内核,进程,页表
来源: https://www.cnblogs.com/mlmz/p/16089077.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有