目录
一、分页存储管理的基本方法
1.1页面与物理块
(1)页面
(2)页面大小
1.2地址结构
1.3页表
二、地址变换机构
2.1基本的地址变换机构
2.2具有快表的地址变换机构
三、访问内存的有效时间
案例习题:
1.二进制
2.基本地址变换机构
如果允许将一个进程直接分散地装入到许多不相邻块的分区中,便可充分地利用内存空间,而无须再进行“紧凑”。基于这一思想而产生了离散分配方式。根据在离散分配时所分配地址空间的基本单位的不同,又可将离散分配分为以下三种:
(1)分页存储管理方式。在该方式中,将用户程序的地址空间分为若干个固定大小的区域,称为“页”或“页面”。典型的页面大小为1KB。相应地,也将内存空间分为若干个物理块或页框( frame ),页和块的大小相同。这样可将用户程序的任一页放入任一物理块中,实现了离散分配。
(2)分段存储管理方式。这是为了满足用户要求而形成的一种存储管理方式。它把用户程序的地址空间分为若干个大小不同的段,每段可定义一组相对完整的信息。在存储器分配时,以段为单位,这些段在内存中可以不相邻接,所以也同样实现了离散分配。
(3)段页式存储管理方式。这是分页和分段两种存储管理方式相结合的产物。它同时具有两者的优点,是目前应用较广泛的一种存储管理方式.。
一、分页存储管理的基本方法
1.1页面与物理块
(1)页面
分页存储管理将进程的逻辑地址空间分为若干个页,并为各页加以编号,从0开始,如第0页、第1页等。相应地,也把内存的物理地址空间分为若干块,同样也为他们加以编号,如0#块、1#块等,在为进程分配内存时,以块为单位,将进程中的若干个页分别装入到多个可以不相邻接的物理块中。而由于进程的最后一页经常装不满一块,而形成不可利用的碎片,称之为"业内碎片"。
(2)页面大小
在分页系统中,若选择过小的页面大小,虽然一方面可以减小内存碎片,起到减少内存碎片总空间的作用,有利于内存利用率的提高,但另一方面却会造成每个进程占用较多的页面,从而导致进程的页表过长,占用大量内存。此外,还会降低页面换进换出的效率。然而,如果选择的页面过大,虽然可以减少页表的长度,提高页面换进换出的速度,但却又会使页内碎片增大。因此,页面的大小应选择适中,且页面大小应是2的幂,通常为1 KB ~8 KB 。
1.2地址结构
它主要包含两部分:前一部分为页号P,后一部分为位(偏)移量W,即页内地址。
对某特定机器,其地址结构是一定的。若给定一个逻辑地址空间中的地址为 A ,页面的大小为 L ,则页号 P 和页内地址 d 可按下式求得:
其中,INT为取整函数,MOD为取余函数。
1.3页表
在分页系统中,允许将进程的各个页离散地存储在内存的任一物理块中,为保证进程仍然能够正确地运行,即能在内存中找到每个页面所对应的物理块,系统又为每个进程建立了一张页面映像表,简称页表。在进程地址空间内的所有页(0~ n ),依次在页表中有一页表项,其中记录了相应页在内存中对应的物理块号,见下图的中间部分。在配置了页表后,进程执行时,通过査找该表,即可找到每页在内存中的物理块号。可见,页表的作用是实现从页号到物理块号的地址映射。
二、地址变换机构
为了使用户地址空间的逻辑地址转换为内存空间中的物理地址,在系统中必须设置地址变换机构。该机构的基本任务是实现从逻辑地址到物理地址的转换。
逻辑地址A对应的物理地址=P号页面在内存中的起始地址+页面偏移量W
2.1基本的地址变换机构
进程在运行期间,需要对程序和数据的地址进行变换,即将用户地址空间中的逻辑地址变换为内存空间中的物理地址,由于它执行的频率非常高,每条指令的地址都需要进行变换,因此需要采用硬件来实现。页表功能是由一组专门的寄存器来实现的。一个页表项用一个寄存器。由于寄存器具有较高的访问速度,因而有利于提高地址变换的速度;但由于寄存器成本较高,且大多数现代计算机的页表又可能很大,使页表项的总数可达几千甚至几十万个,显然这些页表项不可能都用寄存器来实现。因此,页表大多驻留在内存中。在系统中只设置一个页表寄存器 PTR ( Page - Table Register ),在其中存放页表在内存的始址和页表的长度。平时,进程未执行时,页表的始址和页表长度存放在本进程的 PCB 中。当调度程序调度到某进程时,才将这两个数据装入页表寄存器中。因此,在单处理机环境下,虽然系统中可以运行多个进程,但只需一个页表寄存器。
2.2具有快表的地址变换机构
由于页表是存放在内存中的,这使 CPU 在每存取一个数据时,都要两次访问内存。第一次是访问内存中的页表,从中找到指定页的物理块号,再将块号与页内偏移量 W 拼接,以形成物理地址。第二次访问内存时,才是从第一次所得地址中获得所需数据(或向此地址中写入数据)。因此,采用这种方式将使计算机的处理速度降低近1/2。可见,以此高昂代价来换取存储器空间利用率的提高,是得不偿失的。
内存块号为b,业内偏移量为W,页面大小为L
物理地址E=b*L+W
若快表命中,则需一次访存即可
若快表未命中,则需两次访存即可
案例:访问一次快表耗时为1us,访问一次内存耗时为100us,若快表命中率为90%,则访问一个逻辑地址的平均耗时为
(1+100)*0.9+(1+100+100)*0.1=110.9us
三、访问内存的有效时间
从进程发出指定逻辑地址的访问请求,经过地址变换,到在内存中找到对应的实际物理地址单元并取出数据,所需要花费的总时间,称为内存的有效访问时间( Effective Access Time , EAT )。假设访问一次内存的时间为 t ,在基本分页存储管理方式中,有效访问时间分为第一次访问内存时间(即查找页表对应的页表项所耗费的时间 t )与第二次访问内存时间(即将页表项中的物理块号与页内地址拼接成实际物理地址所耗费的时间 t )之和:EAT=t+t=2t
在引入快表的分页存储管理方式中,通过快表查询,可以直接得到逻辑页所对应的物理块号,由此拼接形成实际物理地址,减少了一次内存访问,缩短了进程访问内存的有效时间。但是,由于快表的容量限制,不可能将一个进程的整个页表全部装入快表,所以在快表中查找到所需表项存在着命中率的问题。所谓命中率,是指使用快表并在其中成功查找到所需页面的表项的比率。这样,在引入快表的分页存储管理方式中,有效访问时间的计算公式即为:EAT=a x λ+(t+λ)(1-a)+t=2t+λ-t x a
λ表示查找快表所需要的时间, a 表示命中率, t 表示访问一次内存所需要的时间。
案例习题:
1.二进制
由上图可知,页面大小为8B,一号页对应的7#物理块,同时页内地址(位移量)为011
根据物理地址公式=起始地址+页内地址=111011(二进制算法)
或者页号*页面大小+偏移量=7*8+3=59
2.基本地址变换机构