4.2、连续分配方式和非连续分配管理方式
连续分配方式,是指为一个用户程序分配一个连续的内存空间。可把连续分配方式进一步分为单一连续分配、固定分区分配、动态分区分配以及动态重定位分区分配四种方式。
非连续分配是指允许将一个程序分散地装入到很多不相邻的小分区中。根据小分区的大小固定和不固定又分为分页存储管理方式和分段存储管理方式。
分页存储管理方式中又根据运行作业时是否需要把作业分成的所有页面都装入内存才能运行而分成基本分页存储管理方式和请求分页管理方式,前者需要把整个作业都装入内存后才能运行,后者不需要这样。
同样的,分段存储管理方式也可以类似的进行这样分类。分为基本分段存储管理方式和请求分段管理方式。
4.3、基本分页存储管理方式
连续分配方式会形成许多“碎片”,虽然可通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。如果允许将一个进程直接分散地装入到许多不相邻接的分区中,则无须再进行“紧凑”。基于这一思想而产生了离散分配方式。如果离散分配的基本单位是页,则称为分页存储管理方式;如果离散分配的基本单位是段,则称为分段存储管理方式(不管是分页存储管理方式还是分段存储管理方式都是离散分配方式,这一点需要注意!!!)。
在分页存储管理方式中,如果不具备页面对换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具有支持实现虚拟存储器的功能,它要求把每个作业全部装入内存后方能运行。
4.3.1、页面与页表
1、页面
1) 页面和物理块
分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页(注意是将一个进程的逻辑地址空间分成若干个大小相等的片叫做页,所以,得注意是页是对应着进程的逻辑地址空间),并为各页加以编号,从0 开始,如第0 页、第1 页等。相应地,也把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框(frame)(将内存空间分成与页面相同大小的若干个存储块称为物理块,也就是说物理块是对应着内存空间),也同样为它们加以编号,如0#块、1#块等等。在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为“页内碎片”。
2) 页面大小(每一个页面的大小是一样的)
在分页系统中的页面其大小应适中。页面若太小,一方面虽然可使内存碎片减小,从而减少了内存碎片的总空间,有利于提高内存利用率,但另一方面也会使每个进程占用较多的页面,从而导致进程的页表过长,占用大量内存;此外,还会降低页面换进换出的效率。然而,如果选择的页面较大,虽然可以减少页表的长度,提高页面换进换出的速度,但却又会使页内碎片增大。因此,页面的大小应选择适中,且页面大小应是2的幂,通常为512 B~8 KB。
2、地址结构(分页地址中的地址结构)
分页地址中的地址结构如下:
它含有两部分:前一部分为页号P,后一部分为位移量W(或称为页内地址)。如果逻辑地址空间是2^m,页面大小是2^n,那么逻辑地址的高m-n为是页号,低n位是页内偏移量。图中的地址长度为32位,其中0~11位为页内地址,即每页的大小为4 KB(10位为1KB,所以12位表示为4KB);12~31位为页号,地址空间最多允许有1 M页。
对于某特定机器,其地址结构是一定的。若给定一个逻辑地址空间中的地址为A,页面的大小为L,则页号P和页内地址d可按下式求得:
其中,INT是整除函数,MOD是取余函数。例如,其系统的页面大小为1 KB,设A = 2170 B,则由上式可以求得P= 2,d = 122。
从上面的计算我们可以得知,给定了一个逻辑空间地址,我们可以求得其页号和页内地址。根据页号和页内地址我们也可以的得到其逻辑地址。这些转换中关键的一点是要知道系统的页面的大小。页面的大小由页内地址决定,页内地址的位数决定了页面的大小。
3、页表
在分页系统中,允许将进程的各个页离散地存储在内存不同的物理块中,但系统应能保证进程的正确运行,即能在内存中找到每个页面所对应的物理块。为此,系统又为每个进程建立了一张页面映像表,简称页表。在进程地址空间内的所有页(0~n),依次在页表中有一页表项,其中记录了相应页在内存中对应的物理块号,见图4-1的中间部分。在配置了页表后,进程执行时,通过查找该表,即可找到每页在内存中的物理块号。可见,页表的作用是实现从页号到物理块号的地址映射。
图4-1 页表的作用
4.3.2、地址变换结构
为了能将用户地址空间中的逻辑地址变换为内存空间中的物理地址,在系统中必须设置地址变换机构。该机构的基本任务是实现从逻辑地址到物理地址的转换。由于页内地址和物理地址是一一对应的(例如,对于页面大小是1 KB的页内地址是 0~1023,其相应的物理块内的地址也是 0~1023,无须再进行转换),因此,地址变换机构的任务实际上只是将逻辑地址中的页号,转换为内存中的物理块号。又因为页面映射表的作用就是用于实现从页号到物理块号的变换,因此,地址变换任务是借助于页表来完成的。
1、基本的地址变换机构
页表的功能可以由一组专门的寄存器来实现。一个页表项用一个寄存器。由于寄存器具有较高的访问速度,因而有利于提高地址变换的速度;但由于寄存器成本较高,且大多数现代计算机的页表又可能很大,使页表项的总数可达几千甚至几十万个,显然这些页表项不可能都用寄存器来实现,因此,页表大多驻留在内存中。在系统中只设置一个页表寄存器PTR(Page-Table Register),在其中存放页表在内存的始址和页表的长度(也就是说页表寄存器的内容是页表在内存的起始地址和页表的长度)。平时,进程未执行时,页表的始址和页表长度存放在本进程的PCB中。当调度程序调度到某进程时,才将这两个数据装入页表寄存器中。因此,在单处理机环境下,虽然系统中可以运行多个进程,但只需一个页表寄存器。
当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动地将有效地址(相对地址)分为页号和页内地址两部分,再以页号为索引去检索页表。查找操作由硬件执行。在执行检索之前,先将页号与页表长度进行比较,如果页号大于或等于页表长度,则表示本次所访问的地址已超越进程的地址空间。于是,这一错误将被系统发现并产生一地址越界中断。若未出现越界错误,则将页表始址与页号和页表项长度的乘积相加(这句话的意思是将页表起始地址和页号与页表项长度的乘积相加),便得到该表项在页表中的位置,于是可从中得到该页的物理块号,将之装入物理地址寄存器中。与此同时,再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。这样便完成了从逻辑地址到物理地址的变换。图4-2示出了分页系统的地址变换机构。
图4-2 分页系统的地址变换机构
假设存放页表在内存中的起始地址为F,页表的长度为M。页面大小为L,逻辑地址A通过地址变换得到物理地址E的过程如下:
(1)计算页号P=(int)(A/L);页内偏移量W=A%L。
(2)比较页号P和页表长度M,若P≥M,则产生越界中断,否则转到下一步执行
(3)页表中页号P对应的页表项地址=页表起始地址F+页号P×页表项大小,取出该页表项内容b,即为物理块号。
(4)计算E=b×L+W。(E是物理地址)
(5)用得到的物理地址E去访问内存
例如,若页面大小L为1K字节,页号2对应的物理块为b=8,计算逻辑地址A=2500的物理地址E的过程如下:
P=(int)(2500/1K)=2,W=2500%1K=452;
查找得到页号2对应的物理块的块号为8,则E=8×1024+452=8644。
本文介绍了分页存储管理的基本概念,包括页面与物理块的区别、页面大小的选择、地址结构的组成及页表的作用,并详细阐述了地址变换过程。
3876

被折叠的 条评论
为什么被折叠?



