页式存储

主存和 cache 之间,它们之间的数据传送是以块为单位的

就是如果此时我访问到了主存的某一个地址单元,这个地址单元是包含在比如 3 号主存块里。基于局部性原理,我们可以把 3 号主存块调入到 cache 的某一个位置,用这样的方式来提升系统的整体性能。

与主存分块息息相关的一个概念叫做分页。什么叫分页?

我们写的一些程序还有一些APP,可能一个程序一个APP,它的大小是很大的。

比如我们之前提过一个微信可能它有一个 1GB这么大,如果你要把微信1GB的数据全部放入到内存,并且是要求连续存放的话,是不是就意味着你必须在主存(内存)里边找到连续的 1GB的空闲区间,才可以把微信所有的数据给调进去。

这种必须连续存放的限制,在很多时候会导致主存的利用率不高

所以在实际应用当中,我们写的一个程序,它可能有很多的指令代码,还有各种各样的数据,包括数组变量之类的很多的信息组成。

比如程序总共 4 个 KB,为了让主存的利用率更高,我们一般来说会把一个程序分为一个一个大小相等的页面,英文就是 page 。

每一个页面的大小和我们主存的一个物理块的大小其实是相同的,也就是 4 KB 的程序会被我们分为四个页面,并且我们可以给每一个页面进行一个编号,如下图,0 号页, 1 号、 2 号、 3 号页面,每一个页面的大小都是 1 KB。

接下来我们可以把这些页面离散地放到主存当中,比如分别放到这些个位置。

所以什么是页式存储系统呢,就是说,我们会把一个程序或者更准确的说应该叫一个进程,这里我们可以先简单地把它理解为一个程序,这程序里边包含了很多代码,很多数据,看起来它总共有这么大,但是我们会把它分成一个一个大小相等的页面,然后把这些页面放到一个一个的主存块里边。这样的话,我们就可以把一个很大的程序拆分成多个页面,离散地放到主存的不同区域,这样我们就可以让主存的空间利用率更高。
所以这儿提到的,把程序分为一个的页面,这个分页更多的是逻辑层面的一个划分,而主存和 cache 进行分块,更多的是物理层面的一个划分。

段式存储

为什么引入段式存储?

  • 分区式管理和页式管理的进程地址空间结构是线性的,不同作业或进程之间共享公用子程序和数据变得非常困难
  • 页式管理时,一个页面中可能装有两个不同子程序段的指令代码,因此,通过页面共享来达到共享一个逻辑上完整的子程序或数据块是不可能的。
  • 分区管理和页式管理只能采用静态链接,CPU开销和存储空间浪费大

基本思想

  • 程序按内容或过程(函数)关系分成段,每段有自己的名字。一个用户作业或进程所包含的段对应于一个二维线性虚拟空间,也就是一个二维虚拟存储器。
  • 段式管理程序以段为单位分配内存,然后通过地址映射机构把段式虚拟地址转换成实际的内存物理地址。
  • 和页式管理一样,段式管理只允许经常访问的段驻留内存,将来一段时间内不被访问的段放入外存,待需要时自动调入。

地址结构

逻辑地址由段号S与段内偏移量W两部分组成。

段式管理的内存分配与释放

特点:

  • 段式管理以段为单位分配内存,每段分配一个连续的内存区。
  • 由于各段长度不等,所以这些存储区的大小不一。
  • 同一进程包含的各段之间不要求连续。
  • 段式管理的内存分配与释放在作业或进程的执行过程中动态进行。

分配:
1.首先,段式管理程序为一个进入内存准备执行的进程或作业分配部分内存,作为该进程的工作区用于放置即将执行的程序段。
2.随着进程执行,进程根据需要随时申请调入新段和释放在内存中的段。

当进程要求调入某一段时:

