以 OHCI规范要求的端点描述符为例:端点描述符(ED)是一个16字节内存结构,必须16字节对齐,因此其内存地址的低4位必然为0。
技术分析
1. 对齐要求与地址的关系
- 16字节对齐意味着地址必须是16的倍数
- 用二进制表示:地址值需满足
地址 % 16 == 0
- 16 = 2⁴,因此地址的最低4位必须全为0(二进制:
xxxx...xxxx0000
)
2. 从字段结构验证16字节大小
根据图表中的ED结构,各字段大小累计为:
- FA(功能地址):1字节
- EN(端点编号)+ D(方向):1字节
- S(速度)+ K(跳过)+ F(格式):1字节
- 保留位:1字节
- MPS(最大包大小):2字节
- TailP(队尾指针):4字节
- HeadP(队首指针):4字节
- NextED(下一个ED指针):4字节
- H(暂停)+ C(数据翻转进位)等状态位:嵌入在指针字段中
总计:1+1+1+1+2+4+4+4 = 正好16字节
3. OHCI规范的设计意图
这种严格对齐要求有利于:
- 硬件优化:主机控制器(HC)可直接用地址低4位作为内部索引
- 性能提升:对齐访问减少内存总线周期
- 数据结构对齐:确保TD队列指针的高效遍历
因此,当HCD分配ED内存时,必须使用memalign(16, sizeof(ED))
或类似机制来保证地址低4位为0。