Re: [問題] Lock的用法
※ 引述《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
討論串 (同標題文章)
ASM 近期熱門文章
PTT數位生活區 即時熱門文章