云计算百科
云计算领域专业知识百科平台

操作系统为什么要分页

1.从程序加载说起:分段机制在做什么

  • 你或许听说过分页机制:它把物理内存划成固定大小的页;而分段则是按代码、数据、栈这类逻辑单位切成大小不同的段。你有没有想过,这样切分不影响程序运行吗?

1.1用户程序主要在做什么

  • 用户程序一般有代码段、数据段、栈段:跑代码、读写数据、压栈弹栈,偶尔跳去别的代码段。它完全不关心自己落在物理内存哪儿——反正不知道,也管不着。

1.2操作系统主要在做什么

  • OS负责把各段装进物理内存,还得做重定位:程序不知道新家在哪,OS得帮它记住。办法是:程序头部段记录基本信息;OS装好各段、登记段描述符,再把选择子回填到头部段。于是程序靠头部段这张“地址通讯录”找到各个段。

1.3总结

  • 操作系统怎么把用户程序分配到物理内存中用户程序并不关心,只要操作系统加载完用户程序后,把“地址通讯录”写好了就行,否则用户程序无法找到自己想要的内存。
  • 分页是另一套“通讯录”:它记的是固定大小的页对应哪儿,不是段对应哪儿。下图显示了纯分段和纯分页下的各个内存情况。
    在这里插入图片描述
    在这里插入图片描述

2.为什么要进行分页

  • 分段明明好好的,为什么要进行分页?很多人以为分段模式下内存是无法换入换出到硬盘的但是分页可以,所以分页代替了分段,这是错误的,分段模式下也可以进行换入换出功能,主要是因为分段模式下对比分页模式的话换入换出的缺点太多了。

2.1 分段下内存的换入换出

  • 分段模式下,物理内存中是各个大小不一的内存段。当某个代码段访问某个内存段时,根据段描述符信息找到该段;根据描述符中的 P 位判断该段是否在内存中:

若 P=1,说明该段在物理内存中,直接用描述符中的基地址 + 段内偏移完成地址转换;
若 P=0,说明该段不在内存中,触发缺段异常缺段中断; 缺段异常处理程序会将该段从硬盘读入物理内存中的某个区域; 读入成功后,修改该段描述符:把基地址设置为该段实际装入的物理起始地址,并把 P 位置 1;若物理内存不够,还需要先换出其他段,或者进行内存紧凑。

2.2分析分段下内存的换入换出问题

2.2.1当内存中剩余空间足够时

  • 正常情况下,内存中空间充足的话,分段模式下是可以正常的将内存段加载到物理内存中,但有这么一个情况,如下图所示,假设物理内存总共10M,一开始有个进程A在中间占用了5M,可用内存还要5M,接着有个进程B即将被加载到物理内存中,进程B的代码段占了5M,但由于分段模式下段必须是连续的,所以它无法被加载到物理内存中,尽管物理内存中还要5M。
  • 如果进程B的代码段是一个个更小且大小相同的内存块,将一部分代码块放到上面,一部分放到下面,是不是就不用换入换出了?

在这里插入图片描述

2.2.2 当内存中剩余空间不足时

  • 还要一种情况,如下图所示,当内存中剩余空间不足时,也就是当物理内存剩余只有2M,但进程B带着它那5M的代码段进来,操作系统发现物理内存不足,于是只能将进程A或者进程C中某些段换掉。
  • 换入换出是非常消耗性能的,实际上我们可能只需要运行进程B代码段的一小部分,所以将进程B切分成固定大小的物理块,然后将这些小块加载到物理内存中,这样性能是不是更好?这就是分页了嘛。

在这里插入图片描述

2.2.3性能问题

  • 分段模式下,每个内存段可能很大,可能换入换出的速度会很慢,导致性能问题。
  • 所以我们又必要将内存段分块。
赞(0)
未经允许不得转载:网硕互联帮助中心 » 操作系统为什么要分页
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!