首页 > 其他分享 >页表笔记

页表笔记

时间:2023-05-30 15:34:11浏览次数:38  
标签:映射 PTE 虚拟地址 笔记 物理地址 内核 页表

页表

页表是操作系统为每个进程提供私有地址空间和内存的机制,决定了内存地址的含义,以及物理内存的哪些部分可以访问。

分页硬件

用户和内核指令使用的是虚拟地址,而机器的RAM或物理内存是由物理地址索引的。
RISC-V页表硬件通过将每个虚拟地址映射到物理地址来为这两种地址建立联系。

  • 在Sv39 RISC-V中,虚拟地址的前25位不用于转换;RISC-V页表在逻辑上是由一个227个页表条目组成数组,每个页表条目包含一个44位的物理页码和一些标志。分页硬件通过虚拟地址39位中的前27位索引页表,以找到改虚拟地址对应的页表条目,然后生成一个56位的物理地址,其中前44位来自页表条目中的物理页码,后12位来自原始虚拟地址。页表使操作系统能够以4096(212)字节的对齐块的粒度控制虚拟地址到物理地址的转换,这样的块称为页。
  • 三级结构比单级结构更节省内存:在大范围的虚拟地址没有被映射的常见情况下,三级结构可以忽略整个页面目录。
  • 三级结构的缺点是CPU必须从内存中加载三个页表条目以将虚拟地址转化为物理地址。为减少从物理内存加载页表条目的开销,RISC-V CPU将页表条目缓存在为翻译后备缓冲器(Translation Lookaside Buffer, TLB)中。
    ng)
    • TLB是一个小的、虚拟寻址的缓存,用户组选择和行匹配的索引和标记字段是从虚拟地址中的虚拟页号中提取出来的。
      • CPU产生一个虚拟地址,MMU从TLB中取出相应的PTE,MMU将这个虚拟地址翻译成一个物理地址,并将它发送到告诉缓存或主存,高速缓存或主存将所请求的数据字返回CPU。
      • 当TLB不命中时,MMU必须从L1缓存中取出相应的PTE,新取出的PTE存放在TLB中,可能会覆盖一个已经存在的条目。
  • 标志位
    • PTE_V:指示PTE是否存在
    • PTE_R:控制是否允许指令读取到页面
    • PTE_W:控制是否允许指令写入到页面
    • PTE_X:控制CPU是否可以将页面内容解释为指令并执行它们
    • PTE_U:控制用户模式下的指令是否被允许访问页面
  • 为使硬件使用页表,内核必须将根页表页的物理地址写入到satp寄存器中。

内核地址空间

  • QEMU模拟一台计算机,包括从物理地址0x80000000开始并至少到0x86400000结束的RAM(物理内存),xv6称结束地址为PHYSTOP.

  • 内核使用“直接映射”获取内存和内存映射设备寄存器,将资源映射到等于物理地址的虚拟地址。例如:KERNBASE=0x80000000

  • trampoline page

    • 映射在虚拟地址空间的顶部,用户页表具有相同的映射.一个物理页面(持有蹦床代码)在内核的虚拟地址空间中映射了两次:一次在虚拟地址空间的顶部,一次直接映射。
      • 使用trampoline页表的过程如下:内核在用户页表中映射一段特定地址,该地址对应着内核中的一段特定地址,即trampoline。当发生异常或中断时,CPU会切换到内核态,并且根据中断号或异常号从内核页表中找到对应的异常处理程序的地址。异常处理程序会切换到trampoline页表,并跳转到trampoline中的指令,这些指令会重新设置用户页表,并跳转到真正的异常处理程序的地址。异常处理程序在用户页表中执行,并在处理完后再切换回内核页表。通过使用trampoline页表,可以在用户页表中安全地处理异常或中断,同时又不会破坏用户程序的虚拟地址空间。
  • 内核栈页面:每个进程都有自己的内核栈,将映射到偏高一些的地址,这样xv6在这之下就可以留下一个未映射的保护页.保护页的PTE是无效的即PTE_V没有设置.如果内核溢出内核栈就引发一个异常,内核触发panic.若没有保护页,栈溢出将会覆盖其他内核内存,引发错误操作.(未映射的保护页不会浪费物理内存,只是占据了虚拟地址空间的一段靠后的地址,但是并不映射到物理地址空间)

