特征:非连续分配管理方式。 为用户进程可以分配分散的内存空间。
思想:把内存分为一个个相等的小分区,再按照分区大小把进程拆分成一个个小部分。
一、概念
概念中只有(页、页面)/(页号、页面号)是和进程相关的,其他的都是和内存相关的。
1.内存空间划分的小块称为页框(内存块),页框号从0开始。
2.用户进程的地址空间分为与页框大小相等的区域,称为页或页面,也是从0开始。
3.页面与页框的关系,用页表表示。一个进程对应一个页表。每个页表由“页号”和“块号”组成。
各个页面不必连续存放,也不必按先后顺序来,可以放到不相邻的各个页框中。
二、地址转换
目的:实现逻辑地址到物理地址的转换。
思想:物理地址=页面在内存中的的“起始地址”+逻辑地址在页面内的“偏移量”。
1.计算方式:页号 = 逻辑地址/页面长度
页内偏移量 = 逻辑地址%页面长度
物理地址 = 页号的起始地址 + 偏移量。
2.二进制计算:
为了方便计算页号、页内偏移量,页面大小一般设为2的整数幂。
假设用32个二进制位表示逻辑地址,页面大小为2^12 B = 4096 B = 4 KB
0号页的逻辑地址空间应该是0~4095,用二进制表示应该是: 00000000000000000000000000000000~ 00000000000000000000111111111111
1号页的逻辑地址空间应该是4096~8191,用二进制表示应该是: 00000000000000000001000000000000 ~ 00000000000000000001111111111111
2号页的逻辑地址空间应该是8192~12287,用二进制表示应该是: 与另一种算法的结果对比: 00000000000000000010000000000000 ~ 00000000000000000010111111111111
Eg:逻辑地址2,用二进制表示应该是00000000000000000000000000000010 若0号页在内存中的起始地址为x,则逻辑地址⒉对应的物理地址应该是X+000000000010
Eg:逻辑地址4097,用二进制表示应该是00000000000000000001000000000001 若1号页在内存中的起始地址为X,则逻辑地址4097对应的物理地址应该是X+000000000001
结论:如果每个页面大小为2^k B,用二进制数表示逻辑地址,则末尾K位就是页内偏移量,其余部分就是页号。
逻辑地址结构:
如果有K位表示“页内偏移量”,则说明该系统中一个页面的大小是2^K 个内存单元。
如果有M位表示“页号”,则说明在该系统中,一个进程最多允许有2^M 个页面。
三、基本地址变换机构
解释:用于实现逻辑地址到物理地址的转换的一组硬件机构。
进程未执行的时候页表的始址和页表长度都是存放在PCB中的,当进程被调度时操作系统会将它放到页表寄存器中(PTR)。
页表寄存器记录了页表始址F和页表长度M
Eg:设页面大小为L,页面大小是2的整数幂。逻辑地址A到物理地址E的变化如下:
1.计算页号P和偏移量W:P = A / L,W = A % L;
2. 判断页号是否越界:如果P>=M,产生越界中断,否则继续执行。(页号是从0开始的,所以实际长度p+1)
3.查询页表:页表P对应的页表项地址 = F+P*页表项长度(M为页表长度,指的是页表中页表项的个数;页表项长度指的是每个页表项占的存储空间),取出页表内容b,即为内存块号。
4.物理地址:E = b*L + W。