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

相关推荐
Apibro1 小时前
【Linux】Qt Creator 中文输入法
linux·qt
smallswan1 小时前
第十四 算数运算
linux·服务器·前端
VX_181 小时前
Docker镜像直接部署JumpServer
运维·docker·容器
丑过三八线1 小时前
Umi 配置文件 .umirc.ts 详解
linux·运维·ubuntu·react.js
咖啡星人k1 小时前
用 MonkeyCode 构建全栈应用:从需求到部署的AI自动化实践
运维·人工智能·自动化
.小小陈.1 小时前
从零构建可用 TCP 服务:从基础 Socket 到自定义协议与序列化
服务器·网络·tcp/ip
zh路西法1 小时前
【rosbridge-websocket】跨网络的ROS1与ROS2通讯法(上)
linux·网络·c++·python·websocket·网络协议
zincsweet2 小时前
Linux线程原理深度剖析:从CPU调度到pthread实现
linux·服务器
A_humble_scholar2 小时前
Linux(三)深入理解 Makefile:自动变量、增量编译原理与文件时间属性
linux·服务器·c++·makefile