指令中的lock前缀的问题

SONYps3 2007-12-07 11:56:48
1,对于单处理器系统而言,lock锁住了单条指令的访问,那这有意义吗?单条指令肯定是原子的? 是因为外围设备可以通过DMA方式访问总线,从而在单条指令执行期间修改内存?

2,对于多处理器而言,intel用户手册上说,lock并不会在总线上发出lock信号,而只是依靠高速缓存一致性机制来保证原子性,这就更不懂了:

比如,处理器A的缓存cacheA和处理器B的缓存cacheB,两个缓存对同一个内存区域C进行了缓存,A对A的缓存C作读-修改-写操作, 当A执行完读操作并且修改时,B对C的缓存做写操作,那麽当A回写时缓存不就失效了? 怎麽能保证原子性呢?

还有,若外围设备通过DMA方式访问同一块内存区域呢?

关于cache的lock而言,intel手册上有如下论述:
If a memory access is cacheable and affects only a single cache line, a cache lock is invoked and the system bus and the actual memory location in system memory are not locked during the operation. Here, other Pentium 4, Intel Xeon, or P6 family processors on the bus write-back any modified data and invalidate their caches as necessary to maintain system memory coherency.
不懂啊,其余的处理器将"回写"数据并且使缓存失效, 这里的"回写"指什麽? 将数据从高速缓存写进内存?那麽加锁的处理器的缓存不就失效了?

对于加了lock的高速缓存而言与没加的有什麽区别? 根据手册上的好像没任何区别?
...全文
462 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alecksun 2007-12-11
  • 打赏
  • 举报
回复
1. 外部设备一样可以拥有总线。
2. intel的CPU用Snoop协议来保证cache一致性。snoop可以保证各个cpu的cache的一致性,同时也保证了内存的一致性。至于外部设备DMA访存,应该是系统程序员要考虑的事,比如启动DMA前强行写回,DMA结束后重新读内存。

SONYps3 2007-12-10
  • 打赏
  • 举报
回复
没人会吗?帮帮忙啊!
alan001 2007-12-09
  • 打赏
  • 举报
回复
不會,

關注......
MissYouChenMin 2007-12-09
  • 打赏
  • 举报
回复
关注问题的进展!学习

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