内存虚拟地址的翻译和值读取
来源:互联网 发布:语音识别算法视频教程 编辑:程序博客网 时间:2024/06/08 04:01
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
参考文档:深入理解计算机系统
内存虚拟地址:
操作系统为每个进程都分配一个虚拟地址空间表:32位地址空间大小约4G
这样如果有资源共享的话(如dll),不同进程的虚拟页面地址指向同一物理页面地址即可。
SRAM(CPU-L1/L2/L3高速缓存), DRAM(内存)
内存虚拟地址的翻译AdreesTranslation:
VPN-虚拟页面编号virtual pagenumber
VPO-虚拟页面偏移 virtual pageoffset
PPN-物理页面编号 physical pagenumber
PPO-物理页面偏移 physical pageoffset
VPO/PPO偏移地址的位数取决于页面的大小,例如4k=2^12页面大小的话,偏移地址为12位
MMU-存储器管理单元 MemoryManagement Unit
PTE-页表条目数组 Page TableEntry
TLB-翻译后备缓存器(PTE缓存)translation lookside buffer
多级PTE/一级PTE/二级PTE-多级时,每级1024=2^10位,二级可以达到2^20页面个数寻址
一个虚拟地址翻译的时候:
例如32位虚拟地址,4k页面(2^12=4k)
a. 首先页面大小划分VPN,VPO:
VPO占12位,则VPN占20位
b. 在TLB中查询虚拟地址页面VPN,TLBI与TLBT的占VPN的总位数20位,如果TBL为256行258列的话,则TBLI为占8位(2^8=256行=0xFF),则TLBT占12位(2^12=4k=0xFFF)
TLBI-TLB索引
TLBT-TLB标记
c. 在TLB中查询到物理地址页面PPN的时候,VPN查询结束;否则查二级的PTE,并把查到的PTE记录放入到TLB中,也返回物理地址页面PPN。
d. 有了物理地址页面PPN,就可以和PPO=VPO组合生成物理地址了
下一步,读取该物理地址PA存储的值
a. 根据物理地址PA,查询高速缓存(Cpu L1/L2/L3 cache),如果高速缓存大小为1k行*4k的块=4M,则CO块内偏移为12位(2^12=4k),CI索引占10位(2^10=1k),则CT占剩余的10位,根据CI/CT/CO查询物理地址存储的值
CO-缓存快内的字节偏移量
CI-高速缓存索引
CT-高速缓存标记
4M缓存对应4G的空间,缓存个数比为1/1024
b. 如果在高速缓存中没有查到PA存储的话,则需要从主存中调拨页面到高速缓存,并在高速缓存中重现查询
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
- 内存虚拟地址的翻译和值读取
- 内存管理中的虚拟地址到物理地址翻译
- 内存管理和地址翻译概述
- kernel中如何读取内存的大小和地址
- 内存虚拟地址空间的划分空间
- C的内存虚拟地址空间结构
- 虚拟存储器之地址翻译
- 地址翻译:从虚拟地址到物理地址
- 物理内存和虚拟内存的区别 及 什么是虚拟地址空间
- 理解的逻辑地址、线性地址、物理地址和虚拟地址
- 逻辑地址、线性地址、物理地址和虚拟地址的区别
- 逻辑地址、线性地址、物理地址和虚拟地址的区别
- Linux中的虚拟地址、物理地址和内存管理方式
- ]Linux中的虚拟地址、物理地址和内存管理
- Linux中的虚拟地址、物理地址和内存管理方式详解
- 端到端的地址翻译(虚拟地址是怎样取到相应高速缓存的数据的?)
- 虚拟地址和物理地址的概念
- WINCE物理和虚拟地址的问题
- 递归
- 工业控制信息安全资源汇总
- 设置导航栏的背景色和标签栏的背景色
- 3.Xilinx SDK下载与调试教程
- C语言_选择结构和循环结构
- 内存虚拟地址的翻译和值读取
- C语言_数组
- Oracle RAC 环境下的连接管理
- setDefaultAlphaPixelFormat bug addSpriteFrames 异步加载资源
- [剑指offer]字符串的排列
- 关于台式电脑突然断电后重启,所有软件恢复的秘密
- noj1010 基本的迷宫问题
- php下载
- for(i=1;i<=5;i++)sum=sum+i;详解