精华内容
下载资源
问答
  • Window内存管理方式主要分为:页式管理、段式管理、段页式管理。 1、页式管理 用户程序的逻辑地址空间被划分成若干固定大小的页,相应地,内存物理空间也分成相对应的若干个物理块,页和块的大小相等。可将用户...

    内部碎片:已经被分配出去的的内存空间大于请求所需的内存空间。

    外部碎片:还没有分配出去,但是由于大小太小而无法分配给申请空间的新进程的内存空间空闲块。

     

    Window内存管理方式主要分为:页式管理、段式管理、段页式管理。

    1、页式管理

    用户程序的逻辑地址空间被划分成若干固定大小的页,相应地,内存物理空间也分成相对应的若干个物理块,页和块的大小相等。可将用户程序的任一页放在内存的任一块中,这些块不必连续,实现了离散分配。由于最后一页经常装不满一块而形成了不可利用的碎片,称之为“内碎片”。

    逻辑地址映射成物理地址的过程:页表寄存器中存放页表长度和页表起始地址,指令给出的地址包括页号和页内地址,用页号去索引页表,索引之前,先比较页号与页表长度,若页号大于等于页表长度,则发生越界中断,否则,将页表起始地址与页号相加可以得到该页在页表中的位置,进而得到对应的物理块地址,将物理块地址和页内地址相加即可得到物理地址。

    优点:没有外碎片,每个内碎片不超过页的大小,程序不必连续存放。

    缺点:要求程序全部装入内存,没有足够的内存,程序就不能执行。

     

    2、段式管理

    用户程序的逻辑地址空间被划分成若干大小不等的段,每段可以定义一组相对完整的逻辑信息,段的长度由相应的逻辑信息组的长度决定。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。

    逻辑地址映射成物理地址的过程:段表寄存器中存放段表长度和段表起始地址,指令给出的地址包括段号和段内地址,用段号去索引段表,索引之前,先比较段号与段表长度,若段号大于等于段表长度,则发生越界中断,否则,将段表起始地址与段号相加可以得到该段在段表中的位置,进而得到物理段地址,将物理段地址和段内地址相加即可得到物理地址。

    优点:每次交换的是一组相对完整的逻辑信息,而不像页式管理那样只交换固定大小的页从而需要多次缺页中断才能把信息完整地调入内存。

    缺点:会产生外部碎片。

     

    3、段页式管理

    分页系统能有效地提高内存的利用率,而分段系统能反映程序的逻辑结构,将分页与分段结合起来,就形成了段页式管理方式。在段页式管理系统中,用户程序的逻辑地址空间首先被划分成若干个逻辑分段,每段都有自己的段号,然后再将每段分成若干个大小相等的页。

    逻辑地址映射成物理地址的过程:段表寄存器中存放段表长度和段表起始地址,指令给出的地址包括段号、段内页号和页内地址,用段号去索引段表,段表中存放段号、页表长度、页表起始地址,索引之前,先比较段号与段表长度,若段号大于等于段表长度,则发生越界中断,否则,将段表起始地址与段号相加可以得到该段在段表中的位置,进而得到页表起始地址,将页表起始地址与段内页号相加可以得到对应的物理块地址,将物理块地址和页内地址相加即可得到物理地址。

    优点:程序是以段为单位分割的,每个段内是连续的,但段间可以不连续;没有外碎片,能减少存储空间的浪费。

    缺点:有内部碎片;由于管理软件的增加,复杂性和开销也随之增加。

    展开全文
  • 文章目录目录前文列表页式管理快表多级页表基于页表的虚实地址转换原理应用 TLB 快表提升虚实地址转换速度页式虚拟存储器工作的全过程缺页中断段式管理段页式管理 前文列表 页式管理 页式存储管理是一种把主存按页...

    目录

    前文列表

    Linux 操作系统原理 — 内存 — 物理存储器与虚拟存储器
    Linux 操作系统原理 — 内存 — 基于 MMU 硬件单元的虚/实地址映射技术
    Linux 操作系统原理 — 内存 — 基于局部性原理实现的内/外存交换技术
    Linux 操作系统原理 — 内存 — 内存分配算法

    页式管理

    页式存储管理是一种把主存按页分配的存储管理方式,主存-辅存间信息传送单位是定长的页。对比块式管理而言,因为管理的粒度更细致,所以造成内存页碎片的浪费也会小很多。而缺点也正好相反,由于页不是程序独立模块对应的逻辑实体,所以处理、保护和共享都不及段来得方便。同时也因为页要比段小得多,在 Linux 下通常默认设置为 4KB,所以页在进行交换时,不会出现段交换那般卡顿。所以,页式存储管理方式会更加的受到欢迎,Linux 操作系统采用的就是页式存储管理方式。

    在这里插入图片描述

    更进一步的,页式存储管理方式使得加载程序的时候,不再需要一次性都把程序加载到内存中,而是在程序运行中需要用到的对应虚拟内存页里面的指令和数据时,再将其加载到内存中,这些操作由操作系统来完成。当 CPU 要读取特定的页,但却发现页的内容却没有加载时,就会触发一个来自 CPU 的缺页错误(Page Fault)。此时操作系统会捕获这个错误,然后找到对应的页并加载到内存中。通过这种方式,使得我们可以运行哪些远大于实例物理内存的程序,但相对的执行效率也会有所下降。

    在这里插入图片描述
    通过虚拟存储器、内存交换、内存分页三个技术的结合。我们最终得到了一个不需要让程序员考虑实际的物理内存地址、大小和当前分配空间的程序运行环境。这些技术和方式对于程序员和程序的编译、链接过程而言都是透明的,印证了那句著名的话:所有计算机问题都可以通过插入一个中间层来解决。

    页表管理机制中有两个很重要的概念:快表和多级页表。在分页内存管理中,很重要的两点是:

    1. 虚拟地址到物理地址的转换要快。
    2. 解决虚拟地址空间大,页表也会很大的问题。

    快表

    块表:为了解决虚拟地址到物理地址的转换速度,操作系统在 页表方案 基础之上引入了 快表 来加速虚拟地址到物理地址的转换。我们可以把块表理解为一种特殊的高速缓冲存储器(Cache),其中的内容是页表的一部分或者全部内容。作为页表的 Cache,它的作用与页表相似,但是提高了访问速率。由于采用页表做地址转换,读写内存数据时 CPU 要访问两次主存。有了快表,有时只要访问一次高速缓冲存储器,一次主存,这样可加速查找并提高指令执行速度。

    使用快表之后的地址转换流程是这样的:

    1. 根据虚拟地址中的页号查快表;
    2. 如果该页在快表中,直接从快表中读取相应的物理地址;
    3. 如果该页不在快表中,就访问内存中的页表,再从页表中得到物理地址,同时将页表中的该映射表项添加到快表中;
    4. 当快表填满后,又要登记新页时,就按照一定的淘汰策略淘汰掉快表中的一个页。

    看完了之后你会发现快表和我们平时经常在我们开发的系统使用的缓存(比如 Redis)很像,的确是这样的,操作系统中的很多思想、很多经典的算法,你都可以在我们日常开发使用的各种工具或者框架中找到它们的影子。

    多级页表

    多级页表:引入多级页表的主要目的是为了避免把全部页表一直放在内存中占用过多空间,特别是那些根本就不需要的页表就不需要保留在内存中。多级页表属于时间换空间的典型场景,具体可以查看下面这篇文章:https://www.polarxiong.com/archives/多级页表如何节约内存.html。

    为了提高内存的空间性能,提出了多级页表的概念;但是提到空间性能是以浪费时间性能为基础的,因此为了补充损失的时间性能,提出了快表(即 TLB)的概念。不论是快表还是多级页表实际上都利用到了程序的局部性原理,局部性原理在后面的虚拟内存这部分会介绍到。

    共同点 :

    • 分页机制和分段机制都是为了提高内存利用率,较少内存碎片。
    • 页和段都是离散存储的,所以两者都是离散分配内存的方式。但是,每个页和段中的内存是连续的。

    区别 :

    • 页的大小是固定的,由操作系统决定;而段的大小不固定,取决于我们当前运行的程序。
    • 分页仅仅是为了满足操作系统内存管理的需求,而段是逻辑信息的单位,在程序中可以体现为代码段,数据段,能够更好满足用户的需要。

    为了存储 64 位操作系统中 128 TiB 虚拟内存的映射数据,Linux 在 2.6.10 中引入了四层的页表辅助虚拟地址的转换,在 4.11 中引入了五层的页表结构,在未来还可能会引入更多层的页表结构以支持 64 位的虚拟地址。

    在这里插入图片描述

    在如上图所示的四层页表结构中,操作系统会使用最低的 12 位作为页面的偏移量,剩下的 36 位会分四组分别表示当前层级在上一层中的索引,所有的虚拟地址都可以用上述的多层页表查找到对应的物理地址。

    因为操作系统的虚拟地址空间大小都是一定的,整片虚拟地址空间被均匀分成了 N 个大小相同的内存页,所以内存页的大小最终会决定每个进程中页表项的层级结构和具体数量,虚拟页的大小越小,单个进程中的页表项和虚拟页也就越多。

    因为目前的虚拟页大小为 4096 字节,所以虚拟地址末尾的 12 位可以表示虚拟页中的地址,如果虚拟页的大小降到了 512 字节,那么原本的四层页表结构或者五层页表结构会变成五层或者六层,这不仅会增加内存访问的额外开销,还会增加每个进程中页表项占用的内存大小。

    基于页表的虚实地址转换原理

    同任何缓存设计一样,虚拟存储器系统必须有某种方法来判定一个虚拟页是否存放在物理主存的某个地方。如果存在,系统还必须确定这个虚拟页存放在哪个物理页中。如果物理主存不命中,系统必须判断这个虚拟页存放在磁盘的哪个位置中,并在物理主存中选择一个牺牲页,然后将目标虚拟页从磁盘拷贝到物理主存中,替换掉牺牲页。这些功能是由许多软硬件联合提供,包括操作系统软件,MMU(存储器管理单元)地址翻译硬件和一个存放在物理主存中的叫做页表(Page Table)的数据结构,页表将虚拟页映射到物理页。页表的本质就是一个页表条目(Page Table Entry,PTE)数组。

    CPU 通过虚拟地址(Virtual Address,VA)来访问存储空间,这个虚拟地址在被送到存储器之前需要先转换成适当的物理地址。将一个虚拟地址转换为物理地址的任务叫做地址翻译(Address Translation)。就像异常处理一样,地址翻译需要 CPU 硬件和操作系统之间的紧密合作。比如:Linux 操作系统的交换空间(Swap Space)。如果当 CPU 寻址时发现虚拟地址找不到对应的物理地址,那么就会触发一个异常并挂起寻址错误的进程。在这个过程中,对其他进程没有任何影响。

    虚拟地址与物理地址之间的转换主要有 CPU 芯片上内嵌的存储器管理单元(Memory Management Unit,MMU)完成,它是一个专用的硬件,利用存放在主存中的查询表(地址映射表)来动态翻译虚拟地址,该表的内容由操作系统管理。

    在这里插入图片描述
    由于页的大小为 2 的整数次幂,所以页的起点都落在低位字段为 0 的地址上,可以把虚拟地址分为两个字段,高位字段位虚拟页号,低位字段为虚页内地址。在页表中,对应每一个虚页号都有一个条目,格式为 (虚页号,实页号,控制字)。
    在这里插入图片描述
    实页号即为实页地址,被作为物理地址的高字段,而物理地址的低字段则同为虚拟地址的低字段(虚页内地址)。拼接成为了主存物理地址之后,就可以据此访问主存储器数据了。
    在这里插入图片描述
    通常的,页面中还包括有装入位、修改位、替换控制位以及其他保护位组成的控制字。e.g.

    • 装入位为 1:表示该条目对应的虚页以及辅存调入主存;
    • 装入位为 0:表示对应的虚页尚未装入主存,如果此时 CPU 访问该页就会触发页面失效中断,启动 I/O 子系统,根据外页表项目中查找到的辅存地址,进行辅存到主存的页面交换;
    • 修改位:表示主存页面的内容是否被修改过,从主存交换到辅存时是否要写回辅存。
    • 替换位:表示需要替换的页。

    应用 TLB 快表提升虚实地址转换速度

    当页表已经存放在主存中,那么当 CPU 访问(虚拟)存储器时,首先要查询页面得到物理主存地址之后再访问主存完成存取。显然,地址转换机制让 CPU 多了一次访问主存的操作,相当于访问速度下降一半。而且当发生页面失效时,还要进行主存-辅助的页面交换,那么 CPU 访问主存的次数就更多了。为了解决这个问题,在一些影响访问速度的关键地方引入了硬件的支持。例如:采用按内容查找的相联存储器并行查找。此外,还进一步提出了 “快表” 的概念。把页表中最活跃的部分存放在快速存储器中组成快表,是减少 CPU 访问时间开销的一种方法。

    快表由硬件(门电路和触发器)组成,属于 MMU 的部件之一,通常称为转换旁路缓冲器(Translation lookaside buffer,TLB)。TLB 的本质也是一个 Cache,它比页表小得多,一般在 16 个条目 ~ 128 个条目之间,快表只是页表的一个小小的副本。查表时,带着虚页好同时差快表和慢表(原页面),当在快表中找打条目时,则马上返回主存物理地址到主存地址寄存器,并使慢表查询作废。此时,虽然使用了虚拟存储器但实际上 CPU 访问主存的速度几乎没有下降(CPU 不再需要多次访问主存)。如果快表不命中,则需要花费一个访主存时间查慢表,然后再返回主存物理地址到主存地址寄存器,并将此条目送入到快表中,替换到快表的某一行条目。

    在这里插入图片描述

    页式虚拟存储器工作的全过程

    内页表:虚拟地址与主存地址的映射。
    外页表:虚拟地址与辅存地址的映射。
    虚地址格式:(虚页号,虚页内地址)
    主存地址格式:(实页号,实页内地址)
    辅存地址格式:(磁盘机号,磁头号,柱面号,块号,块内地址)

    从三种地址格式可见,虚地址-主存地址的转换是虚实页号替换,有内页表完成;虚地址-辅存地址的转换是虚页号与 “磁盘机号,磁头号,柱面号,块号” 的替换,由外页表完成。

    在这里插入图片描述
    1、2:虚拟存储器每次访问主存时都需要将多用户虚地址转换层主存实地址,这个由虚页号转换为实页号的内部地址转换由内页表来完成;
    3:当对应内页表条目的有效位为 1 时,就按照物理主存地址 np 进行主存储器访问。
    4:如果对应内存表条目的装入位为 0 时,表示该虚页对应的实页不再主存中,那么就触发一个页面失效中断。有中断处理器到辅存中调用对应的实页。
    5:到辅存中调页,首先要进行外部地址转换,查找外页表,将多用户虚拟地址转换为辅存实页地址 Nvd。
    6:根据辅存实页地址 Nvd 到辅存中选页。
    7:将选中的辅存实页经过 I/O 处理机送出到物理主存中。
    9:此时还要确定调入的辅存实页应该放置到主存的什么位置上,这通过查找实存页面表来完成。
    10:当主存对应的目标地址仍然空闲时,就会找到空页面。
    11、12:但当主存已经装满时,就是执行页面替换操作,由替换算法来决定替换哪一个主存实页到辅存中。
    13:把待替换主存实页放入 I/O 处理机,待替换主存页是否被修改了是可以通过页表替换位知道的,此时如果待替换的主存实页没有被修改过,那么是不需要回写到辅存的。
    14:但如果待替换的主存实页被修改了,那么就需要写回辅存。
    7:继续将目标实页写入到物理主存中,完成替换。新页调入主存时,需要修改相应的页表条目。
    8:如果待替换页没能装入缓存,那么还要继续进入中断,进行出错处理或其他处理。

    缺页中断

    地址映射过程中,若在页面中发现所要访问的页面不在内存中,则发生缺页中断。缺页中断 就是要访问的页不在主存,需要操作系统将其调入主存后再进行访问。在这个时候,被内存映射的文件实际上成了一个分页交换文件。当发生缺页中断时,如果当前内存中并没有空闲的页面,操作系统就必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。用来选择淘汰哪一页的规则叫做页面置换算法,我们可以把页面置换算法看成是淘汰页面的规则。

    • OPT 页面置换算法(最佳页面置换算法) :理想情况,不可能实现,一般作为衡量其他置换算法的方法。
    • FIFO 页面置换算法(先进先出页面置换算法) : 总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面进行淘汰。
    • LRU 页面置换算法(最近未使用页面置换算法) :LRU(Least Currently Used)算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间T,当须淘汰一个页面时,选择现有页面中其T值最大的,即最近最久未使用的页面予以淘汰。
    • LFU 页面置换算法(最少使用页面排序算法) : LFU(Least Frequently Used)算法会让系统维护一个按最近一次访问时间排序的页面链表,链表首节点是最近刚刚使用过的页面,链表尾节点是最久未使用的页面。访问内存时,找到相应页面,并把它移到链表之首。缺页时,置换链表尾节点的页面。也就是说内存内使用越频繁的页面,被保留的时间也相对越长。

    处理的流程如下:

    在这里插入图片描述

    • cr2:访问到线性地址、
    • err_code:异常发生时由控制单元压入栈中,表示发生异常的原因。
    • regs:发生异常时寄存器的值。

    为什么 Linux 默认页大小是 4KB?

    Linux 同时支持正常大小的内存页和大内存页(Huge Page),绝大多数处理器上的内存页的默认大小都是 4KB,虽然部分处理器会使用 8KB、16KB 或者 64KB 作为默认的页面大小,但是 4KB 的页面仍然是操作系统默认内存页配置的主流。除了正常的内存页大小之外,不同的处理器上也包含不同大小的大页面,我们在 x86 处理器上就可以使用 2MB 的内存页。

    4KB 的内存页其实是一个历史遗留问题,在上个世纪 80 年代确定的 4KB 一直保留到了今天。虽然今天的硬件比过去丰富了很多,但是我们仍然沿用了过去主流的内存页大小。在今天,4KB 的内存页大小可能不是最佳的选择,8KB 或者 16KB 说不定是更好的选择,但是这是过去在特定场景下做出的权衡。

    我们需要关注的是两个影响内存页大小的因素:

    • 过小的页面大小会带来较大的页表项增加寻址时 TLB(Translation lookaside buffer)的查找速度和额外开销;
    • 过大的页面大小会浪费内存空间,造成内存碎片,降低内存的利用率;

    上个世纪在设计内存页大小时充分考虑了上述的两个因素,最终选择了 4KB 的内存页作为操作系统最常见的页大小。

    段式管理

    • 段式管理:页式管理虽然提高了内存利用率,但是页式管理其中的页实际并无任何实际意义。段式管理把主存分为一段段的,每一段的空间又要比一页的空间小很多 。但是,最重要的是段是有实际意义的,每个段定义了一组逻辑信息,例如,有主程序段 MAIN、子程序段 X、数据段 D 及栈段 S 等。段式管理通过段表对应逻辑地址和物理地址

    段式存储管理是一种把主存按段分配的存储管理方式,主存-辅存间信息传送单位是不定长的段。

    • 优点:是段的分界与程序的自然分界是相对应的。例如:过程、子程序、数据表和阵列等待程序的模块化性质都可以与段对应起来。于是段作为独立的逻辑单位可以被其他程序段调用,这样就形成了段间连接,产生规模较大的程序。这样的特性使得段易于编译、管理、修改和保护,也便于多道程序共享。
    • 缺点:是容易在段间留下许多空余的存储空间碎片,且不好收集利用。除此之外,段式存储管理还存在交换性能较低的问题。因为辅存的访问速度比主存慢得多,而每一次交换,我们都需要把一大段连续的内存数据写到硬盘上,导致了当内存交换一个较大的段时,会让机器显得卡顿。

    在这里插入图片描述

    段页式管理

    段页式管理结合了段式管理和页式管理的优点。简单来说,段页式管理机制就是把主存先分成若干页,每个页又分成若干段。如此的,段页式管理机制中段与段之间以及段的内部的都是离散的。显然,段页式管理是一种折中的方式,具有广泛的通用性。

    在 Linux 内部的地址的映射过程为:逻辑地址–>线性地址–>物理地址。物理地址,即:地址总线中传输的数字信号,而线性地址和逻辑地址所表示的则是一种转换规则,线性地址规则如下:
    在这里插入图片描述

    这部分由 MMU 完成,其中涉及到主要的寄存器有 CR0、CR3。机器指令中出现的是逻辑地址,逻辑地址规则如下:

    在这里插入图片描述

    在 Linux 中的逻辑地址等于线性地址。

    而段页式管理的 MMU 硬件电路,它包含两个部件,一个是分段部件,一个是分页部件:

    • 分段机制把一个逻辑地址转换为线性地址。
    • 分页机制把一个线性地址转换为物理地址。

    在这里插入图片描述

    内存分段的原理:逻辑地址的段寄存器中的值提供段描述符,然后从段描述符中得到段基址和段界限,然后加上逻辑地址的偏移量,就得到了线性地址。

    段选择符:

    • 为了方便快速检索段选择符,处理器提供了 6 个分段寄存器来缓存段选择符,它们是:CS、SS、DS、ES、FS 和 GS。
    • 段的基地址(Base Address):在线性地址空间中段的起始地址。
    • 段的界限(Limit):在虚拟地址空间中,段内可以使用的最大偏移量。

    在这里插入图片描述

    内存分页(32 位)原理:是在分段机制之后进行的,它进一步将线性地址转换为物理地址:

    • 10 位页目录,10 位页表项, 12 位页偏移地址。
    • 单页的大小为 4KB。

    在这里插入图片描述

    展开全文
  • 页式管理  1 页式管理的基本原理将各进程的虚拟空间划分成若干个长度相等的页(page),页式管理把内存空间按页的大小划分成片或者页面(page frame),然后把页式虚拟地址与内存地址建立一一对应页表,并用相应的...
    一 页式管理 
    1 页式管理的基本原理将各进程的虚拟空间划分成若干个长度相等的页(page),页式管理把内存空间按页的大小划分成片或者页面(page frame),然后把页式虚拟地址与内存地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。页式管理采用请求调页或预调页技术实现了内外存存储器的统一管理。 

    它分为 
    1 静态页式管理。静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。系统通过存储页面表、请求表以及页表来完成内存的分配工作。静态页式管理解决了分区管理时的碎片问题。但是,由于静态页式管理要求进程或作业在执行前全部装入内存,如果可用页面数小于用户要求时,该作业或进程只好等待。而且作业和进程的大小仍受内存可用页面数的限制。 

    2 动态页式管理。动态页式管理是在静态页式管理的基础上发展起来的。它分为请求页式管理和预调入页式管理。 

    优点: 没有外碎片,每个内碎片不超过页大小。一个程序不必连续存放。便于改变程序占用空间的大小(主要指随着程序运行而动态生成的数据增多,要求地址空间相应增长,通常由系统调用完成而不是操作系统自动完成)。 

    缺点:程序全部装入内存。 
    要求有相应的硬件支持。例如地址变换机构,缺页中断的产生和选择淘汰页面等都要求有相应的硬件支持。这增加了机器成本。增加了系统开销,例如缺页中断处理机,请求调页的算法如选择不当,有可能产生抖动现象。 虽然消除了碎片,但每个作业或进程的最后一页内总有一部分空间得不到利用果页面较大,则这一部分的损失仍然较大。 

    二 段式管理的基本思想 
    把程序按内容或过程(函数)关系分成段,每段有自己的名字。一个用户作业或进程所包含的段对应一个二维线形虚拟空间,也就是一个二维虚拟存储器。段式管理程序以段为单位分配内存,然后通过地址影射机构把段式虚拟地址转换为实际内存物理地址。 
    程序通过分段(segmentation)划分为多个模块,如代码段、数据段、共享段。其优点是: 可以分别编写和编译。 可以针对不同类型的段采取不同的保护。 可以按段为单位来进行共享,包括通过动态链接进行代码共享。 

    三 段页式管理的实现原理 

    1 虚地址的构成 
    一个进程中所包含的具有独立逻辑功能的程序或数据仍被划分为段,并有各自的段号s。这反映相继承了段式管理的特征。其次,对于段s中的程序或数据,则按照一定的大小将其划分为不同的页。和页式系统一样,最后不足一页的部分仍占一页。这反映了段页式管理中的页式特征。从而,段页式管理时的进程的虚拟地址空间中的虚拟地址由三部分组成:即段号s,页号P和页内相对地址d。虚拟空间的最小单位是页而不是段,从而内存可用区也就被划分成为着干个大小相等的页面,且每段所拥有的程序和数据在内存中可以分开存放。分段的大小也不再受内存可用区的限制。 
    2 段表和页表 
    为了实现段页式管理,系统必须为每个作业或进程建立一张段表以管理内存分配与释放、缺段处理、存储保护相地址变换等。另外,由于一个段又被划分成了若干页,每个段又必须建立一张页表以把段中的虚页变换成内存中的实际页面。显然,与页式管理时相同,页表中也要有相应的实现缺页中断处理和页面保护等功能的表项。另外,由于在段页式管理中,页表不再是属于进程而是属于某个段,因此,段表中应有专项指出该段所对应页表的页表始址和页表长度。 
    3 动态地址变换过程 
    在一般使用段页式存储管理方式的计算机系统中,都在内存中辟出一块固定的区域存放进程的段表和页表。因此,在段页式管理系统中,要对内存中指令或数据进行一次存取的话,至少需要访问三次以上的内存: 

    第一次是由段表地址寄存器得段表始址后访问段表,由此取出对应段的页表在内存中的地址。 

    第二次则是访问页表得到所要访问的物理地址。 

    第三次才能访问真正需要访问的物理单元。 

    显然,这将使CPU的执行指令速度大大降低。为了提高地址转换速度,设置快速联想寄存器就显得比段式管理或页式管理时更加需要。在快速联想寄存器中,存放当前最常用的段号s、页号p和对应的内存页面与其它控制用栏目。当要访问内存空间某一单元时,可在通过段表、页表进行内存地址查找的同时,根据快速联想寄存器查找其段号和页号。如果所要访问的段或页在快速联想寄存器中,则系统不再访问内存中的段表、页表而直接把快速联想寄存器中的值与页内相对地址d拼接起来得到内存地址。 

    总之,因为段页式管理是段式管理的页式管理方案结合而成的,所以具有它们二者的优点。但反过来说,由于管理软件的增加,复杂性和开销也就随之增加了。另外,需要的硬件以及占用的内存也有所增加。更重要的是,如果不采用联想寄存器的方式提高CPU的访内速度,将会使得执行速度大大下降。

    展开全文
  • 存储管理的基本模式: 1.单连续存储管理:一维逻辑...4.段页式存储管理:段式二维逻辑地址空间的程序占用多个主存页架区:   虚拟存储器的基本思想:  存储管理把进程全部信息放在辅存中,执行时先将其中一部...

    存储管理的基本模式:

    1.单连续存储管理:一维逻辑地址空间的程序占用一个主存固定分区或者可变分区;

    2.段式存储管理:段式二维逻辑地址空间的程序占用多个主存可变分区

    3.页式存储管理:一维逻辑地址空间的程序占用多个主存页架区

    4.段页式存储管理:段式二维逻辑地址空间的程序占用多个主存页架区

     

    虚拟存储器的基本思想:

        存储管理把进程全部信息放在辅存中,执行时先将其中一部分装入主存,以后根据执行行为随用随调入; 

        如主存中没有足够的空闲空间,存储管理需要根据执行行为把主存中暂时不用的信息调出到辅存上去;

    虚拟存储器的实现思路


    需要建立与自动管理两个地址空间:
    1.(辅存)虚拟地址空间: 容纳进程装入; 2.(主存)实际地址空间: 承载进程执行
    对于用户, 计算机系统具有一个容量大得多的主存空间, 即虚拟存储器;
    虚拟存储器是一种地址空间扩展技术,通常意义上对用户编程是透明的, 除非用户需要进行高性能的程序设计;

    单连续分区存储管理 

        每一个进程占用一个物理上完全连续的存储空间;

    分为:

    单用户连续存储管理

    固定分区存储管理

    可变分区存储管理

         按照实际进程实际内存需求动态划分分区,并允许分区个数可变,这样既可以适应大尺寸程序,也不存在内存内零头的浪费,但是会有内存外零头;

     

     页式存储管理的基本原理:

    分页存储器将主存划分成多个大小相等页架

    程序的逻辑地址分成页;

    不同的页可以放在不同页架中,不需要连续

    页表用于维系进程的主存完整性

    页式存储管理的逻辑地址由两部分组成:

    页式存储管理的物理地址也有两部分组成:

    页式存储管理的地址转换思路:

     

     页的共享:

         页式存储管理能够实现多个进程共享程序和数据

    数据共享:不同进程可以使用不同页号共享数据页;

    程序共享:不同进程必须使用相同页号共享代码页;

     页式虚拟存储管理的就基本思想:

        把进程全部页面装入虚拟存储器,执行时先把部分页面装入实际内存,然后,根据执行行为,动态调入不在主存的页,同时进行必要的页面调出;

    段式管理:

      分段存储器的逻辑地址由两部分组成:

    段号:单元号

     段式存储器管理的基本思想:

        段式存储管理基于可变分区存储管理实现,一个进程要占用多个分区;

        硬件需要增加一组用户可见的段地址寄存器,供地址转换使用;

       存储管理器需要增加设置一个段表,每个段表占用一个段表项;

    段的共享:

       通过不同进程段表中的项指向同一个段基址来实现 ;

      对共享段的信息必须 进行保护,如规定只能读出不能写入;

    段式虚拟存储器管理的基本思想:

           把进程的所有分段都存放在辅存中,进程运行时先把当前需要的一段或者几段装入主存,在执行过程中访问到不在主存的段时再把他们动态装入;

     

    段页式存储管理的基本思想:

          段式存储管理可以基于页式存储管理实现,每一段不必占据连续的存储空间,可存放在不连续的主存页架中;

     

     

      总结:

        页式管理的基本原理是将各进程的虚拟空间划分成若干个长度相等的页,页式管理把内存空间按页的大小划分成片或者页面,然后把页式虚拟地址和内存地址建立一一对应的页表,并用相应的硬件地址变换机构来解决离散地址变换问题。其优点是没有外碎片,每个碎片不超过页的大小,缺点是程序全部装入内存,要求有相应的硬件支持,例如地址变换机构缺页中断的产生和选择淘汰页面等都要求相应的硬件支持,增加了及器成本;

           段式管理的基本思想是把程序按照内容或者过程函数关系分成段,每段都有自己的名字。一个用户作业或者进程所包含的段对应一个二维线性虚拟空间,也就是一个二维虚拟存储器。段式管理程序以段为单位分配内存,然后通过地址映射机构把段式虚拟地址转换为实际内存物理地址。优点是可以分别编写和编译,可以针对不同类型的段采取不同的保护,可以按段为单位来进行共享,包括动态链接来进行代码共享,缺点是会产生碎片

          段页式管理:为了实现段页式管理,系统必须为每个作业或者进程建立一张段表以管理内存分配与释放,缺段处理等。另外由于一个段又被划分成了若干页。每个段又必须建立一张页表以把段中的虚页变换成内存中的实际页面。显然与页式管相同,页表中也要有相应的实现缺页中断处理和页面保护等功能的表项。段页式管理是段式管理与页式管理方案的结合,所以具备这两者的优点,缺点是复杂性增加了,执行速度下降;

    补充:

    缺页中断率:访问不成功的次数/访问的总次数;

    LRU:淘汰最近一段时间较久未被访问的那一页;

    LFU:淘汰最近一段时间内访问次数较少的 页面;

    展开全文
  • 页式、段式、段页式管理

    千次阅读 2019-06-03 09:37:32
    https://blog.csdn.net/dreamer841119554/article/details/79965279 https://blog.csdn.net/iostream1001001/article/details/77124768
  • 操作系统之段页式管理

    千次阅读 2018-08-01 11:11:51
    段页方式管理程序一直不太明白,下面这个网址通俗明了,可以参考 https://www.cnblogs.com/suncoolcat/p/3400353.html
  • 1. 内存管理方法  内存管理主要包括虚地址、地址...连续分配有单一连续存储管理和分区管理两种方式。 2.1 单一连续存储管理  在这种管理方式中,内存被分为两个区域:系统区和用户区。应用程序装入到用户区,可
  • linux内核--段页式管理内存的方法

    千次阅读 2015-01-28 19:50:28
    跟逻辑地址类似,它也是一个不真实的地址,如果逻辑地址是对应的硬件平台段式管理转换前地址的话,那么线性地址则对应了硬件页式内存的转 换前地址。 --------------------------------------------------------...
  • 首先将那些即将要访问的放入覆盖区,其他放在外存中,在需要调用前,系统再将其调入覆盖区,替换覆盖区中原有的。 覆盖技术的特点是打破了必须将一个进程的全部信息装入主存后才能运行的限制,但当同时运行...
  • 段页式内存管理

    千次阅读 2019-03-18 20:23:54
      段页式管理就是将程序分为多个逻辑段,在每个段里面又进行分页,即将分段和分页组合起来使用。这样做的目的就是想同时获得分段和分页的好处,但又避免了单独分段或单独分页的缺陷。   如果我们将每个段看做一...
  • Windows内存管理方式主要分为:页式管理、段式管理和段页式管理 首先看一下“基本的存储分配方式”种类:   1. 离散分配方式的出现  由于连续分配方式会形成许多内存碎片,虽可通过“紧凑”功能...
  • 页式存储: ...段页式存储: 先查段表,通过段号确定页表地址。找到页表之后,通过页号确定内存块号地址(页框)因为每个段大小不一样,要判断页号是否越界。然后通过偏移地址在块内找到要找到信息。 ...
  • 目录页式基本原理实现优点缺点段式管理基本原理实现优点缺点段页式管理基本原理实现优点缺点 页式 基本原理 将各进程的虚拟空间划分为若干长度相等的页。内存空间按页的大小划分为片/页面,建立页表(页式虚拟地址与...
  • 页式管理 1 页式管理的基本原理将各进程的虚拟空间划分成若干个长度相等的页(page),页式管理把内存空间按页的大小划分成片或者页面(page frame),然后把页式虚拟地址与内存地址建立一一对应页表,并用相应的...
  • 存储管理之页式、段式、段页式存储 以及 优缺点

    万次阅读 多人点赞 2018-09-14 18:08:44
    内存管理方式主要分为:页式管理、段式管理和段页式管理。 页式管理的基本原理是将各进程的虚拟空间划分为若干个长度相等的页。把内存空间按页的大小划分为片或者页面,然后把页式虚拟地址与内存地址建立一一对应的...
  • 分段+分页=段页式管理段页式管理的逻辑地址结构段页式存储的段表、页表3.段页式管理的地址转换过程 0.思维导图 1.分页、分段的优缺点分析 2.分段+分页=段页式管理 段页式管理的逻辑地址结构 段页式存储的段表...
  • 段页式存储管理

    千次阅读 2016-12-08 23:03:30
    1.段式管理有利于段的动态增长以及共享和内存保护;分页系统有效的克服了碎片,提高了存储器的利用率。 2.段页式管理时,,一个进程...从而段页式管理时的进程的虚拟地址空间中的虚拟地址由三部分组成:段号s,页号
  • 操作系统 段页式存储管理

    千次阅读 2018-11-22 22:43:27
    结合两者的优点,段页式管理内存的方式由此产生。 内存被分成若干个大小相同的页,比如现在我们用的每个页的大小一般是4k大小。我们程序每个段(代码段,数据段 堆栈段)又被分成多个页,这些页的内存地址不一定连续...
  • 6.6 段页式存储管理

    万次阅读 2011-09-24 23:05:49
     引入段页式管理的目的  为了获得分段在逻辑上的优点和分页在管理存储空间方面的优点。  引入段页式管理的目的  (1)用分段方法来分配和管理虚拟存储器。把作业的地址空间分成若干段,而每一段有自己的段名...
  • 段式存储管理段页式存储管理

    千次阅读 多人点赞 2018-06-24 10:33:36
    分页与分段的区别 1.是信息的物理单位,是系统管理的需要而不是用户的需要;而是信息的逻辑单位,分段是为了更好地满足用户的需要 2.的大小固定且由系统决定,一个...段式存储管理 :用户编制的程序可以...
  • [操作系统] 内存管理策略:页式、段式、段页式

    千次阅读 多人点赞 2018-04-16 19:44:11
    原书第六版》前言为了解决外部碎片问题,一种可行的方案是允许物理地址空间为非连续的,具体的实现技术包括:分页、分段以及两者的合并段页式管理页式实现分页的基本方法涉及将物理内存分为固定大小的块,成为帧;...
  • 内存管理包括内存管理概念、交换与覆盖、连续分配管理方式和非连续分配管理方式(分页管理方式、分段管理方式、段页式管理方式)。 虚拟内存管理包括虚拟内存概念、请求分页管理方式、页面置换算法、页面分配策略、...
  • 操作系统内存管理——分区、页式段式管理 计算存储的层次结构: 当前技术没有能够提供这样的存储器,因此大部分的计算机都有一个存储器层次结构,即少量的非常快速、昂贵、易变的高速缓存(cache);若干兆字节...
  • 提高内存利用效率和管理灵活性段式存储管理进程的地址空间由多个组成。 主代码 子模块代码 共用库代码 堆栈 堆数据 初始化数据 符号表等 目的:更细粒度和灵活的分离与共享将逻辑地址空间转换为不连续...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 164,308
精华内容 65,723
关键字:

段页式管理