Re: [問題] Lock的用法

看板ASM (組合語言)作者 (ggg)時間15年前 (2010/01/01 23:38), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/5 (看更多)
※ 引述《ksmrt0123 (ksmrt)》之銘言: : 查了一下「LOCK」的說明,. LOCK並不是一個指令, 它只是指令的 : prefix, 必需配合某些特定指令使用. 以達到讓CPU跟BUS/Memory知道, : 該指令之執行必需符合「Atomicity」要求 (即atomic instruction). : Atomic instruction在shared memory multi-processor系統中是 : process synchronization (如 mutual exclusion)之基礎. ===== 假設原 post 問的 lock 是 X86 組語裡的 lock prefix. 以上 說明 完全正確. : 最基本的 : atomic instruction是shared memory read/write. 但read/write : 並不夠powerful, 用read/write來實作synchronization一方面可能 : performance不夠好, 一方面有些好的演算法特性用(如FIFO ordering) : 已經證明只用read/write是無法作出來的. memory read/write 指令當然不會是 atomic operation, process-A process-B read data-s read data-s modify to A modify to B write data-s write data-s 那 data-s 最終結果是那一個 ? : 為了克服上述問題, 有些更強的指令被提出, 最有名即是許多演算法會 : 用到的 compare-and-swap. 這個指令可由CMPXCHG 加上 LOCK實作出來. : 其它常見的類似指令還有 test-and-set, swap, fetch-and-store. : 在x86都有相關指令可配合LOCK作這些指令來. Intel 的 lock prefix 是配合 像swap 這個指令做的, 因為這個指令是由 --->代表 move data 1. memory --> temp 2. ACC --> memory 3. temp --> ACC swap 是從指定的記憶體位址內容 跟 ACC register 內容做交換. 對memory 做 read 及 write 兩個動作, 但必須同時做完, 不可被打斷插隊以致干擾 到 memory location 及 ACC 的內容. 所以, 用 lock 要求對 memory access 的 bus 鎖住, 不會被插隊進來. : 問題是要達到atomic的功能, 雖然CPU有此指令, BUS(or interconnect) : 及memory system等也都必需要能夠配合, 這方面在multi-processor : 系統並不容易實作, 實際上好像沒有任何x86 shared-memory multi- : processor system是有support LOCK prefix的. Intel 以前自家公司的電腦使用 multi-bus , 8086 有一支腳會送出這個 lock 訊號告訴 bus controller 不能釋放 bus 給其他 processor, 不能 打斷這個 swap 的三個子動作 : 現在的CPU都是多核心, LOCK prefix是否仍適用在現在的多核處理器 : 我就不清楚了... 多處理機時代, memory bus 做成 request , result-reply 分離, 更需要 鎖定 memory bus . 多核心問題依舊, 當然是在內部進共用的對外 memory bus 就要 lock 住. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.4.12
文章代碼(AID): #1BFXS8nv (ASM)
討論串 (同標題文章)
文章代碼(AID): #1BFXS8nv (ASM)