《操作系统设计与实现》(第三版)第四章 存储管理 重要概念汇总

1. 存储器层次结构

最顶层:CPU内部的一些寄存器

第二层:高速缓存(cache)

第三层:主存储器(内存)

第四层:磁盘(非易失的 nonvolatile)

操作系统作为一个系统软件,其任务就是协调好这些不同类型的存储器的使用

2. 存储管理器(memory manager)

一、在操作系统中,负责管理这个存储器层次结构的那一部分程序,称为存储器管理器。在大多数操作系统中,存储管理器都位于内核之中(MINIX3除外)

二、它的主要任务:

  • 记录存储器的使用情况;
  • 当进程需要存储空间时,就分配给它;当它运行结束后,再把存储空间回收回来;
  • 把内存中暂时不能运行的进程送到磁盘上,然后再把磁盘上的另一个进程装入内

3.内存管理

3.1分类

①需要在内存和磁盘之间,把进程换进换出;

②不需要这种换进换出

注:进程的换进换出和页面置换都是由于内存不足造成的。

3.2常见的内存管理技术

3.2.1单一连续分配(单道程序存储管理)

一、单道程序存储管理的基本思路

单道程序存储管理是最简单的一种存储管理方法。它的基本思路是,把整个内存划分为两个区域:系统区和用户区。每次把一个应用程序装入到用户区去运行,由它和操作系统来共享整个内存。而且从装入开始一直到它运行结束,在这段时期内,该程序始终独占着整个用户区。

二、实现方式(3种)

①操作系统被放在了随机存取存储器(Random Access Memory, RAM)的最低端——早期的大型机和小型机

                                                                 

②操作系统被放在了内存地址的最高端,而且是放在了只读存储器(Read-Only Memory,ROM)里面——掌上型电脑和嵌入式系统

                                                                  

③操作系统被分为两部分,一部分是设备驱动程序,被存放在内存高端的ROM中;另一部分则放在了内存的最低端——早期的个人计算机系统

                                                                  

(存放在内存高端的ROM中的系统内容,称为基本输入输出系统)

注意:在单道程序存储管理方式下,每次只能运行一个程序!

3.2.2分区管理

3.2.2.1 固定式分区管理

固定分区分配是将内存空间划分为若干个固定大小的区域,每个分区只装入一道作业。当有空闲分区时,便可以再从外存的后备作业队列中,选择适当大小的作业装入该分区,如此循环。

固定分区方式存在两个问题:

1)程序可能太大而放不进任何一个分区中,这时用户不得不使用覆盖技术来使用内存空间;

2)主存利用率低,当程序小于固定分区大小时,也占用了一个完整的内存分区空间,这样分区内部有空间浪费,这种  现象称为内部碎片。

I. 固定分区和多个输入队列

可能出现的情形:小分区的输入队列是满的,而大分区的输入队列是空的,造成内存空间的浪费

                                                               

 

II. 固定分区和单个输入队列

当某个分区变得空闲时,可以采用两种办法来选择合适的进程:

①选择离队首最近的、能够装入该分区的进程——如果选中的进程是一个比较小的进程,那么就会浪费大量的内存空间;

②先搜索整个队列,从中选择能够装入该分区的最大进程,从而尽可能地减少所浪费的空间——不利于比较小的进程(通常是一些交互式进程)

 解决办法:1)始终保留至少一个小分区

                  2)制定一条规则,规定一个进程被忽略次数不能超过k次

3.2.2.2 可变式分区管理

可变式分区在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。动态分区在开始分配时是很好的,但是之后会导致内存中出现许多小的内存块。随着时间的推移,内存中会产生越来越多的碎片,且随着进程的换入/换出,很可能会出现更多更小的内存块,内存的利用率随之下降。这些小的内存块称为外部碎片,指在所有分区外的存储空间会变成越来越多的碎片,这与固定分区中的内部碎片正好相对。

3.2.2.3 动态分区的分配策略

①首次适配算法(最简单)(first fit):空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。除非空洞大小与要分配的空间大小刚好一样,否则这个空洞将会分为两部分:一部分供进程使用+另一部分是未用的内存

②下次适配算法(next fit):工作方式与首次适配相同,区别:分配内存时从上次查找结束的位置开始继续查找。,而不是每次都从头开始。(下次适配的性能略低于首次适配)

