精华内容
下载资源
问答
  • 2016-02-15 11:49:35

    内存管理之非连续分配管理方式

    基本分页储存管理方式

    进程会被固定单位的空间划分成块,一个块称之为页(Page),内存也被这个单位划分成块,一个块称之为页框(Page Frame),外存也以同样单位划分成块,称之为块(Block)。进程在执行时需要申请主存空间,也就是为每个页面分配主存中可用的页框,这就产生了页和页框一一对应的关系。于是为了方便在内存中找到进程的每个页面所对应的物理块号,系统为每个进程建立一张页表,记录页面在内存中对应的物理块号,页表一般存放在内存中。

    这里写图片描述

    这里写图片描述

    基本分段储存管理方式

    段式管理方式按照用户进程中的自然段划分逻辑空间,如一用户进程由主程序,两个子程序,桟和一段数据组成,可以分为5段,每段从0开始编址,并分配一段连续连续地址空间(段内要求连续,段间不要求连续)。每个进程都有一张逻辑空间与内存映射的段表。段号和段内偏移都必须有由用户显示提供,高级语言中由编译程序完成这个操作。

    这里写图片描述

    这里写图片描述

    段页式存储管理方式

    作业的地址空间首先被分成若干个逻辑段,每段都有自己的段号,然后再将每一段分成若干个大小固定的页。

    这里写图片描述

    在一个进程中,段表只有一个,页表可能有很多个

    这里写图片描述

    参考:
    百度百科
    王道操作系统联考复习指导

    更多相关内容
  • 4.内存非连续分配管理方式

    千次阅读 2016-04-17 17:00:38
    非连续分配允许一个程序分散地装入到不相邻的内存分区中,根据分区的大小是否固定分为分页存储管理方式和分段存储管理方式。 分页存储管理方式中,又根据运行作业时是否要把作业的所有页面都装入内存才能运行分为...

    点击打开链接

    非连续分配允许一个程序分散地装入到不相邻的内存分区中,根据分区的大小是否固定分为分页存储管理方式和分段存储管理方式。

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

    基本分页存储管理方式

    固定分区会产生内部碎片,动态分区会产生外部碎片,这两种技术对内存的利用率都比较低。我们希望内存的使用能尽量避免碎片的产生,这就引入了分页的思想:把主存空间划分为大小相等且固定的块,块相对较小,作为主存的基本单位。每个进程也以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中的块空间。

    分页的方法从形式上看,像分区相等的固定分区技术,分页管理不会产生外部碎片。但它又有本质的不同点:块的大小相对分区要小很多,而且进程也按照块进行划分,进程运行时按块申请主存可用空间并执行。这样,进程只会在为最后一个不完整的块申请一个主存块空间时,才产生主存碎片,所以尽管会产生内部碎片,但是这种碎片相对于进程来说也是很小的,每个进程平均只产生半个块大小的内部碎片(也称页内碎片)。

    1) 分页存储的几个基本概念

    ①页面和页面大小。进程中的块称为页(Page),内存中的块称为页框(Page Frame,或页帧)。外存也以同样的单位进行划分,直接称为块(Block)。进程在执行时需要申请主存空间,就是要为每个页面分配主存中的可用页框,这就产生了页和页框的一一对应。

    为方便地址转换,页面大小应是2的整数幂。同时页面大小应该适中,如果页面太小,会使进程的页面数过多,这样页表就过长,占用大量内存,而且也会增加硬件地址转换的开销,降低页面换入/换出的效率;页面过大又会使页内碎片增大,降低内存的利用率。所以页面的大小应该适中,考虑到耷间效率和时间效率的权衡。

    ②地址结构。分页存储管理的逻辑地址结构如图3-7所示。


    图3-7  分页存储管理的地址结构

    地址结构包含两部分:前一部分为页号P,后一部分为页内偏移量W。地址长度为32 位,其中0~11位为页内地址,即每页大小为4KB;12~31位为页号,地址空间最多允许有2 20页。

    ③页表。为了便于在内存中找到进程的每个页面所对应的物理块,系统为每个进程建立一张页表,记录页面在内存中对应的物理块号,页表一般存放在内存中。

    在配置了页表后,进程执行时,通过查找该表,即可找到每页在内存中的物理块号。可见,页表的作用是实现从页号到物理块号的地址映射,如图3-8所示。


    图3-8  页表的作用

    2) 基本地址变换机构

    地址变换机构的任务是将逻辑地址转换为内存中物理地址,地址变换是借助于页表实现的。图3-9给出了分页存储管理系统中的地址变换机构。


    图3-9  分页存储管理的地址变换机构

    在系统中通常设置一个页表寄存器(PTR),存放页表在内存的始址F和页表长度M。进程未执行时,页表的始址和长度存放在进程控制块中,当进程执行时,才将页表始址和长度存入页表寄存器。设页面大小为L,逻辑地址A到物理地址E的变换过程如下:
    1. 计算页号P(P=A/L)和页内偏移量W (W=A%L)。
    2. 比较页号P和页表长度M,若P >= M,则产生越界中断,否则继续执行。
    3. 页表中页号P对应的页表项地址 = 页表起始地址F + 页号P * 页表项长度,取出该页表项内容b,即为物理块号。
    4. 计算E=b*L+W,用得到的物理地址E去访问内存。

    以上整个地址变换过程均是由硬件自动完成的。

    例如,若页面大小L为1K字节,页号2对应的物理块为b=8,计算逻辑地址A=2500 的物理地址E的过程如下:P=2500/1K=2,W=2500%1K=452,查找得到页号2对应的物理块的块号为 8,E=8*1024+452=8644。

    下面讨论分页管理方式存在的两个主要问题:
    • 每次访存操作都需要进行逻辑地址到物理地址的转换,地址转换过程必须足够快,否则访存速度会降低;
    • 每个进程引入了页表,用于存储映射机制,页表不能太大,否则内存利用率会降低。

    3) 具有快表的地址变换机构

    由上面介绍的地址变换过程可知,若页表全部放在内存中,则存取一个数据或一条指令至少要访问两次内存:一次是访问页表,确定所存取的数据或指令的物理地址,第二次才根据该地址存取数据或指令。显然,这种方法比通常执行指令的速度慢了一半。

    为此,在地址变换机构中增设了一个具有并行查找能力的高速缓冲存储器——快表,又称联想寄存器(TLB),用来存放当前访问的若干页表项,以加速地址变换的过程。与此对应,主存中的页表也常称为慢表,配有快表的地址变换机构如图3-10所示。


    图3-10  具有快表的地址变换机构

    在具有快表的分页机制中,地址的变换过程:
    • CPU给出逻辑地址后,由硬件进行地址转换并将页号送入高速缓存寄存器,并将此页号与快表中的所有页号进行比较。
    • 如果找到匹配的页号,说明所要访问的页表项在快表中,则直接从中取出该页对应的页框号,与页内偏移量拼接形成物理地址。这样,存取数据仅一次访存便可实现。
    • 如果没有找到,则需要访问主存中的页表,在读出页表项后,应同时将其存入快表,以便后面可能的再次访问。但若快表已满,则必须按照一定的算法对旧的页表项进行替换。

    注意:有些处理机设计为快表和慢表同时查找,如果在快表中查找成功则终止慢表的查找。

    一般快表的命中率可以达到90%以上,这样,分页带来的速度损失就降低到10%以下。快表的有效性是基于著名的局部性原理,这在后面的虚拟内存中将会具体讨论。

    4) 两级页表

    第二个问题:由于引入了分页管理,进程在执行时不需要将所有页调入内存页框中,而只要将保存有映射关系的页表调入内存中即可。但是我们仍然需要考虑页表的大小。以32 位逻辑地址空间、页面大小4KB、页表项大小4B为例,若要实现进程对全部逻辑地址空间的映射,则每个进程需要2 20,约100万个页表项。也就是说,每个进程仅页表这一项就需要4MB主存空间,这显然是不切实际的。而即便不考虑对全部逻辑地址空间进行映射的情况,一个逻辑地址空间稍大的进程,其页表大小也可能是过大的。以一个40MB的进程为例,页表项共40KB,如果将所有页表项内容保存在内存中,那么需要10个内存页框来保存整个页表。整个进程大小约为1万个页面,而实际执行时只需要几十个页面进入内存页框就可以运行,但如果要求10个页面大小的页表必须全部进入内存,这相对实际执行时的几十个进程页面的大小来说,肯定是降低了内存利用率的;从另一方面来说,这10页的页表项也并不需要同时保存在内存中,因为大多数情况下,映射所需要的页表项都在页表的同一个页面中。

    将页表映射的思想进一步延伸,就可以得到二级分页:将页表的10页空间也进行地址映射,建立上一级页表,用于存储页表的映射关系。这里对页表的10个页面进行映射只需要10个页表项,所以上一级页表只需要1页就足够(可以存储2 10=1024个页表项)。在进程执行时,只需要将这1页的上一级页表调入内存即可,进程的页表和进程本身的页面,可以在后面的执行中再i周入内存。

    如图3-11所示,这是Intel处理器80x86系列的硬件分页的地址转换过程。在32位系统中,全部32位逻辑地址空间可以分为2 20(4GB/4KB)个页面。这些页面可以再进一步建立顶级页表,需要2 10个顶级页表项进行索引,这正好是一页的大小,所以建立二级页表即可。


    图3-11  硬件分页地址转换

    举例,32位系统中进程分页的工作过程:假定内核已经给一个正在运行的进程分配的逻辑地址空间是0x20000000到0x2003FFFF,这个空间由64个页面组成。在进程运行时,我们不需要知道全部这些页的页框的物理地址,很可能其中很多页还不在主存中。这里我们只注意在进程运行到某一页时,硬件是如何计算得到这一页的页框的物理地址即可。现在进程需要读逻辑地址0x20021406中的字节内容,这个逻辑地址按如下进行处理:
        逻辑地址: 0x20021406 (0010 0000 0000 0010 0001 0100 0000 0110 B)
        顶级页表字段:0x80 (00 1000 0000 B)
        二级页表字段:0x21 (00 0010 0001B)
        页内偏移量字段:0x406  (0100 0000 0110 B)

    顶级页表字段的0x80用于选择顶级页表的第0x80表项,此表项指向和该进程的页相关的二级页表;二级页表字段0x21用于选择二级页表的第0x21表项,此表项指向包含所需页的页框;最后的页内偏移量字段0x406用于在目标页框中读取偏移量为0x406中的字节。

    这是32位系统下比较实际的一个例子。看似较为复杂的例子,有助于比较深入地理解,希望读者能自己动手计算一遍转换过程。

    建立多级页表的目的在于建立索引,这样不用浪费主存空间去存储无用的页表项,也不用盲目地顺序式查找页表项,而建立索引的要求是最高一级页表项不超过一页的大小。在 64位操作系统中,页表的划分则需要重新考虑,这是很多教材和辅导书中的常见题目,但是很多都给出了错误的分析,需要注意。

    我们假设仍然釆用4KB页面大小。偏移量字段12位,假设页表项大小为8B。这样,其上一级分页时,每个页框只能存储2 9(4KB/8B)个页表项,而不再是2 10个,所以上一级页表字段为9位。后面同理继续分页。64=12+9+9+9+9+9+7,所以需6级分页才能实现索引。很多书中仍然按4B页表项分析,虽然同样得出6级分页的结果,但显然是错误的。这里给出两个实际的64位操作系统的分页级别(注意:里面没有使用全部64位寻址,不过由于地址字节对齐的设计考虑,仍然使用8B大小的页表项),理解了表3-2中的分级方式,相信对多级分页就非常清楚了。

    表3-2 两种系统的分级方式
    平台页面大小寻址位数分页级数具体分级
    Alpha8KB43313+10+10+10
    X86_644 KB48412+9+9+9+9

    基本分段存储管理方式

    分页管理方式是从计算机的角度考虑设计的,以提高内存的利用率,提升计算机的性能, 且分页通过硬件机制实现,对用户完全透明;而分段管理方式的提出则是考虑了用户和程序员,以满足方便编程、信息保护和共享、动态增长及动态链接等多方面的需要。

    1) 分段。

    段式管理方式按照用户进程中的自然段划分逻辑空间。例如,用户进程由主程序、两个子程序、栈和一段数据组成,于是可以把这个用户进程划分为5个段,每段从0 开始编址,并分配一段连续的地址空间(段内要求连续,段间不要求连续,因此整个作业的地址空间是二维的)。其逻辑地址由段号S与段内偏移量W两部分组成。

    在图3-12中,段号为16位,段内偏移量为16位,则一个作业最多可有2 16=65536个段,最大段长为64KB。


    图3-12  分段系统中的逻辑地址结构

    在页式系统中,逻辑地址的页号和页内偏移量对用户是透明的,但在段式系统中,段号和段内偏移量必须由用户显示提供,在髙级程序设计语言中,这个工作由编译程序完成。

    2) 段表。

    每个进程都有一张逻辑空间与内存空间映射的段表,其中每一个段表项对应进程的一个段,段表项记录该段在内存中的起始地址和段的长度。段表的内容如图3-13所示。


    图3-13  段表项

    在配置了段表后,执行中的进程可通过查找段表,找到每个段所对应的内存区。可见,段表用于实现从逻辑段到物理内存区的映射,如图3-14所示。


    图3-14  利用段表实现地址映射

    3) 地址变换机构。

    分段系统的地址变换过程如图3-15所示。为了实现进程从逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段表始址F和段表长度M。其从逻辑地址A到物理地址E之间的地址变换过程如下:
    • 从逻辑地址A中取出前几位为段号S,后几位为段内偏移量W。
    • 比较段号S和段表长度M,若S多M,则产生越界中断,否则继续执行。
    • 段表中段号S对应的段表项地址 = 段表起始地址F + 段号S * 段表项长度,取出该段表项的前几位得到段长C。若段内偏移量>=C,则产生越界中断,否则继续执行。
    • 取出段表项中该段的起始地址b,计算 E = b + W,用得到的物理地址E去访问内存。


    图3-15  分段系统的地址变换过程

    4) 段的共享与保护。

    在分段系统中,段的共享是通过两个作业的段表中相应表项指向被共享的段的同一个物理副本来实现的。当一个作业正从共享段中读取数据时,必须防止另一个作业修改此共享段中的数据。不能修改的代码称为纯代码或可重入代码(它不属于临界资源),这样的代码和不能修改的数据是可以共享的,而可修改的代码和数据则不能共享。

    与分页管理类似,分段管理的保护方法主要有两种:一种是存取控制保护,另一种是地址越界保护。地址越界保护是利用段表寄存器中的段表长度与逻辑地址中的段号比较,若段号大于段表长度则产生越界中断;再利用段表项中的段长和逻辑地址中的段内位移进行比较,若段内位移大于段长,也会产生越界中断。

    段页式管理方式

    页式存储管理能有效地提高内存利用率,而分段存储管理能反映程序的逻辑结构并有利于段的共享。如果将这两种存储管理方法结合起来,就形成了段页式存储管理方式。

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


    图3-16  段页式管理方式

    在段页式系统中,作业的逻辑地址分为三部分:段号、页号和页内偏移量,如图3-17 所示。


    图3-17  段页式系统的逻辑地址结构

    为了实现地址变换,系统为每个进程建立一张段表,而每个分段有一张页表。段表表项中至少包括段号、页表长度和页表起始地址,页表表项中至少包括页号和块号。此外,系统中还应有一个段表寄存器,指出作业的段表起始地址和段表长度。

    注意:在一个进程中,段表只有一个,而页表可能有多个。

    在进行地址变换时,首先通过段表查到页表起始地址,然后通过页表找到页帧号,最后形成物理地址。如图3-18所示,进行一次访问实际需要三次访问主存,这里同样可以使用快表以加快查找速度,其关键字由段号、页号组成,值是对应的页帧号和保护码。


    图3-18  段页式系统的地址变换机构

    展开全文
  • 非连续分配方式允许将一个程序分散地装入不连续的内存空间。在连续分配管理方式中,即使内存有超过2GB的存储空间,但是没有连续的2GB内存空间,则需要2GB内存空间的作业仍然无法装入内存运行 ...

     

    如果帮到你的话,请点个赞,创作不易,谢谢

     

      非连续分配方式允许将一个程序分散地装入不连续的内存空间。在连续分配管理方式中,即使内存有超过2GB的存储空间,但是没有连续的2GB内存空间,则需要2GB内存空间的作业仍然无法装入内存运行。但若采用连续分配管理方式,则可以将该 作业所要求的2GB空间不连续地分配到在内存的各个区域,所以,这也需要额外的内存空间来存放这些索引,使得非连续分配管理方式的存储密度低于连续分配存储管理方式。

    非连续分配管理方式根据分区的大小是否固定分为分页存储管理方式和分段存储管理方式。

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

    1. 基本分页管理方式

           固定分区会产生内部碎片,动态分区会产生外部碎片,这样都会浪费内存空间,使内存效率降低。所以,我们要在内存使用时尽量减少内存碎片的产生 ,这就引入了分页的思想:把内存空间划分为大小相同且固定的块,块相对较小,作为内存的基本单位。每个进程以块为单位进行划分,进程在执行时,以块为单位逐个申请内存中的块空间。

           分页的方法从形式上看,类似分区相等的固定分区分配技术,分页管理不会产生外部碎片,但它的不同点为:快的大小要小很多,而且进程也按照块进行划分,进程运行时按块申请内存可用空间并执行。这样,进程只会在为最后一个不完整的块申请内存块空间时,才会产生内存碎片。所以尽管会产生内部碎片,但对于进程来说也是很小的。每个进程平均只产生半个快大小的内部碎片。(也称业内碎片)

    (1)分页存储管理的几个基本概念

    ① 页面和页面大小。进程中的块称为页,内存中的块称为页框(Page Frame,或页帧)。外存也以同样的单位进行划分,直接称为块(Block)。进程在执行时需要申请内存空间,即需要为每个页面分配每个可用的页框,这就需要页和页框一一对应。

        为了方便地址转换,页面大小应该是2的整数幂。同时页面大小要适中,页面太小会使进程有太多的页面,这样页表就会过长,占用大量内存,增加硬件地址转换的开销,而且也会使页面换入/换出的效率降低(频繁的换入换出)。页面过大又会使页内碎片增多,造成内存的利用率降低。所以,页面的大小应该适中,要在时间效率和空间效率之间找到平衡。

    ② 地址结构

    31       ...                                                12      11                   0
    页号P页内偏移量W

                                                                                  分页存储管理的逻辑结构

     地址结构包含两部分:前一部分为页号P,后一部分为页内偏移量。地址长度为32位,其中0~11位为页内地址,即每页为4kb,12~31位为页号,即地址空间最多有2^20页。

    • 地址空间结构决定了虚拟内存的寻址空间有多大。

     ③ 页表

    为了便于在内存中找到进程的每个页面所对应的物理块,系统为每个进程建立一张页表,它记录页面在内存中的物理快号,页表一般放在内存中。

    页表是由页表项组成的,页表和地址都由两部分构成,而且第一部分都是页号,页表的第二部分是物理内存中的块号,而地址的第二部分是页内偏移,页表项的第二部分与地址的第二部分共同构成物理地址。

    在配置页表后,进程在执行时,通过查找该表,即可找到每页在内存中的物理块号,由此可见,快表的作用是实现进程的页号到物理块号的地址映射。

    (2)基本地址变换机构

     地址变换机构是将逻辑地址转换为内存中的物理地址,地址变换是借助于页表实现的。

    å¨è¿éæå¥å¾çæè¿°

     

      在系统中通常设置一个页表寄存器(PTR),存放页表在内存的始址F和页表长度M。进程未执行时,页表的始址和页表长度都存放在进程控制块中,当进程执行时,才将始址和页表长度放入页表寄存器。

    设页面大小为L,从逻辑地址A到物理地址E 的地址变换过程如下(逻辑地址,页号,页表项长度都是十进制数):

    ① 计算页号P(P=A/L)和页内偏移量W(W=A%L)

    ②比较页号P和页表长度M,若P≥M,则发生越界中断,否则拒绝执行。

    ③页表中页号P对应的页表项地址=页表始址+页号P×页表项长度,取出该页表项的内容b,即为物理块号,注意区分页表长度和页表项长度,页表长度指的是一共有多少页,页表项长度指的是页地址占多大的存储空间。

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

    上面的整个地址变换过程都是由硬件地址变换机构实现的。例如å¨è¿éæå¥å¾çæè¿°

     因为页面大小L是固定的,因此,页式管理中地址空间是一维的。

    • 页表项的大小是受约束的,不是随意规定的,是可以计算出来的,如何确定页表项的大小呢?

       页表项的作用是找到该页在内存中的位置。以32位逻辑地址空间,字节编址单位,一页4KB为例,地址空间内一共有2^32B/4KB =2^20=1M页,因此需要log以2为底对数为1M=20位才能保证范围能容纳所有页面,又因为以字节作为编址单位,即页表项的大小≥「20/8](不会打右边的上取整符号了)=3B.所以,为了保证页表能够指向所有页面,页表项的大小应该>3B,当然,也可以选择更大的页表项让一个页面能够刚好容下所有页表项,进而方便存储(如果取成4B,刚还一个页面可以装下4KB/4B=1k个页表项)或增加一些其它信息。

    分页管理存储方式存在两个主要问题:

    ①每次访存操作都需要进行逻辑地址到物理地址的转换,地址转换过程必须足够快,否则访存速度会降低。

    ②每个进程都要进入页表,为了存储索引(即映射机制),页表不能太大,否则会造成内存空间的浪费。

     (3) 具有快表的地址变换机构

               若页表全部放在内存中,则存取一个数据或一条指令至少需要访问两次内存:第一次是访问页表,根据页表的内容计算所存取的数据或指令的物理地址;第二次是根据该物理地址再次进入内存去存数据或指令。显然,这种方法比通常执行指令的速度慢了一倍。

         为此,在地址变换机构中增设一个具有并行查找能力的高速缓冲存储器----快表,又称相联存储器(TLB),用来存放当前访问的若干页表项,用来加速地址变换的过程(快表不在内存中)与此相对应的是,在内存中的慢表,具有快表的地址变换机构如图所示

    å¨è¿éæå¥å¾çæè¿°

     

     在具有快表的分页机制中,地址的变换过程如下:

    ①CPU给出逻辑地址后,由硬件进行地址转换,把页号送入快表中,并将该页号与快表中存储的所有页号进行比较

    ②若找到匹配的页号,说明所要访问的页表项在快表中,则直接从中取出与该页对应的页框号,并与页内偏移拼接形成物理地址,这样,存取数据仅需访问内存一次。

    ③若未找到,则需要访问内存中的页表,在读出页表项后,应同时将其存入快表中,以便日后可能再次访问,但若快表已满,则应考虑页面替换策略来替换旧的页表项。

    注意:有些处理机设计为快表和慢表同时进行查找,如果快表查找到了,则需要停止慢表的查找。

    一般快表的命中率高达90%以上,这样分页带来的速度损失率就可以降到10%以下,快表的有效性是基于著名的局部性原理。( CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。)

    å¨è¿éæå¥å¾çæè¿°

     å¨è¿éæå¥å¾çæè¿°

    (4)两级页表

        通过引入分页管理存放方式,进程在执行过程中不需要将所有页面都调入内存,而只需将保存映射的表调入内存。但是,我们依旧需要考虑页面的大小。以32位逻辑地址空间,页面大小为4KB,页表项大小为4B举例,若要实现进程对全部逻辑地址空间的映射,则需要2^32B/4KB=2^20个页表项,即约10万个页表项,而一个页表项大小为4B,则页表项所占内存大小为4MB(需要的页面为4MB/4KB=2^10=1024个页面),也就是说一个进程仅页表项就占这么大的空间,可以想象在电脑里有多少进程,这样会极大的占用内存空间,拿一个40MB的进程来说,页表项为40KB(40MB/4KB×4B),即需要10个页框来保存整个页表(40KB/4KB=10),整个进程约为10万个页面(40MB/4KB=10×2^10),但是实际上执行时只需要转入几十个页面即可运行。若是要求10个页面大小的页表必须全部进入内存,则相对来说比较浪费;从另一方面来说,这10页的页表项也不需要全部同时保存在内存中,因为在大多数情况下,映射所需要的页表项都在页表的同一个页面(局部性原理)。

       为了压缩页表,我们引入了二级页表映射的思想,就可得到二级分页,即使用层次结构的页表:将页表的10个页面也进行地址映射,建立上一级页表,用于存储页表的映射关系。这里对页表的10个页面进行映射只需要10个页表项,所以上一级页面只需要1页就可以装下(1页可以装4KB/4B=1K=1024个页表项)。在进程执行时,只需要将这一页调入内存即可。以32位逻辑地址空间,页面大小为4KB,页表项大小为4B,以字节为编址单位举例,我们构造一个合适的页表结构。页面大小为4KB,页内偏移地址为log以2为底4K的对数为12位,页号部分为20位,若不采用分级页表,则光页表就要占用2^20×4B/4KB=1024页,这远远超过了许多进程自身的需要,若是把这些页表都放入内存连续的空间中,则查询对应页的物理页号可以通过首页地址+页号×页表项的大小来得到,这种查询方法虽然方便,但是对于内存来说是极大占用内存的,由于局部性原理,大多数页面并不常用,所以这种方法不可行。若是不把这些表放在连续的空间里,则需要一张索引表来存放这些表的逻辑地址 ,这就可以解决页表占用内存过大的问题。这就是构造了一个页表的页表,也叫做二级页表。为了查询方便,顶级页表最多只能由1个页面。因此顶级页表可以容纳4KB/4B=1K个页表项,它占用的地址位数为log以2为底1K的对数等于10位,又因为页内偏移占12位,所以剩下10位正好使得耳机页表在一页之内(一页为12位)

    一级页表二级页表页内偏移

    二级页表实际上是在原有页表结构上再加一页。

    建立多级页表的目的在于建立索引,这样既可以不用浪费内存空间去存储无用(不常用)的页表项,也可以不用盲目地顺序式查找页表项。

    2. 基本分段式存储管理方式

       分页管理方式是从计算机的角度考虑设计的,目的是提高内存的利用率,提升计算机的性能;分页通过硬件机制实现,对用户完全透明。分段管理方式则是从用户和程序员的角度出发,为了方便编程、信息保护和共享、动态增长以及动态链接等方面来设计的。 (地址空间是二维的)

    (1)分段 段式管理方式按照用户进程中的自然段划分逻辑空间。例如,用户进程由主程序,子程序,栈和一段数据组成,就可以把这个用户进程划分为4段,每段从0开始,并分配一段连续的地址空间(段内要求连续,段间不要求连续,因此整个作业的地址空间是二维的),其逻辑地址由段号s和段内地址偏移w组成。

    31   ...   1615   ...   0
    段号s段内偏移量w

     

    上图中,段号为16位,段内偏移量为16位,因此一个作业最多有2^16=65536段,最大段长为2^16=64KB 

    在页式系统中,页号和页内地址偏移量对用户是透明的,但是在段式系统中,段号和段内地址偏移必须由用户显式地提出(因为地址空间不连续),在高级程序设计语言中,该工作由编译程序来完成。

    (2)段表       每个进程空间有一张逻辑空间与内存空间映射的段表,其中每个段表项对应进程的一段(每个段都在段表中有一个段表项,类似于分页管理),段表项记录该段的始址和长度。段表的内容如下图所示:

    段号段长本段在内存中的始址

     

    配置段表后,执行中的进程可以查找段表,每段都可以在段表中找到一个对应的段表项,用来寻找每段在内存中的对应分区。可见,段表用于实现从逻辑段到物理内存区的的映射。

    å©ç¨æ®µè¡¨å®ç°å°åæ å°

    (3)地址变换机构  分段系统的地址变换过程如下图所示。为了实现进程从段表地址到物理地址的转换,在系统中设置了段表寄存器,用来存放段表项的段表始址F与段表长度M。从逻辑地址A到物理地址E的变换过程如下:

    ①从段表中取出前几位的段号S和后几位的段内偏移量S。

    ②拿段号S与段长进行比较,若是S≥M,则发生越界中断;否则,顺利执行,取出段表项的内容。

    ③段表中段号S对应的段表项地址=段表项始址+段号×段表项长度,取出该段表项的前几位得到段长C,若是W≥C,则产生越界中断。否则,取出该地址对应的段表项的内容b,E=b+W,用得到的物理地址E去访问内存。

    分页系统一样,当段表放在内存中时,每要访问一个数据,都须访问两次内存,从而极大地降低了计算机的速率。解决的方法也和分页系统类似,再增设一个联想存储器,用于保存最近常用的段表项。由于一般情况是段比页大,因而段表项的数目比页表项的数目少,其所需的联想存储器也相对较小,便可以显著地减少存取数据的时间,比起没有地址变换的常规存储器的存取速度来仅慢约10%~15%。(此段来源于百度)

    (4)段的共享与保护  在分段式系统中,段的共享是通过两个作业的段表中的相应的段表项指向被共享的段表项所对应的同一个物理副本来实现的。当一个作业正在从共享段中读取数据时,另一个作业则不能修改此数据。不能修改的代码称为纯代码或可重入代码(它不属于临街资源)。这样的代码和不可能修改的数据可以共享,而可以修改的代码或数据不可以被共享。

    分段管理的保护方法主要有两种:一种是存取控制保护,一种是地址越界保护。而地址越界保护需要比较两次,第一次是段号和段长的比较,另一种是段内地址偏移和段长的比较;分页管理中地址越界保护则只需判断页号是否越界,页内地址偏移是不会越界的(因为只有一个页表只有一个页表项)

    段式管理不能通过给出一个整数便确定对应的物理地址,因为每段的长度是不固定的,无法通过整数除法得到段号,无法通过取余得到段内地址偏移,所以段号和段内地址偏移一定要显式地给出,因此分段管理的地址空间是二维的。

    3. 段页式管理方式

    页式存储方式能有效地提高内存利用率,而段式存储管理方式能反映程序地逻辑结构和便于段的共享,因此,可将这两种存储管理方式结合起来,从而形成了段页式存储管理方式。

    在段页式存储管理方式中,先将作业的地址空间分为若干逻辑段,每段都有自己的段号,然后将每段都按页式存储管理方式那样,分成若干大小相同且固定的页(即存储块),对内存的分配仍旧以存储块为单位。

    在段页式系统中,作业的逻辑地址分为三部分:段号,页号,页内偏移量,段页式地址的逻辑结构如下图所示:

    段号S页号P页内偏移量W

     为了实现地址变换,系统为每个进程都配备了一张段表,段表中包含各个段表项,段表项应该至少包含,段号,页表长度和页表始址,而每个页表项应该包括页号和块号,此外,系统中还应该有一个段表寄存器,指出作业的段表始址和段表长度。

    注意:一个进程只有一张段表,但可以有多个页表。

    在进行地址变换时,首先通过段表查找到页表始址,再通过页表查找到页框号,最后形成物理地址。

    进行地址变换时,首先利用段号S,将它与段表长TL进行比较。若S<TL,表示未越界,于是利用段表始址和段号来求出该段所对应的段表项在段表中的位置,从中得到该段的页表始址,并利用逻辑地址中的段内页号P来获得对应页的页表项位置,从中读出该页所在的物理块号b,再利用块号b和页内地址来构成物理地址。(来源于百度)

     在读取数据段时,需要至少访问内存三次,因此可以同样配置一个快表,来存取段表和页表,仅需访问内存一次

    因此,该方式的逻辑地址空间也是二维的。

    展开全文
  • 2)非连续内存分配 3)虚拟内存管理 连续内存分配方案 进程独享用户空间内存区域,把所有的内存一次性分享给进程(程序)使用。这们系统只能执行单程,单用户的模式。 静态内存分配方案 动态内存分配方案 给配给一...

    进程分配内存空间让其正常支行的三种方式:

    1)连续内存分配(为一个进程分配一片连续的内存空间)
    2)非连续内存分配
    3)虚拟内存管理

    连续内存分配方案

    进程独享用户空间内存区域,把所有的内存一次性分享给进程(程序)使用。这们系统只能执行单程,单用户的模式。

    静态内存分配方案

    连续静态方式内存分配图

    动态内存分配方案

    给配给一个进程的内存,且进程没有完全使用这片内存则会产生内部碎片。而由于内存空间太小导致无法正常分配给进程使用,内存剩余产生的叫外部碎片。不管内部或外部碎片都会产生内存的浪费。
    动态固定内存分配方式

    关于动态内存分配的管理算法这里不作记录。

    固定内存分配方式明显缺点是会产生很多的内部内存碎片、外部内存碎片,不利于内存的使用。
    在这里插入图片描述

    非连续内存分配管理方式

    页式存储管理-页表

    可以将进程分散地装入到许多不相邻的内存分区中,则即可利用分散的存储区,又无须过行紧凑管理。可大大提高内存的使用率。
    如下图一个进程需要的内存空间很大,在内存中已经没有连续的内存空间分配给该进程。只能分配的把进程装载到内存当中
    在这里插入图片描述
    在这里插入图片描述

    把进程分散的装入到非连续的内存当中,需要复杂的内存管理技术。比如页式内存管理技术等各种内存管理方式。

    在这里插入图片描述
    逻辑相邻的进程地址空间被装载到不连续的物理内存地址上运行。由于逻辑相邻的进程被分配到不连续的物理内存当中,那么CPU在执行程序的时候就无法连续的执行下去,这时需要对不连续的内存进行管理,使用CPU能顺序的拿到需要执行的代码,为这些不连续的内存页建立表格,称为页表管理。这样知道了页号就可以找到对应的物理内存。如下图2
    在这里插入图片描述
    在这里插入图片描述

    页表是进程的一部分,分配在内存当中,这样就需要把所有进程页表存储在一片连续的内存当中。那么就需要把这个内存的地址保存在一个地方,方案进程执行进快速的找到页表。
    若进程正在执行,则页表起始地址被存放在页就寄存器当中。若进程没有执行,则页表地址保存在PCB(进程控制块)中。

    逻辑地址查找页表找到对应的物理内存地址,具体查找步骤如下图。
    在这里插入图片描述

    段式存储管理-段表

    段式存储管理是把进程的以功能不同,划分为不同的段。比如一个程序有代码段,数据段等。这些段加载到非连续的内存当中,同样需要对内存进行复杂的管理。这个就称为段式内存管理。
    在这里插入图片描述
    段表中段表项的表示
    在这里插入图片描述
    段式存储的逻辑地址到物理地址过程
    在这里插入图片描述

    段页式存储管理对比
    在这里插入图片描述

    段页式存储管理方式,系统中都是采用二者相结合的方式来管理进程内存空间。如果编译的代码有各程各样的段,但在系统过行内存初始化时又使用页表来管理。

    段页式存储地址映射。
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 3.1.3连续分配管理方式

    千次阅读 2016-07-15 20:25:55
    连续分配方式,是指为一个用户程序分配一个连续的内存空间。它主要包括单一连续分配、固定分区分配和动态分区分配。 1、单一连续分配 内存在此方式下分为系统区和用户区,系统区仅提供给操作系统使用,通常在低地址...
  • 连续分配缺点:必须连续,外碎片和内碎片,动态修改困难,内存利用效率低。 非连续目标:调高内存利用率和管理灵活性 (1)允许程序使用非连续地址空间 (2)允许共享代码与数据 (3)支持动态加载和动态链接 ...
  • 连续内存分配非连续内存分配

    万次阅读 2018-09-22 08:45:03
    连续内存分配 首次适配:空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。...非连续内存分配 一、分页式存储管理介绍: 用户程序逻辑地址空间-&gt;...
  • 文章目录一、连续内存分配1、内存碎片的问题(1)外部碎片(2)内部碎片2、连续内存分配算法(1)首次适配(2)最优适配(3)最差适配3、碎片整理方法4、连续内存分配的缺点二、非连续内存分配1、非连续分配的优点2...
  • 内存管理之连续分配管理方式

    千次阅读 2018-04-01 13:03:23
    通俗地说,就是给内存划格子(格子中都是一个进程,和非连续分配管理方式相对)。(1)单一连续分配 将内存分为系统区和用户区,内存中永远只有一道程序——已经成为历史(2)固定分区分配分为2种方式: 分区大小...
  • 非连续内存分配(Noncontiguous Memory Allocation) Linux中虚拟地址空间VMALLOC_START和VMALLOC_END之间保留了一块区域,VMALLOC_START的位置取决于可访问的物理内存大小,大小至少VMALLOC_RESERV(x86上位127MB)...
  • 一、连续分配方式 1. 单一连续分配(过时) 整个内存只能有一个程序。 内存被分为 系统区和用户区,系统区用于装操作系统的相关数据,用户区用于装程序。由于整个用户区只能有一个程序,因此内存利用率极差。 ...
  • 一、动态分区分配算法 动态分区分配算法:在动态分区分配方式中, 当...算法思想:由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片区域。因此为了保证当“大进程”到来时能有连续的大片空
  • 三种非连续分配管理方式主要异同   逻辑地址结构 表项结构 寻址过程 基本分页存储管理方式 页号P | 页内偏移量W 页号 | 块号 1、计算页号P=逻辑地址A/页面大小L,和页内偏移量W=A%L; 2、...
  • 连续分配方式,是指为一个用户程序分配一个连续的内存空间。它主要包括单一连续分配、固定分区分配和动态分区分配。 1单一连续分配 内存在此方式下分为系统区和用户区,系统区仅提供给操作系统使用,通常在低地址...
  • 1:连续内存分配 1.计算机体系结构和内存层次
  • 3.内存连续分配管理方式

    千次阅读 2016-03-29 11:14:23
    连续分配方式,是指为一个用户程序分配一个连续的内存空间。它主要包括单一连续分配、固定分区分配和动态分区分配。 单一连续分配 内存在此方式下分为系统区和用户区,系统区仅提供给操作系统使用,通常在低地址...
  • 操作系统的内存管理机制分为两大类:连续分配管理、非连续分配管理 一、连续分配管理 1.单一分配管理 概念:内存中只有一道程序,该道程序独占整个用户区(一次只有一个进程可以执行) 特点:无外部碎片,可以采用...
  • 操作系统NO.2 |详解操作系统的非连续内存管理,通过本期内容你将了解内层的层次结构、分页、分段等知识。
  • 连续分配方式(交换技术),是指为一个用户程序分配一个连续的内存空间。它主要包括单一连续分配、固定分区分配和动态分区分配。 注意:此处的连续内存分配是将整个进程的数据整块加载到内存之中。 1.单一连续分配...
  • 内存非连续分配管理方式 非连续分配允许一个程序分散地装入到不相邻的内存分区中,根据分区的大小是否固定分为分页存储管理方式和分段存储管理方式。 分页存储管理方式中,又根据运行作业时是否要把作业的所有...
  • 8.内存连续分配方式采用的几种算法及各自优劣

    千次阅读 多人点赞 2018-05-25 09:46:59
    连续分配方式,是指为一个用户程序分配一个连续的内存空间。它主要包括单一连续分配、固定分区分配和动态分区分配。1.单一连续分配内存在此方式下分为系统区和用户区,系统区仅提供给操作系统使用,通常在低地址部分...
  • 采用连续分配方式之动态分区分配存储管理,使用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法4种算法完成设计。 设计一个作业申请队列以及作业完成后的释放顺序,实现主存的分配和回收。采用分区...
  • 连续,设计简单,直接寻址,效率高。缺点:内存利用效率最低,有内部碎片。 分页,设计最复杂,容易产生外部碎片,无论数据有多少,都只能按照页面大小分配,造成浪费。 分段,程序员在编程和使用上多方面的要求,...
  • 连续分配方式,是指为一个用户程序分配一个连续的内存空间。它主要包括单一连续分配、固定分区分配和动态分区分配。 单一连续分配 内存在此方式下分为系统区和用户区,系统区仅提供给操作系统使用,通常在低...
  • 物理内存非连续分配

    千次阅读 2015-06-02 21:45:55
    非连续分配:提高内存利用效率和管理灵活性 允许一个程序的使用非连续的物理地址空间;允许共享代码和数据;支持动态加载和动态链接。   段式存储管理: 段地址空间有多个段组成:主代码段、子模块代码段、公用...
  • 操作系统中负责管理和存储文件信息的模块 C.负责文件检索、读写等操作 D.从系统角度来说,文件系统的目的是方便的文件存取机制 解释: 2、物理块读写主要由文件系统中的()负责。C A.逻辑文件系统 B.文件组织模块 ...
  • 4.2、连续分配方式和非连续分配管理方式  连续分配方式,是指为一个用户程序分配一个连续的内存空间。可把连续分配方式进一步分为单一连续分配、固定分区分配、动态分区分配以及动态重定位分区分配四种方式。 非...
  • 连续,设计简单,直接寻址,效率高。缺点:内存利用效率最低,有内部碎片。分页,设计最复杂,容易产生外部碎片,无论数据有多少,都只能按照页面大小分配,造成浪费。分段,程序员在编程和使用上多方面的要求,缺点...
  • 一、思考:连续分配...基于这一思想,产生了“非连续分配方式”,或者称为“离散分配方式”。 连续分配:为用户进程分配的必须是一个连续的内存空间。 非连续分配:为用户进程分配的可以是一些分散的内存空间。 二
  • 基本分页存储管理方式

    千次阅读 2020-09-28 22:26:10
    操作系统内存空间管理可以分为连续分配管理方式和非连续分配管理方式。 连续分配管理方式又可以分为单一连续分配、固定分区分配、动态分区分配。 连续分配管理方式会形成许多的碎片,虽然可以使用拼接/紧凑技术将...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 116,907
精华内容 46,762
关键字:

非连续分配管理方式