fdisk是否为分区分配独立地址空间?pmem盘与分区同偏移读写值不同原因
问题原因说明
你观察到的现象是块设备分区的正常寻址逻辑导致的,操作没有错误,fdisk创建的分区确实拥有独立的从0x00起始的地址空间,核心逻辑如下:
整块持久内存设备的寻址规则
/dev/pmem1是对应整块物理pmem设备的设备节点,你对该节点调用mmap、read、write时传入的偏移量,是相对于整块设备物理起始地址的直接偏移。你向/dev/pmem1的0x00地址写入10,就是直接写入整块pmem设备的第一个存储单元。分区设备的偏移自动映射规则
/dev/pmem1p2是建立在pmem1上的逻辑分区,内核在处理该设备节点的IO请求时,会自动给用户传入的偏移量叠加「该分区在整块pmem1设备上的物理起始偏移」。举个例子:如果fdisk分配给pmem1p2的起始位置是整块pmem1的1.5G偏移处,那么你对pmem1p2的0x00地址写入20,实际写入的是整块pmem1的1.5G偏移位置,和pmem1的0x00地址完全是两个不同的物理存储单元,读写结果自然不同。
额外注意事项
你贴出的示例代码里打开的是/dev/pmem0,如果实际运行时没有对应修改为/dev/pmem1或/dev/pmem1p2的话会操作到错误的设备。另外操作/dev下的设备节点不需要加O_CREAT、O_TRUNC标记,这两个标记仅对普通文件生效,对设备节点没有意义还可能引发意外错误。
内容的提问来源于stack exchange,提问作者Dimpu10
相关产品推荐
相关产品推荐

