linux的虚拟内存机制, Linux是一种类似UNIX的操作系统,可以免费使用和自由传播。它是一个独立且非常强大的系统,拥有众多粉丝。那么我们今天就来了解一下它独特的虚拟内存机制。
linux的虚拟内存机制:
1.每个进程都有自己独立的4G内存空间,每个进程的内存空间都有类似的结构。
Linux内存管理采用页面管理和多级页表。当动态地址转换机制、主存和辅存共同实现虚拟内存新进程的建立时,
会建立自己的内存空间,这个进程的数据和代码会从磁盘复制到自己的进程空间,数据在哪里,
它由进程控制表中的task_struct、task_struct中的链表和记录中的内存空间分配来记录。
哪些地址有数据,哪些地址没有数据,哪些可以读取,哪些可以写入,可以通过这个链表记录每个进程分配的内存空间,这些内存空间与相应的磁盘空间进行映射。
2.每个程序都可以看到一个完整而连续的地址空间,它与物理内存没有直接关系,而是操作系统提供的内存的抽象概念。
使每个进程都有一个连续完整的地址空间,然后在程序运行过程中完成虚拟地址到物理地址的转换。
我们也知道一个进程的地址空间是分段的,有所谓的数据段、代码段、bbs段、堆、栈等等。每个片段都有特定的功能。
同时电脑没有那么多内存(N个进程需要对应的n*4G内存)。要构建一个进程,需要将磁盘上的程序文件复制到进程对应的内存中。
对于一个程序对应多个进程的情况,它会浪费内存。
3.每个进程的4G内存空间只是一个虚拟内存空间。每次访问内存空间中的地址时,都需要将地址转换为实际的物理地址。所有进程共享相同的物理内存。
每个进程只将它需要的虚拟内存空间映射和存储到物理内存中。该进程需要知道哪些内存地址在物理内存中,哪些不在物理内存中,以及它们在哪里。
需要记录在页表中的页表的每个条目被分成两部分。第一部分记录页面是否在物理内存中,第二部分记录物理内存的地址。当进程访问虚拟地址时,
检查页表,如果相应的数据不在物理内存中,缺页异常处理过程是将该过程所需的数据从磁盘复制到物理内存中。
如果内存已满且没有空余空间,则找到一页进行覆盖。当然,如果被覆盖的页面已被修改,则需要将其写回磁盘。
4.每个进程的内存空间是一致且固定的,因此链接器可以在链接执行文件时设置内存地址,而不管这些数据的最终实际内存地址。
这就是拥有独立内存空间的好处。当不同的进程使用相同的代码(例如库文件中的代码)时,物理内存中只能存储该代码的一个副本。
不同的进程只需要映射自己的虚拟内存来节省内存。当程序需要分配连续的内存空间时,
您只需要在虚拟内存空间中分配连续空间,但在实际物理内存中不需要连续空间,因此可以使用碎片。
linux的虚拟内存机制,以上就是本文为您收集整理的linux的虚拟内存机制最新内容,希望能帮到您!更多相关内容欢迎关注。