简单页表和多级页表

news2024/9/23 5:20:10
地址转换(Address Translation)
  • 内存需要被分成固定大小的页(Page)
  • 然后再通过虚拟内存地址(Virtual Address)物理内存地址(Physical Address)地址转换(Address Translation)
  • 才能到达实际存放数据的物理内存位置
简单页表
页表的概念
  • 想要把虚拟内存地址,映射到物理内存地址,最直观的办法,就是来建一张映射表
  • 这个映射表,能够实现虚拟内存里面的页,到物理内存里面的页的一一映射,这个映射表,在计算机里,叫做页表(Page Table)
页号 && 偏移量
  • 页表这个地址转换的办法, 会把一个内存地址分成页号(Directory)偏移量(Offset)
  • 例子
    • 在这里插入图片描述

    • 前面的高位,就是内存地址的页号

    • 后面的低位,就是内存地址里面的偏移量

    • 做地址转换的页表,只需要保留虚拟内存地址的页号和物理内存地址的页号之间的映射关系即可

    • 同一个页里面的内存,在物理层面是连续的。以一个页的大小是4K字节(4KB)为例,我们需要20位的高位,12位的低位

      • 12位低位做偏移量,2的12次方=4096=4kb
    • 32位的内存地址空间,页表一共需要2 ^ 20个到物理页号的映射关系

      • 这个存储关系,就好比2 ^ 20 大小的数组
      • 一个页号是完整的32位的4字节(Byte),这样一个页表就需要4MB的空间
      • 2 ^ 20 * 4 = 4MB
  • 总结
    • 把虚拟内存地址,切分成页号和偏移量的组合
    • 从页表里面,查询出虚拟页号,对应的物理页号
    • 直接拿物理页号,加上前面的偏移量,就得到了物理内存地址
    • 在这里插入图片描述
多级页表
栈 && 堆内存分布
  • 在整个进程的内存地址空间,通常是"两头实,中间空"
  • 栈:在程序运行的时候,内存地址从顶往下,不断分配占用的栈空间
  • 堆:内存地址则从底部往上,是不断分配占用的
4级页表
  • 在这里插入图片描述

  • 同样一个虚拟内存地址,偏移量的部分和上面简单页表一样不变,但是原先的页号部分,把它拆成四段,从高到低,分成4级到1级

  • 运用流程

    • 一个进程有1个4级页表。先通过4级页表索引,找到4级页表里面对应的条目(Entry)
      • 这个条目里存放的是一张3级页表所在的位置
      • 4级页表里面的每一个条目,都对应一张3级页表,所以可以有多张3级页表
    • 找到对应这张3级页表之后,用3级别索引去找到对应的3级索引的条目
      • 3级别索引的条目再会指向一个2级页表
    • 同样的,2级页表可以用2级索引指向一个1级页表
    • 而最后一层的1级别页表里面的条目,对应的数据内容就是物理页号
      • 在拿到了物理页号之后,同样可以用"页号 + 偏移量"的方式,来获取最终的物理内存地址
页表树(Page Table Tree)
  • 在这里插入图片描述

  • 因为虚拟内存地址分布的连续性,树的第一层节点的指针,很多就是空的,也就是不需要对应对应的子树

    • 如果普通页表是数组结构,就必须是连续的
    • 所以32位地址占用4MB空间,采用页表树,就可以把未占用的空间设置为null,从而节约出未占用的空间
  • 所谓不需要子树,其实就是不需要对应的2级,3级的页表

  • 找到最终最终的物理页号,就好像通过一个特定的访问路径,走到树最底层的叶子节点

  • 空间测算

    • 例子1
      • 以这样的分成4级的多级页表,每一级如果都用5个比特(位),那么每一张某1级别的页表,只需要2^5=32个条目
      • 如果每个条目还是4个字节,那么一共需要128个字节
      • 而一个1级索引表,对应32个4kb的也就是128kb的大小,一个填满的2级索引表,对应的就是32个1级别索引表,也就是4MB大小
    • 例子2
      • 一个进程如果占用了8MB的内存空间,分成了2个4MB的连续空间
        • 栈空间4M,堆空间4M (最上最下两部分)
      • 它一共需要2个独立的,填满的2级别索引表,也就是意味着64个1级别索引表,2个独立的3级索引表,1个4级索引表引表
        • 64(1级) + 2(2级别) + 2 (3级别) + 1(4级) = 69
      • 一共需要69个索引表,每个128字节,大概9kb,比如4MB来说,只有1/500
        • 每个索引表2^5=32个条目
        • 每个条目中存储地址: 32位地址,8位一个Byte(字节),占4B空间, 总共 69 * 32 * 4B = 8832B 约等于9kb

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ip地址是电脑还是网线决定的

在数字化时代的浪潮中,网络已经成为了我们日常生活和工作不可或缺的一部分。当我们谈论网络时,IP地址无疑是一个核心的概念。然而,关于IP地址的分配和决定因素,很多人可能存在误解。有些人认为IP地址是由电脑决定的,而…

pytorch 46 将ASpanFormer模型导出onnx运行

ASpanFormer是一个2022年8月份发布的算法,其主要步骤与LoFTR模型类似,因此无法导出为onnx模型。根据ASpanFormer论文中的数据与效果图,可以确定AsPanFormer是可以作为一个比SP+SG更为有效的方案,其在标准数据集上的效果优于SP+SG,在速度上远超SP+SG,与LoFTR接近;在预测点…

C语言:静态库和动态(共享)库

相关阅读 C语言https://blog.csdn.net/weixin_45791458/category_12423166.html?spm1001.2014.3001.5482 在软件开发中,库(Library)是一个至关重要的概念。它们是由函数和数据的集合构成,用于实现特定的功能,供其他程…

