分页
- 把主存空间划分为 大小相等且固定的块,作为主存的基本单位,进程运行时按块申请主存可用空间并执行,页面大小应为2的整数幂
- 进程中的块成为 页(Page),内存中的块成为 页框 或 页帧(Page Frame),外存也已同样的单位划分,直接称为 块(Block)
- 逻辑地址: 页号P + 页内偏移量W
- 页表: 页号P + 物理内存中的块号b
- 页表寄存器(PTR) :页表起始地址F + 页表长度M,程序未执行时,页表的始值和长度存 放在进程控制块中,当进程执行时,才 将页表始值和长度存入页表寄存器,两个作用:在页表寻址 + 判断是否越界
- 存放一个数据或一条指令至少需要访问两次内存:第一次访问页表,确定所存取的数据或指令的物理地址;第二次是根据该地址存取数据或指令
- 上面的步骤比通常执行指令的速度慢了一半,所以拥有了 高速缓冲存储器(块表 或 相联存储器(TLB)) ,主存中的页表称为慢表
- 多级页表,顶级页表只能有一个页面
- 分页管理中的地址越界保护 只需要判断页号是否越界,业内偏移是不会越界的
https://www.youtube.com/playlist?list=PLiwt1iVUib9s2Uo5BeYmwkDFUh70fJPxX
分段
-
断式管理方式按照用户 进程中的自然段 划分逻辑空间
-
例如,用户进程由主程序,两个子程序,栈,一段数据组成,于是可以把这个用户进程划分为5段,每段从0开始编址,并分配一段连续的地址空间(段内要求连续,段间不要求连续)
-
逻辑地址:段号S + 段内偏移量W
-
段表,每个进程都有一张逻辑空间与物理内存空间映射的段表
-
地址变换机构,实现进程从逻辑地址到物理地址的变换,段表寄存器:段表始值F + 段表长度M,两个作用:在段表寻址 + 判断是否越界
-
分段地址变化过程
-
不可修改正在共享的代码,分段管理的保护方式:一种是存取控制保护,另一种是地址越界保护(段号,段内偏移是否越界)
段页式
-
作业的地址空间首先被划分为若干逻辑段,每段都有自己的段号,然后将每段分成若干大小固定的页。对内存空间的管理仍然和分页存储管理一样,将其分成若干和页面大小相同的存储块,对内存的分配以存储块为单位
-
作业的 逻辑地址 分为三个部分:段号 + 页号 + 业内偏移量
-
系统为每个进程建立一张段表,每个分段有一张页表,段表只有一个,页表可能有很多个
-
段表表项中至少包括:段号 + 页表长度 + 页表始值,页表表项中至少包括:页号 + 块号
-
在进行地址变换时,首先通过段表查到页表始值,然后通过页表找到页帧号,最后形成物理地址
局部性
页面置换算法
页面分配策略