页式存储、段式存储、段页式存储和物理逻辑地址转换
页式存储、段式存储、段页式存储和物理逻辑地址转换
二、页式存储管理
2.1 页式存储原理
高级程序语言在设计时使用逻辑地址,但在运行时需要用物理地址在内存中寻找,这就涉及到逻辑地址和物理地址的转换问题,软考中经常考到。
页式存储是把计算机的存储器划分成大小相等的多个区域,每个区域称为一块,并对它们按照顺序编号。
物理地址 = 块号 X 块长 + 页内地址
而程序的逻辑地址是将内存划分为何块大小相等的页,同样按顺序编号。
在分页式存储模式中,允许将每一页分散存储在物理块中,要求程序能在主存(内存)中找到每个页面所对应的物理块,确保作业的正确运行。物理地址的块是真实存在的,而逻辑地址是人们在编程时拟定的,所以有一个关联表,即页表。
总体的结构图如下:
使用了页式存储,比如每一页设定为 4K 大小。
我们运行一个需要 503K 内存的程序,只需要为其分配 126 页即可,剩下浪费的 1K 可以忽略不计,也就是利用率高、碎片小。
有了固定页面大小之后,取址计算可通过乘法计算,分配和管理比较简单。
但使用页式存储需要实时维护页表,增加了系统开销。
根据经验表明,使用页式存储可能会出现倒挂现象,即内存给与越多,缺页率可能反而更改,这个后续章节会讲到。
总的来说,页式存储的流程如下:
- 将进程虚拟空间划分为长度相等的多个页,并按顺序编号。
- 将内存空间同样划分为多个存储块(物理块),和页一样大,同样按顺序编号。
- 为进程分配内存时,以块为单位,根据页表匹配,将若干页分别装入可以不相邻的物理块中。
2.2 逻辑地址和物理地址转换
页式存储地址可分为页号(P)和页内地址(W),如下图所示。
物理地址也可分为块号和页内地址,如下图所示。
由此可得,在进行逻辑地址和物理地址转换时,只需要根据页表,将页号替换为块号(页帧号)即可,而后面的页内地址无需变动。
题目:比如进程 P 有 6 个页面,页号分为是 0 到 5,页面大小为 4K,页表如下所示,已知逻辑地址为 5A29H,求十六进制的物理地址。
因为页面大小为4K,4K = 2 的12 次方,可得页内地址为12 位。
已知逻辑地址为5A29H,转换为二进制就是 01011010 0010 1001,后面的 12 位(1010 0010 1001)就是页内地址。
可得前面四位 0101 就是页号,查表可得块号为 6,转换二进制为 0110。
所以物理地址的二进制为 01101010 0010 1001,转换十六进制为6A29H。
- 题目:某页式存储系统页面大小为 4KB,逻辑地址为 32 位。求页内偏移量的位数和页号的位数。
- 答案:因为页面大小为 4KB = 2^{12} B,所以页内偏移量的位数为 12 位。逻辑地址总共 32 位,页号的位数 = 32 - 12 = 20 位。
- 解析:根据页面大小计算页内偏移量的位数,用逻辑地址的总位数减去页内偏移量的位数就得到页号的位数。
三、段式存储管理
简单来说,段式存储管理是将页式存储组织的页大小设置为不固定。
因为程序一般都是由主程序、子程序、堆栈等元素组成,每一段都有自己独立的作用,我们不能去断章取义,所以将一段作为单位存储在内存中,也是一种很好的方式,这就是段式存储。
每个作业都由独立段组成,可以给段做个编号,即逻辑地址从 0 开始编号。
段内地址是连续的,段和段之间的地址是不连续的,段式存储的逻辑地址由段号和段内地址组成,如下所示。
段式存储的结构如下所示:
- 优点:多个程序可共享内存,而且读写互不影响。
- 缺点:内存利用率低,碎片大。
段页式存储分段的段长
- 段长的特点
- 在段页式存储管理中,段的长度是可变的。这是因为段是按照程序的逻辑结构划分的,不同的程序逻辑单元(如主程序段、子程序段、数据段等)有不同的功能和大小要求。
- 例如,一个大型数据库应用程序的数据段可能包含海量的数据记录,长度可能达到数 GB,而一个简单的计算程序中的某个代码段可能只有几 KB。
- 与页长的对比
- 与段长不同,页的长度是固定的。页是物理内存划分的基本单位,通常是由操作系统预先设定好的,比如在常见的操作系统中,页大小可能是 4KB、8KB 等。
- 段内分页是为了结合段式和页式存储管理的优点。将可变长的段划分为固定长度的页,可以更方便地进行内存的分配和管理。当段被划分成页后,每一段中的页可以离散地存储在内存的不同物理页面中。
- 段长的限制因素
- 虽然段长可变,但也受到一定的限制。它受到内存空间的大小和系统资源的限制。如果一个段过长,可能会导致内存中难以找到连续的足够空间来存放整个段,即使该段内部的页可以离散存储,但在分配段空间时还是需要考虑一定的连续空间要求。
- 同时,段长也受到地址结构的限制。在段页式存储管理中,逻辑地址由段号、段内页号和页内偏移量组成。段长的大小决定了段内页号和页内偏移量的取值范围。如果段长过大,可能会超出地址结构所能表示的范围。
以下关于计算机内存管理的描述中,()属于段页式存储管理的描述。
A. 一个程序就是一段,使用基址极限对来进行管理
B. 一个程序分为许多固定大小的页面,使用页表来进行管理
C. 程序按逻辑分为多段,每一段内又进行分页,使用段页表来进行管理
D. 程序按逻辑分为多段,用一组基址极限对来进行管理,基址极限对存放在段表里
答案是 C。段页式存储管理方式即先将用户程序分成若干个段,再把每个段分成若干
题目:段式存储方式中,段的大小是()。A. 固定不变的;B. 动态可变的;C. 根据操作系统规定;D. 与页大小相同。
答案:B。
解析:段式存储中,段是按程序的逻辑结构划分的,如代码段、数据段等,其大小根据程序逻辑不同而不同,是动态可变的。例如一个程序的数据段大小可能随着程序运行中数据的增加而改变。
题目:在段式存储管理系统中,若段表如下:
段号基址长度0219600123001429010031327580当访问段号为 2,段内偏移量为 80 的逻辑地址时,对应的物理地址是多少?
答案:首先找到段号为 2 的基址是 90,段内偏移量为 80,根据物理地址 = 基址 + 段内偏移量,可得物理地址 = 90 + 80 = 170。
解析:段式存储管理中,段表记录了每个段的基址和长度。对于给定的逻辑地址(段号,段内偏移量),通过段号在段表中查找基址,然后计算物理地址。需要注意的是,在计算之前要检查段内偏移量是否超过了段的长度,本题段内偏移量 80 小于段长度 100,所以计算有效。
题目:段式存储管理的主要优点是()
A. 可以实现虚拟存储
B. 便于多道程序共享内存
C. 段的大小可以动态改变,更符合程序逻辑
D. 内存分配最合理
答案:C
解析:段式存储管理是按照程序的逻辑结构来划分段的,比如代码段、数据段等。段的大小不是固定的,会根据程序的实际逻辑动态改变。A 选项,实现虚拟存储不是段式存储管理特有的主要优点;B 选项,多道程序共享内存不是段式存储的主要优势所在;D 选项,说内存分配最合理太绝对,段式存储有它自己的内存分配特点,但不是最合理的分配方式。
题目:段式存储管理系统中,关于段的描述,错误的是()
A. 段的划分是按照程序的逻辑功能进行的
B. 不同段的存储位置可以是不连续的
C. 段的长度在程序运行过程中不能改变
D. 段表用于记录各段的基址和长度等信息
答案:C
解析:段式存储管理中,段是按照程序的逻辑功能划分的,A 选项正确;不同段在内存中的存储位置可以不连续,B 选项正确;段的长度是可以动态改变的,不是固定的,C 选项错误;段表用于记录各段的基址、长度等信息,D 选项正确。
题目:某操作系统页式存储管理中,页面大小为 8KB。若某进程的逻辑地址空间为 128KB,该进程的页表长度是多少?
答案:因为页面大小为 8KB = 2^{13} B,逻辑地址空间为 128KB = 2^{17} B。页号占的位数为 17 - 13 = 4 位,所以页表长度为 2^{4} = 16 个页表项。
解析:要先确定页面大小和逻辑地址空间的关系。根据页面大小确定页内偏移量的位数,从而确定页号的位数。页表长度等于页号的取值范围,即 2 的页号位数次方。
题目:在段式存储管理系统中,某程序分为 4 个段,段表如下:
段号基址长度0200500110003002150040032000200若访问段号为 2,段内偏移量为 300 的逻辑地址,其对应的物理地址是多少?
答案:首先找到段号为 2 的基址是 1500,段内偏移量为 300,物理地址 = 基址 + 段内偏移量,所以物理地址为 1500+300 = 1800。
解析:段式存储管理通过段表来查找物理地址。段表中记录了每个段的基址和长度,当给定逻辑地址(段号和段内偏移量)时,先根据段号在段表中找到基址,然后加上段内偏移量得到物理地址,同时要注意检查段内偏移量是否在段长度范围内。
真题二
题目:以下关于段式存储管理的说法,错误的是()
A. 段式存储按程序的逻辑模块划分段
B. 段的大小可以动态变化
C. 段式存储便于程序和数据的共享
D. 各段在内存中的存储位置必须连续
答案:D
解析:段式存储是按程序的逻辑模块划分段,A 选项正确;段的大小可以根据程序的运行情况动态变化,B 选项正确;段式存储便于程序和数据的共享,因为可以以段为单位进行共享,C 选项正确;各段在内存中的存储位置可以不连续,D 选项错误
题目:以下关于段式存储管理的说法,错误的是()
A. 段的划分是基于程序的逻辑模块
B. 段的长度可以动态增长
C. 段式存储管理的地址空间是一维的
D. 不同段可以存放在不连续的内存区域答案:C
解析:段式存储管理的地址空间是二维的,由段号和段内偏移量组成。A 选项,段是按照程序的逻辑模块划分的,如代码段、数据段等;B 选项,段的长度可以根据程序运行情况动态增长,例如动态分配内存给某个段;D 选项,不同段可以存放在不连续的内存区域,这是段式存储的特点之一。
四、段页式存储管理
段页式存储管理方式结合了页式存储和段式存储的方法,采用了分段的方式,每一段作业独立编程,再把段分成若干个页面,相当于在段式的基础上再套了一层页式存储算法,存储结构如下所示。
优点:利用率高、物理地址连续存储。
缺点:使用段页式存储需要实时维护段页表,增加了系统开销,使得执行速度下降。
题目:以下关于计算机内存管理的描述中,属于段式管理的是()。A. 一个程序就是一段,使用基址极限对来进行管理;B. 一个程序分为许多固定大小的页面,使用页表进行管理;C. 程序按逻辑分为多段,每一段内又进行分页,使用段页表来进行管理;D. 程序按逻辑分成多段,用一组基址极限对来进行管理,基址极限对存放在段表里2。
答案:D。
解析:A 选项描述的是早期简单的分区式管理;B 选项是页式存储管理的特点;C 选项是段页式存储管理的方式;D 选项准确描述了段式存储管理,程序按逻辑分为多段,用基址极限对来管理段,基址极限对存于段表。
题目:以下关于计算机内存管理的描述中,属于段式管理的是()。A. 一个程序就是一段,使用基址极限对来进行管理;B. 一个程序分为许多固定大小的页面,使用页表进行管理;C. 程序按逻辑分为多段,每一段内又进行分页,使用段页表来进行管理;D. 程序按逻辑分成多段,用一组基址极限对来进行管理,基址极限对存放在段表里2。
答案:D。
解析:A 选项描述的是早期简单的分区式管理;B 选项是页式存储管理的特点;C 选项是段页式存储管理的方式;D 选项准确描述了段式存储管理,程序按逻辑分为多段,用基址极限对来管理段,基址极限对存于段表。