第3章 页表机制

作者: 橡树人 | 来源:发表于2020-11-12 08:05 被阅读0次
  1. 页表机制做了哪些事?

页表确定了什么是内存地址,以及可访问哪些部分的物理内存。

  1. 页表机制实现了哪些目标?
  • 操作系统给每个进程提供了私有的地址空间和内存;
  • xv6隔离不同进程的地址空间,多路复用不同进程到同一个物理内存上;
  • 提供了一种间接性,允许xv6执行若干个技巧:映射若干个地址空间到相同的内存,使用未映射的页来保护内核栈和用户栈。

本章的剩余部分解释了RISC-V硬件提供的页表机制,以及xv6是如何使用页表机制的。

第3.6节 进程的地址空间

每个进程都有一个单独的页表。
当xv6在进程间切换时,xv6也会修改页表。

一个进程的用户内存从0开始,可增长到MAXVA,理论上允许一个进程在256GB大的内存中寻址。

当一个进程向xv6请求更多的内存时,xv6会做3件事:

  1. 使用kalloc函数来分配物理内存;
  2. 向进程的页表中添加页表项PTEs,使得页表指向新的物理页;
  3. 设置这些页表项中的PTE_RPTE_XPTE_WPTE_UPTE_V等标记;

注意,

  • 大部分进程不使用整个用户地址空间。
  • 对那些未使用的页表项,xv6不设置其PTE_V标记。

3个很好的页表使用举例

例1 不同进程的页表将用户地址转换到物理内存的不同页,使得每个进程有自己私有的用户内存。

例2 每个进程认为自己的内存是从0开始的连续的虚拟地址,而进程的物理内存可以是不连续的。

例3 内核将带有trampoline代码的物理页映射到用户地址空间的顶部,使得这样的一个单独的物理内存的页出现在所有的地址空间里。

在xv6中,一个正在执行的进程的用户内存的布局是怎样的?

栈是一个单独的页,图中展示的是exec创建该栈时的初始内容。
栈顶的内容是包含有命令行参数、指向命令行参数的指针数组等。
在栈顶下是一些值,允许一个程序从main处开始,好像函数main(argc,argv)刚被调用一样。

如何检测用户栈溢出?

xv6在栈的下面放置了一个无效的保护页。
如果用户栈溢出了,进程会尝试使用在栈之下的地址,则硬件会生成一个页面故障,因为这个映射是无效的。

注意,当用户栈溢出时,真实世界里的操作系统可能会自动为其分配更多的内存。

相关文章

  • 第3章 页表机制

    页表机制做了哪些事? 页表确定了什么是内存地址,以及可访问哪些部分的物理内存。 页表机制实现了哪些目标? 操作系统...

  • MySQL -- 锁机制

    表锁 行锁 页锁 表锁:表级别的锁定是MySQL各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点:实现逻辑非...

  • 虚拟内存机制,页&页框&页表

    计算机的存储系统 为什么要有虚拟内存 在早期的计算机中,是没有虚拟内存的概念的。我们要运行一个程序,会把程序全部装...

  • 倒排页表(inverted page table)

    在启动分页机制时需要用到页表,页表保存的是虚拟页号与物理页框之间的映射关系,其中页表项与虚拟内存页有一一对应的关系...

  • 作业时间计划表---闫城烨

    昨天老师让我们做计划表,计划表上面的第一件事就是:写语文练习册43页31页32页33页34页。这些也都是要写的。第...

  • 玖零落地的“七定表如何落地?

    在玖零总裁日志里,有一页“五定表”。“五定表”解决了方案、机制、事件等的落地执行问题,它是落地执行层面的标准化、流...

  • 9月28日家庭作业

    数学作业 1、练习册第13页。 2、课本第29页第7题,写在书上。 3、带上前几天调查的汽车里程、电表读数的记录表...

  • 通过NSUserDefaults做欢迎页显示机制:版本号控制

    通过NSUserDefaults做欢迎页显示机制/版本号控制 欢迎页的机制: 首次运行时,显示欢迎页. 看过以后,...

  • V+协议

    V+协议存根 正文 第2页 第3页 第4页 第5页 第6页 第7页 第8页 第9页 第10页 第11页 第12页 ...

  • 01-表和索引的结构

    一、表和索引是如何组织和使用 1、索引页和表页 表和索引行都存储在 页 中 页的大小可调 页的大小仅仅决定一个页可...

网友评论

    本文标题:第3章 页表机制

    本文链接:https://www.haomeiwen.com/subject/wpsubktx.html