作者killerjoe (寂寞邊界)
看板Grad-ProbAsk
標題Re: [理工] [計組]-同步化指令
時間Fri Dec 4 23:50:02 2009
※ 引述《polomoss (小澤)》之銘言:
: try : add $t0,$zero,$s4
: ll $t1,0($s1)
ll除了讀入($s1)外,另外還會在cpu內部的暫存器中設置一個bit用來監視($s1)
是否有被更改,另外還會有一個暫存器存放($s1)的位址
//這邊是讓你執行atomic operation
cpu會不斷的檢查($s1)是否有被改變
若被改變就會被設為0
: sc $t0,0($s1)
//若成功則把$t0的值存入($s1)中,並返回一個值1(cpu內的檢查bit)
//若失敗則返回一個值0(cpu內的檢查bit)
: beq $t0,$zero,try
若返回的值為0,即代表ll與sc間的不是atomic則會回到try重新執行
1,即代表ll與sc間的是atomic,則繼續往下直行
: add $s4,$zero,$t1
: 可以請問這段程式碼每個暫存器各扮演什麼角色嗎~?
: 我知道他功能類似OS裡面的SWAP,有key
: 但是就是看不懂上面那段程式碼~
: 哪個是key,哪一段是swap,
: 以及他要同步化的資料是誰,
: 和ll和sc在這邊的用意
: 總之就是都看不懂....希望有人幫忙解釋一下
: 謝謝
如有錯誤請指教~謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.42.204.2
※ 編輯: killerjoe 來自: 114.42.204.2 (12/04 23:50)
※ 編輯: killerjoe 來自: 114.42.204.2 (12/04 23:51)
推 polomoss:這樣大概懂了~~我就覺得ll跟sc中間要擺要同步化的指令 12/05 17:32
→ polomoss:謝謝解釋~~ 12/05 17:32