6.6aaaaaa

BTB

那BTB判断是怎么完成判断的?对于某个pc,是所有的pc都会由BTB进行判断吗?

那BTB里的结构是怎样的?即代码是如何实现的?valid entry当中有哪些数据?她的btb_pc地址是虚拟地址还是物理地址?


现在的理解是,在T时刻取出a的pc地址,假设是跳转和不是两种情况;BTB完成预测是在ID还是IF,我知道BTB在ID阶段会有作用;对于跳转指令,当T1时刻,a取完指令到了ID,分析判断完是跳转,此时IF阶段去取指令的pc是+4还是预测的pc?我知道如果没有BTB就肯定是+4,然后分支跳转会清除掉此时IF上的错误指令,造成IF上的气泡;然后T3时刻,ID上就是空气泡,IF上才是对的真指令,

以及对于分支指令,是只到ID是吧,EX没作用,是不是就相当于EX,MEM,WB都是空气泡了?

然后如果拆分到六级流水线了,ID2才是动态发射,那T1时刻a还在ID1不知道要不要跳转,T2时刻BTB才知道是不是真的跳转,那么此时流水线上已经填充了两条错误指令了,即IF和ID1,这样理解对吗?

结构

RAS

RAS是什么?和BTB有什么区别?

分支指令

你说BTB负责b/bl和条件分支,RAS负责jirl,但问题是来了一个pc后,没到ID阶段,BTB和RAS都不知道这个PC对应的指令到底是什么,那返回的结果到底取哪个?


TLB

当前代码中关于TLB的设计,关于虚实地址转换的机制和流程是怎样的?以及CPU能同时运行多个进程吗?即对于相同的虚拟地址,CPU能知道这是不同进程的,转换到物理地址后能从实际的RAM中访存吗?

DMW

DMW不区分进程,那举一个它完整应用的流程?就是有背景的那种,现在完全理解不到不区分进程的虚实地址转换是如何保证安全性以及做数据区分的

比如进程A在内存上有物理页pa,那么CPU访问就是用va,然后结合A的进程号来得到pa;那内核要直接访问pa,"内核 VA = 0x8000_0000 + 0x0123_4000

= 0x8123_4000"前面加的这个东西是什么?以及后面的是pa吧?这不就相当于一开始加了个数,后面又减去,有什么意义?以及内核为什么要访问一个进程A的物理页?


那"0x8000_0000 + pa"是在哪进行的?IF阶段?我只知道解析VA是在ID阶段的;以及内核也得知道要访问的地址是用户进程的页才加这个0x8,还是说对任意的pc,都会加0x8?以及真实内存空间中,除了进程的物理页以外还有哪些数据?CPU是如何访问的?

那既然内核已经知道是要访问一个地址了,为什么还要加上一个数?就是说,为什么不直接发物理地址呢?更进一步地说,我完全不理解DMW存在的意义是什么,关键不是在于对PLV是否为内核的判断,而不是是否落在DMW窗口内的判断;即,如果是处于内核态,那不就可以直接把地址当成物理地址来访问

那DMW窗口值,是由谁来确定的?操作系统内核?还是CPU?我只知道操作系统内核和CPU都知道DMW的窗口值,这个值是否会发生变化,如果发生变化或由一方建立时,如何让另一方也知道?以及DMW窗口是否是最多只能有一个?


那对于普通的虚拟地址,CPU是如何结合ASID,来锁定到真实物理地址的?

相关推荐
Archy_Wang_14 小时前
LVS+KeepAlived+Nginx实现企业级业务高可靠部署的实战教程
运维·nginx·lvs
张文君6 小时前
docker使用代理拉取镜像
运维·docker·容器
ltl6 小时前
纠删码原理与存储效率
linux
ltl6 小时前
MinIO 原理和架构:机制、AGPL 与上游 archived 风险
linux
陌路206 小时前
Docker教程从入门到精通(0基础)
运维·docker·容器
林浩杨_7 小时前
linux搜索命令(grep+sed)
linux·命令模式
W.W.H.7 小时前
将驱动编译成模块并安装到rootfs
linux·物联网·wifi·rootfs·驱动
ltl7 小时前
io_uring 在生产环境翻车实录:内核 bug、资源泄漏和你不知道的限制
linux
ltl7 小时前
内存分配器擂台:jemalloc vs tcmalloc vs mimalloc vs glibc
linux
ltl7 小时前
Zero Copy 的肮脏秘密:在什么时候反而更慢
linux