确定虚拟内存的页表大小

2024-06-19

考虑一个具有 38 位虚拟字节地址、1KB 页和 512 MB 物理内存的虚拟内存系统。假设有效位、保护位、脏位和使用位总共占 4 位,并且所有虚拟页都在使用中,则本机上每个进程的页表总大小是多少? (假设磁盘地址未存储在页表中。)


好吧,如果问题只是“页表的大小是多少?”无论它是否适合物理内存,答案都可以这样计算:

第一个物理记忆。物理内存有 512K 页(512M / 1K)。这需要 19 位来表示每一页。将其添加到 4 位记帐信息中,您将得到 23 位。

Now virtual memory. With a 38-bit address space and a 10-bit (1K) page size, you need 228 entries in your page table.

Therefore 228 page table entries at 23 bits each is 6,174,015,488 bits or 736M.

这是单级 VM 子系统所需的最大大小对于每个过程.

现在,如果您只有 512M 物理 RAM,显然这是行不通的,因此您有几个选择。

  1. 您可以减少物理页的数量。例如,只允许一半内存进行分页,而另一半则始终驻留。这将为每个条目节省一位,但实际上不足以产生影响。

  2. 增加页面大小,如果可能的话。 38 位地址空间上的 1K 页是页表非常大的原因。例如,我认为 '386 具有 32 位地址空间,使用 4K 页。这将导致一百万个页表条目,远远少于此处所需的 2.6 亿个。

  3. 走向多层次。更高级一点,但它基本上意味着页表本身要进行分页。您必须将第一级页表保留在物理内存中,但第二级页表可以根据需要进出。这将极大地降低物理要求,但以速度为代价,因为获取实际进程页面时可能会发生两级页面错误(一级用于辅助分页表,一级用于进程页面)。


让我们仔细看看选项 3。

如果我们允许主页表为 32M,并给每个条目 4 个字节(32 位:只需要 23 位,但我们可以在这里舍入以提高效率),这将允许辅助页表有 8,388,608 个页面。

由于每个辅助页表页都是 1K 长(允许我们以每个 4 字节存储 256 个辅助页表条目),因此我们总共可以寻址 2,147,483,648 个虚拟页。

这将允许 8,192 个完全加载的(即使用其整个 28 位地址空间)进程并排运行,假设您有相当大的磁盘空间来存储非常驻页面。

现在显然主分页表(和VM子系统,可能还有操作系统其余部分的相当一部分)必须始终保持驻留。不能允许您调出其中一个主要页面,因为您很可能需要该页面才能将其带回:-)

但这对于主分页表来说,512M 的驻留成本仅为 32M,比(至少对于一个满载进程而言)736M 要好得多。

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

