系統(tǒng)編程unix技術(shù)第15章進(jìn)一步內(nèi)存管理主題_第1頁
系統(tǒng)編程unix技術(shù)第15章進(jìn)一步內(nèi)存管理主題_第2頁
系統(tǒng)編程unix技術(shù)第15章進(jìn)一步內(nèi)存管理主題_第3頁
系統(tǒng)編程unix技術(shù)第15章進(jìn)一步內(nèi)存管理主題_第4頁
系統(tǒng)編程unix技術(shù)第15章進(jìn)一步內(nèi)存管理主題_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

《UNIX高級系統(tǒng)技術(shù)OCRby15進(jìn)一步關(guān)于內(nèi)存管理的簡的對象和函數(shù)在Mach中都可以找到幾乎完全相同的等價物。在下面的小節(jié)中,討論pmapMMU最后,Mach(IPC)子系統(tǒng)集成在一起。這有兩個優(yōu)點,虛存設(shè)出了一個例子,一個用戶級程序如何為不同機(jī)器上的進(jìn)程提供共享內(nèi)存。反過來,IPC統(tǒng)可以利用VM子系統(tǒng)支持的copy-on-write共享實現(xiàn)大消息的快速傳遞。的端口和消息在6.4節(jié)中有述。內(nèi)存對象是虛存頁面的后備,本章論述這個概念?!m_allocatevm_map0直到首次它們時,Mach才分配物理頁面。調(diào)用vm_deallocate釋放虛存頁。前和最大保護(hù)權(quán)限。最大保護(hù)權(quán)限被設(shè)置后,只能降低該值。當(dāng)前保護(hù)權(quán)限過最大保護(hù)權(quán)限,調(diào)用vm_protect更改兩種類型的保護(hù)權(quán)限?!ask_create處理頁面。該屬性可取如下3個值之一(圖15-1): VM_INHERIT_SHARE父、子任務(wù)共享該頁面。兩個任務(wù)頁面的同一個副本,任何修VM_INHERIT_COPY子任務(wù)需要自己的頁面副本。Machcopy-on-write不同,在SVR4中繼承的方式與頁面當(dāng)前映射方式(共享或私有)一致。于調(diào)試器和性能分析工具。調(diào)用vm_regions返回地址空間中所有內(nèi)存區(qū)的信息,調(diào)用vm_statistics返回有關(guān)虛存子系統(tǒng)的統(tǒng)計數(shù)據(jù)。15-2通過vm對象提供的接門內(nèi)存對象的頁面。內(nèi)存對象[Youn87]是一組字節(jié)的抽象表內(nèi)存服務(wù)器(15.5.1節(jié))等都是內(nèi)存對象。口有一個,即發(fā)送權(quán),并通過它與內(nèi)存對象通信,15.4.3節(jié)中將詳細(xì)介紹。vm對象自己的地址空間,它們共享vm對象,詳見15.3節(jié)。vm對象為實現(xiàn)共享 SVR4之間的相似程度是驚人的。vm_map對應(yīng)structasvm_map_entry對應(yīng)15-3描述Mach存區(qū)為兩個①映射到同一內(nèi)存對象的內(nèi)存區(qū)。與此相似,其他操作則可能將相鄰的內(nèi)存還有兩個重要數(shù)據(jù)結(jié)構(gòu)——駐留頁面表和pmap。駐留頁面表是一個數(shù)組(struct頁面所在的內(nèi)存對象及其起始偏移。該表中的頁面都在如下3個列表中:分頁MMU,如下是pmap層支持的一些函數(shù):和·pmap_activate()pmap_deactivate()在上下文切換期間調(diào)用,更換處理器的活動頁面。子任務(wù)須有自己單獨的內(nèi)存區(qū)副本,但內(nèi)核并不立即它們,并利用這一操作來優(yōu)核生成頁面的一個副本,并且修改地址映射圖,每個任務(wù)都自己的那個副本。這樣,只有那些父任務(wù)或子任務(wù)修改的頁面才需要,內(nèi)核節(jié)省了大量的工作。時在vm_map_entry中設(shè)置一個標(biāo)志,說明是copy-on-write共享。最后,調(diào)用pmap_copy_on_write()對父任務(wù)進(jìn)程的內(nèi)存區(qū)進(jìn)行寫保護(hù),以后就可以捕獲父進(jìn)程或子圖15-4copy-on-write繼承處理函數(shù)分配一個新的物理頁面,并通過原頁面的內(nèi)容初始化它。然后,處理函數(shù)建立新映射,每個任務(wù)都自己的頁面副本。與此同時,它們還共享那些尚未更改的頁面。圖15-5使用對象管理被修改的頁為了處理頁面失效,內(nèi)核自頂向下搜索鏈。任務(wù)A在對象中找到頁面1,而在隨著任務(wù)不斷創(chuàng)建子任務(wù),它生成長長的對象鏈。這不僅浪費了資源,而且由于內(nèi)情況,并在可能時消解鏈。如果鏈中某對象的所有對象均在其上的對象中出現(xiàn),該對象共享這些頁面,這與父子任務(wù)間的copy-on-write共享相似。到接收者之后,內(nèi)核刪除那個臨時映射。這就防止了在接收任務(wù)消息之前發(fā)送任務(wù)可能對消息進(jìn)行的修改。這還防止了一些其他異常,比如發(fā)送任務(wù)終止等。task_create在標(biāo)記為VM_INHERIT_SHARED的內(nèi)存區(qū)時使用讀寫共享。此時只有內(nèi)圖15-7-共享內(nèi)存pager圖15-8是初始化后的情景。15-8pager一組過程式的高級函數(shù)接口。某些調(diào)用是內(nèi)核用來同pager通信的:control_port,offset,length,should_clean,should_flush,lock_velue,口函數(shù)發(fā)送一個消息應(yīng)答。下面將給出一些內(nèi)核與pager間的交互過程?!m有一個可提供所需數(shù)據(jù)的內(nèi)存對象的。然后內(nèi)核調(diào)用memory_object_data_request(),指定所需的頁面范圍以及類型。pager調(diào)用memory_object_data_provided()將數(shù)據(jù)在中,也可以從某種基于網(wǎng)絡(luò)的設(shè)備中。pager。pagervm_deallocate·保護(hù)內(nèi)核調(diào)用memory_object_data_unlock()請求提高頁面的權(quán)限(比如對當(dāng)前·pagershould_flushmemory_object_lock_request()調(diào)用請求內(nèi)核清除其數(shù)據(jù)副本,回寫所有的修改。如果pager使用帶有should_clear標(biāo)志的pagerMachpager有著非常顯著的優(yōu)點。用戶任務(wù)可以實現(xiàn)各種pager,提供對不同種類的二級設(shè)備的支過vm對象pager。使用消息傳遞帶來了位置透明性及可擴(kuò)充性等優(yōu)點。pager它可運行于網(wǎng)絡(luò)上的任何一個節(jié)點,而在本地機(jī)上,只需用一個端口表示相應(yīng)的內(nèi)初沒有內(nèi)存。當(dāng)這些頁面被首次時,內(nèi)核調(diào)用memory_object_data_request(),然后網(wǎng)絡(luò)共享內(nèi)存服務(wù)器經(jīng)常用來展示外部pager接口的多才多藝。服務(wù)器是一個用戶任在每臺機(jī)器上都有一個副本,完成它們的同步非常。圖15-9器向內(nèi)核的控制端口的發(fā)送權(quán)。15-10T115-10任務(wù)T1內(nèi)核調(diào)用服務(wù)器調(diào)用頁面時將會怎樣(圖5-11):15-11T2服務(wù)器知道節(jié)點A上有一個可寫的頁面副本。它隨即通過內(nèi)核A的控制端口調(diào)用核B。部分是跨網(wǎng)絡(luò)同步數(shù)據(jù)問題所固有的。注意,每次寫失效將造成兩次跨網(wǎng)絡(luò)頁面——第器以某種方式通知一個客戶直接發(fā)送頁面給另一個客戶,這樣就可以減少到一次操作服務(wù)器與其中的一個客戶運行于同一機(jī)器,就會減少一次操作,而且還會減少網(wǎng)絡(luò)上的構(gòu)造強(qiáng)大的,功能豐富的應(yīng)用程序。另一個例子[Subr91]是一個管理可丟棄頁面的外部MachSVR44.3BSD15-12數(shù)據(jù)對其進(jìn)行初始化(全部置0或從內(nèi)存對象中數(shù)據(jù))。然后將頁面加到活動鏈表的末3.pagedaemon還檢查失活鏈表頭部的若干頁面。那些被設(shè)置了位的頁面被重新放回如果pagedaemon發(fā)現(xiàn)某個頁面的位仍為0,說明頁面在失活鏈表期間未被此外,還有幾個參數(shù)影響每次pagedaemon被喚醒時它的工作量,它們列在表15-1中。15-1Machpagedaemon 當(dāng)空閑鏈表的頁面數(shù)低于這個值時,系統(tǒng)喚25+physmem/100醒pa 在主閑鏈表達(dá)到這個值之前,系統(tǒng)將失活 _為pagedaemon保留的空閑頁面 vm_page_inactive_target在失活鏈表達(dá)到這個值之前,系統(tǒng)將活動 仿,清除被掃描頁而的位。步驟3、4完成后表針的功能,檢查失活隊列頭部的頁面。分移植到新硬件結(jié)構(gòu)時,只需重寫pmap層。靈活的環(huán)境,可以有多個用戶級(外部)pager能為某種特定的MMU結(jié)構(gòu)進(jìn)行必要的優(yōu)化。pager,MachVMVMMach。文件系統(tǒng)尚未流行,大多數(shù)都使用本地磁盤作為文件系統(tǒng)和交換區(qū)。4.3BSD虛存模型通過額外的或I/O負(fù)擔(dān)優(yōu)化對內(nèi)存的使用而工作站只需很少的本地磁盤或者根本沒有磁盤。4.3BSD的環(huán)境,于是4.4BSD使用了一個新模型替代它[McKu95]。14.2節(jié)):paddr=⑤表示該文件。和SVR4一樣,addr是用戶建議的映射地址,protPROT_READ,PROT_WRITE和PROT_EXECUTE的組合)。標(biāo)志MAP_SHARED,MAP_PRIVATE情況下,文件是這片內(nèi)存區(qū)的初始內(nèi)容和后備。另式是,進(jìn)程映射一片內(nèi)存程使用信號量同步其對共享內(nèi)存的(見6.3節(jié))。處理信號量需要系統(tǒng)調(diào)用,而系統(tǒng)調(diào)用帶來了額外的高代價,抵銷了共享內(nèi)存獲得的性能受益。4.4BSD源。僅在資源被鎖住時,進(jìn)程才需要調(diào)用系統(tǒng)調(diào)用等待資源。然后內(nèi)核再次檢查信號量,value=量上。返回時,如果進(jìn)程獲取了信號量,value為0。釋放信號量,調(diào)用:阻塞和去阻塞,4.4BSD有如下調(diào)用:如果處理器在每次地址轉(zhuǎn)換都要內(nèi)存中的頁表,系統(tǒng)就會產(chǎn)生大量的內(nèi)存。因的機(jī)器決定。13.3節(jié)中給出了MIPSR3000,IBMRS6000以及In80386體系結(jié)構(gòu)中TLB中的頁表,或者是IBMRS6000這類系統(tǒng)中的反向頁面)的具置和格式。MMU硬件定位頁表項,在完成地址轉(zhuǎn)換前加載TLB表項。內(nèi)核既不參與也無法這些操作。MIPSR3000[Kane88],采用軟件加載。在這種系統(tǒng)中,MMUMMU做。VAX-11上的TBIS(TranslationBufferInvalidationSingle)指令就是這種指令?!LB基址寄存器(PDBR)被寫入時,系統(tǒng)都清除整行。VAX-11TBIA(TranslationBufferInvalidationAll)指令也有同樣的效果。許軟件加載TLB表項。為了模擬位,或為了實現(xiàn)copy-on-write,也可能改變頁面的保護(hù)權(quán)限·換出當(dāng)從物理內(nèi)存中刪除頁面時,內(nèi)核必須清除所有映射到該頁面的頁表項和·TLBTLB,每一記,上下文切換時無需清除TLB表項?,F(xiàn)在相同的虛地址將新映像頁面。如,TLB表項在上下文切換或其他被請除)。在共享內(nèi)存多理機(jī)系統(tǒng)中,TLB的一致性是一個更加復(fù)雜的問題,盡管所有處理機(jī)TLB。當(dāng)一個處理器更改一個頁表項,而另一個處理器仍的同步,大部分系統(tǒng)甚至不允許一個處理機(jī)清除另一個處理機(jī)的TLB表項。之外,系統(tǒng)還需要更改其他處理機(jī)的TLB。由于缺少硬件支持,內(nèi)核必須利用基于跨處理機(jī)中斷機(jī)制,從軟件上解決這個問之后其要清除幾個TLB。應(yīng)答者是持有相應(yīng)映射TLB的處理機(jī)。啟動者向應(yīng)答者發(fā)送一個中斷,應(yīng)答者接收中斷后清除相應(yīng)的TLB。改了PTE,應(yīng)答者可能為了更新位和修改位而將過時的TLB表項回寫頁表。PTEMachTLBMachTLBshootdown)算法[Blac89]涉及啟動者與應(yīng)答者之間一系列復(fù)雜的交當(dāng)一個處理機(jī)修改了地址轉(zhuǎn)換并需清除其他處理機(jī)上的TLB表項時,內(nèi)核調(diào)用擊落算15-13MachTLB可能在其加鎖成功之后,因接受到處理機(jī)間中斷(另一個活動pmap)而造成死鎖。門對pmap。P1發(fā)送的請求。件的特殊功能。但它消耗很大,而且可擴(kuò)展性不好。所有的應(yīng)答者都要在啟動者修改pmapParallelProcessorPrototype(RP3)[Pins85]RP3多個硬件頁面。其他一些研究[l88]還建議對MMU體系結(jié)構(gòu)進(jìn)行修改,輔助完成TLB量級進(jìn)程。本節(jié),我們介紹這兩個版本的TLB一致性算法。理機(jī)間中斷),也不依賴那些擊落的天然特性。SVR4/MP的方法則是分析造成擊落的事件,找出解決它們的最好的方法。有四種需要進(jìn)行TLB同步的類型:SVR4/MP中,硬件在每次上下文切換時自動刷新TLB[Peac92]。此,如果操作系統(tǒng)不作中更新所有TLB表項。它用全局TLB刷新的代價抵償一系列頁面清除操作的代價。readwrit通過過時的TLB映射這些地址。理機(jī)在該地址清除后都有一個已刷新的TLB,沒有該頁面的過時TLB。清除后,內(nèi)核在其重分配該地址前是不會這個地址的。為了盡量減少刷新,seg_map釋同時更新一個TLB表項的機(jī)會減少了。SVR42/M體系的,但TLB一致性算法和接口都設(shè)計得易于移植。必須對無效用戶TLB表項采用立即擊落策略。對于有很多處理機(jī)的系統(tǒng),SVR4/MP都處于空閑狀態(tài),SVR4.2/MP在每個hat結(jié)構(gòu)中了一個處理機(jī)鏈表。由于內(nèi)核可能運行hat的鏈表上有所有運行該進(jìn)程的處理機(jī)(運行進(jìn)程的一個lwp)。通過如下接口這個鏈參數(shù)flags支持一個標(biāo)志,指示在卸載映射之后是否必須更新本地TLB⑥。(在參考移植中是時間戳),而且必須滿足新的值總大于以前的這個條件。例一個較早的,它的TLB可能過時了,需要更新。落過程,盲到頁面再次由內(nèi)核使用時才進(jìn)行擊落。例如seg_map驅(qū)動程序在頁面的計數(shù)變?yōu)?時清除頁面,此時,不再有該頁面的進(jìn)程了。因此,將這些過時的無效的頁面地址轉(zhuǎn)換信息保留在TLB中是相對安全的。內(nèi)核將頁面返回給空閑鏈表,然后調(diào)用hat_getshoot()為頁面設(shè)置一個新的⑦。當(dāng)內(nèi)核準(zhǔn)備復(fù)用這個頁面時,它將頁面上的傳遞給hat_shootdown(),hat_shootdown()將其與所有其他CPU的進(jìn)行比較。所有持有較早的的CPU都有一個該頁面的過時TLB,需要對其進(jìn)行擊落。應(yīng)答者在收到中斷后,不必等待任何同步。它們簡單地刷新自己的TLB,恢復(fù)正常處理。由于啟動者在擊落之前修改了地址轉(zhuǎn)換信息,這之后由應(yīng)答開發(fā)出的頁面將加載某個處理函數(shù)了另一個擊落,系統(tǒng)就會死鎖。Mach內(nèi)核可以保證不無效頁面,而在Mach里沒有做這樣的假設(shè)無法控制用戶的內(nèi)存模式,也就不能保證用戶不會無效頁面。由于應(yīng)答者必須等到啟動者修改了PTE之后方可從中斷中返回,算法也就更復(fù)雜一些。作為由啟動者和應(yīng)答者之間共享的信號量。圖15-14給出了操作的順序。15-14SVR4.2/MPTLB的鏈表)。當(dāng)應(yīng)答者收到中斷后,它進(jìn)入循環(huán),等待同步計數(shù)被加1。1。應(yīng)答者退TLB,TLBhat這樣,應(yīng)答者就不必等待啟動者更改所有的PTE,而直接完成自己那部分的擊落,然后但它是過于依賴In體系,只適用于某些情況。替換策略。它掃描全局頁面池的許多頁面,清除位(收集信息)或修改位(在清除頁面工作集計齡方法的算法。在完成計齡時換下所有要計齡的進(jìn)程(除了在啟動者上運行的lwp對不同的擊落情況做不同的處理,利用這些觸發(fā)擊落中的固有的同步性優(yōu)化算法。于SVR4的方法依賴于硬件和軟件的許多特性,它們移植起來比較。例如,MIPSR3000A,然后又運如果進(jìn)程稍后又運行在A上,它就有可能通過其遺留在A上的舊表項無效頁面。少全局TLB刷新次數(shù),舊TLB表項隨著系統(tǒng)運行會被自動清除。TLB。如果進(jìn)程先前在其他處理機(jī)運行過,那些處理機(jī)可能有該頁過時地址轉(zhuǎn)換信息。內(nèi)核為每個進(jìn)程一個它運行過的處新那個處理機(jī)的TLB。adhoc的,依賴于同步的硬件和操作系統(tǒng)的特定性質(zhì),沒有一個統(tǒng)一而通用的系統(tǒng)(除了64~512KB,而且要比內(nèi)理內(nèi)存。所有對物理內(nèi)存的都要通過緩存。如果在緩存中找到了數(shù)據(jù),MMU就無需15-15不負(fù)責(zé)其一致性。缺點是只能在地址轉(zhuǎn)換之后才進(jìn)行緩存查找,減弱了緩存的優(yōu)點。此外,如果TLB中沒有有效的地址轉(zhuǎn)換,MMU必須從物理內(nèi)存中或緩存頁表項。這需要額TLB15-16果數(shù)據(jù)不在緩存中,MMU再進(jìn)行地址轉(zhuǎn)換,從物理內(nèi)存中獲取數(shù)據(jù),TLBMIPSR4000[MIPS90]15-1615-17)15-17cache在許多系統(tǒng)中,uu的。因此,上下文切換要清除緩存中原u區(qū)的所有數(shù)據(jù)行。·換出pagedaemon·保護(hù)權(quán)限變化mprotect()調(diào)用,處理copy-on-write頁面或者模擬位時,內(nèi)核都要修改保護(hù)權(quán)限。當(dāng)進(jìn)程數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論