标签:映射,PTE,虚拟地址,笔记,物理地址,内核,页表
From: https://www.cnblogs.com/pidan223/p/17443372.html

相关文章

  • ⑤Redis主从集群-动力节点最全Redis7笔记
    5Redis主从集群为了避免Redis的单点故障问题,我们可以搭建一个Redis集群,将数据备份到集群中的其它节点上。若一个Redis节点宕机,则由集群中的其它节点顶上。5.1主从集群搭建Redis的主从集群是一个“一主多从”的读写分离集群。集群中的Master节点负责处理客户端的读写请求,而Slav......
  • 考古笔记8:默认路由
    前面的06篇如果R1之外有很多不同的网段或者是连接的internet;那么我们再SW上设置默认路由就会条目很多或者根本无法做完;这时就需要配置默认路由了。拓扑本节实验拓扑:我们还是用上一章的拓扑;首先将R1和SW1设定静态路由先删除。配置SW1:SW1#conftSW1(config)#noiproute1.1.1.0255......
  • Webpack 学习笔记
    Webpack学习笔记这篇学习笔记将用于记录本人在学习Webpack打包工具过程中所编写的心得体会与代码示例。为此,我会在https://github.com/owlman/study_note项目的Programming/Client-Server/Frameworks目录下创建一个名为的webpackjs目录,并在该目录下设置以下两个子目录:note目......
  • solidworks笔记20230530
    教程文件位置在帮助中用activeX打开文件,然后点另存为,对话框出现后,复制路径,取消关闭对话框。将复制的路径保存到文件浏览器中。比如我的教程文件的位置是:C:\Users\Public\Documents\SOLIDWORKS\SOLIDWORKS2022\samples\tutorial\步路模板步路模板,就是装配体模板,和修改装配体......
  • MongoDB学习笔记:配置文件
    本文更新于2023-05-11。使用MongoDB6.0.4。官方文档:https://www.mongodb.com/docs/manual/reference/configuration-options/Linux下配置文件为/etc/mongod.conf。#后面的内容作为注释忽略。大多数参数与mongod的命令行参数对应,如命令行参数为不需指定值的开关则设置为true或f......
  • 《人月神话》阅读笔记08
    第四章:软件产品的特性:这部分可能会探讨软件产品的各种特性,如功能性、可靠性、可维护性、可扩展性等。布鲁克斯可能会强调软件产品质量的重要性,并讨论如何确保产品满足用户需求和质量标准。开发过程和产品质量:这一部分可能会讨论开发过程与产品质量之间的关系。布鲁克斯可能......
  • 人月神话阅读笔记02
    《人月神话》是一部文学作品,融合了神话和现实主义元素,以及对人类生活和情感的探索。阅读这本书,我被它深邃的哲学思考和富有想象力的叙事所吸引,同时也对作者对人类存在和情感的揭示留下了深刻的印象。首先,这本书通过描绘一个奇幻的世界,将读者带入了一个充满神秘和想象力的环境。故......
  • 刷题笔记53 动态规划14
    @目录动态规划1143.最长公共子序列1035.不相交的线53.最大子序和动态规划动态规划●1143.最长公共子序列●1035.不相交的线●53.最大子序和动态规划1143.最长公共子序列1143.最长公共子序列法1:动态规划intlongestCommonSubsequence(stringtext1,stringte......
  • 刷题笔记52 动态规划 part13
    @目录动态规划300.最长递增子序列674.最长连续递增序列718.最长重复子数组动态规划●300.最长递增子序列●674.最长连续递增序列●718.最长重复子数组300.最长递增子序列300.最长递增子序列法1:动态规划intlengthOfLIS(vector<int>&nums){//未考虑......
  • [刷题笔记55 动态规划15]
    @目录动态规划392.判断子序列115.不同的子序列动态规划●392.判断子序列●115.不同的子序列392.判断子序列392.判断子序列法1:动态规划boolisSubsequence(strings,stringt){//动态规划vector<vector<int>>dp(s.size()+1,vector<int>(t.size(......