确定虚拟内存的页表大小 的相关文章

  • 如何分析堆转储

    我成功地生成了我的应用程序机器的堆转储 但我不知道如何分析它 有人可以告诉我怎么做吗 在 Sun Solaris 上使用适用于 Java 的 jhat 实用程序 一个很好的例子在这里https blogs oracle com alanb
  • “calloc”不会自动消耗 RAM 中的内存

    根据这个问题的回答 malloc 和 calloc 之间的区别 https stackoverflow com questions 1538420 difference between malloc and calloc answer 15
  • JMeter 负载服务器会影响我的结果吗?

    我正在使用亚马逊 EC2 实例 大型 作为使用 1 000 个线程的负载服务器来运行 JMeter 测试 负载服务器CPU利用率稳定在90 左右 内存利用率稳定在70 是否存在关于负载服务器在什么时候没有足够资源 内存或 CPU 而导致负载
  • WPF 每次打开和关闭窗口时都会增加内存

    我已经做了非常简单的测试 只是为了了解 wpf 如何与内存一起工作 我用一个窗口创建一个项目 其中有一个Button 第二个窗口完全是空的 当我按下Button单击打开第二个窗口 窗口 1 后面的代码
  • 为什么连接终止

    我正在尝试使用随机森林分类模型H2OR 内部的库 训练集有 7000 万行和 25 个数字特征 总文件大小为 5 6 GB 验证文件的大小为 1 GB 我的系统有 16 GB RAM 和 8 核 CPU 系统成功读取 H2O 对象中的两个文
  • SQLite 性能基准 - 为什么 :memory: 这么慢...只有磁盘速度的 1.5 倍?

    为什么 sqlite 中的 memory 这么慢 我一直在尝试查看使用内存中的 sqlite 与基于磁盘的 sqlite 是否可以获得任何性能改进 基本上我想用启动时间和内存来换取非常快速的查询not在应用程序过程中击中磁盘 然而 以下基准
  • 如何估计 std::map 的内存使用情况?

    例如 我有一个已知 sizeof A 和 sizeof B 的 std map 而 map 内部有 N 个条目 您如何估计其内存使用情况 我想说这就像 sizeof A sizeof B N factor 但到底是什么因素呢 也许不同的公式
  • 以编程方式获取 Android 设备的所有 RAM 内存,而不仅仅是分配给用户进程的内存

    我有一台设备 我确信它的 RAM 内存为 512 MB 希望能够以编程方式检索该值 512 MB 到目前为止 我在互联网上遇到的主要是这两种方式 https stackoverflow com a 16143065 1521264 http
  • MySQL用户创建的临时表已满

    我使用内存引擎创建了一个临时表 如下所示 CREATE TEMPORARY TABLE IF NOT EXISTS some text id INT DEFAULT 0 string varchar 400 DEFAULT engine m
  • for 循环内存不足

    嘿 所以我认为如果我制作一个生成随机密码的小应用程序 然后让该应用程序运行所有可能性并尝试查看密码是什么 告诉我它尝试了多少次 那会很酷 有时应用程序可以工作 有时会崩溃 具体取决于密码是什么 我想知道是否可以采取任何措施来防止它因占用大量
  • gcc 没有小字符串优化吗?

    Most std string实现 包括 GCC 使用小字符串优化 例如 有一个answer https stackoverflow com a 21710033 2640636讨论这个 今天 我决定检查我编译的代码中的字符串在什么时候被移
  • 为什么 CUDA 内存复制速度会这样,有一些恒定的驱动程序开销?

    在我的旧 GeForce 8800GT 上使用 CUDA 内存时 我总是会遇到奇怪的 0 04 毫秒开销 我需要将 1 2K 传输到设备的常量内存中 处理其中的数据并从设备中仅获取一个浮点值 我有一个使用 GPU 计算的典型代码 alloc
  • 结构中的内存布局差异

    我在 C 中有以下结构 struct A int a double b float c 该结构与添加了函数的结构之间的内存布局是否存在差异 struct B int a double b float c void foo B foo do
  • 在 Java 中,是否可以增加 JVM 的可用内存和/或终止其他 Java 程序?

    我对高级 Java 缺乏经验 所以请耐心等待 我对 Java 实现可称为 自主 功能的能力感到好奇 假设我们有两个 Java 程序正在运行 一个程序确定另一个程序正在占用内存 从而终止该程序和 或向 JVM 分配更多内存 我知道在 Java
  • 现代编译器的 C++ 中“memset”功能的状态

    Context 不久前 我偶然发现了 Alexandrescu 在 2001 年发表的 DDJ 文章 http www ddj com cpp 184403799 http www ddj com cpp 184403799 它是关于比较将
  • java如何存储文字?

    System out println 5678 该文字直接用在打印语句中 但是java是直接将其存储在内存中还是创建一个自动变量然后将其存储在那里 如果第二种情况成立 如果有人碰巧使用相同的变量名意外访问该变量 会发生什么情况 解释 Jav
  • Linux 分配器不会释放小块内存

    Linux glibc 分配器似乎表现得很奇怪 希望有人能对此有所启发 这是我拥有的源文件 首先 cpp include
  • iOS 内存占用的正确统计数据是什么?活字节?真实记忆?其他?

    我在这一点上肯定很困惑 我有一个 iPad 应用程序 在对象分配工具中显示 6 12mb 的 实时字节 使用情况 如果我调出内存监视器或活动监视器 在严重使用后 实际内存 列会持续攀升至 80 90mb 左右 那么我的内存占用是正常的还是高
  • 只有geometry.elementsNeedUpdate 会导致内存分配 - 为什么?

    如果我有一个简单的动画功能 function animate geometry elementsNeedUpdate true allocates memory without geometry faces 0 color requestA
  • 对 SQL Server 2005 结果进行分页

    如何在 SQL Server 2005 中对结果进行分页 我在 SQL Server 2000 中尝试过 但没有可靠的方法来做到这一点 我现在想知道SQL Server 2005是否有任何内置方法 分页的意思是 例如 如果我按用户名列出用户

