当前位置:首页 > 内存 > 正文

什么是内存映射

  • 内存
  • 2024-05-22 07:12:36
  • 3468

一、内存地址映射是什么?内存的物理地址为A;即地址A,物理地址A的地址码需要内存来存储假设地址A存储的地址是B。称为map的地址表示B。其存储地址码A;地址C。B指向地址;这意味着它间接指向实际地址A到C。看起来像是地址代码1111的储藏室A。B具有该地址代码(将A的地址代码1111添加到B),B的地址为10000。我将B的地址10000放入C(01010)中,因此C是B的映射。


二、为什么要内存映射内存映射(mmap)是一种内存映射方法,它允许映射或其他对象到地址空间在磁盘地址和虚拟应用程序中的虚拟地址之间进行一对一映射。地址空间这种映射引用背后的进程可以使用参数来读写这块内存,系统会自动将隐藏页面重写到相应的磁盘文件中。应用程序处理指定的部分就像访问主内存一样。(1)线程启动映射过程,在虚拟地址空间中创建一个要映射的虚拟映射区域。
首先在用户空间调用mmap库函数,在当前处理器的虚拟地址空间中,找到一块符合虚拟内存映射要求的空闲连续虚拟地址,初始化该区域并插入直接将进程的地址区放入链表中或者与木头结合。
(2)系统在内核空间调用内核函数mmap来标识物理地址文件与进程虚拟地址之间的一一映射关系。
(3)进程发起对分配的堆空间的访问
进程进行访问虚拟地址、查找页表、发现该地址等读写操作不在内存的物理页中是因为虽然已经建立了映射关系,但是文件还没有从世界移动到内存中。发生页面错误,核心向全局请求页面。页进程首先检查缓存空间(swapcache)。如果没有找到,则通过nopage函数将丢失的页面从磁盘转移到内存。然后该进程将对其执行读取和写入操作。如果页面上的写操作改变了内容,系统会在一段时间后将脏页重写到磁盘。(改变的脏页不会自动更新到文件中,可以调用msync强制同步写入文件)