基本分页存储管理的基本概念

将内存分为一个个大小相等的分区,每个分区就是一个页框(页框=页帧=内存块=物理快=物理页面)每一个页框都有一个编号--页框号,页框号从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的整数幂,则计算机硬件可以快速把逻辑地址拆分成页号和页内偏移量

image-20251001100550622

![image-20251001105801695](/Users/tusier/Library/Application Support/typora-user-images/image-20251001105801695.png)

后面12位二进制是页内偏移量,前面20位是页号

结论:如果每个页面大小为2^k B,用二进制表示逻辑地址

末尾K位为页内偏移量,前面的其他部分是页号

假如前面有M位表示页号,则说明该系统中,一个进程最多允许有2^M 个页面

\[J号内存块的其实地址=J*内存块大小 \]

如果页面大小刚好是2的整数幂,只需要把页表中记录的物理快号拼接上页内偏移量,就能得到对应物理地址

posted @ 2025-10-01 11:05  是我,米老鼠  阅读(13)  评论(0)    收藏  举报