将内存分为一个个大小相等的分区,每个分区就是一个页框(页框=页帧=内存块=物理快=物理页面)每一个页框都有一个编号--页框号,页框号从0开始。
将进程的逻辑地址空间也分为与页框大小相等的一个个部分,每个部分称为一个页/页面,每个页也有一个编号,叫做页号,页号也是从0开始的
进程的页面与内存的页框都有一一对应的关系,每个页面不必连续存放,可以放到不相邻的页框中
重要的数据结构--页表
为了记录进程的每个页面在内存中的位置,操作系统要为每一个进程建立一张页表,页表通常存在PCB中
1.一个进程对应一张页表
2.进程的每个页面对应一个页表项
3.每个页表项由页号和块号组成
4.页表记录进程和页面的实际存放的内存块之间的映射关系
每个页表占多少字节?
内存块大小=页面大小=3kB=2^12B
4GB的内存总共会被分为2^20个内存块
内存块号的地址范围0~2^20 -1
内存块号至少要20bit来表示
至少要3B来表示块号(3*8=24>20)
页号不需要占用存储空间
假如页表从X的地方开始,找到第i号的页表项,因为页表项是连续存放的,所以第i号页表项的存放地址=X+3i
由于页表是隐含的,因此每个页表项占3B,存储整个页表至少需要3*(n+1)B
逻辑地址如何转换成物理地址?
虽然进程的各页面是离散存放的,但是页面内部是连续的
如果要访问逻辑地址A
1.确定逻辑地址A对应的页号P
2.找到P号页面在内存中的其实地址
3.确定逻辑地址A的页内偏移量W
逻辑地址A对应的物理地址=P号页面在内存中的起始地址+页内偏移量W
逻辑地址可以拆分为(页号,页内偏移量
在计算机内部,地址是用二进制表示的,因此如果页面大小刚好是2的整数幂,则计算机硬件可以快速把逻辑地址拆分成页号和页内偏移量

后面12位二进制是页内偏移量,前面20位是页号
结论:如果每个页面大小为2^k B,用二进制表示逻辑地址
末尾K位为页内偏移量,前面的其他部分是页号
假如前面有M位表示页号,则说明该系统中,一个进程最多允许有2^M 个页面
如果页面大小刚好是2的整数幂,只需要把页表中记录的物理快号拼接上页内偏移量,就能得到对应物理地址