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,来锁定到真实物理地址的?

相关推荐
戴为沐17 小时前
Linux内存扩容指南
linux
zylyehuo1 天前
Linux 彻底且安全地删除文件
linux
用户805533698032 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297912 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
乘云数字DATABUFF2 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
Web3探索者3 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
zylyehuo4 天前
Linux系统中网线与USB网络共享冲突
linux
荣--4 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森4 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜4 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https