内存中有足够的空闲区满足该段的内存要求。
内存中没有足够的空闲区满足该段的内存要求。段式管理程序根据给定的置换算法淘汰内存中在今后一段时间内不再被CPU访问的段,也就是淘汰那些访问概率最低的段。
1.动态页式管理的几种常用淘汰算法都可以用来作为段式管理的淘汰算法。例如FIFO置换算法、LRU算法及其近似算法等。
2.与页式管理时每页具有相同长度不一样,需要调入的某段长度可能大于被淘汰的一段程序或数据的长度。这样,仅仅淘汰一段可能仍然满足不了需要调入段的内存要求。此时需要再淘汰另外的段直到满足需调入段的内存要求时为止。
3.一次调入时需淘汰的段数与段的大小有关。如果一个作业或进程的段数较多,且段长之间的差别较大,则有可能出现调入某个大段时,需淘汰好几个小段的情况。
4.除了初始分配之外,段的动态分配是在CPU访问时,地址变换机构发现该段不在内存,由硬件发出缺段中断信号的情况下发生的。因此,段的淘汰或置换算法是缺段中断处理过程的一部分

段式地址变换

使用数据结构段表:
 


1.段表(segment mapping table):在进行初始内存分配之前,首先根据用户要求的内存大小为作业或进程建立一个段表,一般在内存中给出一块固定的区域放置段表。
2.段号与用户指定的段名一一对应。始址和长度分别表示该段在内存或外存的物理地址与实际长度。
3.存取方式对该段进行存取保护。只有处理机状态字中的存取控制位与段表中存取方式一致时才能访问该段。
4.内外用于表明该段现在存储于外存还是内存中。如果所访问段在外存的话,则发生中断。
5.访问位根据淘汰算法的需要设置。

过程:

1.进程开始执行时,管理程序通过访问段表寄存器得到该进程的段表始址,把段表始址放入段表地址寄存器。
2.依据虚地址中的段号s为索引查段表。若该段在内存,则判断其存取控制方式是否有错。
3.存取控制方式正确,则从段表相应表目中查出该段在内存的起始地址,并将其和段内相对地址w相加,从而得到实际内存地址。
4.如果该段不在内存,则产生缺段中断将CPU控制权交给内存分配程序。
5.内存分配程序首先检查空闲区链,查找是否有足够长度的空闲区装入需要的段。
6.如果内存中的可用空闲区总数小于要求的段的长度,则检查段表中访问位,淘汰那些访问概率低的段并将需要段调入。

提高速度方法-快表

1.与页式管理相同,段式管理的地址变换过程也必须经过二次以上的内存访问。
2.即首先访问段表以计算得到待访问指令或数据的物理地址,然后才是依据物理地址进行取数据或存数据操作。
3.为了提高访问速度,页式地址变换使用的高速联想寄存器方法也可以用在段式地址变换中。
4.即高速联想寄存器中存放那些经常访问的段号对应的段表项,且高速联想寄存器中的段表和内存的段表可同时查找。
5.如果在联想寄存器中找到了需要的段,则可以大大加快地址变换速度。

段的共享与保护

共享

多道环境下,多个子程序和应用程序被多个用户使用。如果每个用户进程或作业都在内存保留它们共享的程序和数据的副本,会极大地浪费内存空间。
最好的办法是内存中只保留一个副本,供多个用户使用,称为共享。
 


如果用户进程或作业需要共享内存中的某段程序或数据,只要使用相同的段名,在新的段表中填入已存在于内存之中的段的起始地址,并置以适当的读写控制权,就可做到共享一个逻辑上完整的内存段信息。

保护

址越界保护:段表中的段长项 VS. 虚拟地址中的段内相对地址。若段内相对地址大于段长,系统产生保护中断。不过,在允许段动态增长的系统中,段内相对地址大于段长是允许的。为此,段表中设置相应的增补位以指示该段是否允许动态增长。

存取方式控制保护:除了存入、读取的控制保护之外,还需要考虑数据共享的保护。在段表中设立相应的共享位用于判断该段是否正被某个进程调用。

段式管理的优缺点

优点:
1.段式管理提供内外存统一管理的虚存实现。
2.段式虚存每次交换的是一段有意义的信息,不像页式虚存只交换固定大小的页从而需要多次缺页中断才能把所需信息完整地调入内存
3.段长可根据需要动态增长,有利于不断增加或吸收新数据
4.方便共享具有完整逻辑功能的信息段。
5.便于实现动态链接

