无需硬件支持的虚拟内存

2024-03-26

在读的时候this https://stackoverflow.com/questions/11809162问题及其答案我忍不住想为什么硬件必须支持虚拟内存?

例如,我不能仅用软件模拟这种行为(例如,操作系统将所有内存表示为某个表,拦截所有与内存相关的操作并进行映射本身)?

有没有实现此类技术的操作系统?


据我所知,No.

intercept all memory related actions?这看起来并非不可能,但我必须这样做非常非常 slow.

例如,假设这段代码:

int f(int *a1, int *b1, int *c1, int *d1)
{
    const int n=100000;

    for(int j=0;j<n;j++){
        a1[j] += b1[j];
        c1[j] += d1[j];
    }
}

(从这里>o https://stackoverflow.com/questions/8547778/why-is-one-loop-so-much-slower-than-two-loops

这个简单的循环被编译为以下内容gcc -std=c99 -O3与海湾合作委员会4.8.3:

push   %edi                     ; 1
xor    %eax,%eax
push   %esi                     ; 2
push   %ebx                     ; 3
mov    0x10(%esp),%ecx          ; 4
mov    0x14(%esp),%esi          ; 5
mov    0x18(%esp),%edx          ; 6
mov    0x1c(%esp),%ebx          ; 7
mov    (%esi,%eax,4),%edi       ; 8
add    %edi,(%ecx,%eax,4)       ; 9
mov    (%ebx,%eax,4),%edi       ; 10
add    %edi,(%edx,%eax,4)       ; 11
add    $0x1,%eax
cmp    $0x186a0,%eax
jne    15 <_f+0x15>             ; 12
pop    %ebx                     ; 13
pop    %esi                     ; 14
pop    %edi                     ; 15
ret                             ; 16

即使这个非常非常简单的功能16访问内存的机器代码。大概OS的模拟代码有数百个机器代码,那么我们可以猜测这些访问内存的代码的速度至少会减慢数百倍。

而且,正是你可以观看的时候only内存访问代码。可能您的处理器没有此功能,您应该使用逐步调试,例如 x86 的 Trap Flag,并检查every每次都发出命令。

事情变得更糟 - 仅检查代码是不够的。您可能希望IP(指令指针)也遵循操作系统的虚拟内存规则,因此您必须在每个代码运行后检查IP是否超出页面边界。你还必须很小心处理可以改变IP的代码,例如jmp, call, ret, ...

我认为它无法有效实施。无法有效实施。速度是操作系统最重要的部分之一。如果操作系统变得有点慢,所有系统都会受到影响。在这种情况下,它不是a bit- 你的电脑变慢许许多多。此外,正如我上面所说,实现这一点非常困难 - 我宁愿编写一个具有硬件支持虚拟内存的处理器模拟器,也不愿做这项疯狂的工作!

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

无需硬件支持的虚拟内存 的相关文章

  • tcmalloc/jemalloc 和内存池之间有什么区别(以及选择的理由)?

    tcmalloc jemalloc是改进的内存分配器 还引入了内存池以更好地分配内存 那么它们之间有什么区别以及在我的应用中如何选择它们呢 这取决于您的程序的要求 如果您的程序有更多的动态内存分配 那么您 需要从可用的分配器中选择一个内存分
  • 在 CUDA 中的设备内存上分配 2D 数组

    如何在 Cuda 中的设备内存中分配和传输 往返于主机 2D 数组 我找到了解决这个问题的方法 我不必展平阵列 内置的cudaMallocPitch 函数完成了这项工作 我可以使用以下命令将阵列传输到设备或从设备传输阵列cudaMemcpy
  • 容器上的“container_memory_working_set_bytes”指标和 OOM-killer 之间有什么关系?

    我试图找出并理解 OOM killer 如何在容器上工作 为了弄清楚这一点 我读了很多文章 发现 OOM killer 会根据oom score And oom score是由oom score adj以及该进程的内存使用情况 有两个指标c
  • Java 内存错误:无法创建新的本机线程

    运行 java 服务器时 我在 UNIX 服务器上收到此错误 Exception in thread Thread 0 java lang OutOfMemoryError unable to create new native threa
  • VMA和ELF段之间的关系

    我需要确定 ELF 可执行文件的可加载段的 VMA VMA 可以从以下位置打印 proc pid maps VMA 之间的关系如下所示maps可加载段对我来说也很清楚 每个段由一个或多个 VMA 组成 内核使用什么方法从 ELF 段形成 V
  • 在Python中使用子文件夹的名称为每个子文件夹创建空文件

    如果我的文件夹结构如下 folder sub1 sub1 1 sub1 sub1 2 sub1 sub1 3 sub2 sub2 1 sub2 sub2 2 sub2 sub2 3 我想让每个子文件夹的文件使用子文件夹的名称 我怎样才能用P
  • 如何查找页面上R图形的字节大小?

    我想监控 R 在各个页面上生成的图形的基本质量 例如每个页面的字节大小 我现在只能对平均页面进行质量保证 请参阅下面的章节 我认为这项任务必须有一些比一般措施更内置的东西 生成 4 页的代码Rplots pdf我想知道此处输出中每个页面的字
  • 反序列化 XML 文件而不将其全部加载到内存中 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 假设您的应用程序使用 XmlSerializer 序列化对象 当应用程序的另一部分 例如外部服务或另一个组件 处理该 XML 文件时 会返回一个
  • JVM 最大堆大小可以是动态的吗?

    JVM Xmx 参数允许将 JVM 的最大堆大小设置为某个值 但是 有没有办法让这个价值动态化呢 换句话说 我想告诉 JVM 看 如果你需要它 就继续从系统中获取 RAM 直到系统退出 提问原因分为两部分 首先 所讨论的应用程序可以根据用户
  • 如何在 Java 应用程序中使用系统的文件上下文菜单?

    我想显示文件搜索的结果 我想启用文件选择的上下文菜单 这将是系统的上下文菜单 例如 如果用户右键单击 Windows 中的文件 我想显示带有选项的弹出菜单 Open 打开用 Edit 发给 Copy Cut etc 并且 如果可能的话 该菜
  • C# 应用程序可以使用多少 RAM? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如果我每次创建粒子时都强制重新初始化每个粒子,我是否应该使用粒子池

    我正在 XNA4 中创建一个粒子系统 但遇到了问题 我的第一个粒子系统是一个简单的粒子列表 其实例是在需要时创建的 但后来我读到了有关使用池的内容 我的第二个系统由一个充满粒子的池和一个发射器 控制器组成 我的池非常基本 这是代码 clas
  • 找出Linux上一个进程使用了​​多少内存页

    我需要找出进程分配了多少内存页 每个页面是 4096 进程内存使用情况我在查找正确值时遇到一些问题 当我查看 gome system monitor 时 内存映射下有几个值可供选择 Thanks 这样做的目的是将内存使用量除以页数并验证页大
  • 查找可以为 C# 中的数组分配多少内存

    我正在做一些需要初始化大数组的计算 数组的最大大小决定了我能解决的问题的最大大小 有没有一种方法可以以编程方式确定有多少内存可供使用 例如可能的最大字节数组 Thanks 嗯 依赖单个大数组会带来一系列相关问题 内存碎片 连续块 最大对象大
  • 以编程方式获取 Android 设备的所有 RAM 内存,而不仅仅是分配给用户进程的内存

    我有一台设备 我确信它的 RAM 内存为 512 MB 希望能够以编程方式检索该值 512 MB 到目前为止 我在互联网上遇到的主要是这两种方式 https stackoverflow com a 16143065 1521264 http
  • 操作系统和元操作系统有什么区别

    最近听到这个词元操作系统当我学习ros时 你能帮我区分一下吗操作系统 and 元操作系统 ROS 是什么和不是什么最好的解释是这张纸 http www robotics stanford edu ang papers icraoss09 R
  • JSON 解析器从大型 JSON 文件中逐条读取

    我有一个巨大的 JSON 文件 1GB 它基本上是以下格式的对象数组 x y p q x1 y1 p1 q1 我想解析这个文件 这样所有的数据都不会加载到内存中 基本上我想获取例如 数组中的前 1000 个对象进行内存处理 然后将接下来的
  • 操作/Lambda 表达式内存管理问题

    我将一个操作存储在局部变量中 然后在该局部变量超出范围后使用 使用前是否有被清理的危险 这是一个例子 public List GetMaps Action
  • python tracemalloc 模块分配统计信息何时会与 ps 或 pmap 中显示的内容不匹配?

    我正在尝试查找内存泄漏 所以我已经完成了 import tracemalloc tracemalloc start
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构

随机推荐

  • 为什么选择静态类而不是单例实现?

    静态与静态 单例问题之前在 SO 中已经讨论过很多次了 然而 所有的答案都指出了单例的许多优点 我的问题是 静态类比单例有什么优点 为什么不每次都简单地选择一个单例呢 静态类是你盒子里的一个技术工具 基本上是一个语言功能 Singleton
  • SQL聚合函数选择唯一值

    我有一个包含两列的行集 technical id and natural id 行集实际上是复杂查询的结果 假设列值之间的映射是双射的 即对于具有相同值的两行 technical id the natural ids 也相同 对于不同的te
  • iPhone 应用程序可以阻止电话吗?

    是否可以编写一个应用程序来阻止传入和传出的电话 还是 iPhone 被锁定太多了 谢谢 编辑 请参阅下面 Rajan Maheshwari 的回答 CallKit 现在提供了这一点 即使那些看似永远不会改变的事情 最终也可能会改变 任何修改
  • Django 从 postgres JSON 字段获取值

    我有一个简单的模型 例如 class MyModel models Model data JSONField JSON 字段data结构如下 name Brian skills id 4 name First aid id 5 name S
  • 如何删除 Visual Studio PIN TAB 图标(显然在选项卡上)

    有没有办法完全删除 Visual Studio 2010 中的 pin 选项卡选项 如何 我一直不小心点击它 我希望它消失 我从不使用它并且总是不小心点击它 thnx 附注右键单击 PIN 图标确实会弹出一些自定义对话框 但无法删除它 无法
  • SimpleHTTPServer 添加 default.htm default.html 到索引文件

    我总是用 python m SimpleHTTPServer对于快速本地静态 Web 测试 它非常适合index htm or index html作为索引文件 不过我需要使用default htm or default html对于我目前
  • Sequelize cli 模型创建

    我一直在尝试创建一个user model使用sequelize cli 但每当我插入更多参数 如主键和唯一 时 解析器就会失败 例如 npx sequelize model create name user attributes name
  • 通过序言格式化 csv 表?

    尽我所能 我无法弄清楚如何更改 sphinx 的 pdf 输出中的默认表格格式 我可以编辑 tex 文件或 writer py 源代码 但这两个似乎都是不好的选择 有什么东西可以通过序言来实现这一点吗 取决于您试图通过更改表格格式来完成的任
  • OWL 中表达式前面的列表?

    OWL 中表达式前面是否可以有一个列表 就像是 Dairy Egg Nut rdfs subClassOf FoodGroup or Dairy Egg Nut rdfs subClassOf FoodGroup 或者一般来说 是否存在针对
  • PHP 日期时间字符串区分

    在这两种情况下 我都可以从字符串创建日期对象 如下所示 dt strtotime 2013 04 19 17 00 00 or dt strtotime 10 hours 我需要一种方法来区分这两种日期类型 无论是相对数据字符串还是绝对数据
  • Windows 7 上的全屏 OpenGL 窗口打开的模态对话框不显示

    看来我的问题可能与未回答的相关问题相同 Windows 7 上出现 GLUT 的 OpenGL 全屏模式不显示消息框 https stackoverflow com questions 1842312 opengl with glut on
  • Ajax 追加加载

    它必须是jquery 我有文件 text html 其中有 6 个 div a b c d e f 在另一个文件中 我有一个 div 我喜欢它将 a b c d e f 的内容填充到该单个 div 中 我尝试过 load 但 b 替换了 a
  • ImageMagick - “未找到 CORE_RL_magick_.dll”或如何使用 ruby​​ 1.9.2 在 Windows 上安装 RMagick

    我正在开发 Rail3 应用程序 经过几个小时的努力 终于在 win7x64 ruby 1 9 2 上安装了 rmagick 2 13 1 gem 没有错误 我遇到了另一个错误 是的 我听说 Windows 中的 Rails 体验可能会很痛
  • 按一天中的时间自动切换 Windows 10 中的暗/亮模式(无需修改或更改主题!)

    如今大多数设备都允许自动切换暗 亮模式 但 Windows 10 似乎没有这样的功能 有办法做到这一点吗 例如使用任务计划程序 似乎有很多关于如何以编程方式更改窗口 主题 的示例 但没有关于亮 暗模式切换的示例 可以在 设置 颜色 中为 W
  • jQuery 圆函数

    如何使用 jQuery 对数字进行四舍五入 如果数字是 3168 我想将其打印为 32 或者 如果数字为 5233 则结果应为 52 我怎样才能做到这一点 我应该使用Math round功能 是的 您应该使用 Math round 除以 1
  • 并发数据结构设计

    我正在尝试提出用于高吞吐量 C 服务器的最佳数据结构 该数据结构将用于存储从几到几百万个对象的任何内容 并且不需要排序 尽管可以非常便宜地提供唯一的排序键 要求是它能够支持高效的插入 最好是 O 1 中等效率的删除和高效的遍历 它不需要支持
  • 如何测试事件是否包含事件处理程序?

    我想测试那个班级A s RegisterEventHandlers 方法将其方法之一注册为EventHandler课堂活动B 我怎样才能做到这一点 我正在使用最小起订量 如果这很重要的话 我认为没有办法从类外部检查事件处理程序委托 如果我错
  • 在文本区域上启用垂直滚动

    我有一个文本区域 我想启用垂直滚动 当我超过文本区域的高度时 它的大小会增加 滚动条不出现 我希望出现一个垂直滚动条 并且用户也无法调整文本区域的大小 我在网上搜索并尝试发布的解决方案 但似乎没有一个有效 Demo http jsfiddl
  • Scala 中使用 TypeTag 和 ClassTag 的多态实例化

    在 Scala 2 9 中 可以将多态实例化实现为 def newInstance T implicit m Manifest T m erasure newInstance asInstanceOf T 但从2 10开始Manifest正
  • 无需硬件支持的虚拟内存

    在读的时候this https stackoverflow com questions 11809162问题及其答案我忍不住想为什么硬件必须支持虚拟内存 例如 我不能仅用软件模拟这种行为 例如 操作系统将所有内存表示为某个表 拦截所有与内存