版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
自學(xué)考試操作系統(tǒng)名詞解釋總結(jié)在學(xué)習(xí)這章之前,我們先來(lái)考慮這樣一個(gè)問(wèn)題:為什么要進(jìn)行存儲(chǔ)器的管理?要回答這個(gè)問(wèn)題,我們先回憶一下我們計(jì)算機(jī)使用的過(guò)程。計(jì)算機(jī)啟動(dòng)到桌面→用戶(hù)啟動(dòng)自己想要運(yùn)行的程序→開(kāi)始使用此時(shí)我們來(lái)假想一下計(jì)算機(jī)內(nèi)存中的情況:內(nèi)存中此時(shí)至少有兩部分程序,一部分是操作系統(tǒng)的程序,一部分是用戶(hù)運(yùn)行的程序。而且為了提高計(jì)算機(jī)的使用效率,現(xiàn)在的計(jì)算機(jī)系統(tǒng)多采用多道程序的思想,也就是說(shuō)計(jì)算機(jī)中一次裝入內(nèi)存的程序應(yīng)該有多道,再加上操作系統(tǒng)本身的程序,那么在計(jì)算機(jī)內(nèi)存中存在的程序應(yīng)該是多個(gè)。因此就出現(xiàn)了幾個(gè)問(wèn)題值得我們思考:第一個(gè)問(wèn)題:這么多程序在一塊內(nèi)存中,他們之間不相互影響嗎?萬(wàn)一串了怎么辦?用戶(hù)程序互相影響也就罷了,但萬(wàn)一影響到操作系統(tǒng),那系統(tǒng)可就崩潰了!第二個(gè)問(wèn)題:這些程序裝入內(nèi)存是怎樣裝入的?只是簡(jiǎn)單的將要運(yùn)行的程序的源代碼復(fù)制到內(nèi)存就可以了嗎?第三個(gè)問(wèn)題:多個(gè)程序在內(nèi)存中是怎樣存放的,是簡(jiǎn)單的一個(gè)接一個(gè)嗎?第四個(gè)問(wèn)題:萬(wàn)一操作系統(tǒng)的程序和用戶(hù)要運(yùn)行的程序都比內(nèi)存空間大,那怎么辦,這些程序還能運(yùn)行嗎?我們會(huì)考慮這些問(wèn)題,作為方便用戶(hù)管理計(jì)算機(jī)的操作系統(tǒng)更會(huì)考慮這些問(wèn)題,因此操作系統(tǒng)必須具有很好的解決上述幾個(gè)問(wèn)題的功能,即存儲(chǔ)器管理功能,這也正是要進(jìn)行存儲(chǔ)器管理的主要原因。下面我們來(lái)考慮一下前面幾個(gè)問(wèn)題的解決方法:第一個(gè)問(wèn)題:多個(gè)程序相互影響嗎?肯定影響,解決方法:存儲(chǔ)地址保護(hù),即就是給每個(gè)程序劃分不同的內(nèi)存區(qū)域,如下圖所示以?xún)?nèi)存地址為界,將內(nèi)存劃分為系統(tǒng)區(qū)和用戶(hù)區(qū),用戶(hù)程序調(diào)入內(nèi)存時(shí),操作系統(tǒng)肯定在用戶(hù)區(qū)中劃分空間,這樣首先保證用戶(hù)程序不會(huì)破壞系統(tǒng)程序而是系統(tǒng)崩潰;在用戶(hù)區(qū)中為不同的用戶(hù)程序分配空間時(shí),進(jìn)行內(nèi)存地址的保護(hù),以保證用戶(hù)程序之間不會(huì)相互干擾和破壞。這種保護(hù)包括:1、防止地址越界2、防止越權(quán)(對(duì)共享區(qū)有訪問(wèn)權(quán))存儲(chǔ)保護(hù)的實(shí)現(xiàn)方法在CPU中設(shè)置一對(duì)下限寄存器和上限寄存器存放用戶(hù)作業(yè)在主存中的下限和上限地址也可將一個(gè)寄存器作為基址寄存器,另一寄存器作為限長(zhǎng)寄存器(指示存儲(chǔ)區(qū)長(zhǎng)度)每當(dāng)CPU要訪問(wèn)主存,硬件自動(dòng)將被訪問(wèn)的主存地址與界限寄存器的內(nèi)容進(jìn)行比較,以判斷是否越界如果未越界,則按此地址訪問(wèn)主存,否則將產(chǎn)生程序中斷——越界中斷(存儲(chǔ)保護(hù)中斷)上下界寄存器保護(hù)基址、限長(zhǎng)寄存器保護(hù)說(shuō)明:并不一定為每個(gè)進(jìn)程設(shè)置單獨(dú)的硬件設(shè)備,多個(gè)進(jìn)程公用一組設(shè)備即可。第二個(gè)問(wèn)題:程序裝入內(nèi)存是簡(jiǎn)單的源代碼復(fù)制嗎?肯定不是,將用戶(hù)源程序變?yōu)榭稍趦?nèi)存中執(zhí)行的程序的步驟如下:編譯:由編譯程序?qū)⒂脩?hù)源代碼編譯成若干個(gè)目標(biāo)模塊鏈接:由鏈接程序?qū)⒕幾g后形成的一組目標(biāo)模塊,以及它們所需要的庫(kù)函數(shù)鏈接在一起,形成一個(gè)完整的裝入模塊裝入:由裝入程序?qū)⒀b入模塊裝入內(nèi)存如下圖所示庫(kù)鏈接程序裝入模塊裝入程序…編譯程序產(chǎn)生的目標(biāo)模塊第一步第二步第三步內(nèi)存提問(wèn):為什么不能將源程序直接復(fù)制到內(nèi)存呢?編譯、鏈接到底提供了什么?在計(jì)算機(jī)中執(zhí)行程序時(shí),CPU是根據(jù)內(nèi)存的地址來(lái)尋找指令的,而我們編寫(xiě)程序時(shí),根本不會(huì)考慮地址的問(wèn)題,因此編譯、鏈接的工作是為我們?cè)闯绦虻拿織l指令設(shè)置相應(yīng)的能在內(nèi)存中使用的地址,這種問(wèn)題稱(chēng)為地址的映射。為了更好的理解地址映射,我們引入幾個(gè)概念:物理地址:內(nèi)存的每個(gè)存儲(chǔ)單元都有一個(gè)編號(hào),這種編號(hào)稱(chēng)為內(nèi)存地址或稱(chēng)為物理地址,絕對(duì)地址。要求用戶(hù)用內(nèi)存地址編程是非常困難的,尤其是在多道程序設(shè)計(jì)的環(huán)境中。因此用戶(hù)編程時(shí)一般將開(kāi)始位置認(rèn)為0地址,其余指令的地址都是相對(duì)于首地址而言的。邏輯地址:用戶(hù)編程所用的地址稱(chēng)為邏輯地址(或程序地址,或虛地址),由邏輯地址組成的空間稱(chēng)為邏輯地址空間(或程序地址空間)。我們把用戶(hù)程序裝入內(nèi)存時(shí)對(duì)有關(guān)指令的地址部分的修改定義為從程序地址到內(nèi)存地址的地址映射,或稱(chēng)為地址重定位。地址映射的方式有兩種:1、靜態(tài)地址映射2、動(dòng)態(tài)地址映射1、靜態(tài)地址映射程序被裝入內(nèi)存時(shí)由操作系統(tǒng)的連接裝入程序完成程序的邏輯地址到內(nèi)存地址的轉(zhuǎn)換,程序分配到那一塊內(nèi)存,根據(jù)這塊內(nèi)存的地址對(duì)程序中的所有地址進(jìn)行修改。假定程序裝入內(nèi)存的首地址為BR,裝入前程序的邏輯地址為VR,裝入后內(nèi)存地址為MR,則地址映射按下式進(jìn)行:MR=BR+VR。例如,程序裝入內(nèi)存的首地址為1000,則裝配程序就按MR=1000+VR對(duì)程序中所有地址部分進(jìn)行修改,修改后指令LoadA,200就變?yōu)長(zhǎng)oadA,1200地址映射LoadA12003456。。1200物理地址空間LoadAdata1data13456源程序LoadA20034560100200編譯連接邏輯地址空間BR=1000靜態(tài)地址映射的優(yōu)缺點(diǎn)優(yōu)點(diǎn):容易實(shí)現(xiàn),不需要硬件的支持。缺點(diǎn):程序必須占用連續(xù)的內(nèi)存空間;地址變換在裝入時(shí)一次完成,以后不再改變,一旦程序裝入后不能移動(dòng);程序裝入時(shí)必須一次全部裝入內(nèi)存。2、動(dòng)態(tài)地址映射動(dòng)態(tài)地址映射是指把裝入模塊裝入內(nèi)存時(shí),并不立即把裝入模塊中的相對(duì)地址轉(zhuǎn)換為絕對(duì)地址,而是把這種地址轉(zhuǎn)換推遲到程序真正要執(zhí)行時(shí)才進(jìn)行。裝入內(nèi)存后的所有地址都仍是相對(duì)地址。程序真正要執(zhí)行時(shí),利用專(zhuān)門(mén)的硬件機(jī)構(gòu)來(lái)完成地址的映射。
最簡(jiǎn)單的動(dòng)態(tài)地址映射硬件機(jī)構(gòu)是重定位寄存器。在地址重定位機(jī)構(gòu)中,有一個(gè)基地址寄存器BR和一個(gè)程序地址寄存器VR,一個(gè)內(nèi)存地址寄存器MR。03456......LOADA200......0100200300.........LOADA2003456110012001300200VR+1000BR動(dòng)態(tài)地址映射的具體過(guò)程程序裝入內(nèi)存后,它所占用的內(nèi)存區(qū)的首地址由系統(tǒng)送入基地址寄存器BR中。在程序執(zhí)行的過(guò)程中,若要訪問(wèn)內(nèi)存,將訪問(wèn)的邏輯地址送入VR中。地址轉(zhuǎn)換機(jī)構(gòu)把VR和BR中的內(nèi)容相加,并將結(jié)果送入MR中,作為實(shí)際訪問(wèn)的地址。動(dòng)態(tài)地址映射的地址轉(zhuǎn)換工作是在作業(yè)執(zhí)行的過(guò)程中完成的,而靜態(tài)地址映射的地址轉(zhuǎn)換工作是在作業(yè)執(zhí)行之前集中一次完成的。動(dòng)態(tài)地址映射的優(yōu)點(diǎn)1、程序占用的內(nèi)存空間是動(dòng)態(tài)可變的,當(dāng)程序從某個(gè)存儲(chǔ)區(qū)移到另一個(gè)區(qū)域時(shí),只需要修改相應(yīng)的寄存器BR的內(nèi)容即可。2、一個(gè)程序不一定要求占用一個(gè)連續(xù)的內(nèi)存空間。3、可以部分地裝入程序運(yùn)行。4、便于多個(gè)進(jìn)程共享同一個(gè)程序的代碼。動(dòng)態(tài)地址映射的缺點(diǎn)1、需要硬件的支持。2、實(shí)現(xiàn)存儲(chǔ)管理的軟件算法較為復(fù)雜第三個(gè)問(wèn)題:多個(gè)程序在內(nèi)存中是怎樣存放的,是簡(jiǎn)單的一個(gè)接一個(gè)嗎?這種內(nèi)存的分配方案不是不行,只是,這種分配方案效率太低,因此,內(nèi)存的分配方案有很多種,常見(jiàn)的有:1、連續(xù)分配方案2、基本分頁(yè)存儲(chǔ)管理3、基本分段存儲(chǔ)管理4、段頁(yè)式存儲(chǔ)管理第四個(gè)問(wèn)題:萬(wàn)一操作系統(tǒng)的程序和用戶(hù)要運(yùn)行的程序都比內(nèi)存空間大,那怎么辦,這些程序還能運(yùn)行嗎?程序肯定能夠運(yùn)行,現(xiàn)實(shí)中,由于程序員編程時(shí)不會(huì)受到限制,想寫(xiě)多長(zhǎng)就可以寫(xiě)多長(zhǎng),但內(nèi)存空間是由硬件來(lái)決定的,計(jì)算機(jī)一旦裝好,內(nèi)存的空間不會(huì)再變,因此執(zhí)行的程序空間比內(nèi)存空間大的情況很多。為了解決這一問(wèn)題,人們利用了虛擬存儲(chǔ)器的思想,利用覆蓋和交換技術(shù)在邏輯上對(duì)內(nèi)存進(jìn)行了擴(kuò)充。總結(jié)存儲(chǔ)器管理的主要功能有:1、存儲(chǔ)保護(hù)2、地址重定位(地址映射)3、主存分配與回收4、主存擴(kuò)充(虛擬內(nèi)存)存儲(chǔ)器管理的主要目的是:合理安全的使用內(nèi)存,同時(shí)提高內(nèi)存空間的利用率4.2連續(xù)分配方式連續(xù)分配方式,是指為一個(gè)用戶(hù)程序分配一個(gè)連續(xù)的內(nèi)存空間。分類(lèi):?jiǎn)我贿B續(xù)分配固定分區(qū)分配動(dòng)態(tài)分區(qū)分配動(dòng)態(tài)重定位分區(qū)分配4.2.1單一連續(xù)分配最簡(jiǎn)單的一種存儲(chǔ)管理方式,但只能用于單用戶(hù)、單任務(wù)的操作系統(tǒng)中。采用這種存儲(chǔ)管理方式時(shí),可把內(nèi)存分為系統(tǒng)區(qū)和用戶(hù)區(qū)兩部分,系統(tǒng)區(qū)僅提供給OS使用,通常放在內(nèi)存低址部分,用戶(hù)區(qū)是指除系統(tǒng)區(qū)以外的全部?jī)?nèi)存空間,提供給用戶(hù)使用。而用戶(hù)區(qū)每次只裝入一個(gè)作業(yè)程序,直到該作業(yè)程序完成,才會(huì)調(diào)其它的作業(yè)程序進(jìn)入內(nèi)存。4.2.2固定分區(qū)分配將內(nèi)存用戶(hù)空間劃分為若干個(gè)固定大小的區(qū)域,在每個(gè)分區(qū)中只裝入一道作業(yè),這樣把用戶(hù)空間劃分為幾個(gè)分區(qū),便允許有幾道作業(yè)并發(fā)執(zhí)行。當(dāng)有一空閑分區(qū)時(shí),便可以再?gòu)耐獯娴暮髠渥鳂I(yè)隊(duì)列中,選擇一個(gè)適當(dāng)大小的作業(yè)裝入該分區(qū),當(dāng)該作業(yè)結(jié)束時(shí),可再?gòu)暮髠渥鳂I(yè)隊(duì)列中找出另一作業(yè)調(diào)入該分區(qū)。說(shuō)明:這種分配方法注意兩個(gè)問(wèn)題:1.劃分分區(qū)的方法(1)分區(qū)大小相等:缺乏靈活性,用于一臺(tái)計(jì)算機(jī)控制多個(gè)相同對(duì)象的場(chǎng)合(2)分區(qū)大小不等:把內(nèi)存區(qū)劃分成含有多個(gè)較小的分區(qū)、適量的中等分區(qū)及少量的大分區(qū),可根據(jù)程序的大小為之分配適當(dāng)?shù)姆謪^(qū)。2.內(nèi)存分配的方法為便于內(nèi)存分配,通常將分區(qū)按大小進(jìn)行排隊(duì),并為之建立一張分區(qū)使用表,其中各表項(xiàng)包括每個(gè)分區(qū)的起始地址、大小及狀態(tài)(是否已分配)。已分配1281284已分配64643已分配32322已分配20121狀態(tài)起址(K)大小(K)分區(qū)號(hào)分區(qū)說(shuō)明表作業(yè)C作業(yè)B作業(yè)A操作系統(tǒng)20K32K64K128K256K存儲(chǔ)空間分配情況4.2.3動(dòng)態(tài)分區(qū)分配動(dòng)態(tài)分區(qū)分配是根據(jù)進(jìn)程的實(shí)際需要,動(dòng)態(tài)地為之分配內(nèi)存空間,使分區(qū)的大小剛好與作業(yè)的大小相等。這種存儲(chǔ)管理的方法解決了固定分區(qū)嚴(yán)重浪費(fèi)內(nèi)存的問(wèn)題。是一種較為實(shí)用的存儲(chǔ)管理方法。為實(shí)現(xiàn)動(dòng)態(tài)分區(qū)過(guò)程,一般系統(tǒng)中需要建立兩個(gè)表:1、分區(qū)表2、可用空間表固定分區(qū)分配很容易產(chǎn)生作業(yè)與作業(yè)之間的零頭問(wèn)題,引入動(dòng)態(tài)分區(qū)思想。區(qū)號(hào)分區(qū)長(zhǎng)度起始地址進(jìn)程號(hào)執(zhí)行時(shí)間120K30K1511223K50K4403316K73K2062412K89K12341、分區(qū)表用來(lái)記錄已經(jīng)分配了的分區(qū)情況2、空閑分區(qū)表:記錄每個(gè)空閑分區(qū)的情況。每個(gè)空閑分區(qū)占一個(gè)表目,表目中包括分區(qū)序號(hào)、分區(qū)始址及分區(qū)的大小等數(shù)據(jù)項(xiàng)。隨著時(shí)間的推移,也會(huì)出現(xiàn)不連續(xù)的可用空間,而且時(shí)間變,可用空間也會(huì)發(fā)生變化,所以也要對(duì)可用空間情況做一個(gè)記錄序號(hào)可用空間長(zhǎng)度可用空間起始地址115K50K232K80K346K125K為了更好的管理空閑分區(qū),將它們串接為一個(gè)空閑分區(qū)鏈空閑分區(qū)鏈:在每個(gè)分區(qū)的起始部分,設(shè)置一些用于控制分區(qū)分配的信息,以及用于鏈接各分區(qū)所用的前向指針;在分區(qū)尾部則設(shè)置一后向指針,在分區(qū)末尾重復(fù)設(shè)置狀態(tài)位和分區(qū)大小表目。如下圖所示:引出一個(gè)問(wèn)題:當(dāng)一個(gè)新作業(yè)申請(qǐng)裝入內(nèi)存時(shí),需要從空閑分區(qū)表或空閑分區(qū)鏈中選出一分區(qū)分配給該作業(yè),若有若干個(gè)空閑分區(qū)都滿(mǎn)足條件,那應(yīng)該選擇那一個(gè)空閑分區(qū)呢?因此出現(xiàn)了幾種選擇算法:(1)首次適應(yīng)算法FF(2)循環(huán)首次適應(yīng)算法(3)最佳適應(yīng)算法(4)最壞適應(yīng)算法(1)首次適應(yīng)算法FFFF算法要求空閑分區(qū)鏈以地址遞增的次序鏈接。在分配內(nèi)存時(shí),從鏈?zhǔn)组_(kāi)始順序查找,直至找到一個(gè)大小能滿(mǎn)足要求的空閑分區(qū)為止;然后按照作業(yè)的大小,從該分區(qū)中劃出一塊內(nèi)存空間分配給請(qǐng)求者,余下的空閑分區(qū)仍留在空閑鏈中。若從頭到尾不存在滿(mǎn)足要求的分區(qū),則分配失敗。優(yōu)點(diǎn):優(yōu)先利用內(nèi)存低址部分的內(nèi)存空間缺點(diǎn):低址部分不斷劃分,產(chǎn)生小碎片;每次查找從低址部分開(kāi)始,增加了查找的開(kāi)銷(xiāo)要求:空閑區(qū)表或空閑區(qū)鏈按地址從低到高排列.(2)循環(huán)首次適應(yīng)算法在分配內(nèi)存空間時(shí),從上次找到的空閑分區(qū)的下一個(gè)空閑分區(qū)開(kāi)始查找,直到找到一個(gè)能滿(mǎn)足要求的空閑分區(qū),從中劃出一塊與請(qǐng)求大小相等的內(nèi)存空間分配給作業(yè)。為實(shí)現(xiàn)算法,需要:設(shè)置一起始查尋指針采用循環(huán)查找方式優(yōu)點(diǎn):使內(nèi)存空閑分區(qū)分布均勻,減少查找的開(kāi)銷(xiāo)缺點(diǎn):缺乏大的空閑分區(qū)要求:空閑區(qū)表或空閑區(qū)鏈按地址從低到高排列.(3)最佳適應(yīng)算法所謂“最佳”是指每次為作業(yè)分配內(nèi)存時(shí),總是把能滿(mǎn)足要求、又是最小的空閑分區(qū)分配給作業(yè),避免“大材小用”。缺點(diǎn):產(chǎn)生許多難以利用的小空閑區(qū)要求:空閑分區(qū)表或空閑分區(qū)鏈按其容量從小到大排列。(4)最壞(差)適應(yīng)算法所謂“最壞”是指每次為作業(yè)分配內(nèi)存時(shí),總是把能滿(mǎn)足要求、又是最大的空閑分區(qū)分配給作業(yè)。缺點(diǎn):大的空閑區(qū)不容易保留。要求:空閑分區(qū)表或空閑分區(qū)鏈按其容量從大到小排列。例:分區(qū)存儲(chǔ)管理算法采用可變分區(qū)方式管理內(nèi)存時(shí),若內(nèi)存中按地址順序依次有五個(gè)大小依次為15k、28k、10k、226k和110k的空閑區(qū)?,F(xiàn)有五個(gè)作業(yè)Ja、Jb、Jc、Jd和Je,它們各需要內(nèi)存10k、15k、102k、26k和180k。問(wèn):⑴如果采用最先適應(yīng)分配算法,能將這五個(gè)作業(yè)按Ja~Je的次序全部裝入內(nèi)存嗎?⑵用什么分配算法裝入這5個(gè)作業(yè)可使內(nèi)存的利用率最高?110k226k10k28k15k解:(1)按最先適應(yīng)分配算法,不能將這五個(gè)作業(yè)按Ja-Je的次序全部裝入內(nèi)存。因?yàn)閮?nèi)存中前兩個(gè)原先的空閑分區(qū)能依次裝入Ja(10k)和Jb(15k),第3個(gè)10KB的空閑區(qū)和剛剛劃分出來(lái)的兩個(gè)大小分別為5KB和13KB的空閑區(qū)均無(wú)法分配,第4個(gè)空閑區(qū)可以分2次裝入作業(yè)Jc(102k)和Jd(26k),則作業(yè)Je(180k)無(wú)法裝入內(nèi)存。(2)用最佳適應(yīng)分配算法裝入這5個(gè)作業(yè),可使內(nèi)存的利用率最高。此時(shí),原先的5個(gè)空閑區(qū)依次裝入了5個(gè)作業(yè),它們是:Jb(15k),Jd(26k),Ja(10k),Je(180k)和Jc(102k)。三種分配算法的比較1、從搜索速度上看:最先適應(yīng)算法具有最佳性能。盡管最佳適應(yīng)算法或最壞適應(yīng)算法看上去能很快地找到一個(gè)最適合的或最大的空閑區(qū),但后兩種算法都要求首先把不同大小的空閑區(qū)按其大小進(jìn)行排隊(duì),這實(shí)際上是對(duì)所有空閑區(qū)進(jìn)行一次搜索。2、從釋放速度來(lái)看:最先適應(yīng)算法也是最佳的。因?yàn)槭褂米钕冗m應(yīng)算法回收某一空閑區(qū)時(shí),無(wú)論被釋放區(qū)是否與空閑區(qū)相鄰,都不用改變?cè)搮^(qū)在可用表或自由鏈中的位置,只需修改其大小或起始地址。3、上述三種放置策略各有利弊,到底哪種最好不能一概而論,而應(yīng)針對(duì)具體作業(yè)序列來(lái)分析。動(dòng)態(tài)分區(qū)剛開(kāi)始時(shí),沒(méi)有存儲(chǔ)零頭,但隨著時(shí)間的推移,也會(huì)出現(xiàn)零頭的問(wèn)題。例如:有三個(gè)存儲(chǔ)零頭是5k、8k、12k,有一個(gè)20k的作業(yè),每個(gè)存儲(chǔ)零頭都不能滿(mǎn)足作業(yè)要求,但總的存儲(chǔ)空間是滿(mǎn)足的。因此要提高存儲(chǔ)空間的使用效率,主要是解決存儲(chǔ)零頭的問(wèn)題,那如何解決存儲(chǔ)零頭問(wèn)題呢??jī)煞N方法:1、程序的浮動(dòng):將幾個(gè)空閑空間合并。2、多重分區(qū):將一個(gè)作業(yè)撕開(kāi),分散的裝入到幾個(gè)分區(qū)中。動(dòng)態(tài)分區(qū)總結(jié)4.2.4可重定位分區(qū)分配1.動(dòng)態(tài)重定位的引入在連續(xù)分配方式中,必須把系統(tǒng)或用戶(hù)程序裝入一連續(xù)的內(nèi)存空間。如果在系統(tǒng)中只有若干個(gè)小分區(qū),即使它們的容量總和大于要裝入的程序,但由于這些分區(qū)不相鄰,所以無(wú)法將程序裝入內(nèi)存。解決方法:將內(nèi)存中的所有作業(yè)進(jìn)行移動(dòng),使它們?nèi)苦徑?,這樣可把原來(lái)分散的小分區(qū)拼接成大分區(qū),這種方法稱(chēng)為“拼接”或“緊湊”。缺點(diǎn):用戶(hù)程序在內(nèi)存中的地址發(fā)生變化,必須重定位,開(kāi)銷(xiāo)大,移動(dòng)時(shí)機(jī)不好定。20KB
0
os
作業(yè)1作業(yè)3作業(yè)4
52KB116KB166KB256KB1主存20KB
os
作業(yè)1
作業(yè)3
作業(yè)4
52KB66KB130KB230KB256KB1主存180KB
02.動(dòng)態(tài)重定位的實(shí)現(xiàn)在動(dòng)態(tài)運(yùn)行時(shí)裝入的方式時(shí),將相對(duì)地址轉(zhuǎn)換為物理地址的工作在程序指令真正要執(zhí)行時(shí)才進(jìn)行。地址轉(zhuǎn)換需要重定位寄存器的支持。程序執(zhí)行時(shí)訪問(wèn)的內(nèi)存地址是相對(duì)地址與重定位寄存器中的地址相加而成。地址變換過(guò)程是在程序執(zhí)行過(guò)程期間,隨著對(duì)每條指令的訪問(wèn)自動(dòng)進(jìn)行的,稱(chēng)為動(dòng)態(tài)重定位。movr1,[500]123movr1,[500]123010050059901000256k-1作業(yè)地址空間存儲(chǔ)空間重定位寄存器1100150016005001000相對(duì)地址+擴(kuò)充內(nèi)存的兩種方法---交換與覆蓋覆蓋技術(shù):把程序劃分為若干個(gè)功能上相對(duì)獨(dú)立的程序段,按照其自身的邏輯結(jié)構(gòu)將那些不會(huì)同時(shí)執(zhí)行的程序段共享同一塊內(nèi)存區(qū)域覆蓋舉例:子程序A(8k)子程序B(10k)子程序M(20k)子程序N(25k)子程序X(15k)主程序(30k)程序總共需要108k內(nèi)存空間,但在執(zhí)行的過(guò)程中A、B;X、M、N進(jìn)程不會(huì)同時(shí)執(zhí)行,因此它們有65k的內(nèi)存空間就夠用了。覆蓋技術(shù)的實(shí)現(xiàn):把程序劃分為若干個(gè)功能上相對(duì)獨(dú)立的程序段,按照其自身的邏輯結(jié)構(gòu)將那些不會(huì)同時(shí)執(zhí)行的程序段共享同一塊內(nèi)存區(qū)域,即就是一個(gè)作業(yè)的若干程序段,或幾個(gè)作業(yè)的某些部分共享某一個(gè)存儲(chǔ)空間。交換技術(shù):是指當(dāng)內(nèi)存空間緊張時(shí),系統(tǒng)將內(nèi)存中某些進(jìn)程暫時(shí)移到外存,把外存中某些進(jìn)程換進(jìn)內(nèi)存,占據(jù)前者所占用的區(qū)域,這種技術(shù)是進(jìn)程在內(nèi)存與外存之間的動(dòng)態(tài)調(diào)度,多用于分時(shí)系統(tǒng)中。交換技術(shù)實(shí)現(xiàn)的基本依據(jù):程序的局部性原理。局部性原理:指程序在執(zhí)行過(guò)程中的一個(gè)較短時(shí)期,所執(zhí)行的指令地址和指令的操作數(shù)地址,分別局限于一定區(qū)域。還可以表現(xiàn)為:時(shí)間局部性:一條指令的一次執(zhí)行和下次執(zhí)行,一個(gè)數(shù)據(jù)的一次訪問(wèn)和下次訪問(wèn)都集中在一個(gè)較短時(shí)期內(nèi)(一條指令被執(zhí)行了,則在不久的將來(lái)它可能再被執(zhí)行)空間局部性:當(dāng)前指令和鄰近的幾條指令,當(dāng)前訪問(wèn)的數(shù)據(jù)和鄰近的數(shù)據(jù)都集中在一個(gè)較小區(qū)域內(nèi)。(若某一存儲(chǔ)單元被使用,則在一定時(shí)間內(nèi),與該存儲(chǔ)單元相鄰的單元可能被使用)局部性原理的具體體現(xiàn)1、程序在執(zhí)行時(shí),大部分是順序執(zhí)行的指令,少部分是轉(zhuǎn)移和過(guò)程調(diào)用指令。2、過(guò)程調(diào)用的嵌套深度一般不超過(guò)5,因此執(zhí)行的范圍不超過(guò)這組嵌套的過(guò)程。3、程序中存在相當(dāng)多的循環(huán)結(jié)構(gòu),它們由少量指令組成,而被多次執(zhí)行。4、程序中存在相當(dāng)多對(duì)一定數(shù)據(jù)結(jié)構(gòu)的操作,如數(shù)組操作,往往局限在較小范圍內(nèi)。交換技術(shù)與覆蓋技術(shù)共同點(diǎn):進(jìn)程的程序和數(shù)據(jù)主要放在外存,當(dāng)前需要執(zhí)行的部分放在內(nèi)存,內(nèi)外存之間進(jìn)行信息交換交換技術(shù)與覆蓋技術(shù)不同點(diǎn):與覆蓋技術(shù)相比,交換技術(shù)不要求用戶(hù)給出程序段之間的邏輯覆蓋結(jié)構(gòu);而且,交換發(fā)生在進(jìn)程或作業(yè)之間,而覆蓋發(fā)生在同一進(jìn)程或作業(yè)內(nèi)。此外,覆蓋只能覆蓋那些與覆蓋段無(wú)關(guān)的程序段。4.3頁(yè)式存儲(chǔ)管理方式連續(xù)分配方式會(huì)形成“碎片”,雖然可以通過(guò)“緊湊”解決,但開(kāi)銷(xiāo)大。根據(jù)多重分區(qū)的思想,如果允許將一個(gè)進(jìn)程直接分散地裝入許多不相鄰的分區(qū)中,則無(wú)需“緊湊”,由此產(chǎn)生離散分配方式。分頁(yè)技術(shù)是由曼徹斯特大學(xué)提出,并于1960年前后在Atlas計(jì)算機(jī)上實(shí)現(xiàn)。這種技術(shù)對(duì)操作系統(tǒng)的發(fā)展產(chǎn)生了深遠(yuǎn)影響。4.3.1頁(yè)面與頁(yè)表1.幾個(gè)基本概念頁(yè)面:將一個(gè)進(jìn)程的邏輯地址空間分成若干個(gè)大小相等的片稱(chēng)為頁(yè)或頁(yè)面,并為各頁(yè)加以編號(hào),從0開(kāi)始。物理塊:把內(nèi)存空間分成與頁(yè)面相同大小的若干個(gè)存儲(chǔ)塊,稱(chēng)為塊或頁(yè)架。頁(yè)式管理的基本思想:在為進(jìn)程分配內(nèi)存時(shí),以塊為單位將進(jìn)程的若干個(gè)頁(yè)分別裝入到多個(gè)可以不相鄰的物理塊中。頁(yè)內(nèi)碎片:進(jìn)程的最后一頁(yè)經(jīng)常裝不滿(mǎn)而形成“頁(yè)內(nèi)碎片”。...0塊1塊2塊3塊4塊5塊6塊0頁(yè)1頁(yè)2頁(yè)3頁(yè)4頁(yè)作業(yè)的地址空間頁(yè)框(物理塊)內(nèi)存1、頁(yè)面大小的確定頁(yè)面大小應(yīng)適中,必須是2的冪,通常是512B8KB。2、頁(yè)號(hào)、頁(yè)內(nèi)地址的計(jì)算
若給定一個(gè)邏輯地址空間中的地址為A,頁(yè)面大小為L(zhǎng),則頁(yè)號(hào)P=INT[A/L]
頁(yè)內(nèi)地址d=[A]MODL例1:系統(tǒng)頁(yè)面大小為1KB,設(shè)A=2170B,計(jì)算頁(yè)號(hào)P和頁(yè)內(nèi)地址。解:P=INT
(2170/1024)=2d=2170mod1024=122頁(yè)式管理中的幾個(gè)注意問(wèn)題:3.頁(yè)式存儲(chǔ)下內(nèi)存地址結(jié)構(gòu)位移量W頁(yè)號(hào)P3112110假設(shè):內(nèi)存地址長(zhǎng)度為32,且系統(tǒng)為每個(gè)頁(yè)面劃分大小為4K,則內(nèi)存地址的含義如下:地址長(zhǎng)度共32位:011位為位移量(頁(yè)內(nèi)地址),即每頁(yè)的大小為4KB1231位為頁(yè)號(hào),地址空間最多允許有1M頁(yè)例如:設(shè)內(nèi)存地址線共14位,后10位表征頁(yè)的大小,前4位為頁(yè)號(hào),則內(nèi)存的分頁(yè)情況如圖所示0000000100100011010001010110011110001001101010111100110111101111每頁(yè)大小為1K,16K的內(nèi)存分了16個(gè)頁(yè)架4.頁(yè)表的含義和地址映射中的計(jì)算在分頁(yè)系統(tǒng)中,允許進(jìn)程的每一頁(yè)離散地存儲(chǔ)在內(nèi)存的任一存儲(chǔ)塊中,為方便查找,系統(tǒng)為每一進(jìn)程建立一張頁(yè)面映像表,簡(jiǎn)稱(chēng)頁(yè)表。頁(yè)表記錄了一個(gè)進(jìn)程的各個(gè)頁(yè)對(duì)應(yīng)的頁(yè)架號(hào),有了頁(yè)表就可以實(shí)現(xiàn)從頁(yè)號(hào)到物理塊號(hào)的地址映射。在頁(yè)表表項(xiàng)中常設(shè)置一存取控制字段,對(duì)存儲(chǔ)塊內(nèi)容加以保護(hù)。頁(yè)號(hào)塊號(hào)其它05存儲(chǔ)保護(hù)信息165…213…頁(yè)表常包含的幾個(gè)表項(xiàng):頁(yè)號(hào):登記程序地址空間的頁(yè)號(hào)。塊號(hào):登記相應(yīng)的頁(yè)所對(duì)應(yīng)的內(nèi)存塊號(hào)其它:登記與存儲(chǔ)信息保護(hù)有關(guān)的信息如下表就是一個(gè)頁(yè)表例2:一個(gè)進(jìn)程具有有0、1、2三個(gè)頁(yè)面,對(duì)應(yīng)的頁(yè)架號(hào)為4、5、9。若系統(tǒng)頁(yè)面大小為1KB,指令load22480的邏輯地址為1200,則該指令和指令中操作數(shù)的物理地址是多少?解:1200/1024=商1余176說(shuō)明該指令在第1頁(yè)中且頁(yè)內(nèi)地址為176因此,指令的物理地址=1024*5+176=52962480/1024=商2余432說(shuō)明該操作數(shù)在第2頁(yè)中且頁(yè)內(nèi)地址為432因此,操作數(shù)的物理地址=1024*9+432=9648總結(jié)頁(yè)式存儲(chǔ)管理的過(guò)程,可得到如下結(jié)論:1、CPU每存取一個(gè)數(shù)據(jù)時(shí),都需要進(jìn)行兩次訪問(wèn)內(nèi)存。2、第一次訪問(wèn)內(nèi)存:找到頁(yè)表,查找相應(yīng)指定頁(yè)的物理塊號(hào),將塊號(hào)與頁(yè)內(nèi)偏移量拼接形成物理地址。3、第二次訪問(wèn)內(nèi)存:從第一次所得地址中獲得所需數(shù)據(jù),或向此地址中寫(xiě)入數(shù)據(jù)。其過(guò)程如下圖所示:頁(yè)表長(zhǎng)度頁(yè)表始址頁(yè)表寄存器頁(yè)內(nèi)地址頁(yè)號(hào)(3)邏輯地址L物理地址b1塊號(hào)頁(yè)號(hào)0124>+
越界中斷頁(yè)表3第一步第二步第三步第四步在上述過(guò)程中,還有兩個(gè)問(wèn)題需要我們考慮:1、存儲(chǔ)器利用率提高了,但處理器處理速度降低了。2、現(xiàn)代的大多數(shù)計(jì)算機(jī)系統(tǒng),都支持非常大的邏輯地址空間(232-264)。在這樣的環(huán)境下,頁(yè)表就變得非常大,要占用相當(dāng)大的內(nèi)存空間。例如:一個(gè)具有32位邏輯地址空間的分頁(yè)系統(tǒng),規(guī)定頁(yè)面大小為4KB,則頁(yè)表中頁(yè)表項(xiàng)就有1兆(220)個(gè)之多。假設(shè)每個(gè)頁(yè)表項(xiàng)占用4個(gè)字節(jié),僅僅其頁(yè)表就要占用4MB的內(nèi)存空間,而且還要求是連續(xù)的。第一個(gè)問(wèn)題的解決方法:具有快表的地址變換機(jī)構(gòu),即就是在系統(tǒng)中增設(shè)一個(gè)具有并行查尋能力的特殊高速緩沖寄存器,稱(chēng)為“聯(lián)想寄存器”或“快表”。因?yàn)榭毂淼乃俣仁莾?nèi)存速度的數(shù)倍或數(shù)十倍,那么相對(duì)于內(nèi)存速度,訪問(wèn)頁(yè)表的時(shí)間可以忽略不計(jì)。也就是說(shuō)頁(yè)地址變換不會(huì)造成進(jìn)程運(yùn)行速度下降多少。其示意圖如下:頁(yè)表長(zhǎng)度頁(yè)表始址頁(yè)表寄存器頁(yè)內(nèi)地址頁(yè)號(hào)(3)邏輯地址Ldb物理地址>+越界中斷b1塊號(hào)頁(yè)號(hào)頁(yè)表具有快表的分頁(yè)系統(tǒng)的地址變換機(jī)構(gòu):b塊號(hào)頁(yè)號(hào)快表輸入寄存器第二個(gè)問(wèn)題的解決方法:
①采用離散分配方式來(lái)解決難以找到一塊連續(xù)的大內(nèi)存空間的問(wèn)題:②只將當(dāng)前需要的部分頁(yè)表項(xiàng)調(diào)入內(nèi)存,其余的頁(yè)表項(xiàng)仍駐留在磁盤(pán)上,需要時(shí)再調(diào)入。也就是說(shuō),頁(yè)表在內(nèi)存中也使用離散分裝和換進(jìn)換出的思想,以減小頁(yè)表所占內(nèi)存空間和小空間、大頁(yè)表的問(wèn)題。頁(yè)表能夠分散裝入和換進(jìn)換出,一個(gè)整的頁(yè)表是很難做到的,因此引入兩級(jí)頁(yè)表和多級(jí)頁(yè)表的思想。兩級(jí)頁(yè)表:將頁(yè)表也進(jìn)行分頁(yè),離散地將各個(gè)頁(yè)面分別存放在不同的物理塊中,同時(shí)為離散分裝的頁(yè)表再建立一張額外的頁(yè)表,稱(chēng)為外層頁(yè)表,其每個(gè)頁(yè)表項(xiàng)記錄了頁(yè)表頁(yè)面的物理塊號(hào)。其示意圖如下:………012345671141151468內(nèi)存空間…641第0頁(yè)頁(yè)表012…1023115114第1頁(yè)頁(yè)表012…10231468第n頁(yè)頁(yè)表012…1023174210781011012n外部頁(yè)表兩級(jí)分頁(yè)結(jié)構(gòu)例如:一個(gè)具有32位邏輯地址空間的分頁(yè)系統(tǒng),規(guī)定頁(yè)面大小為4KB,則頁(yè)表中頁(yè)表項(xiàng)就有1兆(220)個(gè)之多。假設(shè)每個(gè)頁(yè)表項(xiàng)占用4個(gè)字節(jié),僅僅其頁(yè)表就要占用4MB的內(nèi)存空間,但若采用二級(jí)頁(yè)表,頁(yè)表所占空間總數(shù)沒(méi)有變化,不過(guò)這些空間可以分為若干個(gè)小的空間,放在不連續(xù)的內(nèi)存塊中。而且當(dāng)時(shí)不用的一些小空間可暫時(shí)不調(diào)入內(nèi)存,從而使頁(yè)表所占內(nèi)存大大減小。為實(shí)現(xiàn)實(shí)現(xiàn)上述所說(shuō),在地址變換機(jī)構(gòu)中需設(shè)一外層頁(yè)表寄存器,用于存放外層頁(yè)表的始址,并利用邏輯地址中的外層頁(yè)號(hào),作為外層頁(yè)表的索引,從中找到指定頁(yè)表分頁(yè)的始址,再利用p2作為指定頁(yè)表分頁(yè)的索引,找到指定的頁(yè)表項(xiàng),其中即含有該頁(yè)在內(nèi)存的物理塊號(hào),用該塊號(hào)和頁(yè)內(nèi)地址d即可構(gòu)成訪問(wèn)的內(nèi)存物理地址,其示意圖如下:外部頁(yè)表寄存器外部頁(yè)表頁(yè)表db物理地址++dP2P1邏輯地址外部頁(yè)號(hào)外部頁(yè)內(nèi)地址頁(yè)內(nèi)地址具有兩級(jí)頁(yè)表的地址變換機(jī)構(gòu):通過(guò)前面的學(xué)習(xí),我們了解到兩級(jí)頁(yè)表的確可以解決頁(yè)表占連續(xù)內(nèi)存的問(wèn)題,但同時(shí)也引入了一個(gè)新的問(wèn)題,那就是兩級(jí)頁(yè)表系統(tǒng)中,CPU每存取一個(gè)數(shù)據(jù)時(shí),都需要進(jìn)行三次訪問(wèn)內(nèi)存,使得處理機(jī)的效率下降,因此前面我們所說(shuō)的兩個(gè)問(wèn)題都要解決,就要處理好這兩個(gè)問(wèn)題之間的取舍關(guān)系。多級(jí)頁(yè)表對(duì)于32位的機(jī)器,采用兩級(jí)頁(yè)表結(jié)構(gòu)是合適的;但對(duì)于64位的機(jī)器,如果頁(yè)面大小仍采用4KB即212B,那么還剩下52位,假定仍按物理塊的大小(212位)來(lái)劃分頁(yè)表,則將余下的42位用于外層頁(yè)號(hào)。此時(shí)在外層頁(yè)表中可能有4096G個(gè)頁(yè)表項(xiàng),要占用16384GB的連續(xù)內(nèi)存空間。必須采用多級(jí)頁(yè)表,將外層頁(yè)表再進(jìn)行分頁(yè),也是將各分頁(yè)離散地裝入到不相鄰接的物理塊中,再利用第2級(jí)的外層頁(yè)表來(lái)映射它們之間的關(guān)系。對(duì)于64位的計(jì)算機(jī),如果要求它能支持264(=1844744TB)規(guī)模的物理存儲(chǔ)空間,則即使是采用三級(jí)頁(yè)表結(jié)構(gòu)也是難以辦到的;而在當(dāng)前的實(shí)際應(yīng)用中也無(wú)此必要。頁(yè)式存儲(chǔ)管理分為兩種方式:基本分頁(yè)存儲(chǔ)管理:也叫實(shí)分頁(yè)式存儲(chǔ)管理或靜態(tài)頁(yè)式存儲(chǔ)管理,它是指只有作業(yè)或進(jìn)程將涉及到的所有頁(yè)面全部裝入內(nèi)存后,才會(huì)執(zhí)行。請(qǐng)求分頁(yè)存儲(chǔ)管理:也叫虛擬頁(yè)式存儲(chǔ)管理或動(dòng)態(tài)頁(yè)式存儲(chǔ)管理,它是指作業(yè)或進(jìn)程執(zhí)行之前不是將作業(yè)或進(jìn)程涉及到的所有頁(yè)面全部裝入內(nèi)存,而是只裝入一部分,其它部分在執(zhí)行的過(guò)程中需要了再動(dòng)態(tài)裝入?;痉猪?yè)存儲(chǔ)管理方式,它要求作業(yè)執(zhí)行前,必須將作業(yè)或進(jìn)程涉及到的所有頁(yè)面全部裝入內(nèi)存。這樣就有了一些限制。例如,當(dāng)內(nèi)存能提供的所有頁(yè)架的個(gè)數(shù)小于作業(yè)的頁(yè)面數(shù)時(shí),則這個(gè)作業(yè)將永遠(yuǎn)不能執(zhí)行。而請(qǐng)求分頁(yè)存儲(chǔ)管理方式可以動(dòng)態(tài)的裝入作業(yè),不會(huì)產(chǎn)生這樣的問(wèn)題。因此在現(xiàn)在的計(jì)算機(jī)系統(tǒng)中多采用請(qǐng)求分頁(yè)存儲(chǔ)管理方式來(lái)管理內(nèi)存。但請(qǐng)求分頁(yè)存儲(chǔ)管理方式同樣存在問(wèn)題:1、把作業(yè)的那一部分裝入內(nèi)存比較合適?2、什么時(shí)候進(jìn)行頁(yè)面的換進(jìn)換出?3、若內(nèi)存中沒(méi)有空閑空間時(shí),換進(jìn)換出應(yīng)換掉那一個(gè)頁(yè)面?解決問(wèn)題:1、把作業(yè)的那一部分裝入內(nèi)存比較合適?當(dāng)然應(yīng)該將馬上要運(yùn)行的頁(yè)面先裝入內(nèi)存,其它的可先放在外存中等待換進(jìn)換出。2、什么時(shí)候進(jìn)行頁(yè)面的換進(jìn)換出??jī)煞N策略:①請(qǐng)求調(diào)入策略:即執(zhí)行時(shí)缺少頁(yè)了,就中斷調(diào)入。②預(yù)調(diào)入策略:將外存中的頁(yè)提前計(jì)算一個(gè)時(shí)間順序,按此順序進(jìn)行調(diào)入。3、若內(nèi)存中沒(méi)有空閑空間時(shí),換進(jìn)換出應(yīng)換掉那一個(gè)頁(yè)面?三種算法:①先進(jìn)先出頁(yè)面置換算法(FIFO)②最近最久未使用置換算法(LRU)③理想淘汰置換算法(OPTIMAL)為了說(shuō)明這三種算法,我們先來(lái)看一個(gè)例題:例:設(shè)某作業(yè)占有7個(gè)頁(yè)面,如果在主存中只允許裝入4個(gè)工作頁(yè)面,作業(yè)運(yùn)行時(shí),實(shí)際訪問(wèn)頁(yè)面的順序是1,2,3,6,4,7,3,2,1,4,7,5,6,5,2,1。試用FIFO、LRU與OPTIMAL頁(yè)面調(diào)度算法,列出各自的頁(yè)面淘汰順序和缺頁(yè)中斷次數(shù)123647321475652111111444444455555222227777777666633333322222222246666611111111缺**********解:(1)fifo頁(yè)面調(diào)度算法如上表所示,缺頁(yè)的順序?yàn)椋?236472156缺頁(yè)的次數(shù):10次123647321475652111111444411116666222227777444442233333333377777146666222255555缺**************(2)lru頁(yè)面調(diào)度算法如上表所示,缺頁(yè)的順序?yàn)椋?2364721475621缺頁(yè)的次數(shù):14次(2)OPTIMAL頁(yè)面調(diào)度算法123647321475652111111111111111111222222222222222233333333444666646477777755555缺*********如上表所示,缺頁(yè)的順序?yàn)椋?23647456缺頁(yè)的次數(shù):9次總結(jié)請(qǐng)求分頁(yè)存儲(chǔ)管理方式:1、基本思想:在基本分頁(yè)(實(shí)分頁(yè))的基礎(chǔ)上增加虛擬存儲(chǔ)功能。
進(jìn)程開(kāi)始運(yùn)行之前,不是裝入全部頁(yè)面,而是裝入幾個(gè)或零個(gè)頁(yè)面,之后根據(jù)進(jìn)程運(yùn)行的需要,動(dòng)態(tài)裝入其它頁(yè)面;當(dāng)內(nèi)存空間已滿(mǎn),而又需要裝入新的頁(yè)面時(shí),則根據(jù)某種算法淘汰某個(gè)頁(yè)面,以便裝入新的頁(yè)面2、頁(yè)表結(jié)構(gòu):同基本分頁(yè)管理方式一樣,為了將用戶(hù)程序地址空間中的邏輯地址變換為內(nèi)存空間中具體內(nèi)存塊的物理地址。在請(qǐng)求分頁(yè)系統(tǒng)中也需要頁(yè)表。只不過(guò)頁(yè)表的結(jié)構(gòu)發(fā)生了變化,其具體結(jié)構(gòu)如下:頁(yè)號(hào)物理塊號(hào)狀態(tài)位P訪問(wèn)字段A修改位M外存地址狀態(tài)位P:用于指示該頁(yè)是否已調(diào)入內(nèi)存。(2)訪問(wèn)字段A:用于記錄本頁(yè)在一段時(shí)間內(nèi)被訪問(wèn)的
次數(shù),或記錄本頁(yè)最近已有多長(zhǎng)時(shí)間未被訪問(wèn)。(3)修改位M:表示該頁(yè)在調(diào)入內(nèi)存后是否被修改過(guò)。
問(wèn)題:考慮為什么要有這一項(xiàng)?(4)外存地址:用于指出該頁(yè)在外存上的地址。其中:3、系統(tǒng)中應(yīng)該有缺頁(yè)中斷機(jī)構(gòu)在請(qǐng)求分頁(yè)系統(tǒng)中,每當(dāng)要訪問(wèn)的頁(yè)面不在內(nèi)存時(shí),便產(chǎn)生一缺頁(yè)中斷,請(qǐng)求OS將所缺之頁(yè)調(diào)入內(nèi)存。此時(shí)應(yīng)將缺頁(yè)的進(jìn)程掛起(調(diào)頁(yè)完成喚醒)如果內(nèi)存中有空閑塊,則分配一個(gè)塊,將要調(diào)入的頁(yè)裝入該塊,并修改頁(yè)表中相應(yīng)頁(yè)表項(xiàng)目若此時(shí)內(nèi)存中沒(méi)有空閑塊,則要淘汰某頁(yè)(若被淘汰頁(yè)在內(nèi)存期間被修改過(guò),則要將其寫(xiě)回外存)問(wèn)題:缺頁(yè)中斷同一般中斷的區(qū)別?相同點(diǎn):缺頁(yè)中斷作為中斷,同樣需要經(jīng)歷諸如保護(hù)CPU環(huán)境、分析中斷原因、轉(zhuǎn)入缺頁(yè)中斷處理程序進(jìn)行處理、恢復(fù)CPU環(huán)境等幾個(gè)步驟。不同點(diǎn):缺頁(yè)中斷是一種特殊的中斷,與一般中斷有明顯區(qū)別:(1)在指令執(zhí)行期間產(chǎn)生和處理中斷信號(hào)。(2)一條指令在執(zhí)行期間,可能產(chǎn)生多次缺頁(yè)中斷。4、系統(tǒng)中的地址變換機(jī)構(gòu)有所改進(jìn)請(qǐng)求分頁(yè)系統(tǒng)中的地址變換機(jī)構(gòu),是在基本分頁(yè)系統(tǒng)地址變換機(jī)構(gòu)的基礎(chǔ)上,再為實(shí)現(xiàn)虛擬存儲(chǔ)器而增加了某些功能而形成的。如:能夠產(chǎn)生和處理缺頁(yè)中斷,以及具有從內(nèi)存中換出一頁(yè)的功能等等。其過(guò)程如下圖所示:5、系統(tǒng)為進(jìn)程分配內(nèi)存時(shí),內(nèi)存的分配策略和分配算法,主要涉及三個(gè)問(wèn)題:(1)最小物理塊數(shù)的確定(2)物理塊的分配策略(3)物理塊的分配算法(1)最小物理塊數(shù)的確定最小物理塊數(shù),是指能保證進(jìn)程正常運(yùn)行所需的最小物理塊數(shù)。當(dāng)系統(tǒng)為進(jìn)程分配的物理塊數(shù)少于此值時(shí),進(jìn)程將無(wú)法運(yùn)行。進(jìn)程應(yīng)獲得的最小物理塊數(shù)與計(jì)算機(jī)的硬件結(jié)構(gòu)有關(guān),取決于指令的格式、功能和尋址方式。對(duì)于某些簡(jiǎn)單機(jī)器,若是單地址指令且采用直接尋址方式,最小物理塊數(shù)應(yīng)為2,如果該機(jī)器允許間接尋址,則至少要求3個(gè)物理塊。對(duì)于某些功能較強(qiáng)的機(jī)器,指令長(zhǎng)度可能是兩個(gè)或兩個(gè)以上字節(jié),至少要為進(jìn)程分配6個(gè)物理塊。(2)物理塊的分配策略在請(qǐng)求分頁(yè)系統(tǒng)中,可采取兩種內(nèi)存分配策略,即固定和可變分配策略。在進(jìn)行置換時(shí),也可以采取兩種策略,即全局置換和局部置換。于是可以組合出三種適合的策略。Ⅰ、固定分配局部置換基于進(jìn)程的類(lèi)型,或根據(jù)程序員、程序管理員的建議,為每個(gè)進(jìn)程分配一定數(shù)目的物理塊,在整個(gè)運(yùn)行期間不再改變。采用該策略時(shí),如果進(jìn)程在運(yùn)行中發(fā)現(xiàn)缺頁(yè),只能從該進(jìn)程在內(nèi)存中的n個(gè)頁(yè)面中選出一頁(yè)換出,然后再調(diào)入一頁(yè)。Ⅱ、可變分配全局置換在采用這種策略時(shí),先為系統(tǒng)中的每個(gè)進(jìn)程分配一定數(shù)目的物理塊,而OS自身也保持一個(gè)空閑的物理塊隊(duì)列。如果某進(jìn)程發(fā)生缺頁(yè)時(shí),由系統(tǒng)從空閑的物理塊隊(duì)列中,取出一個(gè)物理塊分配給該進(jìn)程,并將欲調(diào)入的頁(yè)裝入其中。Ⅲ、可變分配局部置換基于進(jìn)程的類(lèi)型,或根據(jù)程序員的要求,為每個(gè)進(jìn)程分配一定數(shù)目的物理塊,如果某進(jìn)程發(fā)生缺頁(yè)時(shí),只允許從該進(jìn)程在內(nèi)存的頁(yè)面中選出一頁(yè)換出,不會(huì)影響其他進(jìn)程執(zhí)行。如果進(jìn)程在運(yùn)行中頻繁發(fā)生缺頁(yè)中斷,則系統(tǒng)再為進(jìn)程分配若干物理塊;如果進(jìn)程在運(yùn)行中缺頁(yè)率特別低,則適當(dāng)減少分配給該進(jìn)程的物理塊。(3)物理塊分配算法在采用固定分配策略時(shí),如何將系統(tǒng)中可供分配的物理塊分配給各個(gè)進(jìn)程,可采用以下幾種算法:(1)平均分配算法將系統(tǒng)中所有可供分配的物理塊,平均分配給各個(gè)進(jìn)程。缺點(diǎn):未考慮各進(jìn)程本身的大小。(2)按比例分配算法根據(jù)進(jìn)程的大小按比例分配物理塊。假設(shè)系統(tǒng)中共有n個(gè)進(jìn)程,每個(gè)進(jìn)程的頁(yè)面數(shù)為Si,則系統(tǒng)中各進(jìn)程頁(yè)面數(shù)的總和為:又假定系統(tǒng)中可用的物理塊總數(shù)為m,則每個(gè)進(jìn)程所能分到的物理塊數(shù)為bi,將有:注意:b應(yīng)該取整,而且必須大于最小物理塊數(shù)。(3)考慮優(yōu)先權(quán)的分配算法以上兩種算法可以完成物理塊的分配,但沒(méi)有考慮到各個(gè)作業(yè)的輕重緩急程度。在實(shí)際應(yīng)用中,為了照顧重要的、急迫的作業(yè)盡快完成,應(yīng)為它分配較多的內(nèi)存空間。方法:一部分按比例地分配給各進(jìn)程;另一部分則根據(jù)各進(jìn)程的優(yōu)先權(quán),適當(dāng)?shù)卦黾悠湎鄳?yīng)份額后,分配給各進(jìn)程。6、請(qǐng)求分頁(yè)存儲(chǔ)管理方式中頁(yè)面大小的確定頁(yè)面太大:頁(yè)的碎片多,缺頁(yè)的機(jī)率提高頁(yè)面太?。喉?yè)表占用的內(nèi)存空間會(huì)增大頁(yè)面大小如何確定呢?我們來(lái)看一個(gè)例題。例:設(shè)內(nèi)存大小為M,作業(yè)的平均尺寸為J,一個(gè)頁(yè)表項(xiàng)占一個(gè)單位,問(wèn)最佳的頁(yè)面尺寸P應(yīng)該為多少?解:最佳頁(yè)面尺寸也就是空間浪費(fèi)最小的尺寸。在這我們認(rèn)為所有作業(yè)的平均頁(yè)內(nèi)碎片的大小為P/2則系統(tǒng)中浪費(fèi)空間的函數(shù)為:把它看作是P的函數(shù),因此有我們希望Y越小越好,則計(jì)算得:即:7、調(diào)頁(yè)策略1.何時(shí)調(diào)入頁(yè)面1)預(yù)調(diào)頁(yè)策略采用以預(yù)測(cè)為基礎(chǔ)的預(yù)調(diào)頁(yè)策略,將那些預(yù)計(jì)在不久之后便會(huì)被訪問(wèn)的頁(yè)面,預(yù)先調(diào)入內(nèi)存。目前預(yù)調(diào)頁(yè)的成功率僅為50%,主要用于進(jìn)程的首次調(diào)入時(shí),由程序員指出應(yīng)該先調(diào)入哪些頁(yè)。2)請(qǐng)求調(diào)頁(yè)策略當(dāng)程序在運(yùn)行中需要訪問(wèn)某部分程序和數(shù)據(jù)時(shí),若發(fā)現(xiàn)其所在的頁(yè)面不在內(nèi)存,便立即提出請(qǐng)求,由OS將其所需要的頁(yè)面調(diào)入內(nèi)存。優(yōu)點(diǎn):由請(qǐng)求調(diào)頁(yè)策略所確定調(diào)入的頁(yè),一定會(huì)被訪問(wèn);請(qǐng)求調(diào)頁(yè)策略比較容易實(shí)現(xiàn)。缺點(diǎn):每次僅調(diào)入一頁(yè),需花費(fèi)較大的系統(tǒng)開(kāi)銷(xiāo),增加了磁盤(pán)I/O的啟動(dòng)頻率2.從何處調(diào)入頁(yè)面在請(qǐng)求分頁(yè)系統(tǒng)中的外存分為文件區(qū)和對(duì)換區(qū)。每當(dāng)發(fā)生缺頁(yè)時(shí),系統(tǒng)應(yīng)從何處將缺頁(yè)調(diào)入內(nèi)存,可分成三種情況:系統(tǒng)擁有足夠的對(duì)換區(qū)空間:可以全部從對(duì)換區(qū)調(diào)入所需頁(yè)面,以提高調(diào)頁(yè)速度。系統(tǒng)缺少足夠的對(duì)換區(qū)空間:凡不會(huì)被修改的文件,直接從文件區(qū)調(diào)入;換出時(shí)不用換,再調(diào)入時(shí)仍從文件區(qū)調(diào)入。可能被修改的部分,換出時(shí)需調(diào)到對(duì)換區(qū),換入時(shí)從對(duì)換區(qū)調(diào)入。3.頁(yè)面調(diào)入過(guò)程每當(dāng)程序所要訪問(wèn)的頁(yè)面未在內(nèi)存時(shí),便向CPU發(fā)出一缺頁(yè)中斷,中斷處理程序首先保留CPU環(huán)境,分析中斷原因后,轉(zhuǎn)入缺頁(yè)中斷處理程序。主要過(guò)程如下:1、缺頁(yè)中斷2、查找頁(yè)表,找到該頁(yè)在外存的物理塊3、調(diào)入并修改頁(yè)表4、如果內(nèi)存已滿(mǎn),按照某種置換算法從內(nèi)存中選出一頁(yè)準(zhǔn)備換出5、再把做缺的頁(yè)面調(diào)入內(nèi)存,修改頁(yè)表中的相應(yīng)表項(xiàng)8、頁(yè)面置換算法概念:在進(jìn)程運(yùn)行過(guò)程中,若其訪問(wèn)的頁(yè)面不在內(nèi)存而需將其調(diào)入,但內(nèi)存已無(wú)空閑空間時(shí),需從內(nèi)存中調(diào)出一頁(yè)程序或數(shù)據(jù),送入磁盤(pán)的對(duì)換區(qū)。但應(yīng)將哪個(gè)頁(yè)面調(diào)出,需根據(jù)一定的算法來(lái)確定。把選擇換出頁(yè)面的算法稱(chēng)為頁(yè)面置換算法,其好壞直接影響系統(tǒng)的性能。一個(gè)好的置換算法應(yīng)具有較低的頁(yè)面更換頻率。從理論上講,應(yīng)將那些以后不會(huì)再訪問(wèn)的頁(yè)面換出,或者把那些在較長(zhǎng)時(shí)間內(nèi)不會(huì)再訪問(wèn)的頁(yè)面換出。常見(jiàn)的幾種頁(yè)面置換算法最佳置換算法(Optimal)先進(jìn)先出頁(yè)面置換算法(FIFO)最近最久未使用置換算法(LRU)簡(jiǎn)單Clock置換算法(最近未用算法NRU)改進(jìn)型Clock置換算法最少使用置換算法(LFU)頁(yè)面緩沖算法1.最佳置換算法其所選擇的被淘汰頁(yè)面,將是以后永不再用的,或者是在最長(zhǎng)(未來(lái))時(shí)間內(nèi)不再被訪問(wèn)的頁(yè)面。優(yōu)點(diǎn):保證獲得最低的缺頁(yè)率缺點(diǎn):無(wú)法預(yù)知一個(gè)進(jìn)程在內(nèi)存的若干個(gè)頁(yè)面,哪個(gè)在未來(lái)最長(zhǎng)時(shí)間內(nèi)不再被訪問(wèn)。算法無(wú)法實(shí)現(xiàn),但可評(píng)價(jià)其他算法2.先進(jìn)先出置換算法算法總是淘汰最先進(jìn)入內(nèi)存的頁(yè)面,即選擇在內(nèi)存中駐留時(shí)間最久的頁(yè)面予以淘汰。算法實(shí)現(xiàn)簡(jiǎn)單,只需把一個(gè)進(jìn)程已調(diào)入內(nèi)存的頁(yè)面,按先后次序鏈接成一個(gè)隊(duì)列,并設(shè)置一個(gè)指針(替換指針),使它總是指向最老的頁(yè)面。算法與進(jìn)程的實(shí)際運(yùn)行規(guī)律不相適應(yīng),因?yàn)檫M(jìn)程中的某些頁(yè)面經(jīng)常被訪問(wèn),但先進(jìn)先出置換算法不能保證這些頁(yè)面不被淘汰。先進(jìn)先出置換算法最直觀,但其性能較差,故應(yīng)用極少。3、
LRU置換算法的描述算法根據(jù)頁(yè)面調(diào)入內(nèi)存后的使用情況進(jìn)行決策。由于無(wú)法預(yù)測(cè)各頁(yè)面將來(lái)的使用情況,只能利用“最近的過(guò)去”作為“最近的將來(lái)”的近似,因此,LRU置換算法是選擇最近最久未使用的頁(yè)面予以淘汰。該算法賦予每個(gè)頁(yè)面一個(gè)訪問(wèn)字段,用來(lái)記錄一個(gè)頁(yè)面自上次被訪問(wèn)以來(lái)所經(jīng)歷的時(shí)間t,當(dāng)需淘汰一個(gè)頁(yè)面時(shí),選擇現(xiàn)有頁(yè)面中其t值最大的,即最近最久未使用的頁(yè)面予以淘汰。LRU置換算法雖然較好,但如何能具體實(shí)現(xiàn)這個(gè)算法呢?最容易想到,也最簡(jiǎn)單的方法:計(jì)時(shí)法。給頁(yè)表中的每一頁(yè)增加一個(gè)域,專(zhuān)門(mén)用來(lái)存放計(jì)時(shí)標(biāo)志,用來(lái)記錄該頁(yè)面自上次被訪問(wèn)以來(lái)所經(jīng)歷的時(shí)間。頁(yè)面每被訪問(wèn)一次,計(jì)時(shí)清0。要裝入新頁(yè)時(shí),從內(nèi)存的頁(yè)面中選出時(shí)間最長(zhǎng)的一頁(yè),調(diào)出,同時(shí)把各頁(yè)的計(jì)時(shí)標(biāo)志全部清0,重新開(kāi)始計(jì)時(shí)。計(jì)時(shí)法可以稍作改變,成為計(jì)數(shù)法:頁(yè)面被訪問(wèn),計(jì)數(shù)標(biāo)志清0,其余所有內(nèi)存頁(yè)面計(jì)數(shù)器加1;要裝入新頁(yè)時(shí),選出計(jì)數(shù)最大的一頁(yè)調(diào)出,同時(shí)所有計(jì)數(shù)器清0。這兩種方法確實(shí)很簡(jiǎn)單,但運(yùn)行效率卻不盡如人意。每個(gè)時(shí)刻,或是每調(diào)用一個(gè)頁(yè)面,就需要對(duì)內(nèi)存中所有頁(yè)面的訪問(wèn)情況進(jìn)行記錄和更新,麻煩且開(kāi)銷(xiāo)相當(dāng)大。另一種實(shí)現(xiàn)的方法:鏈表法。操作系統(tǒng)為每個(gè)進(jìn)程維護(hù)一條鏈表,鏈表的每個(gè)結(jié)點(diǎn)記錄一張頁(yè)面的地址。調(diào)用一次頁(yè)面,則把該頁(yè)面的結(jié)點(diǎn)從鏈中取出,放到鏈尾;要裝入新頁(yè),則把鏈頭的頁(yè)面調(diào)出,同時(shí)生成調(diào)入頁(yè)面的結(jié)點(diǎn),放到鏈尾。鏈表法可看作簡(jiǎn)單計(jì)時(shí)/計(jì)數(shù)法的改良,維護(hù)一個(gè)鏈表,自然要比維護(hù)所有頁(yè)面標(biāo)志要簡(jiǎn)單和輕松??墒?,這并沒(méi)有在數(shù)量級(jí)上改變算法的時(shí)間復(fù)雜度,每調(diào)用一個(gè)頁(yè)面,都要在鏈表中搜尋對(duì)應(yīng)結(jié)點(diǎn)并放至鏈尾的工作量并不算小。前面幾種方法都是單純使用軟件實(shí)現(xiàn)的算法。我們知道,硬件的速度比軟件的速度要快的多,因此如果能有特殊的硬件幫忙,我們可以得到更有效率的算法。常用硬件的方法有兩種:1、寄存器2、棧1)寄存器為每個(gè)在內(nèi)存中的頁(yè)面配置一個(gè)移位寄存器,用來(lái)記錄某進(jìn)程在內(nèi)存中各頁(yè)的使用情況。移位寄存器表示為R=RnRn-1Rn-2…R2R1則:在一個(gè)有n個(gè)頁(yè)框的機(jī)器中,寄存器就構(gòu)成了一個(gè)n*n的矩陣,開(kāi)始時(shí)所有位的初始值都是0。訪問(wèn)到第k頁(yè)時(shí),硬件把k行的位全設(shè)為1,之后再把k列的位置設(shè)為0。不難證明,在任意時(shí)候,二進(jìn)制值最小的行即為最久未使用的頁(yè)面,當(dāng)調(diào)換頁(yè)面時(shí),將其調(diào)出。
例:一個(gè)作業(yè)的共有5個(gè)頁(yè)面,訪問(wèn)次序?yàn)?、1、4、3、5,用寄存器法來(lái)驗(yàn)證每次置換時(shí)內(nèi)存中的最近最久未使用的頁(yè)面。000000000000000000000000011111000001111100000111110000011111111110000000000初始情況54321123452)棧利用一個(gè)特殊的棧來(lái)保存當(dāng)前使用的各個(gè)頁(yè)面的頁(yè)面號(hào)。每當(dāng)進(jìn)程訪問(wèn)某頁(yè)面時(shí),便將該頁(yè)面的頁(yè)面號(hào)從棧中移出,將它壓入棧頂。因此,棧頂始終是最新被訪問(wèn)頁(yè)面的編號(hào),而棧底則是最近最久未使用頁(yè)面的頁(yè)面號(hào)。6444774700407740711471004701147012247021147012270126設(shè)一進(jìn)程訪問(wèn)頁(yè)面的頁(yè)面號(hào)序列為:4,7,0,7,1,0,1,2,1,2,6隨著進(jìn)程的訪問(wèn),棧中頁(yè)面號(hào)的變化情況:4、clock置換算法LRU算法是比較好的算法,但需要硬件的支持,因此實(shí)際中多采用LRU算法的近似算法。算法步驟:1、每頁(yè)增設(shè)一個(gè)訪問(wèn)位,訪問(wèn)過(guò)的頁(yè)面訪問(wèn)位置12、將內(nèi)存中的頁(yè)鏈成一個(gè)循環(huán)隊(duì)列,查詢(xún)指針循環(huán)移動(dòng)其過(guò)程圖如下:入口查尋指針前進(jìn)一步指向下一個(gè)表目訪問(wèn)位=0?選擇該頁(yè)淘汰返回訪問(wèn)位置0YF例題說(shuō)明三種算法:5、改進(jìn)型Clock算法Clock算法加上置換代價(jià)(盡量選擇未修改過(guò)的頁(yè)面淘汰)每頁(yè)有訪問(wèn)頁(yè)u和修改位mu=0m=0未用過(guò),未修改過(guò),最佳淘汰頁(yè)面u=0m=1未用過(guò),但改過(guò),不是最佳淘汰頁(yè)面u=1m=0最近用過(guò),但未被修改,可能被再次使用u=1m=1最近用過(guò),被修改過(guò),可能被再次使用算法需要重復(fù)多次Clock算法從當(dāng)前位置找u=0,m=0的頁(yè)面,有則淘汰否則第二遍找u=0,m=1的頁(yè)面,同時(shí)將u置為0,有則淘汰否則第三遍找u=0,m=0的頁(yè)面,有則淘汰否則第四遍找u=0,m=1的頁(yè)面,(肯定會(huì)找到)6、其它置換算法1、最少使用置換算法(LFU)2、頁(yè)面緩沖算法(PBA)
最后,我們?cè)賮?lái)考慮一個(gè)問(wèn)題,分配的頁(yè)架數(shù)越多,作業(yè)執(zhí)行的速度是不是越快呢?例:假設(shè)進(jìn)程P共有5頁(yè),程序訪問(wèn)內(nèi)存的順序?yàn)?,2,3,4,1,2,5,1,2,3,4,5。當(dāng)分配到的頁(yè)架數(shù)是3和4時(shí),利用FIFO算法求出其缺頁(yè)次數(shù)?12341251234511114445555552
222111113333
3332222244缺*******
**
解:頁(yè)架數(shù)為三時(shí),其缺頁(yè)情況如下:頁(yè)面數(shù)=3缺頁(yè)次數(shù)=9缺頁(yè)率=75%
12341251234511111115555442
222222111153
33333322224
444444333缺****
******頁(yè)架數(shù)為四時(shí),其缺頁(yè)情況如下:頁(yè)面數(shù)=4
缺頁(yè)次數(shù)=10缺頁(yè)率=83.3%
Belady現(xiàn)象
是指在使用FIFO算法進(jìn)行內(nèi)存頁(yè)面置換時(shí),在未給進(jìn)程或作業(yè)分配足它所要求的全部頁(yè)面的情況下,有時(shí)出現(xiàn)的分配的頁(yè)面數(shù)增多,缺頁(yè)次數(shù)反而增加的奇怪現(xiàn)象。
到此我們對(duì)分頁(yè)存儲(chǔ)管理方式有了一個(gè)全面的了解,分頁(yè)管理方式的主要思路就是將一個(gè)作業(yè)分為大小相同的若干個(gè)頁(yè),然后將它們離散的分裝在內(nèi)存中的頁(yè)架上。頁(yè)式管理方式很好的解決了碎片的問(wèn)題,但同時(shí)也存在著一個(gè)這樣的問(wèn)題:那就是一個(gè)作業(yè)能不能隨意的分開(kāi)呢?如果要分的地方偏偏不能分怎么辦?因此我們提出了段式存儲(chǔ)管理的思想。我們知道,一個(gè)大的程序可以分解為若干個(gè)小的功能完整的子函數(shù)(程序)段,對(duì)于整個(gè)作業(yè)來(lái)說(shuō),一個(gè)子函數(shù)段在邏輯上是完整的,是可分的。因此我們采用動(dòng)態(tài)分區(qū)的方式將一個(gè)作業(yè)的子函數(shù)段離散的分裝在內(nèi)存中,就不會(huì)出現(xiàn)剛在我們?cè)诜猪?yè)管理中分頁(yè)時(shí)考慮的能不能分的問(wèn)題。這種將大的作業(yè)按照子函數(shù)段離散分裝在內(nèi)存中的思想就是段式存儲(chǔ)的思想。主程序main函數(shù)庫(kù)sin棧stack動(dòng)態(tài)數(shù)組array變量集data程序員眼中的一個(gè)程序一個(gè)程序由若干部分(段)組成,每個(gè)段有各自的特點(diǎn)、用途!通常在操作系統(tǒng)中還用段號(hào)代替段名。0213因此分段管理中每一條指令的地址其實(shí)都是一個(gè)二維地址,橫向找到段,從向找到段內(nèi)偏移地址。分段管理方式中各段裝入內(nèi)存的情況如下:01230213總結(jié)段式存儲(chǔ)管理的基本原理1.用戶(hù)程序的劃分在分段存儲(chǔ)管理方式中,作業(yè)地址空間被劃分為若干個(gè)段,每個(gè)段定義了一組邏輯信息,都有自己的名字(稱(chēng)為段名),通常還用段號(hào)代替段名。每段從0開(kāi)始編址,并采用一段連續(xù)地址空間。段長(zhǎng)由邏輯信息組的長(zhǎng)度決定。一個(gè)段的邏輯地址由段號(hào)(段名)和段內(nèi)地址所組成。2.內(nèi)存劃分內(nèi)存空間被動(dòng)態(tài)的劃分為若干個(gè)長(zhǎng)度不相同的區(qū)域,稱(chēng)為物理段,每個(gè)物理段由起始地址和長(zhǎng)度確定3.內(nèi)存分配分段式存儲(chǔ)管理的實(shí)現(xiàn)是基于動(dòng)態(tài)分區(qū)存儲(chǔ)管理的原理。系統(tǒng)為每個(gè)分段分配一個(gè)連續(xù)的分區(qū),而進(jìn)程中的各個(gè)段可以離散地裝入內(nèi)存中不同的分區(qū)中。段式存儲(chǔ)管理中的數(shù)據(jù)結(jié)構(gòu)--段表在段式存儲(chǔ)管理中,為使操作系統(tǒng)清楚了解內(nèi)存分配情況,須在系統(tǒng)中為每個(gè)進(jìn)程建立一張段映射表,簡(jiǎn)稱(chēng)“段表”。每個(gè)段在表中占有一個(gè)表項(xiàng),其中記錄了該段在內(nèi)存中的起始地址(段基址)和段的長(zhǎng)度。有了段表就可以實(shí)現(xiàn)從邏輯地址到內(nèi)存物理地址的映射。0213一個(gè)進(jìn)程需要記錄多個(gè)基址…基址長(zhǎng)度保護(hù)段號(hào)180K150KR0360K60KR/W170K110KR/W2460K40KR3進(jìn)程段表01230K70K180K330K360K420K460K500K系統(tǒng)區(qū)段表長(zhǎng)度段表始址段表寄存器物理地址>+越界中斷分段系統(tǒng)的地址變換機(jī)構(gòu)1002段號(hào)S位移量W段表92002008K5004K6006K1K段長(zhǎng)基址段號(hào)0123+82928K82928692主存通過(guò)上圖我們可以看出分段管理方式與分頁(yè)管理方式有著同樣的問(wèn)題,那就是:段式存儲(chǔ)管理中,因?yàn)榇嬖诙伪?,同時(shí)段表存放在內(nèi)存中,所以分段管理方式中每訪問(wèn)一個(gè)數(shù)據(jù),也需兩次訪問(wèn)內(nèi)存,降低了計(jì)算機(jī)的速率。解決方法:設(shè)置聯(lián)想寄存器(快表),用于保存最近常用的段表項(xiàng)。這樣,比起沒(méi)有地址變換的常規(guī)存儲(chǔ)器的存取速度來(lái)僅慢約10%~15%.分頁(yè)和分段的主要區(qū)別相似點(diǎn):采用離散分配方式,通過(guò)地址映射機(jī)構(gòu)實(shí)現(xiàn)地址變換不同點(diǎn):頁(yè)是信息的物理單位,分頁(yè)是為了滿(mǎn)足系統(tǒng)的需要,可以提高內(nèi)存的利用率,但可能破壞程序的邏輯關(guān)系;段是信息的邏輯單位,含有一組意義相對(duì)完整的信息,分段是為了滿(mǎn)足用戶(hù)的需要。頁(yè)的大小固定且由系統(tǒng)確定,由系統(tǒng)把邏輯地址分為頁(yè)號(hào)和頁(yè)內(nèi)地址,由機(jī)器硬件實(shí)現(xiàn);段的長(zhǎng)度不固定,取決于用戶(hù)程序,編譯程序?qū)υ闯绦蚓幾g時(shí)根據(jù)信息的性質(zhì)劃分。分頁(yè)的作業(yè)地址空間是一維的;分段的作業(yè)地址空間是二
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 資金管理與優(yōu)化實(shí)踐總結(jié)
- 廣西河池市環(huán)江縣2022-2023學(xué)年六年級(jí)上學(xué)期英語(yǔ)期末試卷
- 《演講中的自我介紹》課件
- 2025年山西省、陜西省、寧夏、青海省八省聯(lián)考高考地理模擬試卷
- 2023年廣西壯族自治區(qū)柳州市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2024年山西省朔州市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 《全身麻醉》課件
- 機(jī)電部的口號(hào)和目標(biāo)
- 遼寧省本溪市(2024年-2025年小學(xué)六年級(jí)語(yǔ)文)統(tǒng)編版綜合練習(xí)((上下)學(xué)期)試卷及答案
- 《慢阻肺健康大課堂》課件
- QC小組活動(dòng)管理制度
- 市區(qū)自備井排查整治工作實(shí)施方案
- 8位半萬(wàn)用表大比拼
- 品牌管理部績(jī)效考核指標(biāo)
- 《數(shù)學(xué)廣角——數(shù)與形》評(píng)課稿
- 瀝青路面施工監(jiān)理工作細(xì)則
- 物業(yè)設(shè)備設(shè)施系統(tǒng)介紹(詳細(xì)).ppt
- 公司走賬合同范本
- 獲獎(jiǎng)一等獎(jiǎng)QC課題PPT課件
- 人教版小學(xué)三年級(jí)數(shù)學(xué)上冊(cè)判斷題(共3頁(yè))
- 國(guó)際項(xiàng)目管理手冊(cè)The Project Manager’s Manual
評(píng)論
0/150
提交評(píng)論