缺点:
1.比其他几种方式要求更多硬件支持,机器成本较高。
2.内存空闲区的管理与分区式管理相同,在碎片问题以及为了消除碎片所进行的合并等问题上较分页式管理要差。
3.允许段的动态增长给系统管理带来一定的难度和开销。
4.每个段的长度受内存可用区大小的限制。
5.和页式管理一样,段式管理系统在选择淘汰算法时也必须十分慎重,否则也有可能产生抖动现象。

  • 外部碎片:由于每个段的大小不同,内存中可能出现难以利用的小空间,称为外部碎片。

段式存储管理:在段式存储管理中,物理内存的分配是以逻辑段为单位进行的。当程序需要加载一个逻辑段时,系统会为其分配一段连续的物理内存空间。这种方式有利于减少内存碎片,提高内存利用率。但是,由于逻辑段的大小不固定,可能会导致物理内存的浪费。

页式存储管理:在页式存储管理中,物理内存的分配是以页面为单位进行的。当程序需要加载一个页面时,系统会为其分配一个固定大小的物理内存空间。这种方式有利于减少内存碎片,提高内存利用率。但是,由于页面的大小固定,可能会导致物理内存的浪费。

三、内存访问

段式存储管理:在段式存储管理中,程序访问内存时,需要根据逻辑段的起始地址和长度计算出对应的物理地址。这种方式使得程序可以直接访问任意逻辑段的内容,具有较高的灵活性。但是,由于逻辑地址到物理地址的转换过程较为复杂,可能会影响程序的运行速度。

页式存储管理:在页式存储管理中,程序访问内存时,需要根据页面的起始地址和长度计算出对应的物理地址。这种方式使得程序可以直接访问任意页面的内容,具有较高的灵活性。同时,由于页面大小固定,地址转换过程相对简单,有利于提高程序的运行速度。

四、优缺点比较

段式存储管理的优点是可以提高内存利用率,减少内存碎片;缺点是对程序员的编程要求较高,需要显式地管理内存。

页式存储管理的优点是对程序员的编程要求较低,可以隐藏内存管理的复杂性;缺点是可能导致内存碎片问题。

总之,段式存储管理和页式存储管理各有优缺点,适用于不同的应用场景。在实际操作系统中,通常会结合这两种技术的优点,采用分段分页混合存储管理的方式,以提高内存利用率和程序运行效率。

段页式存储

段页式存储是 一种结合了段式和页式存储管理优点的内存管理技术。
段页式存储是将内存划分为多个段,每个段再划分为多个页面,以提高内存管理的灵活性和效率。

图注:段页式存储是结合了段式和页式的一种存储组织,将内存先分段,再分页;优点:空间浪费小,存储共享容易,存储保护容易,能够动态连接;缺点:由于管理软件的增加,复杂性和开销也随之增加,需要的硬件以及占用的内容也有所增加,使得执行速度大大下降(程序在执行时要先查段表,再查页表,使得系统资源消耗增加)

进程P有5个页面,页号为0-4,页面变换表及状态位、访问位和修改位的含义如下图所示,若系统给进程P分配了3个存储块,当访问的页面3不在内存时,应该淘汰表中页号为( )的页面。

A.0

B.1

C.2

D.4

所属知识点:操作系统>页式存储

答案解析:

被淘汰的页面首先必须在内存,也就是在0、2、4页面中进行选择。

优先淘汰访问位为0的页面,此时0、2、4页面访问位都为1,无法判断。

进一步淘汰的是修改位为0的页面,此时符合要求淘汰的是0号页面,选择A选项。

【2018年16题】某计算机系统采用页式存储管理方案,假设其地址长度为32位,其中页号占20位,页内地址占12位。系统中页面总数与页面大小分别为( )

A、1K,1024K

B、4K,1024K

C、1M,1K

D、1M, 4K

解析:本题考查操作系统页式存储管理的基础知识。

分页系统的地址结构由两部分组成:前一部分为页号,后一部分为页内地址。如下图所示,图中的地址长度为32位,其中,0~11位为页内地址,所以页面大小为:2^12=4K;12~31位为页号,所以系统中页面总数为:2^20 = 2^10K = 1M。

故正确答案为:D

【2019年14-15题】某计算机系统页面大小为4K,进程P的页面变换表如下表所示。若P中某数据的逻辑地址为十六进制2C18H,则该地址的页号和页内地址分别为(1);经过地址变换后,其物理地址应为十六进制(2)。

1、

A、2和518H       

B、2和C18H         

C、5和518H         

D、5和C18H

