sparc體系架構(gòu)的窗口寄存器的深入理解
1.概述
2.窗口寄存器的特性
3.程序的設(shè)計(jì)
4.sparc設(shè)計(jì)對(duì)于嵌入式編程的優(yōu)劣
1.概述
sparc這種架構(gòu)有著特殊的窗口寄存器,使用sparc芯片,一定會(huì)對(duì)這種窗口寄存器產(chǎn)生疑惑,然而這種硬件特性卻讓軟件設(shè)計(jì)有著更加獨(dú)特的方式。下面來描述一下sparc架構(gòu)中這種串口寄存器的特性以及編程模型。

采用窗口寄存器,可以減少函數(shù)調(diào)用過程中返回時(shí)間,因?yàn)橥ㄟ^硬件進(jìn)行壓棧操作時(shí),可以減少指令條數(shù)以及減少訪問存儲(chǔ)器的次數(shù)。
窗口寄存器的本質(zhì)是每當(dāng)執(zhí)行一次函數(shù)調(diào)用過程時(shí),寄存器窗口會(huì)自動(dòng)的指向下一個(gè)窗口,當(dāng)子程序返回時(shí),也不需要額外的出棧操作,只是將窗口偏移到上個(gè)寄存器即可。
而兩個(gè)相鄰的窗口則有重疊部分,可以對(duì)兩個(gè)父子函數(shù)之間進(jìn)行參數(shù)傳遞,這樣大大的提高了訪問的效率以及寄存器的專一性。
2.窗口寄存器的特性
當(dāng)在實(shí)際的程序中使用時(shí),往往會(huì)涉及到多個(gè)函數(shù)的嵌套,這些在復(fù)雜程序設(shè)計(jì)上非常的普遍,業(yè)務(wù)邏輯的增加會(huì)顯著的增加函數(shù)調(diào)用的深度。如果函數(shù)調(diào)用超過了這些8個(gè)窗口,sparc架構(gòu)又是該如何處理呢?
在sparc的架構(gòu)中,CWP(當(dāng)前窗口指針)是PSR(程序狀態(tài)寄存器)的一部分,在某一固定的時(shí)刻,處理器中都只會(huì)有32個(gè)整數(shù)寄存器可以被使用。這32個(gè)寄存器為8個(gè)全局寄存器、8個(gè)返回結(jié)果寄存器、8個(gè)局部寄存器、8個(gè)輸入寄存器。CWP通常會(huì)因SAVE指令(SAVE指令一般在過程調(diào)用時(shí)使用,用來開辟新的棧幀并切換寄存器窗口)而減一,因RESTORE指令(在從過程中返回前切換回調(diào)用者的寄存器窗口)而加一,陷阱事件(中斷,異?;騎RAP指令)和RETT指令(從陷阱中返回)也會(huì)改變CWP,不過函數(shù)調(diào)用比陷阱更為常見。

窗口無效掩碼(WIM) WIM指示了哪個(gè)窗口是無效的,無效的意思是該窗口保存了調(diào)用者的信息所以不可再使用,上圖中,WIM指向w7,而CWP指向w0,所以現(xiàn)在如果執(zhí)行一條SAVE指令,則會(huì)觸發(fā)窗口溢出陷阱,反之,如果CWP指向w0且又執(zhí)行了一條RESTORE指令,則會(huì)觸發(fā)窗口下溢陷阱。
所謂的窗口下溢則是說當(dāng)前窗口不夠用了,需要將已經(jīng)滿了的窗口寄存器的數(shù)據(jù)壓入到棧上,也就是內(nèi)存中,壓入后的窗口寄存器又可以重新利用起來了,而上個(gè)滿了的窗口寄存器則存在內(nèi)存中了。當(dāng)函數(shù)返回到窗口無效寄存器時(shí),則發(fā)生上溢陷阱,該陷阱中會(huì)執(zhí)行出棧的操作,從而將寄存器進(jìn)行恢復(fù)。
3.程序的設(shè)計(jì)
對(duì)于C語言來說,并不用關(guān)注架構(gòu)的不同帶來的差異性,而對(duì)于匯編來說,則設(shè)計(jì)卻是完全的不同。GCC已經(jīng)處理好了C轉(zhuǎn)換成匯編的邏輯。

