解答:x86架构下,页面大小为什么是4K?

2023-11-05

前提:32位逻辑地址空间的计算机系统,三级页表,每个页中每个条目占4Byte,即32位的数据

以上前提是目前x86架构32位系统的真实情况

设:页大小为X(byte

则:X/4就是每个页中可以存取的条目个数

两级页表的地址转化关系如图1所示:

图1:

假设在一个32位的条目中存放此内存的地址,则2*log2(X/4)就是图1中,p1+p2的位数。

2^(p1+p2):系统可以寻址多少个页面

(x/4)^2:前两级页表共可以选择多少个entry,因为第一级页表entry个数是x/4,第二级相同,所以相乘既共有多少个entry

系统可以寻址的页面数目=前两级页表共可以选择多少个entry,即2^(p1+p2)=(x/4)^2====>2*log2(X/4)=p1+p2。

 

此外:如果页大小为X,那么为了偏移量能够寻址所有的X位,需要:2的d次方=X,即log2(X)=d。

然而由图一知,p1+p2+d=32,所以:

2*log2(X/4)+log2(X)=32

可以计算得到X=4096.即页的大小为4096bit=4k。

 

以上只是硬件在最充分利用资源情况下的方式,有人说为什么其他大小的页面(如8k)不行?不是不行,是这么做性能无法最优,为什么?解释如下:

前提如上面所述,如果页面大小是8k,d就必须等于13(2^13=8k),p1+p2=19;

此时每个entry还是4B,则每个页面共有entry=8K/4B=2048个;

假设用p2寻址2048个entry,则p2=11,此时p1=8;

问题来了,p1=8,则第一级页表只能寻址2^8=256个entry,此时第一级页表就有2048-256=1792个entry不能使用,这是多大的资源浪费???!!!

当然,系统其他地方的开销是需要平衡的,所以4k是一个综合评价后的结果。

但是,以后的大型系统,内存很可能上升到T级别,到那时在用4k页就是傻X。目前ARMv8 64位的Linux中,大内存情况下2M页是比较合理的,而且OS中对其支持很完美。

转载请注明出处:http://blog.csdn.net/qianlong4526888/article/details/7697336

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解答:x86架构下,页面大小为什么是4K? 的相关文章

  • 如何使用我在 github 中发布的 bash 脚本执行 chsh?

    我有一个要点 我总是用它来在新服务器上安装我需要的软件包 http gist github com 4372049 http gist github com 4372049 我需要做的就是通过 ssh 在新服务器中输入以下内容 bash c
  • awk: hping: 打印 icmp 发起/接收之间的差异

    我有以下输出hping http ports su net hping在 OpenBSD 上 hping icmp ts www openbsd org HPING www openbsd org re0 129 128 5 194 icm
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • ReferenceError:MongoDB shell 中未定义 require

    我尝试通过 Windows 命令 Windows 8 1 从 Mongo 客户端连接 MongoDB 当我使用require 在 javascript 中 我遇到如下错误 有人有同样的问题吗 我有错过任何一个吗require有关的npm安装
  • 将 2 个字节转换为整数

    我收到一个 2 个字节的端口号 最低有效字节在前 我想将其转换为整数 以便我可以使用它 我做了这个 char buf 2 Where the received bytes are char port 2 port 0 buf 1 port
  • shell脚本中的\r字符

    我在尝试执行 shell 脚本时收到以下错误 r command not found line 2 请提出同样的解决方案 以下是脚本中使用的初始行 bin sh if lt 1 then echo ERROR Environment arg
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • 为什么 Linux perf 使用事件 l1d.replacement 来处理 x86 上的“L1 dcache misses”?

    在英特尔 x86 上 Linux用途 https stackoverflow com a 52172985 149138事件l1d replacements来实施其L1 dcache load misses event 该事件定义如下 计数
  • 通过powershell运行ADB命令

    所以我尝试通过 powershell 脚本运行一些 ADB 命令 这是我正在尝试做的一个简单示例 adb shell echo in adb shell su root echo you are now root ls cd data da
  • if [ -z "${FILE_LIST}" ] 中的 -z 是什么

    遇到了这个 什么是 z在 shell 脚本中if z FILE LIST 是相同的test And man test gives z STRING the length of STRING is zero 注意 在某些平台上 是一个符号链接
  • 有没有办法让我简化这些回声? [复制]

    这个问题在这里已经有答案了 我仍在学习如何编写 shell 脚本 并且我面临着一个挑战 让我更容易回显 Name1 Name2 Name15 我不太确定从哪里开始 我已经想法 但如果我搞砸了 我不想看起来很傻 有什么帮助吗 我实际上还没有尝
  • OSX bash 最小化窗口

    在 Mac 中并使用 bash shell 我想执行一个包含单个命令 启动 Jupyter Lab 的文件并立即最小化终端窗口 有没有办法在不安装第三方软件的情况下做到这一点 是的 只需使用osascript https ss64 com
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im
  • 整数溢出问题

    我不断遇到整数溢出问题 我不知道如何解决它 有人可以帮忙吗 edx 包含 181 eax 包含 174 xor eax edx mov edx 2 div edx 假设你谈论的是x86 div edx这实际上没有意义 32位div将edx
  • 在 bash 脚本中提取 XML 值 [重复]

    这个问题在这里已经有答案了 我正在尝试从 xml 文档中提取一个值 该文档已作为变量读入我的脚本中 原始变量 data is
  • 使用 awk 读取文件并搜索另一个文件

    我正在读取一个文件 每行都有数字 我需要搜索另一个满足这些数字和其他条件的文件 我正在尝试使用 awk 来做到这一点 但遇到了问题 File a txt 1476 1477 1497 现在我需要打印第 12 列包含这些数字的行以及第 3 列
  • 从 UNIX 命令行向串行端口发送字节?

    我想使用命令行将字节流发送到串行端口 这可能吗 我的串口位于 dev cu usbserial A700dYoR在我的 Mac 上 例如 如果我想将整数 50 或字符串 data 发送到该串行端口 我该怎么做 我对 UNIX 的了解非常有限
  • Grub 和进入实模式(低级汇编语言编程)

    我一直在开发一个玩具操作系统 并一直使用 grub 作为我的引导加载程序 最近尝试使用 VGA 时 我发现无法使用硬件中断 我发现这是因为我被 grub 置于保护模式 有人知道如何在不删除 grub 的情况下回到实模式吗 如果您使用 GRU
  • 类型不匹配:无法使用三元运算符从 int 转换为 byte

    在一个利用字节数组操作的项目中 我尝试编写如下内容 boolean enabled getEnabled byte enabledByte enabled 0x01 0x00 compile error 我面临的问题是上面的内容无法编译 类
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl

随机推荐

  • DBeaver连接clickhouse

    一 安装DBeaver 下载地址 Download DBeaver Community 1 选择自己电脑的安装包 2 安装完成之后 启动安装程序 3 选择语言及安装路径等 确认安装 4 安装成功 二 连接clickhouse 1 启动dbe
  • 一文带你梳理React面试题(2023年版本)

    前言 一 React18有哪些更新 setState自动批处理 在react17中 只有react事件会进行批处理 原生js事件 promise setTimeout setInterval不会 react18 将所有事件都进行批处理 即多
  • nginx 基础 域名、dns 、虚拟主机

    Nginx 基础应用实战 02 域名 dns与http协议 mashibing com server 相关配置 listen 80 监听端口 server name www mashibing com mashibing com 域名可以有
  • 16-3_Qt 5.9 C++开发指南_使用QStyle 设置界面外观_实现不同系统下的界面效果的匹配

    文章目录 1 QStyle的作用 实现不同系统下的界面效果的匹配 2 Qt内置样式的使用 3 源码 3 1 可视化UI设计 3 2 mainwindow cpp 1 QStyle的作用 实现不同系统下的界面效果的匹配 Qt 是一个跨平台的类
  • 主成分分析(principal component analysis, PCA)公式

    主成分分析 principal component analysis PCA 公式 主成分分析 摘要 什么是主成分 求解 PCA 的公式 数学证明 程序验证 参考文献 主成分分析 摘要 主成分分析作为一种常见的数据降维 dimension
  • Windows python发布

    发布代码包新建setup py文件 在要发布文件夹打开cmd python exe setup py sdist 构建发布 sudo python exe setup py install 将发布安装到本地副本 使用import 文件夹名导
  • flex布局 父元素属性之 flex-direction 设置主轴的方向

    flex布局 flex flexible box的缩写 意为 弹性布局 有很强的灵活性 任何一个容器都可以设置为flex布局 在使用flex布局时 必须给父元素添加flex属性 display flex 才能控制子元素的位置和排列方式 当为
  • 背包九讲--完全背包

    完全背包 问题描述 设有n种物品 每种物品有一个重量及一个价值 但每种物品的数量是无限的 同时有一个背包 最大载重量为M 今从n种物品中选取若干件 同一种物品可以多次选取 使其重量的和小于等于M 而价值的和为最大 输入格式 第一行 两个整数
  • 浏览器监听左上角返回按钮监听事件popstate 不起作用&使用History.back()页面后退刷新或者处理一些其他操作页面

    浏览器监听左上角返回按钮监听事件popstate 不起作用 需求 做法 问题 解决方案 补充知识 使用History back 页面后退刷新或者处理一些其他操作页面 需求 网站A 页面a page 转到网站B 页面b page 在b pag
  • SAP MM学习笔记31 - 已割当供给元的购买依赖

    上次学习了未割当供给元的购买依赖 未分配供应商采购申请 咱们本章来学习一下 已割当供给元的购买依赖如何处理 SAP MM学习笔记30 未割当供给元的购买依赖 东京老树根的博客 CSDN博客 如下图所示 利用 购买依赖割当一览 手动 从购买依
  • 大话数据结构3 - 串

    串是一种线性表的扩展 线性表关注一个个元素 串关注子串操作 串 是由零个或多个字符组成的有限序列 字符串string 空串 空格串 子串 主串 串的比较 通过编码进行的 相等串 串的大小判定 标准ASCII 扩展ASCII Unicode编
  • IndexError: too many indices for tensor of dimension 0

    源代码 import torch import torchvision import torch nn as nn from model import LeNet import torch optim as optim import tor
  • Vmware 如何开启CPU虚拟化

    首先要说明VMware workstation7桌面平台的配置情况 CPU 宿主机CPU 内存 设置数值为虚拟机最大可用内存 动态分配内存大小 主板芯片组 Intel 440BX 显卡 VMware SVGA IDE控制器 Intel 82
  • golang判断字符串是不是数字

    参考 Golang如何去判断字符串是数字还是字符 CSDN论坛 func IsNum s string bool err strconv ParseFloat s 64 return err nil
  • DataGrip创建MySQL数据库与使用

    打开DataGrip创建一个MySQL数据库 打开数据库的配置 会提示安装驱动 数据库的版本需要与驱动版本一致 自己在官网下载MySQL驱动 若不一致 需要下载驱动 http central maven org maven2 mysql m
  • 等保2.0:MySQL数据库测评

    身份鉴别 身份鉴别A 应对登录的用户进行身份标识和鉴别 身份标识具有唯一性 身份鉴别信息具有复杂度要求并定期更换 测评方法 1 执行mysql u root p命令 查看是否提示输入口令鉴别用户身份 mysql u root p 2 查询u
  • 利用session技术实现 用户登陆 功能

    首先 利用jsp技术写出登陆页面 h1 用户登录 h1
  • MySQL-day15-增删改查实例实操

    文章目录 一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 权限管理 六 过滤查询 having 1 举例 2 小练习 七 查询排序 order by 1 示例 2 小练习 八 限制查询 limit
  • 【unity设置】导入hdr图并设置为天空盒

    在IBL笔记前 我们都知道IBL是通过环境来作为间接全局光赋予irradiance 那么首先我们需要导入一张hdr图并将其设置为环境贴图 天空盒 这种图片多的小tips放在正文中过于臃肿 这边还是单独拿出来一篇小笔记 1 下载HDR贴图 首
  • 解答:x86架构下,页面大小为什么是4K?

    前提 32位逻辑地址空间的计算机系统 三级页表 每个页中每个条目占4Byte 即32位的数据 以上前提是目前x86架构32位系统的真实情况 设 页大小为X byte 则 X 4就是每个页中可以存取的条目个数 两级页表的地址转化关系如图1所示