2、

A、2C18H          

B、4C18H            

C、5C18H            

D、8C18H

解析:本题考查操作系统也是存储管理的基础知识。

根据题意,计算机的系统页面大小为4K,即2^12,表示需要用12位二进制(3位十六进制)来表示页面大小,所以在逻辑地址(4位十六进制表示下)中:后3位为页内地址,前1位为页号。逻辑地址为十六进制2C18H,其页号为2,页内地址为C18H,查页表后可知页物理块号对应为5,该地址经过变换后,其物理地址应为页物理块号5拼上页内地址C18H,即十六进制5C18H。

故正确答案为:1-B  2-C

(1)题目
以下哪种存储管理方式不存在外部碎片?

A. 页式存储
B. 段式存储
C. 页式和段式存储都存在
D. 页式和段式存储都不存在
在页式存储管理中,如果最后一页不被完全使用,这种现象称为什么?

A. 外部碎片
B. 内部碎片
C. 分页错误
D. 分段错误
段式存储管理的主要优点是什么?

A. 没有内部碎片
B. 更容易实现对程序结构的支持
C. 简化存储管理
D. 容易实现物理内存的连续分配
页式存储管理中,页表的作用是什么?

A. 记录每个段的长度
B. 将虚拟地址映射到物理地址
C. 存储每个文件的存取权限
D. 避免内部碎片
为什么段式存储管理可以减少内部碎片?

A. 段的大小固定
B. 段的长度可以动态变化
C. 每个段必须连续存储
D. 每个段的大小由操作系统决定
在段式存储管理中,外部碎片是如何产生的?

A. 因为每个段的长度不同,导致内存中留下不连续的小空间
B. 最后一个段不被完全使用
C. 页表占用额外空间
D. 虚拟内存使用不当
页式存储管理易于实现哪项技术?

A. 动态地址转换
B. 虚拟内存
C. 存储器的分配和回收
D. 内存保护
段式存储管理中,段表的主要作用是什么?

A. 防止内部碎片
B. 将虚拟地址映射到物理地址
C. 记录每个段的起始地址和长度
D. 管理内存的共享与保护
在页式和段式存储管理中,哪种管理方式更符合程序的自然结构?

A. 页式存储
B. 段式存储
C. 两者都不是
D. 两者都是
关于内部碎片和外部碎片,以下说法正确的是?

A. 页式存储管理只有外部碎片
B. 段式存储管理只有内部碎片
C. 页式存储管理只有内部碎片,段式存储管理只有外部碎片
D. 页式存储管理和段式存储管理都可能有内部碎片和外部碎片
(2)答案和解析
A. 页式存储

解析:页式存储管理由于采用了固定大小的页,因此不存在外部碎片问题。
B. 内部碎片

解析:在页式存储管理中,如果最后一页不被完全使用,未
使用的部分称为内部碎片。

B. 更容易实现对程序结构的支持

解析:段式存储管理以程序的逻辑结构为基础进行内存的分配,每个段通常代表了程序中的一种逻辑结构,如函数、数据结构等,因此更容易实现对程序结构的支持。
B. 将虚拟地址映射到物理地址

解析:页表的主要作用是实现虚拟地址到物理地址的映射,从而支持虚拟内存的实现。
B. 段的长度可以动态变化

解析:段式存储管理允许每个段的长度根据实际需要动态变化,因此可以减少内部碎片的产生。
A. 因为每个段的长度不同,导致内存中留下不连续的小空间

解析:段式存储管理由于每个段的长度可以不同,段与段之间可能会留下不连续的小空间,这就是外部碎片。
B. 虚拟内存

解析:页式存储管理便于实现虚拟内存技术,因为它允许将逻辑上连续的页面映射到物理内存中不连续的页框上。
C. 记录每个段的起始地址和长度

解析:段表的主要作用是记录每个段的起始地址和长度,以便系统能够正确地定位每个段的物理位置。
B. 段式存储

解析:段式存储管理更符合程序的自然结构,因为它按照程序的逻辑结构来划分内存,每个段对应于程序中的一个逻辑单元。
C. 页式存储管理只有内部碎片,段式存储管理只有外部碎片

解析:页式存储管理的主要问题是内部碎片,而段式存储管理的主要问题是外部碎片。
 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