操作系统06——页面置换

291 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

分页和分段有什么区别?

  • 页式存储:将进程空间逻辑上划分成大小相等的若干页面,相应的在物理上划分成与页面大小相同的物理块,逻辑上连续的页面物理上不一定连续。
  • 段式存储:将进程空间逻辑上划分成若干段(非等分) ,段长度由连续逻辑的长度决定(如代码段,数据段,堆栈段),分配时以段为单位,各段不一定连续。
  • 段页式存储:先将进程空间在按段式存储划分成若干段,再把段内空间按页式存储等分成若干页。

区别:

  • 目的不同:分页的目的是管理内存,用于虚拟内存以获得更大的地址空间;分段的目的是满足用户的需要,使程序和数据可以被划分为逻辑上独立的地址空间
  • 大小不同:段的大小不固定,由其所完成的功能决定;页的大小固定,由系统决定;
  • 地址空间维度不同:分段是二维地址空间(段号+段内偏移),分页是一维地址空间(每个进程一个页表/多级页表,通过一个逻辑地址就能找到对应的物理地址);
  • 分段便于信息的保护和共享;分页使信息共享受到限制;
  • 碎片:分段没有内碎片,但会产生外碎片;分页没有外碎片,但会产生内碎片(一个页填不满)

什么是虚拟内存?

每个程序都拥有自己的地址空间,这个地址空间被分成大小相等的页,这些页被映射到内存;但不需要所有的页都在内存中,当程序用到不在物理内存中的页时,由操作系统将缺失的部分装入内存。这样,对于程序来说,逻辑上似乎有很大的内存空间,只是实际上有一部分是存储在磁盘上,因此叫做虚拟内存。

虚拟内存的优点是让程序可以获得更多的可用内存

如何进行地址空间到物理内存的映射?

内存管理单元(MMU)管理逻辑地址和物理地址的转换,页表(Page table)存储着页(逻辑地址)和页框物理内存空间)的映射表,页表中还包含有效位是在内存还是磁盘)、访问位(是否被访问过)、修改位(内存是否被修改过)、保护位(只读还是可读写)。逻辑地址页号+页内地址(偏移);每个进程有个页表,页表起始地址在PCB/寄存器中。

有哪些页面置换算法?

在程序运行过程中,如果访问的页面不在内存中就发生缺页中断将该页调入内存中。此时如果内存已无空闲空间,则从内存中调出一个页面磁盘中来腾出空间。页面置换算法的主要目标是使页面置换频率最低缺页率最低)。

  • 最佳页面置换算法OPT(Optimal replacement algorithm):置换以后不需要或最久才需要的页面,是一种理论上的算法,是最优策略;
  • 先进先出FIFO:置换在内存中驻留时间最长的页面。缺点:经常被访问的页面也会被换出,从而使缺页率升高;
  • 最近最少使用算法LRU(Least Recently Used):选择最近且未被使用时间最久的页面进行淘汰。
  • 第二次机会算法SCR:按FIFO选择某一页面,若其访问位为1,给第二次机会,并将访问位置0;
  • 时钟算法 Clock:SCR中需要将页面在链表中移动(第二次机会的时候要将这个页面从链表头移到链表尾),时钟算法使用环形链表,再使用一个指针指向最老的页面,避免了移动页面的开销;
  • 最近未使用算法NRU(Not Recently Used):检查访问位R、修改位M,优先置换R=M=0,其次是(R=0, M=1);
  • 最不经常使用算法NFU:置换出访问次数最少的页面