操作系统交换页面入门理解

    对于操作系统来说,当物理内存不足以满足为当前进程增加新的页面的时候,需要将当前内存中的页面置换出去,置换出去的页面一般是存放到磁盘上的,在linux下,有一种文件系统叫做交换分区,就是用来存放被操作系统从内存中置换出去的页面。

    一般有两种模式用来实现交换分区的功能:

    a.交换分区中保存进程的所有页面的副本

    这种模式下,进程启动后,交换分区中就为该进程的虚拟内存空间分配了一个副本,每一个该进行的虚拟页面在交换分区上都有一个副本,当发生缺页,该进程的页面被选择换出后,操作系统根据该页面的虚拟页面好可以很快找到交换空间中该页面的开始地址。如果被置换出内存之前该页面被修改过(例如数据区的页面),那么就把被换出的页面写入到交换空间中该虚拟页面对应的页面上。

    b.交换分区中之保存被置换出内存的页面

    这种情况下,当进程启动的时候,交换分区中该进程的页面数量为0,只有当该进程在内存中的页面由于其他进程缺页错误引发页面置换导致被换出,这些被换出的页面就被置换到了交换分区中,这种情况下,由于交换分区中的页面不是根据虚拟地址空间连续的,因此,当再次加载交换分区中的页面时,会发现无法根据虚拟地址对应的页面号找到页面,因此,需要调整页表结构,除了保存虚拟页号和物理页号的对应关系,还需要保存在交换分区中的位置,方便从交换分区中重新加载页面到内存。

    有一个知识点这边重新复习一下,就是当进程运行到时候,其页表必须位于内存中。

    每个程序拥有自己的地址空间,这个空间被分割成多个块,每一块称作一页。每一页有连续的地址范围。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。当程序引用到一部分在物理内存中的地址空间时,由硬件立刻执行必要的映射。当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。

    当发生缺页错误时,从磁盘中调度页面到内存的流程如下图:



部分引用:

http://blog.csdn.net/github_37129174/article/details/78686830

https://www.cnblogs.com/edisonchou/p/5094066.html

猜你喜欢

转载自blog.csdn.net/challeng_everything/article/details/79613721