③最佳适配算法(best fit):把空闲分区按照大小排成一个链,从链首开始查询,找到第一个适合的空闲分区(速度比首次适配算法慢,甚至比它造成更多的内存浪费)

④最差适配算法(worst fit):空闲分区以容量递减的次序链接,找到第一个能满足要求的空闲分区,也就是挑选出最大的分区,使分裂出来的空洞比较大从而继续使用(但不是一个好主意)

⑤快速适配算法(fast fit): 为一些经常被用到长度的空洞设立单独的链表。

3.3碎片概念及解决办法

①碎片概念:

在内存管理中,

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

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

(固定分区、页式虚拟存储系统存在内部碎片,可变式分区、段式虚拟存储器系统存在外部碎片;)

②解决碎片的办法:

采取内存紧缩(memory compaction)技术,即对碎片进行拼接,把所有的进程都尽可能地往内存地址的低端移动,相应地,那些空闲的小分区就会往地址的高端移动,从而在地址高端形成一个较大的空闲分区。但是需要消耗系统资源,我们不经常采用这种操作。

4.重定位和存储保护

多道程序技术引发了两个重要问题:地址重定位和存储保护。不同的作业将在不同的地址区间运行。当一个程序被链接时,链接器必须知道程序将在内存的什么地址开始运行

一、地址重定位

重定位就是把程序的逻辑地址空间变换成内存中的实际物理地址空间的过程,也就是说在装入时对目标程序中指令和数据的修改过程。它是实现多道程序在内存中同时运行的基础。

二、存储保护

             存储保护包括两方面的内容,防止地址越界防止非法操作
             (1) 防止地址越界
                     每个进程都具有其相对独立的进程空间,如果进程在运行时所产生的地址超出其地址空间,则发生地址越界,侵犯其他

                     进程的空间/侵犯操作系统空间,导致系统混乱。
             (2) 防止非法操作
                     对于允许多个进程共享的公共区域,每个进程都有自己的访问权限。例如,有些进程可以执行写操作,而其他进程只能

                     执行读操作等。因此,必须对公共区域的访问加以限制和检查。
             

             存储保护一般以硬件保护机制为主,软件为辅;因为完全用软件实现系统开销太大,速度成倍降低。当发生越界或非法操作

             时,硬件产生中断,进入操作系统处理。

三、解决方案:

①重定位问题:

当一个程序被装入时,直接对指令代码进行修改,一次性地实现从文件内的相对地址到内存中的绝对地址的转换

条件:链接器必须在可执行文件中包含一个链表/位图,列出各个需要重定位的地址单元的位置

