当物理内存完全被进程占用并引入新进程(类似优先级)时会发生什么。内存管理单元如何处理新旧进程请求的页面(资源)(相同的优先级任务)。
所以我的意思是问另一方面为类似优先级进程和物理内存完成的内存交换是如何完成的。请举例说明一下?
答案 0 :(得分:3)
你不应该关心那种情况发生了什么,以及当前的Linux桌面&笔记本电脑是一个不可能的案例(因为通常内核窃取文件系统缓存中的页面)。
当使用execve(2)系统调用启动新程序时,会设置新的内存映射(好像几乎由mmap(2)完成),可能还有copy-on-write机制。一旦程序访问它们,内核将出现页面错误并最终将页面加载到物理RAM中。它可能必须选择应该窃取哪些页面。如果它们是脏的,则必须将它们写入某个交换区域(如果映射为mmap
,则必须写入某个MAP_SHARED
- ed文件)。否则,它只是重用它们(并重新分配物理页面)。
如果使用了所有内存资源,可能会发生memory overcommit
MMU由linux kernel用于virtual memory管理。应用程序会在某些虚拟address space上看到(请查看/proc/
,例如cat /proc/self/maps
以了解它)。
MMU正在进行虚拟到物理地址转换,并提供页面错误。内核负责配置MMU(即设置虚拟地址空间转换机制)和处理页面错误(通常对应用程序是不可见的-eg,因为内核会从磁盘,文件系统或交换中获取页面area-,除了在访问“不存在的”页面时发生的SIGSEGV
信号。
请花些时间阅读此处给出的所有链接。