非连续分配:为用户分配的可以是一些分散的内存空间
分页存储
页框:在内存中分为一个个大小相等的分区,每一个分区都有一个编号,就是页框号,从0开始
页
页:进程在逻辑上划分一块块和页框大小相同的分区,每个页面都有一个编号,就是页号
操作系统以页框为单位,为每个进程分配内存空间,各个页可以不必存放在连续的页框当中
页框不能过大,否则会产生过多内部碎片
页面:进程在逻辑上被划分为与页框大小相等的一个个部分,每个页面都有一个编号
进程被分成一个个页面后,因为是离散分配到内存,所以需要建立内存和页面的映射
页表
设计思想:
一个进程对应一张页表
每一个页表项由块号构成,页号是隐含的
每一个页表项长度相同
几个问题:
-
如何存放页表,页表项有多大?
一个页表项只需要存放块号,根据页面大小和内存大小就可以知道内存块号占多大
tips:因为是按照字节编址,所以一般都要凑够8bit
注意:块号并不是物理地址,物理地址 = 块号*页面大小
-
如何实现地址转换
- 确定页号
- 根据页表找到对应块号
- 根绝页内偏移量加上块号对应的起始地址得到最终的物理地址
如果页面大小是2^k,那么逻辑地址的后K位就是偏移量,前面的是页号
一般是通过页内偏移量得到页面大小,最后明确逻辑地址结构