页式、段式、段页式存储访存次数

页式/段式 存储:(2次)

  • 第一次,访问内存中的页表,利用逻辑地址中的页号查找到物理块号,与逻辑地址中的页内偏移拼接形成物理地址;
  • 第二次:得到物理地址后,再一次访问内存,存取指令或者数据。



段页式 存储:(3次)

  • 第一次:访问内存中的段表,查到页表的起始地址

  • 第二次:访问内存中的页表,找到页帧号,形成物理地址

  • 第三次:得到物理地址后,再一次访问内存,存取指令或者数据



多级页表

  • 若页表划分为 \(N\) 级,则需要访问内存 \(N+1\) 次。

  • 若有快表,在快表命中时,只需访存 \(1\) 次即可。



引入快表后:

  • TLB 命中:可直接得到物理块号,与页内偏移拼接成物理地址后访问内存,进行指令或者数据的存取。(一次访存)
  • TLB 不命中:
    • 第一次,需去内存中访问页表,形成物理地址
    • 第二次,根据物理地址,访问内存进行指令或者数据的存取。(需要访问两次内存)

注:

  • 读出页表项后,应将其存入快表,以便下次使用,快表已满则需用算法置换;
  • 有些处理机是先查快表,快表不命中再去查内存,有些则是快表和内存同时查找,快表命中就终止内存查找。
  • 在内存中查找页表时,对比页表项的状态位,看该页是否调入了内存,若没有调入内存则产生一个缺页中断,请求外存把该页调入内存。



补充:

  1. 内核区保存的信息有:【页表、PCB】(每一个进程低地址 / 高地址部分肯定是映射到同一片【内核空间】)
  2. \(PCB\) 和 页表 都是存放在内存里面的【系统区】。
  3. 【页表始址】保存在 \(PCB\)
  4. 【页表始址】指明了这个 \(PCB\) 所对应的进程他的页表从哪儿开始存放
  5. 【页表始址寄存器】包含在 \(MMU\)Memory Management Unit 的缩写)【内存管理单元】
  6. 【MMU】 是一个硬件,被集成在 【CPU】中
  7. 【TLB】本质上是一个 \(SRAM\) 芯片,当然也可以是其他的高速的存储芯片去实现 \(TLB\)
  8. 【TLB】他也是用于内存地址的映射,将 \(VA\) 转为 \(PA\),所以 \(TLB\) 也是【MMU】里面的一个硬件部件,推得 \(TLB\)\(CPU\) 里面的部件
  9. 【TLB】里面保存的是当前进程的【页表项】的【副本数据】
  10. 【Cache】里面保存的是【内存块】的【副本数据】(注意:页表项的数据也是存放在内存当中的,但是页表项的副本数据单独存放在 \(TLB\) 中)
  11. 当一个进程他被【操作系统】调度,在这个进程将要开始运行之前,\(CPU\) 会把接下即将要运行的这个进程的【页表起始地址】这个信息给复制到 \(MMU\) 里面的【页表始址寄存器】当中。每换一个进程,那么【页表始址寄存器】的值就会改变(也就相当于切换了一套【页表】),这个页表始址值都是从 \(PCB\) 里面来的,每个进程在被调度的时候,肯定会查他的 \(PCB\)
  12. 当切换到一个【新进程】之后,以前 \(TLB\) 里面包含的那些页表项的副本数据将会【失效】,【TLB】里面保存的是当前进程的【页表项】的【副本数据】
  13. \(Cache\) 块的副本数据【不失效】,因为新旧进程可能共享同一片物理地址
posted @ 2023-08-03 23:28  FFex  阅读(821)  评论(0编辑  收藏  举报