【说一下虚拟内存】
答案:
每个程序都拥有自己的地址空间,这个空间被分为连续地址范围的多个固定大型的页,这些页被映射到物理内存。我们把磁盘中的一部分页面放在物理内存中,并且取得内存中所有页的虚拟地址,维护一个虚拟地址与物理内存的地址的映射(内存管理集)。这样我们就可以只操作虚拟地址,然后通过一块小单元来得映射到范围较大的内存地址,节省空间且便于维护。当程序访问到了一个页面,它的虚拟地址没有与物理内存映射,就会发生[缺页中断]:会把CPU陷入到操作系统,操作系统通过页面置换算法得到一块空闲的物理内存,然后把需要访问的页面读入这块物理内存,然后修改虚拟地址和物理内存的映射关系,然后重新执行指令。
(这个映射的一个实现就是页表。页表可以理解为一个函数。虚拟地址被分为虚拟页号和偏移量,页表使得虚拟页号就对应页表的索引,再通过偏移量就能得到物理内存地址。对于大内存可以采用多级分页)
然而对于很多情况,有多个独立的地址空间要比 仅仅是一维的一个接一个的页面好得多。而且一维的连续存储页面是不易具备逻辑功能的。所以我们把一个程序的的存储分为若干有实际意义的段,然后把每个段看做成一个虚拟内存,再把每个段分成若干页面进行存储。而且段的大小可以随着程序的数据结构大小的变化而变化,这样就更加有利于我们虚拟内存的管理。
[页面置换算法]
答案:为什么要页面置换:上面….。发生页面置换时,要检测此页面是否被修改。若未被修改则直接淘汰,若被修改则需要写回磁盘以更新磁盘上的副本。
①最优页面置换算法:发生缺页中断时,置换掉最久不会被访问的页面,不可能实现。
②最近未使用:在页面被访问时更新它的R位、被修改时更新它的M位。然后按照未访问未修改、已访问未修改等 分为编号由小到大的四类。发生缺页中断时,在编号最小的非空类中随机挑选一个页面淘汰。
③先进先出:操作系统维护一个链表,最早进入的页面放在表头。发生缺页中断时,淘汰表头页面。但仅仅使用纯粹的先进先出页面置换算法容易把常用的页面淘汰掉,所以有了第二次机会页面置换算法。
④第二次机会:在淘汰表头页面时,会先检测页面的R位,若它最近被访问过,则把它R位置0并移到表位。它实际就是寻找在一个最近时间间隔内未被访问的页面。
⑤最近最少使用:在发送缺页中断时,置换未被使用时间最长的页面。它通过访问计数器实现,发生缺页中断时就淘汰计数器最小的页面。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