\begin{align*}
&P = INT(\frac{A}{L})
&W = \text{A mod L}
\end{align*}
$$
0 ~ 11 位表示页内位移量,则每页的大小为 212 = 4KB。
12 ~ 31 位表示页号,220=1M,即最多允许有 1M 个页面。
如有逻辑地址为:2170,页面大小为 1KB,则P=INT[2170/1024]=2
;W=2170 MOD 1024=122
这个地址的变换通常由系统中的某些硬件完成。
Q
已知某分页系统,用户空间有 64 个页面,主存容量为 32KB,页面大小为 1KB,对一个 4 页大的作业,其 0、1、2、3 页分别被分配到主存的 2、4、6、7 块中。
(1)将十进制的逻辑地址 1023、2500、3500、4500 转换成物理地址?
(2)以十进制的逻辑地址 1023 为例画出地址变换过程图?
A
(1)
① 逻辑地址 1023:1023/1K,得页号为 0,页内地址为 1023,查页表找到对应的物理块号为 2,故物理地址为 2×1K+1023=3071
② 逻辑地址 2500:2500/1K,得页号为 2,页内地址为 452,查页表找到对应的物理块号为 6,故物理地址为 6×1K+452=6596
③ 逻辑地址 3500:3500/1K,得页号为 3,页内地址为 428,查页表找到对应的物理块号为 7,故物理地址为 7×1K+428=7596
④ 逻辑地址 4500:4500/1K,得页号为 4,页内地址为 404,因页号大于页表长度,故产生越界中断。
(2)
地址变换机构的功能是将用户的逻辑地址转变为内存中的物理地址。
逻辑地址由页号和页内位移量组成。页(Page)的大小和内存物理块(Pageframe)的大小是相同的,所以页内位移量即为物理块内位移量。
关键是页号到物理块号的转换,由页表完成。
基本的地址变换机构
分页系统中的地址变换过程:
(1)根据逻辑地址,计算出页号和页内偏移量;
(2)从 PTR 中得到页表首址,然后检索页表,查找指定页面对应的页框号;
(3)用页框号乘以页面大小获得其对应的起始地址,并将其送入物理地址的高端。
(4)将页内偏移量送入物理地址低端,形成完整的物理地址。
具有快表的地址变换机构
分页系统中处理机每次存取指令或数据至少需要访问两次物理内存:
Lookaside buffer 是一种硬件缓存机制,用于加速对特定类型数据的访问。这种缓存机制通常在 CPU 或其他硬件组件中实现,例如网络接口卡或硬盘控制器。
Lookaside buffer 的工作原理是将最近或最常访问的数据存储在一个快速访问的缓存中,以减少对慢速内存的访问。当 CPU 或其他硬件组件需要访问数据时,它们首先查看 lookaside buffer。如果所需的数据在缓存中,那么就可以快速地从缓存中获取,而无需访问慢速的内存。这被称为缓存命中。如果数据不在缓存中,那么就需要访问慢速的内存,并将数据放入缓存中以备后用。这被称为缓存未命中。
进程最近访问过的页面在不久的将来还可能被访问。快表的工作原理类似于系统中的数据高速缓存(cache),其中专门保存当前进程最近访问过的一组页表项。
快表地址转换过程
访问内存有效时间 EAT(Effective Access Time):从进程发出指定逻辑地址的访问请求,经过地址变换,再到内存中找到对应的物理单元并取出数据,所花费的总时间。
如检索快表时间为 20 ns,访问内存为 100 ns。
若能在快表中检索到 CPU 给出的页号,则 CPU 存取一个数据共需 120 ns;否则,需要 220 ns 的时间。
如果不设置快表,CPU 存取一个数据需要 200 ns。快表(TLB)命中时效率会很高,未命中效率会降低,但平均后仍表现良好
$$
EAT_{average} = HitR \times (TLB_{time} + Memory_{time}) + (1-HitR) \times (TLB_{time} + 2 \times Memory_{time})
$$
$EAT_{average}$ 为平均有效访问时间
$HitR$ 为命中率
$TLB_{time}$ 为快表访问时间,$Memory_{time}$ 为内存访问时间
问题引入
32 位逻辑地址空间,假设页面大小为 4KB(212),则 4GB(232)的逻辑地址空间将被划分成 220 个页面。
若采用一级页表,则该表将包含 1M(220)个页表项。若按字节寻址,一个页表项占 4B,则一级页表需要占用 4MB(222)内存空间。不可能将 4MB 的页表保存在一个连续区中。
那么,如何处理大页表的存储与检索呢?
可以采用这样两个方法来解决这一问题:
① 采用离散分配方式来解决难以找到一块连续的大内存空间的问题,(即引入两级页表);
② 只将当前需要的部分页表项调入内存, 其余的页表项仍驻留在磁盘上,需要时再调入。
对于要求连续的内存空间来存放页表的问题:
对于 4GB($2^{32} Byte$)的进程,页面大小为 4KB($2^12 Byte$) ,若采用二级页表,则对应的二级页表结构设计如下(假定每个页表项 4B):
变换机构:先在外层页表寄存器中找到外层页表的起始地址,根据逻辑地址中的外层页号找到对应的内层页表的起始地址,再根据逻辑地址中的内层页号找到对应的物理块号。
利用离散分配方法实现的两级页表只是解决了大页表无需大片连续存储空间问题,但并未解决用较少内存去存放大页表问题,有关此类问题的成功解决方案放在虚拟存储器管理中。
Intro
对于 64 位的机器,采用两级页表结构是否合适?
使用 4KB 的页面,剩 52 位。若按 4KB 来划分页表,还剩 42 位用于外层页表,因而外层页表有 4KG 个页表项,占 16KGB 的空间
使用 1MB 的页面(220),剩 44 位。若按 1MB 来划分页表,还剩 26 位用于外层页表,外层页表有 64M 个页表项,占 256MB 空间
显然这是不现实的,外层页表过大无法装入一个物理块中
64 位的机器,采用的是多级(4 级以上)页表结构。
电脑的位数通常指的是其 CPU 的位数,这是指 CPU 一次能处理的数据的位数,也就是其寄存器的宽度。例如,32 位的 CPU 一次可以处理 32 位(4 字节)的数据,而 64 位的 CPU 一次可以处理 64 位(8 字节)的数据。
这个位数也决定了 CPU 可以直接寻址的内存空间的大小。32 位的 CPU 可以直接寻址 $2^{32}$ 个位置,也就是 4GB 的内存空间。同样,64 位的 CPU 可以直接寻址 $2^{64}$ 个位置,这是一个非常大的空间,远远超过了现在的计算机所装配的实际物理内存。
然而,实际上,操作系统通常会使用虚拟内存系统,这允许每个进程都有自己的地址空间,并且这个地址空间的大小可以超过实际的物理内存。例如,每个进程在 64 位的 Linux 系统中都有一个 $2^{48}$ 字节的虚拟地址空间,虽然实际的物理内存可能只有几 GB。
所以,电脑的位数决定了 CPU 的寄存器宽度,一次可以处理的数据的位数,以及可以直接寻址的内存空间的大小。但是实际可用的地址空间可能会因为虚拟内存系统和操作系统的设计而变化。
多级页表实现
通过间接引用将页号分成 k 级,建立页表“树”,减少每级页表的长度
CPU 得到逻辑地址后,先从最高级的页表开始,逐级查找,直到找到最低级的页表,再根据页表项找到物理块号。
Intro
对于在 OS 中同时运行的多个进程,相当大的一部分内存仅被页表占用。若结合了多级分页方案,这会进一步增加存储页表所需的空间,页表占用的内存量可能会成为一个巨大的开销;此外,查找一个物理地址需要读取多个页表,导致查找时间增加。
为了有效地利用存储器,引入了反置页表,一个系统中一般只存在一个反向页表,这张页表中的 entry 的数量和内存中 pageframe 的数量是一样的
IPT Entry Struct
IPT 地址转换过程
给出进程标识和页号,用它们去比较 IPT,若整个反置页表中未能找到匹配的页表项,说明该页不在主存,产生请求调页中断,请求操作系统调入;否则,该表项的序号便是物理块号,块号加上位移,便形成物理地址。
然而,反置页表也有其缺点,比如查找特定虚拟地址对应的物理地址可能会更复杂。为了解决这个问题,一些系统会使用额外的数据结构,如哈希表,基于 Hash 映射值查找对应页表项中的帧号
以下是倒排页表(IPT)在引入哈希表后如何转换逻辑地址的过程:
通过这种方式,倒排页表结合哈希表可以有效地将逻辑地址转换为物理地址,同时保持查找时间的效率。
Pros
分段的基本原理
在分段管理系统中,对所有地址空间的访问均要求两个成分: (1)段的名字;(2)段内地址。
例如,可按下述调用:
CALL [X]|<Y> 转移到子程序X中的入口点YLOAD R1, [A]|<D> 将数组A的D单元的值读入寄存器1STORE R1,[B]|<C> 将寄存器1的内容存入分段B的C单元中
这些符号程序经汇编和装配后,指令和数据的单元地址均由两部分构成:一是表示段名的段号 S;一是位移量 W,即段内地址。
分段管理
分段管理,就是管理由若干分段组成的作业,且按分段来进行存储分配。
实现分段管理的关键在于,如何保证分段(二维)地址空间中的一个作业在线性(一维)的存储空间中正确运行。也就是说,如何把分段地址结构变换成线性的地址结构。和分页管理一样,可采用动态重定位技术,即通过地址变换机构来实现。
优点:
没有内碎片,外碎片可以通过内存紧凑来消除。
便于改变进程占用空间的大小。
为每个段分配一个连续的分区,而进程中的各个段可以离散地移入内存中不同的分区中
段表:每个段在表中占有一个表项,其中记录了该段在内存中的起始地址(又称为“基址”,Base Address)和段长。通常将段表放在内存中,执行中的进程可通过查找段表找到每个段所对应的内存区。作用为实现从逻辑段到物理内存区的映射
段表寄存器(Segment Table Register,STR)
若段表放在内存中,每访问一个数据需要访问内存 2 次,可设置联想存储器(快表),以提高访问速度。
分页系统实现程序段的共享较为困难。分段易于实现段的共享和段的保护。
可重入代码(Reentrant Code, 纯代码)是一种允许多个进程同时访问的代码(可共享),且是一种不允许任何进程对其进行修改的代码。
例如一个多用户系统可接纳 40 个用户,它们都执行一个文本编辑程序(ED),ED 代码共 160K(ED 可共享),每个用户还有 40K 的数据区(DA)。
在分页存储管理中,进程被划分为固定大小的页。当两个或更多的进程需要访问相同的信息时,可以使用分页共享。例如,当多个进程运行相同的程序或访问相同的只读文件时,它们可以共享相同的代码页或数据页。这种方式的优点是可以节省内存空间,因为相同的信息只需要在内存中存储一次。此外,分页共享也可以用于实现进程间的通信。
对于数据页面,实现起来比较简单。因为这个数据页面可以安排在诸作业地址空间中的任何一页面上。
如果多个进程(或作业)要共享同一个代码页,那么这个代码页必须在所有共享它的进程的地址空间中处于相同的位置(即具有相同的页号)。这是因为代码页中的跳转或引用指令的目标地址通常在链接阶段就确定了。
在分段存储管理中,进程被划分为多个具有不同长度和功能的段。分段共享允许多个进程共享一个或多个段。这在一些情况下是非常有用的。例如,当多个进程需要执行相同的函数或访问相同的数据结构时,它们可以共享相同的代码段或数据段。分段共享的优点是它可以更灵活地管理内存,因为每个段的大小可以根据需要进行调整。此外,分段共享也可以用于实现进程间的通信。
分页管理内存管理效率高
段式存储在内存保护方面有优势,页式存储在内存利用和优化转移到后备存储方面有优势。两者结合,形成段页式存储管理方式。
原理:分段和分页相结合。先将用户程序分段,每段内再划分成若干页,每段有段名(段号),每段内部的页有一连续的页号。
下图为段页式系统中一个作业的地址空间结构,页面尺寸为 4KB。由图可见,该作业有三个分段,第一段为 15KB,占 4 页,最后一页有 1KB 未用;第二段为 8KB,恰好占满 2 页;第三段为 10KB,占 3 页;而最后一页有 2KB 未用。和分页系统一样,这些未写满的页,在装入主存空间后,依然存在内零头问题。
综合了分段和分页技术的优点,既能有效地利用存储空间,又能方便用户进行程序设计。但是,实现段页式存储管理系统需要增加硬件成本,系统的复杂度和管理开销也大大增加。因此,段页式存储管理技术适合于大、中型计算机系统,不太适合小型、微型计算机系统。
在段页式存储管理方式中,每访问一次数据,需访问 次内存。
对换指把内存中暂不能运行的进程或暂时不用和程序和数据,换到外存上,以腾出足够的内存空间,把已具备运行条件的进程,或进程所需要的程序和数据,换入内存。
对换是系统行为,是提高内存的利用率的有效措施。
常用于多道程序系统或小型分时系统中,与分区存储管理配合使用。
实现:可在系统中设一对换进程,以执行换进内存、换出至外存操作。
对换技术,最早用在分时系统 UNIX 中。
在任何时刻,在该系统的主存中只保存一个完整的用户作业,当其运行一段时间后,或由于分配给它的时间片已用完,或由于需要其它资源而等待,系统就把它交换到辅存,同时把另一个作业调入主存让其运行。这样,可以在存储容量不大的小型机上实现分时系统。
分类
功能
为实现对换,系统需要三方面的功能:
外存被分为两部分,文件区和对换区
文件区用于存放文件,对它的管理应重在如何提高存储空间的利用率。所以对它采取离散分配方式。即一个文件可根据当前外存的使用情况,被分成多块,分别存储到不邻接的多个存储区域中,用指针相连。
对换区存放从内存换出的进程,它们在外存的存放时间较短,换入、换出频繁。对对换区的管理应重在提高进程的换入换出速度。因此采用连续分配方式。即把一个换出的进程存放到一个连续的存储空间中。
为了能对对换区中的空闲盘块进行管理,在系统中应配置相应的数据结构,以记录外存的使用情况。
空闲分区表或空闲分区链。在空闲分区表中的每个表目应包含两项,即对换分区首址和对换区长度,它们的基本单位都是盘块。
对换区的分配,是采用连续分配方式。因而对对换区空间的分配与回收,与动态分区方式时内存的分配与回收方法雷同。
分配算法可以是首次适应算法、循环首次适应算法和最佳适应算法。
回收操作也可分为四种情况
为了能对交换区中的空闲盘块进行管理,在系统中应配置相应的数据结构,盘块的大小和操作系统的具体文件系统有关系;比如 fat32 的盘块大小为 4KB,内存分配的单位是字节,外存(硬盘)分配的单位是盘块
换出(swap out)
首先选择阻塞或睡眠状态的进程,若有多个,按优先级由低到高进行选择。若没有此状态进程,则选择就绪状态的,仍然按优先级由低到高进行选择。
为避免某进程被频繁的换入换出,还应考虑进程在内存中的驻留时间,优先选择驻留时间长的进程。
换入(swap in)
① 从 PCB 集合中查找“就绪且换出”的进程,有多个,则选择换出时间最长的。
② 根据进程大小申请内存,成功则读入,否则要先执行换出,再换入。
③ 若还有可换入进程,则转向 ①。直至无“就绪且换出”进程或无法获得足够内存空间为止。
S.NO | Paging | Segmentation |
---|---|---|
1 | In paging, the program is divided into fixed or mounted size pages. | In segmentation, the program is divided into variable size sections. |
2 | For the paging operating system is accountable. | For segmentation compiler is accountable. |
3 | Page size is determined by hardware. | Here, the section size is given by the user. |
4 | It is faster in comparison to segmentation. | Segmentation is slow. |
5 | Paging could result in internal fragmentation. | Segmentation could result in external fragmentation. |
6 | In paging, the logical address is split into a page number and page offset. | Here, the logical address is split into section number and section offset. |
7 | Paging comprises a page table that encloses the base address of every page. | While segmentation also comprises the segment table which encloses segment number and segment offset. |
8 | The page table is employed to keep up the page data. | Section Table maintains the section data. |
9 | In paging, the operating system must maintain a free frame list. | In segmentation, the operating system maintains a list of holes in the main memory. |
10 | Paging is invisible to the user. | Segmentation is visible to the user. |
11 | In paging, the processor needs the page number, and offset to calculate the absolute address. | In segmentation, the processor uses segment number, and offset to calculate the full address. |
12 | It is hard to allow sharing of procedures between processes. | Facilitates sharing of procedures between the processes. |
13 | In paging, a programmer cannot efficiently handle data structure. | It can efficiently handle data structures. |
14 | This protection is hard to apply. | Easy to apply for protection in segmentation. |
15 | The size of the page needs always be equal to the size of frames. | There is no constraint on the size of segments. |
16 | A page is referred to as a physical unit of information. | A segment is referred to as a logical unit of information. |
17 | Paging results in a less efficient system. | Segmentation results in a more efficient system. |
data-flair memory-management-in-computer
Inverted page tables
Inverted Page Table in Operating System
操作系统基本分段存储管理方式
Storage Management PartⅡ