②重定位+存储保护问题:

  1. 使用内存单元的保护码与CPU的密钥(只有操作系统才能修改保护码和密钥)
  2. 在机器中增加两个特殊的硬件寄存器,即基址(base)寄存器和边界(limit)寄存器

  (——缺点:在每一次内存访问中,都必须增加一次加法和比较操作

     条件:必须用硬件把基地址寄存器和边界寄存器保护起来,不能让用户随便去修改它们

5.覆盖与交换

一、基本概念:

覆盖是指同一主存区可以被不同的程序段重复使用。作业在一次运行时,把那些不会同时执行的程序段共用一个主存区。

相互覆盖的程序段叫做覆盖,可共享的主存区叫做覆盖区。覆盖技术的基础是提供正确的覆盖结构。

交换:交换就是系统根据需要把主存中暂时不允许的某个或某些作业部分或全部移到辅存,而把辅存中的某个或某些作业移到相应的主存区,并使其投入运行。

根据硬件条件的不同,可以采用两种不同的存储管理方法:交换(swapping)技术(最简单的策略)、虚拟存储器(virtual memory)

6.交换技术、虚拟存储器情形

  交换技术:把各个进程完整地调入内存,运行一段时间,再放回到磁盘上

  虚拟存储器:进程只有一部分内容存放在内存中,它也能运行

                       

随着进程的换入还出,在内存中会造成一些不连续的黑洞(即比较小的空闲分区),这时可以采用内存紧缩(memory compaction)技术——把所有的进程尽可能都往内存地址的低端移动,相应的,那些空闲的小分区就会往地址的高端移动,从而在地址高端形成一个较大的空闲分区——一般不采用,需要耗费大量的CPU实践

7.空间分配

当一个进程被创建/换入时,应该给它分配多大的内存空间?

 ①进程大小固定:进程需要多少,操作系统就分配多少

 ②进程大小不固定:操作系统为进程分配额外的内存空间以便于增长

8.对换(Swapping)

概念

对换,又称交换,swapping,在可变式分区存储管理方案当中,假设某时刻t进程P要进入内存,如果此时内存不够用,可以有两处理办法:一种是让进程P等待,直到有一个其他进程运行完释放内存为止;另一种办法是选择一个进程淘汰(并把被淘汰进程的映像写到磁盘),让P运行。这种方法称作是具有对换的可变式分区。

对换的类型

整体对换:进程对换,解决内存紧张问题。(中级调度)

部分对换:页面对换/分段对换,提供虚存支持。

对换空间的管理

具有对换功能的OS中,通常把外存分为文件区和对换区。前者用于存放文件,后者存放从内存换出的进程。对换区比文件区侧重于对换速度。因此对换区一般采用连续分配。

进程的换出与换入

选择换出进程:优先级,进程状态。

选择换入进程:优先级,进程状态,换出时间等。

对换与虚拟存储器之间的差别

交换技术:把各个进程完整地调入内存,运行一段时间,再放回到磁盘上

虚拟存储器:进程只有一部分内容存放在内存中,它也能运行

交换是把整个进程换入换出主存,而虚拟存储器的基本思想是程序的大小可以超过物理内存的大小,操作系统把程序的一部分调入主存来运行,而把其他部分保留在磁盘上。交换并未实现虚拟存储器!!

9. 基于位图、空闲链表的存储管理

 主要有两种方法来记录内存的使用状况:位图法空闲链表法

  一、基于位图的存储管理

在位图法中,内存被划分为很多个分配单元,每个单元可能特别小,只有几个字;也可能特别大,包含几千个字节。每个分配单元都对应于位图中的某个数据位,0表示该单元是空闲的,1表示该单元已经被占用

(注:位图法的大小仅取决于内存和分配单元的大小,如果分配单元比较大,那么位图比较小)

二、基于链表的存储管理

建立一个链表来描述已分配和空闲的内存分区。对于每一个分区,它可能存放了某个进程,也可能是两个进程之间的空闲区。链表中的每一个结点,分别描述了一个内存分区(起始地址、长度、指向下一个结点的指针以及分区的当前状态)H:空闲区(Hole) P:已经被某个进程(Process)占用了

                                                              进程x终止时与左右邻居合并的4种方式

       

10. 虚拟存储器(Virtual Memory)

请求分页管理基本思想

请求分页管理也称为虚拟页式存储管理,是建立在基本分页基础上,为了能支持虚拟存储器功能而增加了请求调页功能和页面置换功能,其基本思想是:在进程开始运行之前,不是装入全部页面,而是装入部分页面,之后根据进程运行的需要,动态装入其他页面,当内存空间已满,又需要装入新的页面时,根据某种算法淘汰某个页面,以便装进新的页面。

虚拟页式存储管理/请求分页管理

大部分虚拟存储器系统都使用了一种称为分页(paging)的技术

虚地址与物理内存地址之间的关系

由程序产生的地址被称为虚地址,它们构成了一个虚地址空间(virtual address space)

使用虚拟存储器的情况下,虚地址不是直接送到内存总线上,而是送到内存管理单元(MMU),它由一个/一组芯片组成,其功能是把虚地址映射为物理地址。

                                 

虚地址空间被划分为页(pages)的单位,在物理存储器中对应的单位称为页框(page frames),页和页框的大小总是相等的(注:内存和磁盘之间的传输总是以页为单位的)

                           

虚实地址变换过程

虚实地址变换过程:

在进行地址映射时,使用虚拟页面号作为索引去访问页表(page table),从而得到相应的物理页面号。如果有效位的值为0,则将引发一个缺页中断,陷入到操作系统;如果有效位的值为1,则将页表中查到的物理页面号复制到输出寄存器的高位中,再加上输入的虚拟地址中的偏移量,构成了物理地址。输出寄存器的内容随即被作为物理地址送到内存总线。

①存储管理单元(Memory Management Unit,MMU)做什么:

  1. 负责把虚拟地址映射为物理地址
  2. 控制存储器空间的访问权限
  3. 设置缓冲

②页表做什么:存放虚拟地址对应的物理地址、访问权限、缓冲特性等

③OS做什么:查询页表

1)若给定一个逻辑地址为A,页面大小为L,则页号P=INT[A/L],页内地址W=A MOD L

则物理地址=P*L+W

2)逻辑地址= 页号+页内地址

  物理地址= 块号+页内地址;

分页、分段的概念及差别

分页:将进程的逻辑地址空间分成若干大小相等的片(页),然后装入内存

分段:用户可以把自己的作业按逻辑关系划分成若干个段,每个段都是从0开始编制,并有自己的名字和长度

相同点:①二者都属于存储器管理方式中的离散分配方式;

②都要通过地址映射机构来实现地址变换

不同点:

①离散分配方式的基本单位不同,一个是页一个是段,页的大小固定且由系统决定,而段的长度却不固定。

②页是信息的物理单位,段是信息的逻辑单位

③分页的作业地址空间是一维的,线性的,程序员只需利用一个记忆符表示一个地址;

分段的作业地址空间是二维的,程序员在表示一个地址的时候既要给出段名,又要给出段内地址。其中,段名可以理解为函数名,段内地址可以理解成变量等的地址

11. 页表

页表的作用

作用:将虚拟页面映射为相应的物理页面。从数学的角度说,页表是一个函数,它的输入是虚拟页面号,输出是物理页面号。通过这个函数可以把虚拟地址中的虚拟页面号替换成物理页面号,从而形成物理地址。

页表的具体实现

  • 两个重要问题的考虑

          ① 页表可能会非常大

          ② 地址映射必须十分迅速

  • 解决办法

          ① 使用一个页表,由一组快速的硬件寄存器组成,每一个虚拟页面对应一个表项,并用虚拟页面号作为索引,在启动一个进程时,操作系统把位于内存中的页表装入寄存器中。——贵、降低系统的性能

          ② 把页表全部放在内存中

          ③ 多级页表(一般的页表不会超过二级)

           基本思路:进程在运行时,并不会用到所有的虚拟地址,没有必要把所有的页表项都保存在内存中

           例如:假设虚拟地址32位,页面的大小为4KB.

                     通常的页式存储管理,把虚拟地址划分为两部分:虚拟页面号20位+页内偏移量12

                     二级页表的结构下:还需把虚拟页面号再进一步划分为两部分:10位字段PT1+10位字段PT2

页表项的结构

       

① 物理页面号(最重要的字段):因为地址映射的最终目标是把虚拟页面号映射为相应的物理页面号

② 有效位:表示该页面现在是否存在内存中

③ 保护位:表示允许对这个页面做何种类型的访问

④ 修改位和访问位    用来记录页面的使用情况(当操作系统回收一个物理页面时,先要检查修改位,如果为1:“脏页面”,必须把它写回到磁盘中;如果为0:“干净页面”,直接把它覆盖掉)

⑤ 禁用缓冲位

12.关联存储器TLB

TLB作用

 TLB是一个内存管理单元,用于改进虚拟地址到物理地址转换速度的缓存,用来存放那些最常用的页表项。这种硬件设备能够直接把虚拟页面号映射为相应的物理页面号,而不需要去访问内存中的页表。TLB通常位于MMU中。

TLB工作原理

当一个虚拟地址到来时,MMU首先会到TLB中去查找,看看这个虚拟页面号是否出现在TLB中。这个查找的速度很快,因为它是以并行的方式进行的,同时与所有的页表项进行比较。

①如果能够找到而且此次访问是合法的,那么直接从TLB中把相应的物理页面号取出来;

②如果能够找到该虚拟页面号,但违反了访问权限,则引发一个中断保护;

③如果找不到该虚拟页面号,那么就要采用通常的办法去访问内存中的页表,把相应的物理页面号取出来,与此同时,硬件还会从TLB中把某一个表项驱逐出来,往TLB中载入刚刚访问的页表项。

注意:当一个表项被驱逐出TLB时,要把它修改位复制到内存的页表项中,因为它的值可能会发生变化!

TLB命中率的提高

  TLB未命中率往往高于缺页中断发生的频率,为了降低TLB的未命中率:操作系统有时可以预测出哪些页面即将被访问,并把它们预先装入TLB,以避免TLB中断的发送

