4.17[Q]

else:

subsystem = system

xbar = system.membus

这两段代码是在配置什么?subsystem是什么?xbar是什么?

对于MemConfig,如果存在opt_external_memory_system,即命中外部内存池的话,直接return,岂不是意味着host没有内部内存了?就是没有后面配置自己内存了?

if opt_external_memory_system:

subsystem.external_memory = m5.objects.ExternalSlave(

port_type=opt_external_memory_system,

port_data="init_mem0",

port=xbar.mem_side_ports,

addr_ranges=system.mem_ranges,

)

subsystem.workload.addr_check = False

return

M2HAlloc,msg_to,M2HOutAlloc,PollH2M,H和M代表什么?InPoll,等等,哪些提到的方法都是什么意思?怎么看懂这些命名?

Alloc是什么?

volatile union SimbricksProtoMemM2H *M2HAlloc(struct SimbricksMemIf *memif,

uint64_t cur_ts) {这个Volatile和union是什么意思?SimbricksProtoMemM2H *是什么类型?M2HAlloc是mem向主机alloc一个slot?这个slot是在mem还是在主机上?

SIMBRICKS_BASEIF_GENERIC(SimbricksMemIfH2M, SimbricksProtoMemH2M,

SimbricksMemIf);

SIMBRICKS_BASEIF_GENERIC(SimbricksMemIfM2H, SimbricksProtoMemM2H,

SimbricksMemIf);

告诉我上面这里生成函数的逻辑是什么?即如何定义怎么生成的?生成的函数是什么样的?

这是SimbricksBaseIf的数据结构,这个ring_buffer是怎么实现的?

volatile union SimbricksProtoBaseMsg *msg =

(volatile union SimbricksProtoBaseMsg *)(void *)((uint8_t *)

base_if->out_queue +

base_if->out_pos *

base_if->out_elen);什么意思?在=右侧,先是(void *),然后又是(volatile union SimbricksProtoBaseMsg *)?如何确定这个队列中存放的元素、数据?即base_if当中存的不都是队列共有的起始地址和当前指针位置等信息吗?又是如何知道队列当中存的是什么类型的数据,从而知道in_elen的值的?以及在队列当中,是否一个元素就代表了一个slot?

再次详解base/proto.h,BaseMsg1.内部包含三个Header,采用union字段,是否意味着BaseMsg只能是header,sync,terminate中的一种?header和terminate都是什么意义?我知道sync是同步信号,以及最后的__attribute__((packed));是什么意思?以及每个Struct后面都有的SIMBRICKS_PROTO_MSG_SZCHECK是什么东西?

lowp

typedef struct { uint64_t req_id; uint64_t addr; } ReadReq; typedef struct { uint64_t req_id; uint8_t data64; } ReadComp; typedef struct { uint64_t req_id; } WriteComp;这个readReq是什么意思?读请求?Comp又是啥意思?

// 用 union 把它们包起来 typedef union SimbricksProtoMemM2H { ReadReq read; ReadComp readcomp; WriteComp writecomp; // ... 其他消息 ... } SimbricksProtoMemM2H;这里用union把他们包起来又有啥用?

"union:所有成员共用一个起始地址,总大小等于最大的那个成员的大小"什么意思?举例说明?如果成员共用一个起始地址,那他们之间不会互相覆盖吗?还是说比如ABC都有一样的成员ab,那a和b是在一起的?但是对于不同的cde呢?在后面不会互相覆盖吗?而且ab只是类型相同,值也不一定相同把

对于使用union的数据X,其中包含ABCDE,意思是X可能是ABCDE中的其中一种是吧,即ABCDE之间是互斥的,本质上可以认为ABCDE继承自X?

这个共享内存队列,和共享内存池,即内存池是一个东西吗?

什么是所有权?详解base/proto.h?

可以发现SimbricksProtoBaseMsgHeader为64字节,为什么要保证MsgHeader为64字节,甚至用pad_7填充了7个字节?

什么叫所有权是消费者?如果最高位为1,意味着消费者所有权,在host与外部内存mem之间,谁是消费者?这个消息被消费是什么意义?

相关推荐
企鹅的蚂蚁23 分钟前
LubanCat RK3588 实时 Linux 开发(六):启用 gs_usb 驱动并完成 USB-CAN 收发
linux·rk3588·linux驱动·socketcan·gs_usb·usb-can
2601_9622998835 分钟前
Linux执行Python脚本方法
linux·python·脚本·解释器·shebang
snow@li42 分钟前
服务器运维:Linux命令速查手册(全景梳理)
linux·服务器·网络
handler0143 分钟前
【Linux】线程与虚拟内存的底层世界
linux·运维·服务器·c++·线程·虚拟地址空间·共享内存
布莱克6051 小时前
TCP 三次握手与四次挥手详解
服务器·网络·tcp/ip·计算机网络·网络编程
Flynt1 小时前
把公司项目迁到 Spring Boot 4.0:编译通过只是开始
java·spring boot·后端
新时代牛马1 小时前
实时 Linux:PREEMPT_RT、延迟来源与观测
linux·运维·服务器
Tangyuewei1 小时前
给老 Spring 项目装个 AI Agent
java·人工智能·spring
微露清风1 小时前
# Linux 进程全景:从 PCB 到 O(1) 调度队列
linux·服务器
H_oRIZoN_1 小时前
Linux入门DAY38(手写 HTTP 客户端抓取天气 + 简易 HTTP 服务器实现元器件 Web 系统)
linux·linux应用编程