面试_操作系统_分页、分段与地址转换

213 阅读4分钟

分页

基本原理

虚拟内存位于程序和物理内存之间,程序只能看见虚拟内存,再也不能直接访问物理内存。但程序最终肯定是运行在物理内存中的,解决方法就是分段和分页两种技术。 分页机制就是把内存地址空间分为若干个很小的固定大小的页,每一页的大小由内存决定



为实现分页存储管理,需要哪些硬件的支持?
  1. 动态重定位技术
  2. 虚拟存储技术
  3. 多道程序设计技术



页面置换算法

在程序运行过程中,如果要访问的页面不在内存中,就发生缺页中断从而将该页调入内存中。此时如果内存已无空闲空间,系统必须从内存中调出一个页面到磁盘对换区中来腾出空间。

最佳置换OPT:(理想置换算法)替换最长时间不需要访问的页面 先进先出FIFO:按照队列的顺序 最近最久未使用LRU:替换在最近一段时间内最久不用的页面 时钟Clock:类似轮询,初始标记位0 加入或者使用时标记为1,替换标记为0的,当全部为1时,遍历并全更换为0

页面置换算法的主要目标是使页面置换频率最低(也可以说缺页率最低)。



快表:存放在高速存储器中的页表部分

  1. 为提供地址转换速度,设置一个专用的高速存储器,用来存放页表的一部分
  2. 快表表项:页号,页架号
  3. 这种高速存储器是联想存储器,即按照内容寻址,而非按照地址访问·


基于快表的地址转换流程

  1. 按逻辑地址中的页号查快表

  2. 若该页已在快表中,则由页架号和单元号形成绝对地址

  3. 若该页不在快表中,则再查主存页表形成绝对地址,同时将该页登记到快表中

  4. 当快表填满后,又要登记新页时,则需在快表中按一定策略淘汰一个旧登记项



颠簸(抖动)

在页面置换时,如果换出的页面是一个很快会再次访问的页面,则缺页后会继续缺页,导致整个系统的效率急剧降低。

解决方法:1.改进替换策略 2.增大物理内存




分段

虚拟内存采用的是分页技术,也就是将地址空间划分成固定大小的页,每一页再与内存进行映射。

分段的做法是把每个表分成段,一个段构成一个独立的地址空间。每个段的长度可以不同,并且可以动态增长。




段页式

程序的地址空间划分成多个拥有独立地址空间的段,每个段上的地址空间划分成大小相同的页。这样既拥有分段系统的共享和保护,又拥有分页系统的虚拟内存功能。



分页与分段的区别

  • 对程序员的透明性:分页透明,但是分段需要程序员显式划分每个段。

  • 地址空间的维度:分页是一维地址空间,分段是二维的。

  • 大小是否可以改变:页的大小不可变,段的大小可以动态改变。

  • 出现的原因:分页主要用于实现虚拟内存,从而获得更大的地址空间;分段有助于共享和保护。



缺页中断与一般中断的区别

  • 一条指令在执行期间,可能产生多次缺页中断
  • 缺页中断返回的是中断的那一条指令;而一般中断返回的是下一条指令


什么是大端小端,以及如何判断他们?

大端是指低字节存储在高地址;小端是指低字节存储在低地址。

可以通过联合体union来判断,因为union变量总是从低地址存储

int main()
{
     union test
     {
         int i;
         char c;
     };
     
     test t;
     t.i = 1;
     
     //如果是大端,则t.c=0x00,t.c!=1,返回0 ; 如果是小端,则t.c==0x01,则t.c==1,返回1
     return (t.c == 1);

}


x86架构下,页面大小为什么是4K? x64架构呢?

页面大了,浪费的内存也多了,4K是一个综合评价后的结果.