信號量操作指令
一、信號量用於進程間的同步和互斥。對信號量的操作通常是一個原子操作,即在一條指令中,完成信號量的讀取和修改操作,而不能被中斷。ARM中提供了兩條指令完成信號量的操作(ARM v6架構之前的):
-
SWP(交換指令)
SWP{<cond>} Rd, Rm, [Rn]
用於將一個內存單元(內存單元地址存放在寄存器Rn中)的內容讀取到一個寄存器Rd,同時將另一個寄存器Rm的內容寫入到該內存單元中。當Rd,Rm爲同一個寄存器是,交換該寄存器和內存單元的內容。
-
SWPB用於將一個內存單元(內存單元地址存放在寄存器Rn中)的內容讀取到一個寄存器Rd,寄存器Rd的高24位設置爲0,同時將另一個寄存器Rm的底8位數值寫入到該內存單元中。當Rd,Rm爲同一個寄存器是,交換該寄存器底8位和內存單元的內容。
二、ARM v6用ldrex和strex實現信號量操作,而不是SWP(交換指令)。
Loadand store exclusive //裝載和存儲專用指令
LDREX{<cond>} Rd, [Rn]
從Rn保存的地址中裝載數據到Rd,並設置內存監視器(monitor),從內存中讀取數據放入到寄存器中。
STREX{<cond>} Rd, Rm, [Rn]
Rd,保存存儲狀態的返回值,內存跟新成功,返回0;更新內存失敗,返回1.
Rm,是需要保存到內存的值
Rn,要操作的內存地址