MIPS指令系統的原子交換功能

2021-06-26 10:10:23 字數 636 閱讀 1886

在多執行緒程式中,為了實現對共享變數的互斥訪問,一般都會用spinlock實現,而spinlock需要乙個testandset的原子操作。而這種原子操作是需要專門的硬體支援才能完成的,在mips中,是通過特殊的load,store操作ll(load linked,鏈結載入)以及sc(store conditional,條件儲存)完成的。

ll 指令的功能是從記憶體中讀取乙個字,以實現接下來的 rmw(read-modify-write) 操作;sc 指令的功能是向記憶體中寫入乙個字,以完成前面的 rmw 操作。ll/sc 指令的獨特之處在於,它們不是乙個簡單的記憶體讀取/寫入的函式,當使用 ll 指令從記憶體中讀取乙個字之後,比如 ll d, off(b),處理器會記住 ll 指令的這次操作(會在 cpu 的暫存器中設定乙個不可見的 bit 位),同時 ll 指令讀取的位址 off(b) 也會儲存在處理器的暫存器中。接下來的 sc 指令,比如 sc t, off(b),會檢查上次 ll 指令執行後的 rmw 操作是否是原子操作(即不存在其它對這個位址的操作),如果是原子操作,則 t 的值將會被更新至記憶體中,同時 t 的值也會變為1,表示操作成功;反之,如果 rmw 的操作不是原子操作(即存在其它對這個位址的訪問衝突),則 t 的值不會被更新至記憶體中,且 t 的值也會變為0,表示操作失敗。

sc 指令執行失敗的原因有兩種:

MIPS指令系統和MIPS系統結構

mips系統結構是由mips公司開發的risc結構,指令簡單統一,數量少,32個64位通用暫存器,其中r0的值一直為0.32個64位浮點暫存器。以及指令暫存器和幾個專用的暫存器,比如用來存放一些浮點數的積或商的中間結果。它的資料表示整型有位元組 8位 半字 16位 字 32位 雙字 64位 mips...

SSE的指令系統

sse的指令系統 sse2和sse的指令系統非常相似,僅僅多了少量額外的浮點運算,64位浮點 整數運算支援 sse比傳統浮點運算要快,因為它使用128位儲存單元。在windows使用 include 在linux下使用 include 1.變數定義和使用 m128 s1 s1.m128 f32 2 ...

8086 8088的指令系統 三 資料傳送指令

大多數指令既可以處理字資料,也可以處理位元組資料。算術運算和邏輯運算不侷限於暫存器,儲存器運算元也可以直接參加算術邏輯運算。指令系統分為如下六個功能組 1 資料傳送 2 算術運算 3 邏輯運算 4 串操作 5 程式控制 6 處理器控制 指令的一般格式分為四個部分 標號 指令助記符 運算元1 運算元2...