随机推荐

  • iPhone OS:从匿名对象获取方法和变量列表

    我正在构建我的第一个 iPhone Obj c 应用程序 并且我有大量的数据保存子类 我将它们传递给引用函数 对于 cite 函数 这些对象是匿名的 我需要找到一种方法来访问每个传递对象的所有变量 我一直在使用预构建的 NSArray 和选
  • 如何在 Ruby 中创建自定义排序方法

    我想指定一个自定义块方法 通过评估两个属性来对对象数组进行排序 然而 经过多次搜索 我没有找到任何没有的例子 lt gt 操作员 我想比较a to b if a x less than b x return 1 if a x greater
  • 密文窃取算法 - 哪一种是正确的?

    网络上提出了两种算法 在这两种算法中 第一部分是相同的 1 Pad the last partial plaintext block with 0 2 Encrypt the whole padded plaintext using the
  • AttributeError:“模块”对象没有属性“TestCase”

    我有名为 test py 的unittest 文件 My code import unittest class Test unittest TestCase def myTest self a 1 self assertEqual a 1
  • 将 std::stack .pop() 方法的结果存储到变量中

    我想做以下事情 std stack
  • MVC4 如何设置 cookie 然后重定向到操作

    您好 我正在尝试获取用户角色并将其设置为我的应用程序中的 cookie 我有以下有效的代码 public ActionResult Index var user User Identity Name set by 3rd party cen
  • 通过链接导航多个对象而不重复

    我正在尝试浏览一堆带有其他对象链接的对象 我想从 id 1 开始并浏览每个对象 有些对象会循环回到之前的对象 所以我想确保每个对象只查看一次 否则我会陷入无限循环 我还希望能够通过链接导航来判断哪些对象无法访问 我认为导航顺序并不重要 这是
  • BDD/TDD:依赖可以是一种行为吗?

    我被告知不要使用实施细节 依赖关系看起来像是一个实现细节 但我也可以将其表述为一种行为 示例 LinkList 依赖于存储引擎来存储其链接 例如 LinkStorageInterface 构造函数需要传递一个已实现的 LinkStorage
  • “ghs.google.com”域的机制是什么?

    如果我想给我的应用程序绑定一个域名GAE Google App Engine 我应该添加一条 CNAME 记录ghs google com 我想了解这个域名是如何运作的 例如 我有这样的 CNAME blog goace com ghs g
  • * foreach 里面的 foreach codeigniter 2?

    在 codeigniter 2 1 中 我尝试按类别显示频道 因此 如果我有一个名为 电影 的类别 我应该会看到电影中的频道列表 我尝试使用嵌套的 foreach 循环来完成此任务 但似乎无法使其工作 我的表结构是这样的 但更复杂 我的型号
  • strings.xml 中的 Android 变量

    我在某处读到如何在 XML 文档中使用变量 他们说这很简单 我想也是如此 我在 Android strings xml 文件中成功地使用了它 我一整天都这样使用它 直到突然 android 停止解析它并停止将它视为变量 我这样使用它
  • 一对一映射不适用于二级缓存

    我已经声明了 Hibernate 3 的以下映射 使用 FluentNHibernate public class ActivityMap ClassMap
  • 用渐变画线

    我在不同的位置画了多条线 例如 canvas drawLine startXLine1 stopXLine1 startYLine1 stopYLine1 paint canvas drawLine startXLine2 stopXLin
  • 为什么 fopen("any_path_name",'r') 不给出 NULL 作为返回值?

    在调试一些代码时 我得到如下内容 include
  • HTML表可选择行Javascript包[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Is there a Javascript package out there that makes table rows selecta
  • 在横向模式下向 UIScrollView 添加子视图

    我有一个以横向模式启动的视图控制器 其中有一个 UIScrollView 我尝试创建子视图并将它们添加到 UIScrollView 但视图的框架大小都是纵向大小 这是我的代码 void viewDidLoad super viewDidLo
  • Chrome 扩展:插入固定 div 作为 UI

    我想使用 chrome 扩展将 div 插入固定位置 它将覆盖您当前正在查看的页面 我担心的是 我希望它可以在任何页面上工作而不改变它 除了插入我的固定 div 之外 但我不知道我这样做的方式是否可行 目前 该按钮不会显示 并且我在让 di
  • Emoji 字符无法编码为 JSON

    我有一个UITextView我称之为messageField 其中的数据messageField is POST ed 以 JSON 格式发送到服务器 当用户输入表情符号字符时 我无法将数据编码为JSON 我认为 Emoji 使用 Unic
  • 顺序没有属性“validation_data”

    我从下面的链接下载并运行该文件https github com keunwoochoi keras callbacks example https github com keunwoochoi keras callbacks example
  • 确定虚拟内存的页表大小

    考虑一个具有 38 位虚拟字节地址 1KB 页和 512 MB 物理内存的虚拟内存系统 假设有效位 保护位 脏位和使用位总共占 4 位 并且所有虚拟页都在使用中 则本机上每个进程的页表总大小是多少 假设磁盘地址未存储在页表中 好吧 如果问题