测试——性能测试

内容大纲: 常见的性能问题 性能测试是什么 性能测试和功能测试之间的区别 为什么要进行性能测试 常见的性能指标及性能测试专业术语 性能测试分类 1. 常见的性能问题 系统内部以及软件的代码实现: 资源泄漏,包括内存泄漏。CPU使用率达到100%,系统被锁定…

Vue3组件通信

1、props 1.1 父传子 父组件:通过属性在子组件标签传递 子组件:通过defineProps接收 1.2 子传父 1.父组件先给子组件传递一个函数 2.子组件接收此参数(函数),并在合适的时机调用此函数,通过函数的参数&…

SEO之网站结构优化(四)

初创企业搭建网站的朋友看1号文章;想学习云计算,怎么入门看2号文章谢谢支持: 1、我给不会敲代码又想搭建网站的人建议 2、新手上云 4、清晰导航 清晰的导航系统是网站设计的重要目标,对网站信息架构、用户体验影响重大。SEO也越来…

Hadoop高可用集群搭建及API调用

NameNode HA 背景 在Hadoop1中NameNode存在一个单点故障问题,如果NameNode所在的机器发生故障,整个集群就将不可用(Hadoop1中虽然有个SecorndaryNameNode,但是它并不是NameNode的备份,它只是NameNode的一个助理,协助NameNode工作,SecorndaryNameNode会对fsimage和edits文…

【BUG】已解决:OSError: [Errno 22] Invalid argument

已解决:OSError: [Errno 22] Invalid argument 目录 已解决:OSError: [Errno 22] Invalid argument 【常见模块错误】 错误原因: 解决方法如下: 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&…

基于luckysheet实现在线电子表格和Excel在线预览

概述 本文基于luckysheet实现在线的电子表格,并基于luckyexcel实现excel文件的导入和在线预览。 效果 实现 1. luckysheet介绍 Luckysheet ,一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源。 官方文档在线Demo 2. 实现 …

配置单区域OSPF

目录 引言 一、搭建基础网络 1.1 配置网络拓扑图如下 1.2 IP地址表 二、测试每个网段都能单独连通 2.1 PC0 ping通Router1所有接口 2.2 PC1 ping通Router1所有接口 2.3 PC2 ping通Router2所有接口 2.4 PC3 ping通Router2所有接口 2.5 PC4 ping通Router3所有接口 2.…

力扣 28找到字符串中第一个匹配项的下标 KMP算法

思路: 朴素匹配有很多步骤是多余的 KMP算法能够避免重复匹配 KMP算法主要是根据子串生成的next数组作为回退的依据,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。 这里讲一下为什么用模式串的最大公共前后缀…

基于python的当当二手书数据分析与可视化系统设计与实现

1.1 研究背景及现状 1.1.1 研究背景 生态文明建设是我国的基本国情之一,资源利用作为应该重要的环节[1]。然而随着大学校园内掀起倡导的低碳环保热潮,高校学生教材及其他书籍的目前的处理方式已被大多人所关注[2]。从循环利用资源的角度出发[3]&…

封装MAVSDK为JAR包并导出给其它Android工程用完整示例

效果: 未解锁状态 已执行解锁指令 已执行起飞指令 飞行中 已执行降落指令 已执行返航指令 实现步骤: 1.准备PX4容器并启动:

Java项目中整合多个pdf合并为一个pdf

一、Java项目中整合多个pdf合并为一个pdf gitee笔记路径&#xff1a;https://gitee.com/happy_sad/drools一、依赖导入 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.6</version> …

AtCoder Beginner Contest 362

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;彩笔ACMer一枚。 &#x1f3c0;所属专栏&#xff1a;Codeforces 本文用于记录回顾总结本彩笔的解题思路便于加深理解。 比赛题目地址&#xff1a;AtCoder Beginner Contest 362 …

【保卫花果山】游戏

游戏介绍 拯救花果山是一款玩家能够进行趣味闯关的休闲类游戏。拯救花果山中玩家需要保护花果山的猴子&#xff0c;利用各种道具来防御妖魔鬼怪的入侵&#xff0c;游戏中玩家需要面对的场景非常的多样&#xff0c;要找到各种应对敌人的方法。拯救花果山里玩家可以不断的进行闯…

vue基于Cookies实现记住密码自动登录功能

vue基于Cookies实现记住密码自动登录功能 Cookies 和localStorage存储比对 实现记住密码功能时&#xff0c;使用 Cookies 和使用 localStorage 各有其优势和考虑因素&#xff0c;具体需要取决于需求和安全考量&#xff1a; 1、Cookies 的优势&#xff1a; 广泛支持&#x…

中介者模式详解:概念、优点及实例

目录 中介者模式中介者模式结构中介者模式适用场景中介者模式优缺点练手题目题目描述输入描述输出描述题解 中介者模式 中介者模式是一种行为设计模式&#xff0c; 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互&#xff0c; 迫使它们通过一个中介者…

windows ssh的登录,私钥权限太开放 WARNING: UNPROTECTED PRIVATE KEY FILE!

问题描述 ssh -i wang -D localhost:1080 wangsg.ks99.topBad permissions. Try removing permissions for user Permissions for xxx are too open. F:\pms\pms-gpg-key\ssh-key\wang>ssh -i wang -D localhost:1080 wangsg.ks99.top Bad permissions. Try removing perm…

查看公网IP的网络出口

文章目录 背景 背景 有时候在各种交易或其他时候&#xff0c;会被问到给我一个公网IP&#xff0c;我来帮你加白名单。 这个怎么怎么获取公网IP呢&#xff0c;在自己本机查看ipconfig或者ifconfig ip a 等命令查到的一般都是局域网的IP&#xff0c;每台机器都需要一个IP来进行对…