掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
隨著計(jì)算機(jī)科技的不斷發(fā)展,操作系統(tǒng)也日新月異。其中一個(gè)重要功能就是對(duì)于內(nèi)存的管理,把物理內(nèi)存抽象為虛擬內(nèi)存,以便程序可以使用。在Linux操作系統(tǒng)中,MIPS架構(gòu)頁(yè)表管理是非常重要的一部分。

從事南充服務(wù)器托管,服務(wù)器租用,云主機(jī),虛擬主機(jī),申請(qǐng)域名,CDN,網(wǎng)絡(luò)代維等服務(wù)。
什么是MIPS架構(gòu)頁(yè)表?
MIPS架構(gòu)頁(yè)表是一種將虛擬地址映射到物理地址的數(shù)據(jù)結(jié)構(gòu)。在操作系統(tǒng)中,每個(gè)進(jìn)程有自己的頁(yè)表,每個(gè)頁(yè)表中都包含了該進(jìn)程使用的虛擬地址空間到實(shí)際物理地址的映射。
為什么需要MIPS架構(gòu)頁(yè)表管理?
因?yàn)槎鄠€(gè)進(jìn)程共享物理內(nèi)存,所以需要一種機(jī)制來(lái)保證每個(gè)進(jìn)程都有自己的獨(dú)立內(nèi)存空間,不受其他進(jìn)程的影響。同時(shí),頁(yè)表還可以實(shí)現(xiàn)進(jìn)程間內(nèi)存的保護(hù)和共享,以及對(duì)物理內(nèi)存的高效利用。
MIPS架構(gòu)頁(yè)表管理的實(shí)現(xiàn)
MIPS架構(gòu)頁(yè)表是由多級(jí)頁(yè)表實(shí)現(xiàn)的。每個(gè)頁(yè)表中包含多個(gè)頁(yè)表項(xiàng),每個(gè)頁(yè)表項(xiàng)對(duì)應(yīng)一個(gè)地址段,其中包含虛擬地址和對(duì)應(yīng)的物理地址。當(dāng)進(jìn)程訪問(wèn)一個(gè)地址時(shí),CPU會(huì)根據(jù)虛擬地址在頁(yè)表中尋找對(duì)應(yīng)的物理地址,并進(jìn)行地址轉(zhuǎn)換,從而實(shí)現(xiàn)虛擬內(nèi)存到物理內(nèi)存的映射。
MIPS架構(gòu)頁(yè)表管理的優(yōu)化
為了提高頁(yè)表的訪問(wèn)效率,Linux中引入了頁(yè)表項(xiàng)高速緩存(TLB)。TLB中存放了最近訪問(wèn)的頁(yè)表項(xiàng),以便在下一次訪問(wèn)時(shí)可以直接獲取物理地址,而不必每次都迭代查找整個(gè)頁(yè)表。
此外,Linux中還使用了一些其他的技術(shù)來(lái)優(yōu)化頁(yè)表管理,如內(nèi)存壓縮,頁(yè)面替換算法等。這些技術(shù)可以減小頁(yè)面(Page)的大小,提高頁(yè)面的重復(fù)利用率,從而降低內(nèi)存的占用和延遲。
MIPS架構(gòu)頁(yè)表管理是Linux中非常重要的一部分,它可以幫助我們更高效地利用內(nèi)存空間,并保證進(jìn)程之間的獨(dú)立性和安全性。在實(shí)踐中,我們需要不斷優(yōu)化頁(yè)表管理技術(shù),以滿足不同的應(yīng)用場(chǎng)景需求。相信隨著科技的不斷發(fā)展,頁(yè)表管理技術(shù)會(huì)越來(lái)越成熟和完善。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來(lái)專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220不知道你要多雹旅詳細(xì),無(wú)論你什么平臺(tái),MIPS,X86,ARM 都是同一份源隱凳源碼,在編譯的時(shí)候選擇攜基對(duì)應(yīng)的平臺(tái)而已,內(nèi)核源碼是一樣的。
MIPS的演化
MIPS16是一個(gè)1997年面世的可選的指令集擴(kuò)展,它能減少二進(jìn)制程序尺寸的30-40%。實(shí)現(xiàn)者希望這種CPU能夠在很關(guān)心代碼尺寸的場(chǎng)合中更有吸引力–這種場(chǎng)合通常就是指低成本系統(tǒng)。由于只應(yīng)用于特定實(shí)現(xiàn),它是一個(gè)多廠商標(biāo)準(zhǔn):LSI, NEC和Philips都生產(chǎn)支持MIPS16的CPU。
使MIPS二進(jìn)制代碼比其他架構(gòu)的并不是MIPS指令集干的活少了, 而是他們的尺寸更大一些–每個(gè)指令4字節(jié)長(zhǎng),相比之下某些CISC架構(gòu)一般平均只有3個(gè)字節(jié)。
MIPS增加了一種模式,在這種模式下CPU可以對(duì)16位固定大小的指令進(jìn)行解碼。大多數(shù)MIPS16指令擴(kuò)展成正常的MIPS III指令,所以很明顯這將是一個(gè)相當(dāng)受限制的指令子集。竅門(mén)就在于使這個(gè)子集對(duì)足夠多的程序充分的進(jìn)行高效編碼,以使整個(gè)程序的大小得到大大的壓縮。
當(dāng)然,16位指令并不會(huì)使其變成一個(gè)16位指令集。MIPS16 CPU是實(shí)際存在的帶有32位或者64位寄存器的的CPU,MIPS16 CPU的運(yùn)算也都在這些寄存器上。
MIPS16遠(yuǎn)不是一個(gè)完整的指令集—例如它既沒(méi)有CPU控制指令,也沒(méi)有浮點(diǎn)運(yùn)算指令。但沒(méi)有關(guān)系,因?yàn)槊恳粋€(gè)MIPS16 CPU也必須要運(yùn)行完整的MIPS ISA。你能運(yùn)行MIPS16和正常的MIPS代碼的混合指令。每個(gè)函數(shù)調(diào)用或者跳轉(zhuǎn)-寄存器指令都能改變運(yùn)行模式。
1.并不是MIPS發(fā)明了提供一種可選的使部分指令只有一半大小的創(chuàng)意。Advanced RISC Machine(ARM)公司的Thumb版本的arm CPU首先提出這散啟個(gè)想法的。
在MIPS16中把指令地址編碼成更低有效位(Least Significant Bit, LSB)模式是既方便又高效的。MIPS16指令必須偶字節(jié)對(duì)齊,所以bit 0不再是指令指針(instruction pointer, 就是程序計(jì)數(shù)器PC)的組成部分了;取而代之的是,每條跳到奇數(shù)地址的指令開(kāi)始執(zhí)行MIPS16,每條跳到偶數(shù)地址的指令回到正常的MIPS。MIPS子程序調(diào)用指令jal的目標(biāo)地址總是字對(duì)齊的,所以新指令jalx隱藏了指令的模式間轉(zhuǎn)換。
為了把指令壓縮到一半大小,對(duì)于大多數(shù)指令我們只分配了3 bit來(lái)選擇寄存器,這樣只有8個(gè)通用寄存器允許自由訪問(wèn);在許多MIPS指令中可以見(jiàn)到的16 bit常數(shù)域也被壓縮,通常變成了5 bit。許多MIPS16指令只指明兩個(gè)寄存器,而不是三個(gè)。另外,還有一些特別的編碼規(guī)則將在蘆滾下一節(jié)描述。
D.1.1 MIPS16中的特殊編碼格式和指令
被縮減的通用指令沒(méi)有什么問(wèn)題,但有兩個(gè)特定的弱點(diǎn)會(huì)加大程序尺寸;5 bit的立即數(shù)域構(gòu)造常量是不夠的,在load/store操作中也沒(méi)有足夠的地址范圍。三種新的指令和一種特別規(guī)定有助于解決這些問(wèn)題。
extend是一條特殊的MIPS16指令,它由5 bit的代碼和11 bit的域構(gòu)成。這個(gè)11 bit的域可以和后續(xù)指令中的立即數(shù)域相連接,這樣就允許使用一個(gè)指令對(duì)來(lái)對(duì)16 bit立即數(shù)編碼。這條指令在匯編語(yǔ)言中看起來(lái)就像一個(gè)指令前綴。
裝載(load)常量在正常的MIPS模式下都需要額外的指令,在MIPS16模式下更是巨大的負(fù)擔(dān);把常量放在內(nèi)存中然后再讀它們會(huì)更快一些。MIPS16對(duì)相對(duì)于指令自身位置的裝載操作(PC-relative loads, PC相關(guān)裝載)增加了支持,允許常量被嵌到代碼段中(典型情況就是在函數(shù)陪掘余的起始處前面)。這些是僅有的不是嚴(yán)格對(duì)應(yīng)于正常的MIPS指令的MIPS16指令—MIPS沒(méi)有PC相關(guān)的數(shù)據(jù)操作。
許多MIPS load/store操作是直接在棧幀(stack frame)里,$29/mp可能是最普通的基寄存器。MIPS16定義了一組隱式使用mp的指令,允許我們把函數(shù)的棧幀引用地址也編進(jìn)去而不需要一個(gè)分離的寄存器域。
MIPS的Load指令總是生成32位的全地址。由于裝載字(load word)指令只有當(dāng)?shù)刂肥?的倍數(shù)是才合法,更低兩位就被浪費(fèi)了。MIPS16的Load指令是可以伸縮的:地址的偏移量會(huì)根據(jù)被load/store的對(duì)象的大小左移,這樣就增加了指令中可用的地址范圍。
作為一種額外的應(yīng)急機(jī)制,MIPS16定義了一些指令,允許在8個(gè)MIPS16可訪問(wèn)的的寄存器中的一個(gè)與32個(gè)MIPS通用寄存器中的任何一個(gè)間任意做數(shù)據(jù)移動(dòng)。
D.1.2 對(duì)MIPS16的評(píng)價(jià)
MIPS16對(duì)于匯編語(yǔ)言編程來(lái)說(shuō)不是一種合適的語(yǔ)言,我們也不準(zhǔn)備對(duì)它詳細(xì)說(shuō)明。這些是編譯器的工作。大多數(shù)使用MIPS16模式編譯的程序的尺寸都會(huì)縮小到用MIPS模式編譯的 60-70%。MIPS16比32位CISC架構(gòu)的代碼更緊湊,和arm的Thumb代碼差不多,和純16位CPU相比相當(dāng)有競(jìng)爭(zhēng)力。
但是沒(méi)有免費(fèi)的午餐;MIPS16程序可能比MIPS增加40-50%的指令。這意味著在CPU核上運(yùn)行一個(gè)程序會(huì)多用40-50%的時(shí)鐘周期。但是低端CPU經(jīng)常主要被存儲(chǔ)器所限制,而不是被CPU核所限制。較小的MIPS16程序需要較低的帶寬來(lái)取指令,這樣就得到更低的cache缺失率。在cache很小并且程序的存儲(chǔ)器有限時(shí),MIPS16將會(huì)彌補(bǔ)差距,還有可能要重新改寫(xiě)正常的MIPS代碼。
由于性能的降低,MIPS16代碼在有大的存儲(chǔ)器資源和很寬總線的計(jì)算機(jī)中沒(méi)有吸引力。這就是為什么它只是一種可選擴(kuò)展的原因。
在應(yīng)用范圍的另一端, MIPS16將會(huì)與軟件壓縮技術(shù)展開(kāi)競(jìng)爭(zhēng)。在放進(jìn)ROM存儲(chǔ)器之后,使用通常的文件壓縮算法壓縮的正常MIPS程序?qū)?huì)比未壓縮的同等MIPS16代碼小,而稍大于壓縮過(guò)的MIPS16同等代碼(注1);如果你的系統(tǒng)擁有足夠的內(nèi)存能夠把ROM當(dāng)做文件系統(tǒng)使用,而把代碼解壓縮到RAM中執(zhí)行,那么全I(xiàn)SA軟件解壓很可能會(huì)帶來(lái)更好的總體性能。
也有這樣一種趨勢(shì)來(lái)構(gòu)造系統(tǒng),那就是大量使用以字節(jié)編碼的解釋語(yǔ)言(Java或者它的后續(xù)者)來(lái)書(shū)寫(xiě)大量在時(shí)間上要求不嚴(yán)格的程序。那種中間代碼非常小,在尺寸方面比任何二進(jìn)制機(jī)器碼都高效的多。如果只有解釋器和一些對(duì)性能要求嚴(yán)格的程序留在機(jī)器中ISA中,那么更密集的指令集編碼格式將只會(huì)影響程序的一小部分。當(dāng)然解釋器(特別是Java)本身會(huì)非常大,但是應(yīng)用復(fù)雜度的無(wú)情增長(zhǎng)將很快使它減少重要性。
我預(yù)料在年將會(huì)看到MIPS16小范圍的應(yīng)用于低能量、小尺寸和成本受限制的系統(tǒng)中。它還是值得發(fā)明的,因?yàn)橛行┫到y(tǒng)—比如”智能”移動(dòng)—可能會(huì)大量生產(chǎn)。
1.更密集的編碼格式在使用上比壓縮算法有更低的冗余度。
D.2 MIPSV/MDMX
MIPS V和MDMX是在1997年早些時(shí)候一起公布的。它們本來(lái)是為一種新的準(zhǔn)備在1998年發(fā)布MIPS/SGI的CPU中的指令而設(shè)計(jì)的。但是那個(gè)CPU后來(lái)被取消了,關(guān)于它們的未來(lái)存在疑問(wèn)。
二者都是為了克服一些已知的傳統(tǒng)指令集的不足,這些不足是在ISA面向多媒體應(yīng)用中產(chǎn)生的。象軟調(diào)制解調(diào)器的語(yǔ)音編/解碼、或流媒體應(yīng)用、或圖像/視頻的壓縮/解壓縮這樣的任務(wù)采用一些過(guò)去只有專用數(shù)字信號(hào)處理器(digital signal processor, DSP)才用的數(shù)學(xué)算法。在這種計(jì)算等級(jí),多媒體任務(wù)通常都包括重復(fù)進(jìn)行一些對(duì)大向量或者數(shù)組數(shù)據(jù)的相同操作。
在基于寄存器的機(jī)器內(nèi)部,通常采用的方案是把多媒體數(shù)據(jù)項(xiàng)封裝到一個(gè)機(jī)器寄存器中,然后執(zhí)行一條寄存器-寄存器指令,這條指令對(duì)于每個(gè)寄存器中的每個(gè)域做同樣的工作。這是一種非常明顯的并行處理形式,被稱為單指令,多數(shù)據(jù)(single instruction, multiple data. SIMD)。
這個(gè)想法首先見(jiàn)于一款I(lǐng)ntel的業(yè)已消失的i860架構(gòu)的微處理器(circa 88)中。作為對(duì)Intel x86指令集進(jìn)行擴(kuò)展的MMX在1996年投放市場(chǎng)后,SIMD重新登場(chǎng)時(shí)更加引人注目。
MDMX對(duì)操縱在一個(gè)64位寄存器中8×8-bit的整數(shù)組提供了一組操作,這些操作能夠?qū)λ械?小片做同樣的事情。這些指令包括通常的算術(shù)操作(加,減,乘),也有乘法-累加指令能把結(jié)果放在一個(gè)巨大的累加器中,這個(gè)累加器有足夠的精度防止溢出。
由于這些指令被用于特定數(shù)據(jù)類型被相當(dāng)清楚的從正常的程序變量分離開(kāi)來(lái)的場(chǎng)合中,MDMX指令集與浮點(diǎn)寄存器一起工作就變得有意義。以這種方式重復(fù)利用現(xiàn)有的寄存器意味著現(xiàn)有的操作系統(tǒng)不需要改變(在任務(wù)切換時(shí)操作系統(tǒng)已經(jīng)保存和恢復(fù)浮點(diǎn)寄存器了)。
與MDMX相似,Intel的MMX為封裝進(jìn)一個(gè)64bit的8個(gè)8bit數(shù)提供了”octibyte”八路(eight-way)指令。MIPS MDMX也定義了4×16位(四個(gè)短整數(shù)操作)和2×32位(兩個(gè)字操作)格式,但是早期的情況是一些MDMX實(shí)現(xiàn)可能認(rèn)定octibyte格式和指令足夠了。
當(dāng)對(duì)8bit的數(shù)做算術(shù)運(yùn)算時(shí), 結(jié)果經(jīng)常下溢和上溢。如果我們必須為眾多的溢出測(cè)試條件編寫(xiě)處理程序,那么多媒體應(yīng)用的性能將不會(huì)得到提高。而只簡(jiǎn)單截去更大的和最小的數(shù)(對(duì)于無(wú)符號(hào)8-bit數(shù)來(lái)說(shuō),就是255和0)的上溢和下溢結(jié)果,對(duì)于機(jī)器運(yùn)算來(lái)說(shuō)會(huì)更加有幫助。這個(gè)處理過(guò)程叫做”飽和”(saturating)算法。MDMX擁有這種能力。
這就給我們帶來(lái)了MIPS V。盡管從名字上看好像意思是指一個(gè)升級(jí)的指令集–就像MIPS I到IV那樣,MIPS V在浮點(diǎn)領(lǐng)域跟MDMX很相似,提供了paired-single操作。paired-single對(duì)一對(duì)被封裝進(jìn)64-bit的浮點(diǎn)寄存器中的單精度數(shù)做兩次FP動(dòng)作。
MIPS V沒(méi)有MDMX那么古怪;MIPS IV包含了一個(gè)相當(dāng)廣泛的浮點(diǎn)運(yùn)算,并且直接為其中的絕大部分提供了paired-single版本的指令;甚至成對(duì)比較(paired-compare)也可以做到,這是因?yàn)镸IPS IV的CPU已經(jīng)有了多個(gè)浮點(diǎn)條件位來(lái)接收結(jié)果。但MIPS V沒(méi)有提供復(fù)雜多周期指令的成對(duì)操作版本的指令,這些多周期指令會(huì)需要非常多新的資源(例如沒(méi)有求平方根和除法)。
D.2.1 編譯器能用多媒體指令嗎?
引入SIMD多媒體指令的原因和70年代晚期以前在超級(jí)計(jì)算機(jī)中提供向量處理單元的原因相似。很容易為向量處理器構(gòu)造一個(gè)手工矩陣算術(shù)包。而用向量運(yùn)算來(lái)編譯一個(gè)用高級(jí)語(yǔ)言寫(xiě)成的程序就難得多了,盡管超級(jí)計(jì)算機(jī)提供商在這上面也取得一些成果。通常這些成果都集中在Fortran上;對(duì)于常規(guī)編程來(lái)說(shuō)語(yǔ)義上的弱點(diǎn)使Fortran成為一種可憐的語(yǔ)言,但是這讓它變成了一種很容易優(yōu)化的語(yǔ)言
MIPS和x86是兩種不同的處理器架構(gòu),屬于硬件范疇;
Linux 則是操作系統(tǒng)軟件,它支持包括 MIPS , x86, arm 等各種各樣的處理器架構(gòu)平臺(tái)。換句話說(shuō),它可以跑運(yùn)睜在依據(jù)不同處理器架構(gòu)規(guī)范實(shí)作出來(lái)的各種處理器上面。
Linux 大部分的代碼都是由C語(yǔ)言寫(xiě)成,因?yàn)镃語(yǔ)言是一種高級(jí)別的語(yǔ)言,用它寫(xiě)的程序可以被編譯成各種指令集中指令所野棗構(gòu)成的二進(jìn)制可執(zhí)行程序。C語(yǔ)言雖然高級(jí)別,但是有時(shí)候在沒(méi)辦法使用C語(yǔ)言的場(chǎng)合(比方為了訪問(wèn)處理器內(nèi)不同寄存器就需要使用匯編而非C語(yǔ)言),或者有時(shí)候?yàn)榱俗非笮实奶嵘?,我們必須得用匯編來(lái)寫(xiě)程序。Linux內(nèi)核為了支持不同的處理器架構(gòu),所以在其代碼中包括了少量的匯編代碼。所以我們可以認(rèn)為,就內(nèi)核源代碼級(jí)別來(lái)說(shuō),基于不同指令集的Linux內(nèi)核是沒(méi)有太多區(qū)別的。
這是內(nèi)核,對(duì)于不同應(yīng)用程序來(lái)說(shuō),我們也可以認(rèn)為是沒(méi)什么區(qū)別,因?yàn)閼?yīng)用程序基于C函數(shù)庫(kù)導(dǎo)出的不同函數(shù),以及Linux內(nèi)核所提供的系統(tǒng)調(diào)用,這些都是C語(yǔ)言接口,所以旁脊歲應(yīng)用程序都用高級(jí)語(yǔ)言寫(xiě)成,基本上不會(huì)使用匯編語(yǔ)言。
如果要真說(shuō)有什么區(qū)別,那就體現(xiàn)在編譯后出來(lái)的二進(jìn)制代碼上。我們認(rèn)為那是完全不同的。因?yàn)橥瓿赏粋€(gè)功能的二進(jìn)制代碼,里面包含的是來(lái)自不同指令集內(nèi)的不同指令。
就這么多了,您還需要多少詳細(xì)的解答?:)
(該解答來(lái)自JulianTec – 您在 arm 架構(gòu)下學(xué)習(xí)嵌入式Linux的上佳指導(dǎo)。)
關(guān)于linux 頁(yè)表 mips的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)【028-86922220】值得信賴的成都網(wǎng)站建設(shè)公司。多年持續(xù)為眾多企業(yè)提供成都網(wǎng)站建設(shè),成都品牌建站設(shè)計(jì),成都高端網(wǎng)站制作開(kāi)發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營(yíng)銷讓企業(yè)網(wǎng)站產(chǎn)生價(jià)值。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流