• 分页式内存管理


    原文:https://www.tomorrow.wiki/archives/334

    页式存储器管理是操作系统中十分重要的内容,这也正是虚拟存储关键技术之一。如果没有理解页式管理、段式管理和段页式管理,那么对操作系统中的虚拟内存理解也只有十之一二,因为操作系统中的各个概念都是密不可分的,你中有我,我中有你。本文将讲述内容包括一级页表、快表、二级页表和多级页表。

    相对物理块来说,页是逻辑地址空间(虚拟内存空间)的划分,是逻辑地址空间顺序等分而成的一段逻辑空间,并依次连续编号。页的大小一般为 512B~8KB。

    例如:一个 32 位的操作系统,页的大小设为 2^12=4Kb,那么就有页号从 0 编到 2^20 的那么多页逻辑空间。

    物理块

    物理块则是相对于虚拟内存对物理内存按顺序等大小的划分。物理块的大小需要与页的大小一致。

    例如:2^31=2Gb 的物理内存,按照 4Kb/页的大小划分,可以划分成物理块号从 0 到 2^19 的那么多块的物理内存空间。

    逻辑地址结构

           页式存储管理中,逻辑地址可以解读成页号+地址偏移量(页内地址)。如下图所示:

      深入理解操作系统之——分页式存储管理

            这是一个 32 位的逻辑地址,页大小设为 2^12=4Kb。高 20 位则是页号,低 12 位则是页内地址。逻辑地址为 A,页面大小为 L,则页号 P 和页内地址 d 计算公式如下:

    深入理解操作系统之——分页式存储管理

    页表

           页表是记录逻辑空间(虚拟内存)中每一页在内存中对应的物理块号。但并非每一页逻辑空间都会实际对应着一个物理块,只有实际驻留在物理内存空间中的页才会对应着物理块。

           页表是需要一直驻留在物理内存中的(多级页表除外),另外页表的起址和长度存放在 PCB(Process Control Block)进程控制结构体中。

    深入理解操作系统之——分页式存储管理

    逻辑地址到物理地址的变换过程

    1、进程访问某个逻辑地址时,分页地址机构自动将逻辑地址分为页号和页内地址

    2、页号大于页表长度,越界错误

    3、页表项的地址 p = 页表起始地址 F + 页号 P * 表项大小 S,从而得到对应的物理块号 B

    4、页和物理块的大小是一致的,所以 页内地址=块内地址

    5、然后 物理地址 = 物理块号 B * 页大小 L + 页内地址

    6、根据物理地址读取数据

    深入理解操作系统之——分页式存储管理

           例:某系统采用分页式存储管理,页大小为 2KB。已知进程 A 的逻辑地址空间为 4 个页,内存分配如下页表所示,求逻辑地址 4832 的物理地址。(所有数据都是十进制)

    深入理解操作系统之——分页式存储管理

    解:

    2KB=2048B

    页号 P=逻辑地址/页大小=4832/2048=2

    页内地址 F=逻辑地址%页大小=4832%2048=736

    根据页表查得 2 号页对应着 25 号物理块

    物理地址 A=物理块号*页大小 + 页内地址=25*2048+736=51936

    快表(TLB,Translation Look aside Buffer) 

    快表是为了加快虚拟地址到物理地址这个转换过程而存在的。页式存储管理的快表一般存放在 CPU 内部的高速缓冲存储器 Cache。快表与页表的功能类似,其实就是将一部分页表存到 CPU 内部的高速缓冲存储器 Cache。CPU 寻址时先到快表查询相应的页表项形成物理地址,如果查询不到,则到内存中查询,并将对应页表项调入到快表中。但,如果快表的存储空间已满,则需要通过算法找到一个暂时不再需要的页表项,将它换出内存。因为高速缓冲存储器的访问速度要比内存的访问速度快很多,因此使用可以大大加快虚拟地址转换成物理地址。根据统计,快表的命中率可以达到 90%以上。

    深入理解操作系统之——分页式存储管理

    一级页表的缺陷

           由于页表必须连续存放,并且需要常驻物理内存,当逻辑地址空间很大时,导致页表占用内存空间很大。

           例如,地址长度 32 位,可以得到最大空间为 4GB,页大小 4KB,最多包含 4G/4K=1M 个页。若每个页表项占用 4 个字节,则页表最大长度为 4MB,即要求内存划分出连续 4MB 的空间来装载页表;若地址程度为 64 位时,就需要恐怖的 4*2^52Byte 空间来存储页表了。而且页表采用的是连续分配,不是分页分配。

           采用离散分配方式的管理页表,将当前需要的部分页表项调入内存,其余的页表项仍驻留在磁盘上,需要时再调入。

    二级页表

           二级页表即是对页表本身采用分页式管理,对页表本身增加了一层页表管理。页的大小就是一个页表的大小,一个页表只能装在一个页中。

    地址换算:

    深入理解操作系统之——分页式存储管理

    从上图而知,在二级页表管理中,逻辑地址分成了三部分:顶级页号、次级页号和页内地址。根据顶级页表起始地址和顶级页号从顶级页表中查到次级页表对应的物理块号,接着由该次级页表的物理块号结合次级页号得到对应页的物理块号,结合页内地址求得最终的物理地址。

    多级页表

    多级页表和二级页表类似。多级页表和二级页表是为了节省物理内存空间。使得页表可以在内存中离散存储。(单级页表为了随机访问必须连续存储,如果虚拟内存空间很大,就需要很多页表项,就需要很大的连续内存空间,但是多级页表不需要。)

  • 相关阅读:
    二叉排序树的最低公共祖先
    [jobdu]树中两个结点的最低公共祖先
    [jobdu]用两个栈实现队列
    [leetcode]Balanced Binary Tree
    [jobdu]从尾到头打印链表
    [leetcode]Flatten Binary Tree to Linked List
    [leetcode]Unique Binary Search Trees
    hdu 4059
    hdu 3972 1 M possible
    CF 317D Game with Powers
  • 原文地址:https://www.cnblogs.com/shiqi17/p/12977310.html
Copyright © 2020-2023  润新知