CPU的cache会cache 直接内存映射的外设寄存器值吗?
Hi,IA32,可寻址4G物理地址空间。这4G物理地址空间包括了物理内存和直接映射的外设地址。线性地址通过MMU转化成物理地址,物理地址离开CPU被发送到北桥,北桥再根据地址区分出是物理内存还是IO设备,从而进行后面的访问。
那么对于CPU的cache来说,它只负责cache数据,应该见不到北桥以及北桥后面的情况,也就是说应该见不到是内存数据还是直接映射的IO数据,对吧?
我的疑问是:如果是一个直接内存映射的IO register值,cpu cache会把这个值与内存值等同起来,做cache吗?
如果不做,那cache是怎么知道这个值是io值从而不做的呢?
如果做,那么我们(OS)访问直接映射的IO值时,肯定应该绕过cache直接去读IO值,那怎样绕过呢? IA32? 本帖最后由 epegasus 于 2010-10-02 16:55 编辑
IA32通过页目录项和页表项相关字段控制是否cache
有的mips构架硬性规定某个空间某段地址就是非cache的。这时虚拟地址到物理地址映射是固定的而不是通过页转换 见 < see mips run linux > Processor可以有方法控制哪一块cache,哪一块不cache,再或者也有Prosessor以地址分的,从不同地址访问同一物理存储,但一个是cache机制的,一个不是cache机制的。
当然,对于比如外设寄存器这种东西,软件上是要把cache干掉的,否则就有问题了。 Processor可以有方法控制哪一块cache,哪一块不cache,再或者也有Prosessor以地址分的,从不同地址访问同一物 ...
cjaizss 发表于 2010-10-06 13:41 http://linux.chinaunix.net/bbs/images/common/back.gif
学习了. cpu可以工作在uncached模式 回复 1# new_learner
这是driver的责任,driver当然知道ioremap过来的虚拟地址在经过页表来取数据时是每次都绕过cache还是先访问cache,这是page table的table entry的bit来控制的。 这时虚拟地址到物理地址映射是固定的而不是通过页转换 见 < see mips run linux >
epegasus 发表于 2010-10-02 16:30 http://linux.chinaunix.net/bbs/images/common/back.gif
你的意思是这些uncachel的512M虚拟地址空间,就不用经过MMU了?
多谢推荐此书,看了下前面部分,很适合偶这种菜鸟:) 当然,对于比如外设寄存器这种东西,软件上是要把cache干掉的,否则就有问题了
cjaizss 发表于 2010-10-06 13:41 http://linux.chinaunix.net/bbs/images/common/back.gif
那就是说,X86中IO register这种统一编址的memory,在OS访问register时,需要OS自己去负责cache的invalidate,cache硬件本身不会关心这种事? 回复new_learner
这是driver的责任,driver当然知道ioremap过来的虚拟地址在经过页表来取数据时 ...
snail_314 发表于 2010-10-08 17:41 http://linux.chinaunix.net/bbs/images/common/back.gif
多谢!
你的意思跟3楼的意思是一样的吧
页:
[1]
2