内容仅供参考
1. 什么是地址转换?为什么要进行地址转换?
答:(1)什么是地址转换:
地址转换也被称为地址映射,是操作系统实现内存管理的一种技术。地址转换的主要目的是为了实现虚拟内存,使得程序能够以一种连续的、统一的方式来访问内存,而不需要关心物理内存的实际布局和限制。
地址转换的过程通常包括分段和分页两个部分:
分段:分段机制是将进程的代码、数据、栈分在不同的虚拟地址段上,从而避免进程间的互相影响。分段之前的地址称为逻辑地址,它有两部分组成,高位的段选择符和低位的段内偏移。在分段时先用段选择符在相应的段描述符表中找到段描述符,也就是某一个段的基地址,再加上段内偏移量就得到了对应的线性地址,线性地址也称之为虚拟地址。
分页:分页是将虚拟地址空间和物理地址空间都划分为固定大小的页,然后通过页表来实现虚拟地址到物理地址的映射。这样,即使物理内存被分散使用,也可以在虚拟内存中呈现出连续的地址空间。
(注:虚拟地址由运行在用户模式下的程序生成,通常是从程序的角度来看的;物理地址是实际存在于计算机内存硬件中的地址。)
(2)为什么要进行地址转换:
-
内存保护:每个进程有自己的地址空间,这可以防止一个进程访问或修改另一个进程的内存,从而提供了一种内存保护机制。
-
内存抽象:通过地址转换,每个进程都认为自己拥有全部的地址空间,这极大地简化了程序的编写。
-
内存管理:操作系统可以更有效地管理物理内存,例如,通过将不常用的内存页交换到磁盘上,从而释放物理内存。
-
共享和复制:地址转换使得多个进程能够共享相同的物理内存,或者在需要时复制物理内存。
2. P261 - 8.13
BTV操作系统有一个21位的虚拟地址,但在某些嵌入式设备上,它只有一个16位的物理地址。它也有2KB的页面大小。以下每个页表各有多少条目?
a. 传统的单级页表 b. 倒置页表
虚拟地址空间大小:由于BTV操作系统有一个21位的虚拟地址,所以虚拟地址空间的大小为2^21。
物理地址空间大小:在某些嵌入式设备上,它只有一个16位的物理地址,所以物理地址空间的大小为2^16。
页面大小:页面大小为2KB。
a. 对于传统的单级页表,页表中的条目数量为:
2
21
2
×
2
10
=
2
10
\frac{2^{21}}{2\times2^{10}}=2^{10}
2×210221=210
b. 对于倒置页表,页表中的条目数量为:
2
16
2
×
2
10
=
2
5
\frac{2^{16}}{2\times2^{10}}=2^{5}
2×210216=25
3. 某系统的空闲分区表如下,系统采用可变分区存储管理模式,现由一个程序序列:96K、20K、200K。若用首次适应算法和最佳适应算法来为这些程序分配内存,试问哪一种算法可以满足所有程序的请求,为什么?
分区号 | 大小 | 起始地址 |
---|---|---|
1 | 32K | 100K |
2 | 10K | 150K |
3 | 5K | 200K |
4 | 218K | 220K |
5 | 96K | 530K |
首次适应算法:从内存的开始位置开始搜索,分配给第一个满足需求的空闲分区。
- 对于96K的程序,找到分区4(218K)。分配后,分区4还剩下218K - 96K = 122K。
- 对于20K的程序,找到分区1(32K)。分配后,分区1还剩下32K - 20K = 12K。
- 对于200K的程序,找不到足够大的分区,因此无法满足所有程序的请求。
最佳适应算法:搜索整个内存,找到能够满足需求的最小的空闲分区进行分配。
-
对于96K的程序,找到分区5(96K)。分配后,分区5剩余96K - 96K = 0,所以分区5被完全占用。
-
对于20K的程序,找到分区1(32K)。分配后,分区1还剩下32K - 20K = 12K。
-
对于200K的程序,找到分区4(218K)。分配后,分区4还剩下218K - 200K = 18K。
-
该算法的空闲分区表如下:
分区号 | 大小 | 起始地址 |
---|---|---|
1 | 12K | 120K |
2 | 10K | 150K |
3 | 5K | 200K |
4 | 18K | 420K |
5 | 0K | 530K |
4. 有一分页存储管理系统,向用户提供的逻辑地址空间最大位16页,每页2048字节,内存共有8个存储块,问逻辑地址至少应为多少位?逻辑地址的结构是怎样的?内存空间有多大?
在分页存储管理系统中,逻辑地址通常由两部分组成:页号和页内偏移。
页号:用于标识页表中的条目,也就是指定的页。
页内偏移:用于标识在指定页中的具体位置。
- 页号:因为有16页,
2 4 = 16 2^4=16 24=16
所以页号需要4位来表示。 - 页内偏移:每页有2048字节,
2 11 = 2048 2^{11}=2048 211=2048
所以页内偏移需要11位来表示。
所以,逻辑地址至少应为 4 + 11 = 15 位。
因为内存共有8个存储块,每个存储块的大小等于一页的大小,即2048字节,所以内存空间的大小为
8
×
2048
=
2
3
×
2
11
=
2
14
8 \times 2048 = 2^3 \times 2^{11}=2^{14}
8×2048=23×211=214
字节,即16KB。
5. 在分页管理系统中,某程序的0、1、2、3页依次存放在物理块2、3、1、6中。已知页面大小为1024字节,问逻辑地址2148所对应的物理地址是多少?画出地址转换图。
在分页管理系统中,逻辑地址被分为两部分:页号和页内偏移。页面大小为1024字节,即2^10,所以页内偏移需要10位来表示。
对于逻辑地址2148,我们可以将其分为页号和页内偏移:
- 页号 = 2148 / 1024 = 2
- 页内偏移 = 2148 % 1024 = 100
所以,逻辑地址2148对应的是第2页的第100字节。
因为第2页存放在物理块1中。所以,物理地址 = 物理块号 * 页面大小 + 页内偏移 = 1 * 1024 + 100 = 1124
所以,逻辑地址2148对应的物理地址是1124。
地址转换图如下: