连续分配存储管理方式产生的问题
在分区存储管理中,要求把进程放在一个连续的存储区中,因而会产生许多碎片。
碎片问题的解决方法
(1)拼接/紧凑技术----代价较高。
(2)离散分配方式---允许将作业/进程离散放到多个不相邻接的分区中,就可以避免拼接。
离散分配方式
分页式存储管理:离散分配的基本单位是页
分段式存储管理:离散分配的基本单位是段
段页式存储管理:离散分配的基本单位是段、页
什么是页
将一个用户进程的地址空间(逻辑)划分成若干个大小相等的区域,称为页或页面,页面大小由地址结构(逻辑)决定 ,并为各页从0开始编号。
什么是块
内存空间也分成若干个与页大小相等的区域,称为(存储、物理)块或页框(frame),同样从0开始编号。
内存分配
在为进程分配内存时,以块为单位,将进程中若干页装入到多个不相邻的块中,最后一页常装不满一块而出现页内碎片。
页表的出现
在分页系统中,允许将进程的各个页离散地存储在内存的任一物理块中,为保证进程仍然能够正确地运行,即能在内存中找到每个页面所对应的物理块,系统又为每个进程建立了一张页面映像表,简称页表。一个页表中包含若干个表目,1.表目的自然序号对应于用户程序中的页号。2.表目中的块号是该页对应的物理块号。
内存地址的获取
以页号查页表,得到对应页装入内存的块号。即可求出:内存地址=物理块号×页大小+页内地址。
例:在采用页式存储管理的系统中,某作业J的逻辑地址空间为4页(每页2048字节),且已知该作业的页面映像表如下:
页号 | 块号 |
0 | 2 |
1 | 4 |
2 | 6 |
3 | 8 |
试借助地址变换图求出有效逻辑地址4865所对应的物理地址.
解:页号 4865/2048=2 页内位移 4865%2048=769,过程如下:
从上面我们可以看出:CPU要想获取一个数据时,必须两次访问内存:
1、从内存中的页表中,寻找对应的物理块号,将物理块号与页内地址组合成物理地址。
2、根据组合成的物理地址,来获取数据。
为了提高效率呢,就引进了块表,什么是快表呢?
在地址变换机构中,增设一个具有并行查寻能力的特殊高速缓冲寄存器,称为“联想存储器”或“快表”。
在引入快表的分页存储管理方式中,通过快表查询,可以直接得到逻辑页所对应的物理块号,由此拼接形成实际物理地址,减少了一次内存访问,缩短了进程访问内存的有效时间。但是,由于快表的容量限制,不可能将一个进程的整个页表全部装入快表,所以在快表中查找到所需表项存在着命中率的问题,。总体上来说,还是减少了访问内存的时间。