看板 ASM 關於我們 聯絡資訊
WolfLord:嗯,他問的是x86當機指令"LOCK"其實跟他想的不一樣 01/01 00:22
WolfLord:我跟他講:用jmp $ 會有差不多的軟體效果 XD 01/01 00:27
WolfLord:不過他想要會醒的lock,那就複雜了 xddd 01/01 00:28
查了一下「LOCK」的說明,. LOCK並不是一個指令, 它只是指令的 prefix, 必需配合某些特定指令使用. 以達到讓CPU跟BUS/Memory知道, 該指令之執行必需符合「Atomicity」要求 (即atomic instruction). Atomic instruction在shared memory multi-processor系統中是 process synchronization (如 mutual exclusion)之基礎. 最基本的 atomic instruction是shared memory read/write. 但read/write 並不夠powerful, 用read/write來實作synchronization一方面可能 performance不夠好, 一方面有些好的演算法特性用(如FIFO ordering) 已經證明只用read/write是無法作出來的. ^^^^^^^^^^^^^^^^^^^^^^^^^ 這邊講錯了 只用atomic read/write 是可以作出FIFO ordering的mutual exclusion algorithm: http://www.viswiki.com/en/Lamport's_bakery_algorithm 為了克服上述問題, 有些更強的指令被提出, 最有名即是許多演算法會 用到的 compare-and-swap. 這個指令可由CMPXCHG 加上 LOCK實作出來. 其它常見的類似指令還有 test-and-set, swap, fetch-and-store. 在x86都有相關指令可配合LOCK作這些指令來. 問題是要達到atomic的功能, 雖然CPU有此指令, BUS(or interconnect) 及memory system等也都必需要能夠配合, 這方面在multi-processor 系統並不容易實作, 實際上好像沒有任何x86 shared-memory multi- processor system是有support LOCK prefix的. 現在的CPU都是多核心, LOCK prefix是否仍適用在現在的多核處理器 我就不清楚了... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.68.71.218 ※ 編輯: ksmrt0123 來自: 219.68.71.218 (01/02 09:54)