ARM信號量操作指令

信號量操作指令

一、信號量用於進程間的同步和互斥。對信號量的操作通常是一個原子操作,即在一條指令中,完成信號量的讀取和修改操作,而不能被中斷。ARM中提供了兩條指令完成信號量的操作(ARM v6架構之前的):

  1. SWP(交換指令)

    SWP{<cond>} Rd, Rm, [Rn]

    用於將一個內存單元(內存單元地址存放在寄存器Rn中)的內容讀取到一個寄存器Rd,同時將另一個寄存器Rm的內容寫入到該內存單元中。當Rd,Rm爲同一個寄存器是,交換該寄存器和內存單元的內容。

  2. SWPB用於將一個內存單元(內存單元地址存放在寄存器Rn中)的內容讀取到一個寄存器Rd,寄存器Rd的高24位設置爲0,同時將另一個寄存器Rm的底8位數值寫入到該內存單元中。當Rd,Rm爲同一個寄存器是,交換該寄存器底8位和內存單元的內容

二、ARM v6ldrexstrex實現信號量操作,而不是SWP(交換指令)。

Loadand store exclusive //裝載和存儲專用指令

LDREX{<cond>} Rd, [Rn]

Rn保存的地址中裝載數據到Rd,並設置內存監視器(monitor,從內存中讀取數據放入到寄存器中。

STREX{<cond>} Rd, Rm, [Rn]

Rd,保存存儲狀態的返回值,內存跟新成功,返回0;更新內存失敗,返回1.

Rm,是需要保存到內存的值

Rn,要操作的內存地址


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章