什么是内存页面错误?

时间:2010-06-13 11:34:05

标签: iphone memory-management core-data

来自docs

  

注意:Core Data避免使用该术语   因为它令人困惑而无法理解。   没有“虚无”的虚拟   内存页面错误。页面错误是   触发,引发,解雇或   遇到。当然可以   将内存释放回内核中   各种方式(使用功能   vm_deallocate,munmap或sbrk)。核心   数据将此描述为“转向   把对象变成了一个错误“。

核心数据中的故障本质上是内存页面错误吗?我对内存页面的内容只有一点了解。我相信它是执行程序和类似内容所需的“内存中的一段代码”,并且当应用程序运行时,代码片段作为“页面”被吸入内存并因为它们不被丢弃而被丢弃需要了。可能99%错了;)

任何?

3 个答案:

答案 0 :(得分:7)

  

我对内存页面的含义只有一点了解。我相信它是执行程序和类似内容所需的“内存中的一段代码”,并且当应用程序运行时,代码片段作为“页面”被吸入内存并因为它们不被丢弃而被丢弃需要了。

内存(即代码和数据)存在于内存中。

存在于内存中的每个东西都有一个地址(一个内存地址)。

内存地址空间(例如32位计算机上的4GB)被划分为“页面”,其中每个页面都是连续的内存块(例如,每页4KB)。

地址空间(由CPU和O / S映射)到RAM中(或可能映射到I / O端口,但这是一个不同的故事)。

安装的RAM(例如1 GB)可能少于地址空间(例如4 GB),因此某些内容(例如最近最少使用的内容)可能会被换出(通过O / S) RAM到磁盘上的页面文件。整个页面(例如4KB块)是交换的(不是单个字节)。

当应用程序尝试访问当前未映射到RAM的地址时,那就是所谓的页面错误。为了处理页面错误,操作系统可能:

  • 通过将某些内容(例如最近最少使用的内容)从RAM交换到磁盘
  • 来释放一些内存
  • 将新释放的现有RAM映射到应用程序尝试访问的地址
  • 从磁盘切换到RAM,无论应该在该地址(在过去的某个时间已经从该地址交换到磁盘)
  • 恢复应用程序停止运行的状态:应用程序再次尝试访问该内存地址,此时此时没有其他页面错误。

答案 1 :(得分:3)

从操作系统的角度来看,内存页面是应用程序的基本数据单元。您的所有代码和数据都以页面组的形式排列。当您的程序引用应用程序中的合法内存位置时 - 通过尝试读取或写入数据或加载指令,地址将转换为其中一个页面中的某个位置。当保存地址的页面实际上不存在于物理内存中时,会发生页面错误。此时,操作系统需要将页面从磁盘加载到内存中,以便程序可以继续。

答案 2 :(得分:2)

当您的程序运行时,并非所有程序都存储在RAM中 作为操作系统的一部分,存在分页机制,其仅存储RAM中最常用的存储器页面以便更快地访问 当您尝试访问当前未加载到RAM的内存位置时,会发生页面错误,并且页面将从磁盘中获取。
由于可用的RAM仅限于存储在RAM中的最重要的存储器页面。

此机制受操作系统实施的影响 为了更全面地探索操作系统理论,我推荐A.S.Tenenbaum的“现代操作系统”一书。