【计算机操作系统】虚拟内存是什么?分页系统地址映射?页面置换算法有哪些?分段地址映射又是什么?
发布日期:2021-06-29 15:36:16 浏览次数:2 分类:技术文章

本文共 2073 字,大约阅读时间需要 6 分钟。

【计算机操作系统】虚拟内存是什么?分页系统地址映射?页面置换算法有哪些?分段地址映射又是什么?

1.虚拟内存是什么?

虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存;

为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称之为一页。

虚拟内存允许程序不用将地址空间中的每一页都映射到内存空间,当程序引用不在物理内存中的页时,由硬件执行必要的映射,将缺失的部分装入物理内存并重新执行失败的指令。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IXOPSU8m-1617712841967)(imgs/15.png)]

2.分页系统地址映射?

总结:首先根据虚拟地址=前4位表示页面号 + 后12位表示存储偏移量;

之后根据页面号定位到 页表中,页表前四位中的最后一位表示是否存在内存中,之后用后面的12位来找寻偏移量。

内存管理单元MMU管理着地址空间和物理内存的转换。其中的页表(Page table)存储着(程序地址空间)和页框(物理内存空间的映射)表。

一个虚拟地址分为两个部分,一部分存储页面号,一部分存储偏移量

例子:

下图的页表存放着 16 个页,这 16 个页需要用 4 个比特位来进行索引定位。例如对于虚拟地址(0010 000000000100),前 4 位是存储页面号 2,读取表项内容为(110 1),页表项最后一位表示是否存在于内存中,1 表示存在。后 12 位存储偏移量。这个页对应的页框的地址为 (110 000000000100)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xdnKJ8wK-1617712841969)(imgs/16.png)]

3.页面置换算法是什么(高频)

在程序运行过程中,如果要访问的页面地址不在内存中,就发生缺页中断从而将该页调入内存中。

但是如果内存已无空闲空间了,系统就必须从内存中调出一个页面到磁盘对换区中来腾出空间。

类似于缓存淘汰策略,在缓存系统中,缓存的大小有限,当有新的缓存到达时,需要淘汰一部分已存在的缓存,这样才有空间存放新的缓存数据。

页面置换算法的主要目的是使页面置换频率最低(即缺页率最低)。

(1)最优:OPT

是一种理论上的算法,因为我们无法知道后面一个页面多长时间不再被访问。

举例:一个系统为某进程分配了三个物理块,并有如下页面引用序列:

7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1

开始运行时,先将 7, 0, 1 三个页面装入内存。当进程要访问页面 2 时,产生缺页中断,会将页面 7 换出,因为页面 7 再次被访问的时间最长。

(2)最近最久未使用

虽然无法知道将来要使用的页面情况,但是可以知道过去使用的页面的情况。

为了实现LRU,需要在内存中维护一个所有页面的链表。当一个页面被访问,将这个页面移到链表表头。这样就能保证链表表尾的页面是最近最久未使用的。

(3)最近未使用

每个页面都有两个状态位:R与M,当页面被访问时设置页面的 R=1,当页面被修改时设置M=1.其中R位会被定时清零。

  • R=0, M=0;
  • R=0, M=1;
  • R=1, M=0;
  • R=1, M=1

当发生缺页中断时,NRU算法随机从类编号最小的非空类中挑选一个页面将它换出。

NRU优先换出已经被修改的页面(R=1,M=1),而不是被频繁使用的干净页面(R=1,M=0)

(4)先进先出

选择换出的页面是最先进入的页面,该算法会将那些被访问的页面换出,导致缺页率升高。

(5)第二次机会算法

FIFO算法可能把经常使用的页面置换出去,为了避免这以问题,对该算法做一个简单的修改:

当页面被访问 (读或写) 时设置该页面的 R 位为 1。需要替换的时候,检查最老页面的 R 位。如果 R 位是 0,那么这个页面既老又没有被使用,可以立刻置换掉;如果是 1,就将 R 位清 0,并把该页面放到链表的尾端,修改它的装入时间使它就像刚装入的一样,然后继续从链表的头部开始搜索。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GzcVWToM-1617712841971)(./imgs/17.png)]

(6) 时钟

第二次机会算法需要在链表中移动页面,降低了效率。时钟算法使用环形链表将页面链接起来,在使用一个指针指向最老的页面。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jhhbZIxO-1617712841974)(imgs\18.png)]

4.分段地址映射与分页地址映射是什么?

为什么会有分段?

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

但像下图,一个编译器在编译过程中建立的多个表,有 4 个表是动态增长的,如果使用分页系统的一维地址空间,动态增长的特点会导致覆盖问题的出现。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P0AVjNQB-1617712841980)(imgs/19.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eaPQufdX-1617712841983)(imgs/20.png)]

段页式

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

分页和分段的比较

  • 出现的原因:分页主要用于实现虚拟内存,从而获得更大的地址空间;分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间并且有助于共享和保护;
  • 大小是否可以改变:页的大小不可变,段的大小可以动态改变;
  • 地址空间的维度:分页是一维地址空间,分段是二维的;
  • 对程序员的透明性:分页是透明,但是分段需要程序员显式划分每个段;

转载地址:https://codingchaozhang.blog.csdn.net/article/details/115470337 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【计算机操作系统】设备管理?磁盘结构是怎么样的?磁盘调度算法有哪些?
下一篇:【计算机操作系统】进程管理详解?进程与线程区别是什么?进程调度的算法有哪些?进程通信有哪些?

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月09日 16时51分12秒