精华内容
下载资源
问答
  • 上篇介绍了内存管理连续分配方式,本文介绍非连续分配方式。 非连续分配方式 连续分配方式的缺点: 固定分区分配:缺乏灵活性,会产生大量内存碎片,内存的利用率极低。 动态分区分配:会产生很多外部碎片,虽然...

    前言

    上篇介绍了内存管理的连续分配方式,本文介绍非连续分配方式。

    非连续分配方式

    • 连续分配方式的缺点:
      固定分区分配:缺乏灵活性,会产生大量内存碎片,内存的利用率极低。
      动态分区分配:会产生很多外部碎片,虽然可以用紧凑技术来处理,但是紧凑的时间代价很高。

    • 非连续分配
      如果可以将一个进程分散的装入到许多不相邻的分区中,便可以充分的利用内存,而无需再进行紧凑。于是变产生了非连续分配方式。
      连续分配:为用户进程分配的是一个连续的内存空间;
      非连续分配:为用户进程分配的是一些分散的内存空间;
      在这里插入图片描述

    分页式存储管理方式

    分页存储的基本概念

    将内存空间分为一个个大小相等的分区(如每个分区4K),每个分区就是一个页框、或称页帧、内存块、物理块
    每个页框有一个编号,即页框号、或称内存块号、页帧号、物理块号
    页框号从0开始。

    将用户进程的地址空间也分为与页框大小相等的一个个区域,称为页、或称页面
    每个页面也有一个编号,即页号,页号也是从0开始的。

    可以这么理解,页框是物理地址,编号为页框号;页面是逻辑地址,编号为页号;

    操作系统以页框为单位为各个进程分配内存空间;
    进程的每个页面分别放入一个页框中,也就是说进程的页面与内存的页框有一对一的关系;
    各个页面不必连续存放,也不必按先后顺序来,可以放到不相邻的各个页框中。

    分页存储的地址转换

    image.png
    由上图看到,要进行逻辑地址到物理地址的转换,需要以下几步:

    1. 计算出逻辑地址对应的页号
    2. 计算出该页号对应对应页面在内存中的起始地址
    3. 计算出逻辑地址在页面内内的偏移量
    4. 物理地址 = 页面地址 + 页面偏移量

    如何计算页号和页面偏移量

    计算机中用二进制表示逻辑地址,如果一个页面大小为4k时,则分配如下图所示:
    image.png

    如何计算页号对应的页框号

    操作系统会为每个进程建立一张页表,用来记录本进程内每个页面在内存中存放的位置;

    1. 一个进程对应一张页面
    2. 进程的每一页应用 一个页表项
    3. 每个页表项由页号和块号组成
    4. 页面记录进程页面和实际存放的内存的内存块之间的对应关系
    5. 每个页表项的长度是相同的,页号是隐含的

    image.png

    如下示例,用3个字节表示块号,则该进程的页表大小为3n个字节;当然,实际中计算机是用4个字节表示块号,是为了方便页表的查询,使得每个页面恰好可以装得下整数个页表项。
    image.png

    基本地址变换机构

    基本地址变换机构是用于实现逻辑地址到物理地址转换的一组硬件机构。 基本地址变换机构可以借助进程的页表将逻辑地址转换为物理地址。
    通常会在系统中设置一个页表寄存器PTR,存放页表在内存中的起始地址F和页表长度M。其中页表长度是指这个页表中总共有几个页表项,即总共有多少页;页表项长度是指每个页表项占多大的存储空间;页面大小指一个页面占多大的存储空间;
    进程未执行时,页表的起始地址和页表长度放在进程控制块PCB中;当进程被调度时,操作系统内核会把他们放到页表寄存器中。

    • 基本地址变换流程如下图所示:
      image.png

    具有快表的地址变换机构

    它是基于基本地址变换机构的改进版本。

    局部性原理

    局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。

    • 时间局部性
      如果执行了程序中的某条指令,那么不久之后这条指令很有可能再次执行;
      如果某个数据被访问过,不就之后该数据很可能再次被访问(因为程序中存在大量的循环);

    • 空间局部性
      如果程序访问了某个存储单元,那么不就之后其附近的内存单元也很有可能被访问(因为很多程序在内存中都是连续存放的)。

    基于局部性原理,在上文介绍的基本地址变换机构中,每次访问一个逻辑地址,都需要查下内存中的页表,可能连续很多次查到的都是同一个页表,于是便有了块表。

    快表

    快表,又称为联想寄存器TLB,是一种访问速度比内存快很多的高速缓冲存储器,用来存放当前访问的若干页表项,以加速地址变换的过程。与此对应,内存中的页表常称为慢表。

    • 因为局部性原理,一般来说快表的命中率可以达到90%以上。

    • 基于快表的地址变换流程如下:
      image.png

    两种变换机构总结

    image.png

    两级页表

    单级页表存在的问题

    1. 假设32位指令机器,4G内存,页面大小为4KB,则共划分为2^32 / 2^12 = 220个内存块,即该系统中用户进程最多将会有220个页表项,再假设页表项长度为4B,即一个页表最大需要 2^20 * 4B = 222B,则共需要222/212=210个页框存储该页表。
      所以第一个问题是需要专门给该进程分配2^10=1024个连续的页框来存储这个进程的页表。

    2. 由于局部性原理,进程在一段时间内可能只需要访问几个页面就可以正常运行了。因此没必要让整个页表都常驻内存。

    解决问题一

    可以将页表再进行分组,使每个内存块刚好刚好可以放入一个分组。如刚才的例子,可以让每1K个连续的页表为一组,1K * 4B = 4K,刚好可以占满一个内存块,再将各组离散的放到各个内存块中。
    当然此时需要为离散分配的页表再建立一张页表,称为页目录表、或称外层页表、顶层页表
    image.png

    解决问题二

    即使用虚拟存储技术。
    可以在需要访问页面时才把页面调入内存,可以给每个页表项添加一个是否在内存中的标志位;
    若想访问的页面不在内存中,则产生缺页中断,然后将目标页面从外存调入内存。

    分段存储管理方式

    进程的地址空间,按照程序程序自身的逻辑关系划分为若干个段,每个段都有一个段名,每段从0开始编址。
    内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各个段之间可以不相邻。
    image.png

    • 段表
      image.png

    • 地址变换流程
      image.png

    分段与分页的对比

    • 分页是系统行为,对用户不可见;
      分段是对用户可见的,用户编程时需要显式的给出段名。

    • 分页的用户进程地址空间是一维的,程序员只需给出一个记忆符即可表示一个地址;
      分段的用户进程地址空间是二维的,程序员在标识一个地址时,纪要给出段名,也要给出段内地址;

    • 分段比分页更容易实现信息的共享和保护。因为可以显式的按段进行共享。

    • 分段和分页访问一个逻辑地址都需要两次访存;分段存储中也可以引入快表;

    • 优缺点
      image.png

    段页式管理方式

    综合了分页式和分段式的优缺点;
    将进程按照逻辑模块分段,再将各段分页,再将内存空间分为大小相同的内存块,然后进程内各个分页装入各个内存块中。

    • 段表、页表
      image.png

    • 地址变换流程
      其中也可以引入快表;
      image.png

    展开全文
  • 非连续分配管理方式分页存储管理...但是如果使用非连续分配管理方式,作业要求的1G内存空间可以分散的分配在内存各个区域,当然,这需要额外的空间去存储分散区域的索引。 根据分区大小是否固定分为分页存储管理方式和

    非连续分配允许一个程序分散的装入到不相邻的内存分区中。

    在连续分配管理方式中我们发现,即使内存中有超过1G的空闲内存,但是如果没有连续的1G空闲分区,程序仍然是无法运行的;但是如果使用非连续分配管理方式,作业要求的1G内存空间可以分散的分配在内存各个区域,当然,这需要额外的空间去存储分散区域的索引。

    根据分区大小是否固定分为分页存储管理方式分段存储管理方式

    分页存储管理方式

    分页存储管理方式中,根据运行作业时是否把作业所有页面装入到内存中才能运行分为基本分页存储管理和请求分页存储管理。

    请求分页技术采用虚拟技术,因此开始运行时,不必将作业全部一次性装入内存,而基本分页不是;请求分段和基本分段,请求段页式和基本段页式区别同上,本文介绍的均是“基本”的方式,后续介绍“请求”的方式。

    1. 基本思想

    • 把主存空间划分为大小相等且固定的块,块相对较小(要比连续分配中的固定分区的块小很多),作为主存的基本单位

    • 把进程也按照块为大小进行划分,进程在执行时,以块为单位进行内存申请

    2. 分页存储相关概念

    1. 页面和页面大小:进程中的块称为页,内存中的块称为页框或者页帧。页的大小应该是2的整数幂(方便地址装换)

    2. 地址结构:这里的地址也就是虚拟地址,又叫逻辑地址。虚拟地址包含两部分:高20位是页号,低12为是页内偏移量。每页大小是4KB,地址空间最多允许有2^20页。

    在这里插入图片描述

    1. 表:实现页号和物理块号(页框)的地址映射,一般存放在内存中。页表有页表项组成,页表项包含两部分:第一部分是页号,第二部分是物理内存块号。页表项的第一部分跟虚拟地址的第一部分相同,第二部分结合虚拟地址的第二部分可以共同组成物理地址
      在这里插入图片描述

    3. 地址转换

    • 地址转化是将逻辑地址(虚拟地址)转化为物理地址,借助于页表进行实现。

    在系统中通常设置有一个页表寄存器(PTR)用于存放页表的起始地址F和页表长度M。设页面大小为L,逻辑地址A到物理地址E的转化过程如下:

    1. 计算页号P(P=A/L)和页面偏移量(W=A%L)

    2. 比较页号P和页面长度M,如果P大于等于M,则产生越界,否则继续执行

    3. 根据页表中的页号查找对应的物理块号b

    4. 计算E=b*L+W,得到物理地址E,根据此地址去方位内存进行数据的存取或者指令读取

    在这里插入图片描述

    分段存储管理方式

    分页处理是从计算机的角度出发,以提高内存你的利用率,分页是通过硬件机制实现的,对用户来说是完全透明的;而分段管理方式是从用户的角度出发,以满足方便编程,信息保护和共享等方面的需求。

    1. 分段

    段式管理方式按照用户进程的自然段划分逻辑空间。举个例子,用户进程有主程序、一个子程序、栈和一段数据组成。于是可以将用户进程划分为4个段,每个段从0开始编址,并分配一段连续的空间**(段内要求连续,段间不要求连续)**,逻辑地址又两部分组成,第一部分是段号S,第二部分是段内偏移量。

    注意:在页式管理中,逻辑地址的页号和页内偏移量是对用户完全透明的,但是在段内管理中,段号和段内偏移量必须由用户显示提供,在高级编程语言中,这个工作由编译器完成。

    2. 段表

    每个进程中都有一张逻辑地址和内存地址映射的段表。其中每一个段表项对应进程的一个段,段表项记录该段在内存中的起始地址和段的长度。

    在这里插入图片描述

    3. 地址变换

    系统中设置了段表寄存器,用于存放段表的起始地址和段表长度。

    段表寄存器和页表寄存器的作用都有两个:第一是在段表或者页表中进行寻址;第二是判断是否越界。

    逻辑地址A到物理地址E转换过程如下:

    1. 从逻辑地址中取到段号S和偏移量W

    2. 比较段号的段长度M,如果S大于等于M,则产生越界,否则继续执行

    3. 在段表中查到对应内存块的起始地址(基址)

    4. 计算E=b+W,用的到的物理地址去访问内存

    在这里插入图片描述

    段页式管理方式

    页式管理方式能有效提高内存利用率;段式管理方式能反映程序的逻辑结构,有利于段的共享。将两种方法结合在一起,形成段页式管理方式

    在段页式系统中,作业的地址首先被分成若干逻辑段,每段有自己的段号,然后再将每一段分成若干个大小固定的页。对内存的管理方式仍然和分页管理方式一样,将其分成若干个和页面大小相同的存储块,对内存的分配以存储块为单位

    1. 逻辑地址

    逻辑地址分为三部分:段号、页号和页内偏移量

    系统为每一个进程建立一个段表,每个分段都有自己的一个页表。

    在这里插入图片描述

    2. 地址转换

    地址转换过程和上面提到的转换过程类似,首先根据段表查到页表的起始地址,然后根据页表找到物理内存块号(页框号),最后形成物理地址。

    在这里插入图片描述

    展开全文
  • 分区的动态分配就是简单的内存管理方法,当一个程序准许运行在内存中时,就会给这个程序分配一个连续的区间,当一个程序需要更多的空间时,也会分配一个连续内存区间给运行的程序以访问数据。 3、连续内存分配...

    目录

    一、连续内存分配

    1、内存碎片问题

    2、分区的动态分配

    3、连续内存分配策略

    二、非连续内存分配

    1、优缺点

    2、分段

    3、分页


    一、连续内存分配

    1、内存碎片问题

    内存碎片指的是空闲内存不能被利用。内存碎片又分外部碎片和内部碎片,外部碎片是指在分配单元之间的未使用内存,而内部碎片是指在分配单元中的未使用内存。

    2、分区的动态分配

    分区的动态分配就是简单的内存管理方法,当一个程序准许运行在内存中时,就会给这个程序分配一个连续的区间,当一个程序需要更多的空间时,也会分配一个连续的内存区间给运行的程序以访问数据。

    3、连续内存分配策略

    一、首次适配

    首次适配就是当一个程序需要分配n字节大小的空间时,使用第一个比n大的可用空闲块

    优点:简单,易于产生更大的空闲块

    缺点:容易产生外碎片

    二、最优适配

    最优适配就是当一个程序需要分配n字节大小的空间时,使用比n大的最小的可用空闲块

    优点:当大部分分配是小尺寸时,非常有效,避免分割大空闲块,比较简单

    缺点:容易产生外碎片和很多没用的微小碎片

    三、最差适配

    最差适配就是当一个程序需要分配n字节大小的空间时,使用比n大的最大的可用空闲块

    优点:如果分配是中等尺寸效果最好

    缺点:重分配慢,易产生外碎片,容易破坏大的空闲块以致大分区无法被分配

    四、压缩式碎片整理

    如下图,目前有四个程序占据着内存空间,当现在有一个需要5个块空间大小的程序也要运行,而如果采用上述三种连续分配策略,显然是无法做到的,因为内存中已经不具有连续的5个块大小的空间,但是我们发现,内存中有着5个不连续的块空间,如果对P1,P2,P3,P4四个程序进行压缩,那么我们将得到一个连续的5个大小的块空间,而这正好能够满足了另一个程序的需求,这就是压缩式碎片整理的思路。

    压缩式碎片整理要注意几点,要求所有程序是动态可重置的,当程序在运行的时候,肯定是不能重置的。如果不停的对程序进行压缩,重置,会导致开销很大。

    五、交换式碎片整理

    程序P1、P2、P3、P4都处于内存中,P1、P2、P4处于等待状态,P3处于运行状态,当P3运行到某时刻还需要3个内存块的空间大小,而这时内存空间已经满了,不能够给P3分配更多的空间了,就可以采用交换式碎片整理的方法,可以把P4这个程序放到磁盘上去,也就是虚拟内存上,这样主存就可以提供3个内存块的空间供P3使用,虽然P4放到了磁盘中,但是它的数据并没有丢失,也是保存在磁盘中。

    二、非连续内存分配

    1、优缺点

    优点:一个程序的物理地址空间是非连续的,可以使用非连续内存分配;更好的内存利用和管理;

    允许共享代码与数据;支持动态加载和动态链接

    缺点:建立虚拟地址和物理地址之间的转换,开销很大,所以要和硬件结合一起来管理

    2、分段

    程序的分段地址空间,把程序的逻辑地址空间分散到多个物理地址空间。

     一、分段寻址方案

    首先段访问机制有两种,一种是段寄存器+地址寄存器实现方案,另一种是单地址实现方案。

    应用程序的逻辑地址空间是一个连续的地址空间,通过分段有效的隔离开来,程序可以把它的堆栈段分离开来,放到某一特定的地址,这样能更有效的进行管理和分配,同时也能够让这种有效的保护机制的实现。如下图,左边是一些连续的逻辑地址,右边是一些非连续的物理地址,逻辑地址有段号和段偏移,程序访问内存地址需要段号和段偏移,段表里的内容是段的起始地址和段的长度限制,而段的起始地址又包括逻辑地址段号和对应的物理地址段号,段的长度限制就是段偏移。每次寻址时,先在段表里查询逻辑地址段号对应的物理地址段号,然后再加上段的长度限制,就可以得到了物理地址。

     

    3、分页

    一个程序的逻辑地址空间被划分为大小相等的页,而物理内存被分割为大小相等的帧,页帧包括页帧号和帧内偏移。

    一、页寻址机制

    页寻址机制就是页映射到帧,页是连续的虚拟内存,帧是非连续的物理内存,不是所有的页都有对应的帧。页表保存了逻辑地址和物理地址之间的映射关系,页表的索引是页号,所对应的内容是帧号。操作系统建立了页表,页表里有个驻留位,0表示没有这个页帧映射,1表示会有这个页帧映射。

    性能问题:页表可能非常大,因为一个程序就需要一个页表;访问一个内存单元需要两次访问内存,一次用于获取页表项,一次用于访问数据。

    如何处理这些性能问题?

    通过缓存,把页表放到离CPU比较近的地方,或者通过间接访问。具体点从速度上解决,就是把经常访问内存地址的页帧映射存放到CPU中的TLB表中。从空间上解决就是采用多级页表。

    展开全文
  • 内存连续分配管理

    2021-11-03 20:32:54
  • 操作系统——内存非连续分配方法 连续的内存分配方式允许程序分散地分配在内存空间中,其按照不同的分类有不同的分类结果: 基本分页存储管理方式 分页管理不会产生外部碎片。 思想: 把主存分为相对很小的且...
  • 目录逻辑地址与物理地址地址重定位绝对装入可重定位装入动态运行时装入连续内存分配管理方式单一连续分配固定分区分配动态分区分配首次适应算法(First Fit)最佳适应算法(Best Fit)最坏适应算法(Worst Fit)邻近...
  • 一、内存空间的扩充 (一)覆盖 覆盖技术的思想:将程序分为多个段(多个模块)。 常用的段常驻内存,不常用的段在需要时调入内存内存中分为一个“固定区”和若干个“覆盖区”。 需要常驻内存的段放在“固定区...
  • 内存管理连续分配

    2021-11-10 10:03:03
  • 非连续分配方式(下篇介绍) 基本分页存储管理 基本分段存储管理 段页式存储管理 内存管理的概念 地址转换 操作系统需要提供地址转换功能,负责程序的逻辑地址与物理地址的转换。 操作系统在可执行文件装入内存...
  • 前面总结了非连续内存区域的内核描述,接着看看他的分配和释放。一、非连续内存区的分配不管是vmalloc()还是vmalloc_32()等系列的分配函数最后都会调用__vmalloc_node()函数实现,直接看这个函数的实现。*__vmalloc_...
  • 文章目录前言连续分配单一连续分配分区式分配固定分区分配动态分区分配可重定位分区分配离散分配分段分页多级页表快表(TLB)段页式Linux ...连续分配: 每个进程分配一段地址空间连续的内存空间。 连
  • 1. 连续分配管理 连续分配:指为用户进程分配的必须是一个连续的内存空间。 1.1 固定分区分配 1.2 动态分区分配 2. 连续分配方式 连续分配:可以将进程进行拆分,然后装载到不连续的内存...
  • 连续分配:系统为程序分配的是连续的内存空间 单一连续分配:内存分为系统区和用户区,只有一道用户程序占据整个用户区,无外部碎片,有内部碎片,内存利用率低固定分区分配:分为系统区和用户区,用户区划分多个分区,每个...
  • 一、 基本分页存储管理的基本概念(非连续分配管理方式) 连续分配 :为用户进程分配的必须是一个 连续的内存空间。 连续分配 :为用户进程分配的可以是一些 分散的内存空间。 (一)什么是“地址空间” 逻辑...
  • 文章目录前言知识总览单一连续分配固定分区分配动态分区分配1. 系统要用什么样的数据结构记录内存的使用情况?2. 当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配?3. 如何进行分区的分配与回收操作?分配...
  • 连续内存分配非连续分配需要解决的问题非连续分配的硬件辅助机制段式存储管理页式存储管理实例(物理)地址计算实例(逻辑)地址计算页表关联(中间人)页表页式存储管理机制的性能问题快表(Translation Look-...
  • 相对地址与绝对地址: ...内存管理需要实现的三个功能: 内存空间的分配与回收 内存空间的扩充 负责逻辑地址与物理地址的转换。 存储保护 内存空间扩充三种技术: 覆盖技术: 交换技术 ...
  • 1.背景 连续内存,实现虚拟地址和物理地址的转换有点困难。...非连续分配内存块大小:段式、页式存储管理。 2.段式内存管理 3.页式内存管理 4.页表描述 5.快表和多级页表 6.反置页表 7.段页式存储管理 ...
  • 文章目录1、为什么要进行非连续内存分配2、两种硬件方案:分段和分页2.1 分段2.1.1 硬件分段寻址方案2.2 分页2.2.1 页帧-frame2.2.2 页-page2.2.3页寻址机制2.2.4页寻址机制的注意事项 1、为什么要进行非连续内存...
  • 非连续分配

    2020-12-28 12:25:50
    非连续分配允许一个程序分散地装入到不相邻的内存分区中,根据分区的大小是否固定分为分页存储管理方式和分段存储管理方式。分页存储管理方式中,又根据运行作业时是否要把作业的所有页面都装入内存才能运行分为基本...
  • 操作系统NO.2 |详解操作系统的非连续内存管理,通过本期内容你将了解内层的层次结构、分页、分段等知识。
  • 前面我们已经分析了linux如何利用伙伴系统,slab分配分配内存,用这些方法得到的内存在物理地址上都是连续的,然而,有些时候,每次请求内存时,系统都分配物理地址连续内存块是不合适的,可以利用小块内存“连接”成大...
  • 1. 计算机体系结构和内存层次 重定位,分段,分页,虚拟存储 重定位:改段寄存器的地址。 分段:程序分为数据、代码、堆栈。 分页:把内存分为最基本的单位 ...3.连续内存分配 4.碎片整理 5.伙伴系统 ...
  • 连续分配方式是指为一个用户程序分配一个连续的内存空间,主要有: 单一连续分配 固定分区分配 动态分区分配 一:单一连续分配 单一连续分配内存被分为系统区和用户区。系统区位于内存低地址处,用于存放操作...
  • 注意:连续分配是指为用户进程分配的必须是一个连续的内存空间,而非连续分配管理方式可以是离散的内存空间。 二、单一连续分配 二、固定分区分配 **分区大小相等:**缺乏灵活性,但是很适用于一台计算机控制多个...
  • 1.单一连续分配方式 内部碎片:如果用户区分配了12Mb的内存,结果只用了10Mb,还剩下2Mb的内存没有使用,这个2Mb的内存就称为内部碎片。 2.固定分区分配 3.动态分区分配 ...
  • linux 内存管理非连续物理地址分配(vmalloc)前面我们已经分析了linux 如何利用伙伴系统,slab 分配分配内存,用这些方法得到的内存在物理地址上都是连续的,然而,有些时候,每次请求内存时,系统都分配物理地址连续的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 159,220
精华内容 63,688
关键字:

内存非连续分配管理