13.中断

缺页中断概念

在请求分页系统中,当访问的页不在内存,便产生一缺页中断,请求OS将所缺页调入内存空闲块,若无空闲块,则需置换某一页,同时修改相应表表目

缺页中断与一般中断的区别

①在指令执行期间产生和处理中断信号

②一条指令在执行期间,可能产生多次缺页中断

14. 页面置换算法

  当一个缺页中断发生时,需要从磁盘上调入相应的页面。如果此时内存已经满了,就需要从内存中选择一个页面,把它置换出去,从而把它所占用的空间腾出来,装入新的页面。如果被选中的页面曾经被修改过,那么必须把它写回到磁盘,已更新磁盘上的副本。如果该页面违背修改过,则可以直接抛弃,用新的页面来覆盖它。

*最优页面置换算法(Optimal Replacement Algorithm,OPT)

 基本思路:当一个缺页中断发生时,对于内存中的每一个虚拟页面,计算在它下一次访问之前,还需要等多久时间,用指令数表示,选择等待时间最长的那个页面,把它作为被置换的页面

缺点:无法实现,操作系统不知道每一个页面还要等待多长时间

用处:用作其他算法性能评价的依据

 

最近未使用页面置换算法(Not Recently Used,NRU)

 基本思路:每个页面都有两个状态标志位:R(访问位)和M(修改位),这两个标志位存放在页面的页表项中。当一个进程被启动时,操作系统会把它的所有页面的这两个位都置0.在进程运行过程中,R位会被定期地清零,这样就把最近未被访问过的页面与最近被访问过的页面区别开来。随机地从编号最小的非空类中挑选一个页面置换。选择内存中等待时间最长的页作为置换页面

当一个缺页中断发生时,操作系统回去检查所有的页面,根据当前的R位和M位的值,把它们分为4类:

第0类(00):未被访问,未被修改

第1类(01):未被访问,已被修改

第2类(10):已被访问,未被修改

第3类(11):已被访问,已被修改

注意:M位不能清零,是因为将来该页面被置换出去时,需要根据这个信息来决定是否需要把这个页面的内容写回磁盘

缺点:性能不是很好

优点:易于理解,实现起来效率较高

*先进先出页面置换算法(First-In,First-Out,FIFO)

  基本思路:操作系统维护一个链表,在这个链表中,记录了所有位于内存中的虚拟页面,从链表的排列顺序来看:链首页面驻留时间最长,链尾页面驻留时间最短。当发生一个缺页中断时,就把链首的页面淘汰,并把新的页面添加到链尾。

缺点:被它淘汰出去的可能是经常要访问的页面,FIFO算法很少被单独使用

第二次机会页面置换算法(second chance)

  基本思想:对于最古老的页面,检测其R位。如果R位是0,则立刻被淘汰出局;如果R位是1,则说明该页面曾经被访问过,因此就再给它一次机会:先把R位清0,然后把这个页面放到链表的尾端,并修改它的装入时间,就好像它刚刚进入系统一样,然后继续往下搜索。

如果所有的页面都被访问过了,就退化成纯粹的FIFO算法

缺点:经常要在链表中移动页面,降低了效率

时钟页面置换算法

  基本思想:把各项页面组织成环形链表的形式,类似于时钟表面。然后把一个指针指向最古老的那个页面。当一个缺页中断发生时,检查指针所指向的那个页面,如果它的R位的值=0,立刻被淘汰;如果R=1,则把它清零,并把指针指向下一个页面,直到发现一个其访问位的值=0的页面并把它淘汰掉。

功能与第二次机会算法的功能实完全一样的,只是具体实现上有所不同

*(面试题编程)最近最久未使用页面算法(Least Recently Used,LRU)

  基本思想:当一个缺页中断发生时,从内存中选择最久未被使用的那个页面,把它淘汰出局。理论依据:程序的局部性原理。在最近的一小段时间内,它们还可能会再一次被频繁地访问。反过来说,如果在过去一段时间内,某些页面长时间未被访问,那么在将来,它们还可能会长时间未被访问。LRU利用过去的、已知的页面访问情况,来预测将来的情况

  实现:计数器,在每条指令执行完后,计数器会自动+1,在每一次内存访问后,C的当前值会被存放在被访问页面的页表项中。当发生一个缺页中断时,操作系统会去检查页表中所有的计数器的值,从中找出一个最小值,该页面就是最近最久未使用的页面。

