首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系统是如何从内存映射文件的内存中捕获通过“`asm: MOV`”访问内存的?

问系统是如何从内存映射文件的内存中捕获通过“`asm: MOV`”访问内存的?
EN

Stack Overflow用户
提问于 2013-11-09 11:50:13
回答 1查看 56关注 0票数 0

当我使用mmap()将文件映射到内存时,它不是直接加载到内存中(缓存缓冲区RAM),而是只加载访问特定​​映射内存区域时所需的部分。

系统如何通过C: *ptr = val;或asm: MOV捕捉到内存映射文件的内存并从文件中生成加载数据,使用什么机制(IRQ或类似于分页内存的机制),以及如何调用它?

  • x86_64
  • 操作系统: Linux,Windows
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-09 15:54:33

简单的回答是传呼。

内核跟踪每个进程的不同虚拟内存区域(又名映射)。有文件支持映射和匿名映射(交换支持映射)。在Linux上,您可以使用cat /proc/<pid>/maps查看它们。

对按需页生存期内的不同阶段进行一些概述:

  • 访问的内存页是存在的,并且具有正确的权限,→访问按正常方式进行。
  • 访问的内存页不存在或没有适当的权限(→)-- CPU生成页面错误,内核查看错误地址并作出决定。在一些决定之后,重新尝试错误指令:

代码语言:javascript
复制
- It corresponds to a non-present file-backed mapping: load it from disk.
- It corresponds to a non-present non-file-backed (anonymous) mapping: swap it in.
- It's a write to a non-writable page, and corresponds to a writable mapping: it's a COW (copy-on-write) fault, duplicate (unshare) the page, mark the page in the page-table/TLB as writable.

​

  • 内核决定将页面写回磁盘:可能是由于内存压力、msync(),或者只是定期执行。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19875575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档