每個(gè)save指令都是在被調(diào)用的函數(shù)的第一條指令處開始執(zhí)行。而SAVE的指令與ADD的指令相同,其功能是可以將sparcCWP減一。讓CWP-1窗口成為新的當(dāng)前的窗口。
當(dāng)函數(shù)執(zhí)行完成后,則執(zhí)行restore指令,讓窗口指令加一。窗口就回歸原位了。
4.sparc設(shè)計(jì)對(duì)于嵌入式編程的優(yōu)劣
對(duì)于嵌入式來說,如果只設(shè)計(jì)可控的程序,邏輯設(shè)計(jì)上盡可能的單一可控,并且最好函數(shù)的嵌套深度不應(yīng)該超過8個(gè),最好不發(fā)生上溢或者下溢操作。這樣不用訪問存儲(chǔ)器,并且底層的指令很少,對(duì)于程序的執(zhí)行效率很有保障。有上溢或者下溢,一次性就需要壓?;蛘叱鰲2僮?,使得其程序的執(zhí)行效率不在那么高效。
而對(duì)于rtos來說,設(shè)計(jì)上也稍微復(fù)雜了一些,需要不僅需要判斷當(dāng)前窗口的溢出情況,還需要保存窗口寄存器的棧,這樣對(duì)于系統(tǒng)上下文的線程棧需要的空間消耗是非常大的。目前也沒有想到合適方式去減少棧的消耗,而且在rtos上,sparc架構(gòu)所占的優(yōu)勢并不是很明顯,以上僅僅是我對(duì)這種架構(gòu)在嵌入式上使用的一些看法。
總結(jié)起來,sparc架構(gòu)的好處是由于有了窗口寄存器模型,如果程序設(shè)計(jì)的優(yōu)秀簡單,這個(gè)是非常好的,效率也可以非常高,簡潔的寄存器、簡潔的控制狀態(tài),需要編程人員要有很高的水平。缺點(diǎn)就是不考慮sparc架構(gòu)的編程方式,將會(huì)使得程序的效率非常的低下,sparc芯片的使用也變得十分的困難。
責(zé)任編輯:xj
原文標(biāo)題:sparc體系架構(gòu)的窗口寄存器的深入理解
文章出處:【微信公眾號(hào):嵌入式IoT】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
寄存器
+關(guān)注
關(guān)注
31文章
5588瀏覽量
128995 -
窗口
+關(guān)注
關(guān)注
0文章
66瀏覽量
11230 -
SPARC
+關(guān)注
關(guān)注
0文章
16瀏覽量
10140
原文標(biāo)題:sparc體系架構(gòu)的窗口寄存器的深入理解
文章出處:【微信號(hào):Embeded_IoT,微信公眾號(hào):嵌入式IoT】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評(píng)論請先 登錄
【NCS隨筆】nRF54L15使用UICR寄存器保存數(shù)據(jù)
嵌入式系統(tǒng)必懂的 20 個(gè)寄存器
NVMe高速傳輸之?dāng)[脫XDMA設(shè)計(jì)32:寄存器功能驗(yàn)證與分析2
?SN74HCT595 8位移位寄存器技術(shù)解析與應(yīng)用指南
TPIC6595 8位功率移位寄存器技術(shù)文檔摘要
?TPIC6B595 8位功率移位寄存器技術(shù)文檔總結(jié)
使用寄存器點(diǎn)亮LED燈
第四章 什么是寄存器
74HC594-Q100;74HCT594-Q100帶輸出寄存器的8位移位寄存器規(guī)格書
24l01寄存器列表指南免費(fèi)下載
STC15系列常用寄存器匯總免費(fèi)下載
XILINX FPGA CLB單元之移位寄存器
深入理解C語言:循環(huán)語句的應(yīng)用與優(yōu)化技巧
TPS659037寄存器映射技術(shù)參考手冊

sparc體系架構(gòu)的窗口寄存器的深入理解
評(píng)論