硬件支持:寄存器、栈

15. 页式存储管理中的设计问题

工作集模式

  • 请求调页(demand paging)

请求调页指的是一种动态内存分配技术,它把页面的分配推迟到不能再推迟为止,也就是说,一直推迟到进程要访问的页不在物理内存时为止,由此引起一个缺页错误。

特点:页面不是预先被装入内存,而是根据需要随要随调

  • 绝大多数的进程都会表现出一种访问的局部性(locality of reference),在进程运行的任何一个阶段,它只会去访问一小部分的页面。
  • 概念

①一个进程当前正在使用的页面集合称为它的工作集(working set)

②需要频繁地在内存与外存之间置换页面,从而使得进程的运行速度变得很慢,我们把这种状态称之为抖动(Denning)

③工作集模式:页式存储管理系统试图记录每个进程的工作集,并确保在进程运行之前,它的工作集已经在内存中(预先调页,prepaing,旨在大大减少缺页中断的次数。

16. 段式存储管理

段的概念

机器上提供多个相互独立的地址空间,称为段(segment),在每个段的内部,是一个一维的线性序列,从0开始一直到某个最大值。一般来说,每个段的长度是不相等的,而且在执行过程中,段的长度可以动态变化。

段式存储的优点

①简化处理动态增长/缩短的数据结构

②分段有助于在几个进程之间共享函数和数据,一个典型的例子就是共享库(shared library)

③调用第n个段中的函数,只需要使用二维地址(n,0)就可以跳转到该函数的入口地址

页式和段式存储管理的比较

考虑的问题
页式存储管理
段式存储管理
程序员需要知道正在使用这种技术吗?
不需要
需要
有多少个线性地址空间?
1个
N个
地址空间可以超过物理内存的大小吗?
可以
可以
数据和函数可以区别开来,分别进行保护吗?
不可以
可以
能够很容易地容纳长度经常变化的表吗?
不可用
可以
用户之间的函数共享是否容易?
为什么要发明这项技术?
为了在物理内存空间不变的情形下,
得到更大的线性地址空间
为了能将代码和数据划分为逻辑独立的地址空间,
为了帮助实现共享和保护

纯分段系统的实现

  当系统运行一段时间后,内存将会被划分为许多块,其中有些是段,有些是空洞,这种现象称为跳棋盘(checkerboarding)/外碎片(external fragmentation)
由于外碎片通常比较小,无法再装入新的段,因而造成内存空间浪费——解决:紧缩技术

17. 段页式存储管理

一、Pentium虚拟存储器的核心是两张表:局部描述符表(Local Descriptor Table,LDT)和全局描述符表(Global Descriptor Table,GDT),每个程序都有自己的LDT,但GDT只有一个,为计算机上的所有程序共享

段页式地址变换

页式存储-地址转换:访问2次内存,第一次是页表,第二次是真正的物理内存。

页式存储—二级页表:访问3次内存

段页式存储-地址转换:访问3次内存,第一次是段表,第二次是页表,第三次是真正物理内存

1.基本原理:是分页与分段的结合,即先将拥护程序分为若干段,再把每个段分为若干页,并为每个段赋予一个段名。
2.地址结构:

 

                          

在段页式存储管理采用动态重定位,处理器每执行一条指令就将要访问的逻辑地址(s,p,d)取来,要经过如下地址转换步骤,才能得到最终的物理地址。
(1) 通过段号(s)查段表,得到页表所在位置。
(2) 根据逻辑页号(p)访问页表,得到该页所在的物理页号(p’)。
(3) 将物理页号(p’)和逻辑地址中的页内地址(d)拼接,形成访问内存单元的物理地址(p’,d)。

18. 段式存储管理

分页和分段存储管理有何区别?

①页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。段则是信息的逻辑单位,它含有一组有意义相对完整的信息。分段的目的是为了更好地满足用户的需要

②页的大小固定且由系统决定,由系统吧逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而在系统中只能有一种大小的页面,根据信息的性质来划分

③分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址;而分段的作业地址空间则是二维的,程序员在标识一个地址时,需要给出段名,又需给出段内地址

发布了50 篇原创文章 · 获赞 46 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41949328/article/details/104307435