• 2.10 - 存储管理 2.11 - 页式存储 2.12 - 段式存储 2.13 - 段页式存储


    目录

    2.10 - 存储管理

    一、存储管理的目的

    二、分区存储管理

    1、概念

    2、分类

    3、固定分区

    4、可变分区

    5、可重定位分区

    2.11 - 页式存储

    一、分页存储管理

    1、概念

    2、如何得知每一页存在哪个物理块中

    3、物理地址

    4、页式存储的地址

    二、考法1:页式存储地址机构

    三、考法2:页式存储地址转换

    2.12 - 段式存储

    一、段式存储

    1、概念

    2、解决问题

    3、优点

    4、缺点

    5、段式存储的地址

    2.13 - 段页式存储

    一、段页式存储

    1、概念

    2、优点

    3、缺点

    4、段式存储的地址

    二、考法1:段页式存储的地址结构


    2.10 - 存储管理

    一、存储管理的目的

    • 解决内存利用率的问题。
    • 一个程序要运行时首先要加载到内存中,所以内存利用率的高低就会影响到程序的一些运行情况。

    虚拟存储管理:用来扩大主存选址空间的一种方案。

    二、分区存储管理

    1、概念

    • 早期的存储方案。

    • 就是将主存中的用户分区,划分成若干个区域,每一个区域给一个用户作业去使用,也就是说允许同时加载多个用户的作业到主存。

    2、分类

    • 分区存储管理发展过程:固定分区、可变分区、可重定位分区。

    3、固定分区

    • 概念:把内存按照预先定义好的大小进行划分,解决了多个用户同时加载的情况。

    • 缺点:但是当有超过分区大小的作业时,内存就无法加载作业了。

    • 举例说明:例如将64M的内存划分成四个区域,大小分别是8M、8M、32M、16M,此时可以同时加载四个作业,2个不大于8M的、一个不大于16M的、一个不大于32M的。此时如果有一个48M的作业需要运行,内存是无法支持的。

    4、可变分区

    • 概念:不给内存划固定的大小,按作业运行需要的内存空间给作业划分内存区域。作业完成以后,会将两个相邻的为空的区域进行合并,合成一个大的区域。解决了固定区域不能运行超过分区大小作业的问题。

    • 缺点:但是这种分区存储内存的利用率依然比较低,内存浪费较大。

    • 举例说明:例如有一个4M的作业运行完成释放4M的空间,无法给9M的程序用,与4M空间相邻的4M空间运行完作业后也释放了4M的空间,空间合并成8M的区域,但依然不能运行9M的作业,这2个4M的内存空间就一直处于空闲状态,造成了资源的浪费。 

    5、可重定位分区

    • 概念:采用一些算法提高内存的使用率。

    • 算法:

    最佳适应算法:按照作业运行所需区域的大小,在内存多个分区中查找大小最接近的区域,给作业划分空间,运行作业。

    最佳适应算法:按照作业运行所需区域的大小,在内存划分的最大区域中再划分一个区域,运行作业。

    首次适应算法:按照作业运行的大小,从第一个区域开始找,找到能运行作业的第一个区域就运行作业。

    循环首次适应算法:从上一次运行作业的区域往下找,找到能运行作业的第一个区域就运行作业。

    2.11 - 页式存储

    一、分页存储管理

    1、概念

    • 页式存储管理就是分页存储管理。

    • 是将内存划分为固定大小的块,在不同情况下固定块的大小不一样。

    • 实现当连续的内存空间不够大时,仍然可以将一个大的用户作业加载到内存中。

    • 例如以4K为单位,将每个物理块的大小划分为4K。再按照物理块的大小对用户作业进行切割,切割后得到N个4K大小的页,这时就可以把每一个页塞到一个内存块里面。又由于作业的页和内存的块大小一致,所以只要内存上有空闲块,就可以将作业的页塞进去。

    • 优点:内存利用率高,内存碎片小,分配和管理起来比较方便;

    • 缺点:由于增加了一个管理机构(页表),所以产生了系统的开销;可能产生抖动,当物理内存分配的块的数量,少于页的数量的时候,可能会产生频繁的调域调区,就会产生抖动,程序段含义不完整。

    2、如何得知每一页存在哪个物理块中

    • 通过页表组织一个逻辑上连续的空间存放用户的作业,页表来记录每一页都存在在哪个物理块中。

    3、物理地址

    对于页式存储来讲,物理地址就是:页存在内存中的哪一个块上面。

    举例说明

    • 以50个学生在5个教室上课(每教室容纳10人)为例,通过人员和教室位置的对应关系,把连续的50号人放到了5个教室,学生在内存中的位置就是物理地址(假设1号教室中的10个学生,编号是0~9,编号为5的学生在一号教室的位置可以描述为:1号教室的5号学生,(1,5)就是一个物理地址)。

    • 逻辑地址就是学生的编号,例如5号学生;物理地址就是这个学生在内存中具体的位置。

    4、页式存储的地址

    • 由页内地址+页号组成。

    • 页内地址:决定了每一页能存储的最大值。

    (1)页内地址也叫块内地址,因为页的大小跟块的大小是相等的,里面的编号的个数都是一致的。

    (2)如图所示,页内地址的编号从0~11,也就是12位二进制,就有2的12次方个编码,所以这个页内地址指定的页的大小或者块的大小就是4K.

    • 页号:决定了在整个页式存储中,程序做多能分多少个页。

    (1)决定页的编号(是第几个页,它的编号)。

    (2)如图所示,页号从12到31,共20个位二进制,也就是2的20次方个页,所以这个程序最多分1M个页。

    二、考法1:页式存储地址机构

    三、考法2:页式存储地址转换

    • 4K:说明有2的12次方个编码,也就是页面地址的编号是0~11,共12位。

    • 逻辑地址:2C18H:10110100011000,后12位表示页内地址,

    • 又由于页内存储的地址=页号+页内地址;C18H转成二进制正好12位,所以表示页内地址,2就是页号。

    • 物理地址就是说这个页具体放在哪个物理块中的哪个位置,根据页表中的记录可得知,2号页放在5号物理块中,页式地址不变,所以物理地址位5C18H.

    2.12 - 段式存储

    一、段式存储

    1、概念

    • 按段进行存储,会将用户的作业按照程序段的大小进行划分,然后在内存中找到适合程序段执行大小的空间,将代码段塞进去即可。

    2、解决问题

    • 由于页式存储会把程序按页进行切割来实现程序功能。但是当一个6K的程序,按每页4K进行存储时,就会导致每一页的程序功能不太完整,所以就不利于在多种情况下调用这个程序。为了解决这个问题,就有了段式存储。

    3、优点

    • 由于每一段的程序含义被保存下来了,所以利于多道程序共享该程序段的含义。

    4、缺点

    • 由于段的大小是不确定的,所以将将程序段塞到大小不一的内存中会造成内存空间大量的浪费。

    5、段式存储的地址

    • 段式存储的地址=段号+段内地址

    • 段内地址:决定了每一个段能存储的最大值。

    • 段号:决定了段式存储中最多允许有多少个段。

    2.13 - 段页式存储

    一、段页式存储

    1、概念

    • 程序某一段按段式存储分隔,由于每一段大小不确定,所以造成内存空间浪费比较大,所以通过页式存储的解决方案,为每一个段分配一个逻辑上连续的空间。

    • 也就相当于将用户作业划分成很多歌程序段,再将程序段划分成很多个页,再为每一个页在内存中找到一个内存块存放。

    • 也就是用户的作业按段进行划分,内存空间是按固定大小进行切割的。

    • 所以通过页式存储的原理来解决每一个段的存放问题。所以理解段页式存储的过程就是:

    (1)看成程序分成了多少个段;

    (2)每一个段的页表大小,以及起始页是多少;

    (3)然后再找每一个页表中的也分别放在哪一个块上面。整体形成了一个耳机的关系。

    2、优点

    • 结合了页式存储和段式存储的优点。

    • 内存利用率高,内存碎片小。

    • 存储时每一个程序段的含义得到了保存。

    3、缺点

    • 管理机制比较复杂,导致软件管理的成本增加,系统复杂度增加,从而导致系统性能的下降,执行效率下降。

    4、段式存储的地址

    • 采用也页式存储的方式来存储每一个程序段。

    • 每一个页的地址是多大。在一个段中最多允许有多少个页。整个段页式存储最多允许多少个段。

    二、考法1:段页式存储的地址结构

    • 段页式存储的考题中,注意用词,应该是最大允许。

    • 因为段的大小是不确定的,所以每个段中存在的页的个数也是不确定的,所以只能是最大允许,不能说均是。

  • 相关阅读:
    华为od机考题目-导师请吃火锅
    【ACM学习】【STL】顺序容器的特性比较(不包括array)
    【Pytorch + AlexNet + torchsummary】torchsummary 查看网 及 各层输出的 feature map 尺寸
    如何加快发明专利的审查时间
    c++ 线程安全的string类
    SpringBoot自动配置工作流程中变更自动配置
    【JavaEE重点知识归纳】第11节:认识异常
    Ubuntu 下C++数字雨
    计算机毕业设计Java派大星水产商城(源代码+数据库+系统+lw文档)
    Leetcode—34.在排序数组中查找元素的第一个和最后一个位置【中等】
  • 原文地址:https://blog.csdn.net/qq_46071165/article/details/126160184