操作系統(tǒng)概述(二)-創(chuàng)新互聯(lián)

操作系統(tǒng)內(nèi)存管理

網(wǎng)站的建設(shè)成都創(chuàng)新互聯(lián)公司專注網(wǎng)站定制,經(jīng)驗(yàn)豐富,不做模板,主營(yíng)網(wǎng)站定制開(kāi)發(fā).小程序定制開(kāi)發(fā),H5頁(yè)面制作!給你煥然一新的設(shè)計(jì)體驗(yàn)!已為成都資質(zhì)代辦等企業(yè)提供專業(yè)服務(wù)。

內(nèi)存管理包括內(nèi)存管理和虛擬內(nèi)存管理。
內(nèi)存管理包括程序裝入等概念、交換技術(shù)、連續(xù)分配管理方式和非連續(xù)分配管理方式(分頁(yè)、分段、段頁(yè)式)。
虛擬內(nèi)存管理包括虛擬內(nèi)存概念、請(qǐng)求分頁(yè)管理方式、頁(yè)面置換算法、頁(yè)面分配策略、工作集。

我們先來(lái)了解一下什么是內(nèi)存:

內(nèi)存是計(jì)算機(jī)系統(tǒng)的一個(gè)重要組成部分,只有在內(nèi)存中的程序才能被CPU所執(zhí)行,而且CPU運(yùn)行時(shí)所需要的數(shù)據(jù)和程序運(yùn)行空間都是從內(nèi)存中獲取,所以內(nèi)存性能的好壞直接影響我們計(jì)算機(jī)性能的好壞.

講到內(nèi)存我們可以講一下關(guān)于存儲(chǔ)器的分類:

存儲(chǔ)器按照功能分配可以分為高速緩沖存儲(chǔ)器(cache),主存儲(chǔ)器(內(nèi)存),外存儲(chǔ)器(外存):

高速緩沖存儲(chǔ)器(cache):cache又分為一級(jí)cache和二級(jí)cache,一級(jí)cache是位于CPU內(nèi)部的存儲(chǔ)器,它負(fù)責(zé)存儲(chǔ)并向CPU傳遞需要的數(shù)據(jù)和指令,二級(jí)cache位于CPU和主存儲(chǔ)器(DRAM)之間,二級(jí)的作用就是存儲(chǔ)那些CPU處理時(shí)需要用到、一級(jí)緩存又無(wú)法存儲(chǔ)的數(shù)據(jù)。CPU讀取數(shù)據(jù)時(shí),先從一級(jí)cache中尋找,找不到再?gòu)亩?jí)cache中尋找,有時(shí)還需要從三級(jí)cache中尋找.它們的共同點(diǎn)是讀取速度都比CPU慢比內(nèi)存快,內(nèi)存容量小,價(jià)格高. 緩存的出現(xiàn)主要是為了解決CPU運(yùn)算速度與內(nèi)存 讀寫速度不匹配的矛盾,因?yàn)镃PU運(yùn)算速度要比內(nèi)存讀寫速度快很多,這樣會(huì)使CPU花費(fèi)很長(zhǎng)時(shí)間等待數(shù)據(jù)到來(lái)或把數(shù)據(jù)寫入內(nèi)存。

主存儲(chǔ)器(內(nèi)存): 我們手機(jī)或者電腦所說(shuō)的運(yùn)行內(nèi)存便是主存儲(chǔ)器,程序運(yùn)行時(shí)會(huì)把處于外存的數(shù)據(jù)調(diào)換到主存中,主存里面存放著大量的CPU運(yùn)行時(shí)可能需要用到的數(shù)據(jù),它的特點(diǎn)時(shí)讀寫速度較快,大小較小.一般為4G-8G大小.

外存儲(chǔ)器(外存):外存也就是我們常說(shuō)的硬盤,它負(fù)責(zé)存放系統(tǒng)程序和大型數(shù)據(jù)文件及數(shù)據(jù)庫(kù),特點(diǎn)就是容量大,速度低.

按照存儲(chǔ)器的類別我們又可以分為以下幾類:

RAM
RAM(random access memory,隨機(jī)存取存儲(chǔ)器)。存儲(chǔ)單元的內(nèi)容可按需隨意取出或存入,且存取的速度與存儲(chǔ)單元的位置無(wú)關(guān)的存儲(chǔ)器。這種存儲(chǔ)器在斷電時(shí)將丟失其存儲(chǔ)內(nèi)容,故主要用于存儲(chǔ)短時(shí)間使用的程序。 按照存儲(chǔ)信息的不同,隨機(jī)存儲(chǔ)器又分為靜態(tài)隨機(jī)存儲(chǔ)器(Static RAM,SRAM)和動(dòng)態(tài)隨機(jī)存儲(chǔ)器(Dynamic RAM,DRAM)。

SRAMS
RAM(Static RAM,靜態(tài)隨機(jī)存儲(chǔ)器),不需要刷新電路,數(shù)據(jù)不會(huì)丟失,而且,一般不是行列地址復(fù)用的。但是他集成度比較低,不適合做容量大的內(nèi)存,一般是用在處理器的緩存里面。
SRAM其實(shí)是一種非常重要的存儲(chǔ)器,它的用途廣泛。SRAM的速度非??欤诳焖僮x取和刷新時(shí)能夠保持?jǐn)?shù)據(jù)完整性。SRAM內(nèi)部采用的是雙穩(wěn)態(tài)電路的形式來(lái)存儲(chǔ)數(shù)據(jù)。所以SRAM的電路結(jié)構(gòu)非常復(fù)雜。制造相同容量的SRAM比DRAM的成本高的多。正因?yàn)槿绱?,才使其發(fā)展受到了限制。因此目前SRAM基本上只用于CPU內(nèi)部的一級(jí)緩存以及內(nèi)置的二級(jí)緩存。僅有少量的網(wǎng)絡(luò)服務(wù)器以及路由器上能夠使用SRAM。

DRAM
Dynamic RAM,動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器,每隔一段時(shí)間就要刷新一次數(shù)據(jù),才能保存數(shù)據(jù)。而且是行列地址復(fù)用的,許多都有頁(yè)模式。SDRAM是其中的一種。

SDRAM
SDRAM(Synchronous DRAM,同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器),即數(shù)據(jù)的讀寫需要時(shí)鐘來(lái)同步。其存儲(chǔ)單元不是按線性排列的,是分頁(yè)的。
DRAM和SDRAM由于實(shí)現(xiàn)工藝問(wèn)題,容量較SRAM大。但是讀寫速度不如SRAM。
一般的嵌入式產(chǎn)品里面的內(nèi)存都是用的SDRAM。電腦的內(nèi)存也是用的這種RAM,叫DDR SDRAM,其集成度非常高,因?yàn)槭莿?dòng)態(tài)的,所以必須有刷新電路,每隔一段時(shí)間必須得刷新數(shù)據(jù)。

ROM
Read-Only Memory,只讀存儲(chǔ)器的總稱。
在微機(jī)的發(fā)展初期,BIOS都存放在ROM(Read Only Memory,只讀存儲(chǔ)器)中。ROM內(nèi)部的資料是在ROM的制造工序中,在工廠里用特殊的方法被燒錄進(jìn)去的,其中的內(nèi)容只能讀不能改,一旦燒錄進(jìn)去,用戶只能驗(yàn)證寫入的資料是否正確,不能再作任何修改。如果發(fā)現(xiàn)資料有任何錯(cuò)誤,則只有舍棄不用, 重新訂做一份。ROM是在生產(chǎn)線上生產(chǎn)的,由于成本高,一般只用在大批量應(yīng)用的場(chǎng)合。

PROM
可編程只讀存儲(chǔ)器,只能寫一次,寫錯(cuò)了就得報(bào)廢,現(xiàn)在用得很少了,好像那些成本比較低的OPT單片機(jī)里面用的就是這種存儲(chǔ)器吧。

EPROM 
EPROM(Erasable Programmable ROM,可擦除可編程ROM)芯片可重復(fù)擦除和寫入,解決了PROM芯片只能寫入一次的弊端。
EPROM芯片有一個(gè)很明顯的特征,在其正面的陶瓷封裝上,開(kāi)有一個(gè)玻璃窗口,透過(guò)該窗口,可以看到其內(nèi)部的集成電路,紫外線透過(guò)該孔照射內(nèi)部芯片就可以擦除其內(nèi)的數(shù)據(jù),完成芯片擦除的操作要用到EPROM擦除器。

EEPROMEEPROM (Electrically Erasable Programmable ROM,電可擦可編程只讀存儲(chǔ)器),一種掉電后數(shù)據(jù)不丟失的存儲(chǔ)芯片。EEPROM是可用戶更改的只讀存儲(chǔ)器,其可通過(guò)高于普通電壓的作用來(lái)擦除和重編程(重寫),即可以在電腦上或?qū)S迷O(shè)備上擦除已有信息并重新編程。不像EPROM芯片,EEPROM不需從計(jì)算機(jī)中取出即可修改,是現(xiàn)在用得比較多的存儲(chǔ)器,比如24CXX系列的EEPROM。
在一個(gè)EEPROM中,當(dāng)計(jì)算機(jī)在使用的時(shí)候是可頻繁地重編程的,EEPROM的壽命是一個(gè)很重要的設(shè)計(jì)考慮參數(shù)。

閃存(Flash)
閃存(FLASH)是一種非易失性存儲(chǔ)器,即斷電數(shù)據(jù)也不會(huì)丟失。因?yàn)殚W存不像RAM(隨機(jī)存取存儲(chǔ)器)一樣以字節(jié)為單位改寫數(shù)據(jù),因此不能取代RAM。   
閃存卡(Flash Card)是利用閃存(Flash Memory)技術(shù)達(dá)到存儲(chǔ)電子信息的存儲(chǔ)器,一般應(yīng)用在數(shù)碼相機(jī),掌上電腦,MP3等小型數(shù)碼產(chǎn)品中作為存儲(chǔ)介質(zhì),所以樣子小巧,有如一張卡片,所以稱之為閃存卡。根據(jù)不同的生產(chǎn)廠商和不同的應(yīng)用,閃存卡大概有U盤、SmartMedia(SM卡)、Compact Flash(CF卡)、MultiMediaCard(MMC卡)、Secure Digital(SD卡)、Memory Stick(記憶棒)、XD-Picture Card(XD卡)和微硬盤(MICRODRIVE)。這些閃存卡雖然外觀、規(guī)格不同,但是技術(shù)原理都是相同的。

NAND FLASH和NOR FLASH都是現(xiàn)在用得比較多的非易失性閃存。
程序的執(zhí)行過(guò)程

執(zhí)行程序要將程序和數(shù)據(jù)裝入內(nèi)存。將用戶源程序變?yōu)榭稍趦?nèi)存中執(zhí)行的程序,通常需要以下幾個(gè)步驟:

編譯:由編譯程序?qū)⒂脩粼创a編譯成若干個(gè)目標(biāo)模塊。
鏈接:由鏈接程序?qū)⒕幾g后形成的一組目標(biāo)模塊,以及所需庫(kù)函數(shù)鏈接在一起,形成一個(gè)完整的裝入模塊。
裝入:由裝入程序?qū)⒀b入模塊裝入內(nèi)存運(yùn)行。

程序的鏈接又分為以下幾類:

靜態(tài)鏈接:程序在執(zhí)行前,將各個(gè)模塊以及它們需要用到的庫(kù)函數(shù)鏈接成可執(zhí)行文件.
裝入時(shí)動(dòng)態(tài)鏈接:程序在編譯完之后得到一組目標(biāo)模塊,在裝入內(nèi)存時(shí)鏈接在一起.
運(yùn)行時(shí)動(dòng)態(tài)鏈接:程序在運(yùn)行前還是離散的,在運(yùn)行時(shí)把運(yùn)行所需要的模塊鏈接在一起.

程序的裝入分為以下幾類:

絕對(duì)裝入:在編譯時(shí),如果知道程序?qū)Ⅰv留在內(nèi)存的某個(gè)位置,編譯程序?qū)a(chǎn)生絕對(duì)地址的目標(biāo)代碼。絕對(duì)裝入程序按照裝入模塊中的地址,將程序和數(shù)據(jù)裝入內(nèi)存。由于程序中的邏輯地址與實(shí)際內(nèi)存地址完全相同,故不需對(duì)程序和數(shù)據(jù)的地址進(jìn)行修改。
可重定位裝入:在多道程序環(huán)境下,多個(gè)目標(biāo)模塊的起始地址通常都是從 0 開(kāi)始,程序中的其他地址都是相對(duì)于起始地址的,此時(shí)應(yīng)釆用可重定位裝入方式。根據(jù)內(nèi)存的當(dāng)前情況,將裝入模塊裝入到內(nèi)存的適當(dāng)位置。裝入時(shí)對(duì)目標(biāo)程序中指令和數(shù)據(jù)的修改過(guò)程稱為重定位,地址變換通常是在裝入時(shí)一次完成的,所以又稱為靜態(tài)重定位。
靜態(tài)重定位的特點(diǎn)是在一個(gè)作業(yè)裝入內(nèi)存時(shí),必須分配其要求的全部?jī)?nèi)存空間,如果沒(méi)有足夠的內(nèi)存,就不能裝入該作業(yè)。此外,作業(yè)一旦進(jìn)入內(nèi)存后,在整個(gè)運(yùn)行期間不能在內(nèi)存中移動(dòng),也不能再申請(qǐng)內(nèi)存空間。
動(dòng)態(tài)運(yùn)行時(shí)裝入,也稱為動(dòng)態(tài)重定位:程序在內(nèi)存中如果發(fā)生移動(dòng),就需要釆用動(dòng)態(tài)的裝入方式。裝入程序在把裝入模塊裝入內(nèi)存后,并不立即把裝入模塊中的相對(duì)地址轉(zhuǎn)換為絕對(duì)地址,而是把這種地址轉(zhuǎn)換推遲到程序真正要執(zhí)行時(shí)才進(jìn)行。因此,裝入內(nèi)存后的所有地址均為相對(duì)地址。這種方式需要一個(gè)重定位寄存器的支持。
動(dòng)態(tài)重定位的特點(diǎn)是可以將程序分配到不連續(xù)的存儲(chǔ)區(qū)中;在程序運(yùn)行之前可以只裝入它的部分代碼即可投入運(yùn)行,然后在程序運(yùn)行期間,根據(jù)需要?jiǎng)討B(tài)申請(qǐng)分配內(nèi)存;便于程序段的共享,可以向用戶提供一個(gè)比存儲(chǔ)空間大得多的地址空間。

系統(tǒng)分區(qū)

內(nèi)存分為兩個(gè)區(qū)域,一個(gè)用來(lái)存放操作系統(tǒng),一個(gè)用來(lái)存放用戶進(jìn)程,當(dāng)進(jìn)程調(diào)入內(nèi)存是我們需要為它分配一塊內(nèi)存空間,在這里我們采用的是連續(xù)內(nèi)存分配,一個(gè)進(jìn)程存放在連續(xù)的一段內(nèi)存空間內(nèi)。
內(nèi)存保護(hù)

內(nèi)存保護(hù)是為了防止用戶進(jìn)程影響操作系統(tǒng)或者用戶進(jìn)進(jìn)程影響其他進(jìn)程,操作系統(tǒng)通過(guò)采用重定位寄存器和界地址寄存器來(lái)實(shí)現(xiàn)這種保護(hù),重定位寄存器里面包含最小物理地址,界地址寄存器包含最小的邏輯地址,每個(gè)進(jìn)程的邏輯地址必須小于界地址寄存器,內(nèi)存管理單元?jiǎng)討B(tài)地將邏輯地址與界地址進(jìn)行比較,若未發(fā)生越界,則再加上重定位寄存器里的地址值找到物理地址,再送到內(nèi)存單元。
連續(xù)內(nèi)存分配管理

為了能將程序裝入內(nèi)存,必須為它分配一定大小的內(nèi)存空間,連續(xù)分配是最早出現(xiàn)的一種存儲(chǔ)器分配方式·,該分配方式為用戶程序分配了一個(gè)連續(xù)的內(nèi)存空間,即程序的代碼或者數(shù)據(jù)的邏輯地址相鄰 ,體現(xiàn)在內(nèi)存空間分配時(shí)物理地址的相鄰。連續(xù)分配方式可分為四類:?jiǎn)我贿B續(xù),固定分區(qū)分配,動(dòng)態(tài)分區(qū)分配以及可重定位分區(qū)分配(緊湊)算法四種方式:

單一連續(xù)分配。內(nèi)存此時(shí)分為系統(tǒng)區(qū)和用戶區(qū),系統(tǒng)區(qū)只分配給操作系統(tǒng)使用,通常在低地址部分;用戶區(qū)為用戶提供。內(nèi)存中只有一道程序,也無(wú)需進(jìn)行內(nèi)存保護(hù)。無(wú)外部碎片但是有內(nèi)部碎片,且存儲(chǔ)器效率低下。
固定分區(qū)分配。將內(nèi)存空間劃分為若干個(gè)固定大小的區(qū)域,每個(gè)分區(qū)只能裝入一道作業(yè)。當(dāng)有空閑分區(qū)時(shí),便可以再?gòu)耐獯娴暮髠渥鳂I(yè)隊(duì)列中,選擇適當(dāng)大小的作業(yè)裝入該區(qū),分為(分區(qū)大小相等和分區(qū)大小不相等兩種方式)無(wú)外部碎片但是有內(nèi)部碎片(分區(qū)內(nèi)部有空間的浪費(fèi)),且存儲(chǔ)器效率低下,但是可存在多道程序,是用于多道程序并發(fā)執(zhí)行的最簡(jiǎn)單的內(nèi)存分配方式。

動(dòng)態(tài)分區(qū)分配。也成為可變分區(qū)分配,它不預(yù)先對(duì)內(nèi)存進(jìn)行劃分,而是在進(jìn)程裝入內(nèi)存時(shí),根據(jù)進(jìn)程的大小動(dòng)態(tài)的建立分區(qū),并使分區(qū)的大小正好適合進(jìn)程的需要,其分區(qū)的數(shù)目和大小是可變的。但是隨著時(shí)間的推移,很容易產(chǎn)生外部碎片,外部碎片指的是分區(qū)以外的存儲(chǔ)空間被浪費(fèi)
基于順序搜索的動(dòng)態(tài)分區(qū)分配算法:

首次適應(yīng)算法,空閑分區(qū)以地址遞增的方式鏈接,分配內(nèi)存時(shí)順序查找,找到大小滿足要求的第一個(gè)空閑分區(qū),通常該算法是最快最好的也是最簡(jiǎn)單的。http://www.daiqiyang.com
最佳適應(yīng)算法,空閑分區(qū)以容量遞增形成分區(qū)鏈,找到第一個(gè)滿足要求的空閑分區(qū),實(shí)際上新能不佳,因?yàn)槊看巫罴逊峙渫ǔ?huì)留下很小的難以利用的內(nèi)存塊,產(chǎn)生外部碎片。
最壞適應(yīng)算法,又稱大適應(yīng)算法,空閑分區(qū)以容量遞減形成分區(qū)鏈,找到第一個(gè)滿足要求的空閑分區(qū),也就是挑選出大的分區(qū)性能較差,因?yàn)樗惴ㄩ_(kāi)銷也是需要考慮的一部分
鄰近適應(yīng)算法,又稱循環(huán)首次適應(yīng)算法,也就是從首次適應(yīng)算法中演變而來(lái),不同的是,從上次查找結(jié)束的位置開(kāi)始繼續(xù)查找性能較差

分段和分頁(yè)機(jī)制

要理解分段和分頁(yè),首先我們要知道為什么會(huì)出現(xiàn)分段和分頁(yè)這兩項(xiàng)技術(shù);

首先我們要知道分段和分頁(yè)都是為了更好的管理計(jì)算機(jī)的資源--內(nèi)存。

在分段技術(shù)還沒(méi)出來(lái)之前,程序在內(nèi)存運(yùn)行之前都是先從內(nèi)存中尋找找到連續(xù)的一片地址空間,比如我們程序A需要10M的空間,那么就要從內(nèi)存空間里尋找出10M的地址空間,然后再把A裝入進(jìn)去,如果沒(méi)找到連續(xù)的空間,那么就不予分配。

從這里我們可以看出以前的內(nèi)存分配的缺點(diǎn);

地址空間不隔離,假如我們兩個(gè)程序A和B,A存放在0x000001~0x0000999這個(gè)內(nèi)存空間,B存放在0X0001000~0x0001100這個(gè)空間里,那如果我們對(duì)A的操作地址0x0000500誤寫為0x0001050,那么我們不僅沒(méi)有對(duì)A實(shí)施正確的操作,還影響了程序B的執(zhí)行。
程序地址的不確定,因?yàn)槲覀儸F(xiàn)在都是對(duì)內(nèi)存地址直接操作,所以我們程序需要寫死要操作的某個(gè)內(nèi)存的地址,但是如果我們想要操作地址0x0000001000,我們就必須寫死我們要操作的地址為0x0000001000,但是這樣問(wèn)題來(lái)了,我們程序運(yùn)行時(shí)在內(nèi)存的地址在不同時(shí)候可能不一樣,比如我們第一次可能在內(nèi)存中的地址為0x0000000001~0x00000100000;那么我們第一次操作可能就沒(méi)有問(wèn)題,但是第二次運(yùn)行時(shí)他在內(nèi)存中的地址可能就變?yōu)?x000000100000~0x00000110000,那么我們第二次運(yùn)行是我們想要操作的地址根本程序占有的內(nèi)存里,我們可能又誤操作其他程序的數(shù)據(jù)了。
內(nèi)存使用率低,假如我們內(nèi)存大小為70M,我們有A B C三個(gè)程序在內(nèi)存中分別連續(xù)占20M  10M  30M的地址空間,當(dāng)我們B運(yùn)行完被置換出來(lái)時(shí)A和C中間就有10M的內(nèi)存空間,然后我們有大小為11M的程序D想要裝入內(nèi)存,然后它從內(nèi)存中尋找一個(gè)11M的連續(xù)地址空間,然后我找到了兩個(gè)10M的地址空間,但是它們是不連續(xù)的,所以程序沒(méi)辦法裝入內(nèi)存中,只能等待A或者C運(yùn)行完才能裝入,這樣這20M的內(nèi)存空閑地址就沒(méi)有被利用起來(lái)。

為了解決這些問(wèn)題,人們就去尋找一種辦法來(lái)解決它,所以分段技術(shù)就出來(lái)了:

為了實(shí)現(xiàn)分段技術(shù),人們又引入了虛擬地址空間的概念,什么是虛擬地址空間呢,就是這個(gè)空間真實(shí)不存在,只是我們?yōu)榱烁玫夭僮魑锢淼刂范龅囊粋€(gè)概念,簡(jiǎn)單來(lái)說(shuō)就是我們的程序在運(yùn)行前它的操作都是虛擬地址;例如,程序A的虛擬地址空間是0x00000100~0x100000200,此時(shí),我們不僅需要一塊連續(xù)的物理內(nèi)存來(lái)存放A,還需要把A的虛擬地址映射到物理地址空間,可能A的虛擬地址空間是從0x00000100~0x100000200映射到物理地址空間0x00000000~0x00000100;

那么分段是什么呢?

分段機(jī)制就是把虛擬內(nèi)存組織成一些長(zhǎng)度可變的稱為段的內(nèi)存單元,通過(guò)段表來(lái)管理這些段,每個(gè)段定義了一組邏輯信息,每個(gè)程序可以有多個(gè)段,如數(shù)據(jù)段,代碼段等,每個(gè)段都是一段連續(xù)的地址空間,段的長(zhǎng)度由程序的大小決定,所以各個(gè)段的長(zhǎng)度不等,所以段的地址空間是二維的,由段首地址和段長(zhǎng)組成;

分段的作用是什么?

段的共享和保護(hù):在這里我們講一下段的保護(hù)機(jī)制,段的保護(hù)機(jī)制分為越界檢查和權(quán)限檢查,越界檢查是段表寄存器中存放著段表信息,里面包括段的起始地址和段的長(zhǎng)度,在進(jìn)行存儲(chǔ)訪問(wèn)時(shí),首先將邏輯地址空間的段號(hào)與段表長(zhǎng)度進(jìn)行比較,如果段號(hào)等于或大于段表長(zhǎng)度,將發(fā)出地址越界中斷信號(hào),其次還要檢查段內(nèi)地址是否大于段長(zhǎng),若大于段長(zhǎng),將產(chǎn)生越界中斷信號(hào),從而保證每個(gè)進(jìn)程只能在自己的地址空間運(yùn)行。權(quán)限檢查就是在段表的每個(gè)表項(xiàng)中,都設(shè)置了‘存取控制’字段,用于規(guī)定對(duì)該段的訪問(wèn)方式,通常的訪問(wèn)方式有只讀,只執(zhí)行,讀/寫。通過(guò)段保護(hù)和共享可以解決一個(gè)程序?qū)ζ渌绦虻挠绊懙膯?wèn)題。

段的地址變換機(jī)制:分段管理可以提供邏輯地址到物理地址的轉(zhuǎn)換,邏輯地址到物理地址通過(guò)地址映射表完成,所以只有虛擬地址沒(méi)有改變,那么我們就不需要關(guān)心程序在內(nèi)存的物理地址是什么,所以通過(guò)段的地址映射機(jī)制可以解決問(wèn)題2。

但是我們的問(wèn)題3還是沒(méi)有解決,內(nèi)存的利用率還是沒(méi)有解決,所以我們引出了分頁(yè)管理

分頁(yè)管理是把主存空間分為大小相等且固定的塊,塊的大小較小,作為主存的基本單位,頁(yè)表存儲(chǔ)著這些頁(yè)的基本信息,每個(gè)進(jìn)程對(duì)應(yīng)一個(gè)頁(yè)表,(進(jìn)程中的塊稱之為頁(yè),主存中的塊稱為頁(yè)框,外存中稱之為塊,進(jìn)程在執(zhí)行時(shí),向主存申請(qǐng)塊,就產(chǎn)生了頁(yè)與頁(yè)框的一一對(duì)應(yīng)關(guān)系)如圖:

如何利用分頁(yè)機(jī)制解決外部碎片呢,我們利用分頁(yè)單元把一組非連續(xù)的空閑頁(yè)框映射到連續(xù)的線性地址,這樣他們?cè)谖锢砩喜贿B續(xù)但是在邏輯上是連續(xù)的,這樣就是有效的解決外部碎片問(wèn)題。

而在linux中采用了著名的伙伴算法來(lái)解決外部碎片問(wèn)題。把所有的空閑頁(yè)框分組為11個(gè)塊鏈表,每個(gè)鏈表分別包含大小為1,2,4,8,16,32,64,128,256,512,1024個(gè)連續(xù)的頁(yè)框,對(duì)1024個(gè)頁(yè)框的大請(qǐng)求對(duì)應(yīng)著4MB大小的連續(xù)RAM(每頁(yè)大小為4KB),每個(gè)塊的第一個(gè)頁(yè)框的物理地址是該塊大小的整數(shù)倍,例如,大小為16個(gè)頁(yè)框的塊,其起始地址是16*2^12的倍數(shù)。
我們通過(guò)一個(gè)例子來(lái)說(shuō)明伙伴算法的工作原理,假設(shè)現(xiàn)在要請(qǐng)求一個(gè)256個(gè)頁(yè)框的塊(1MB),算法步驟如下:
? 在256個(gè)頁(yè)框的鏈表中檢查是否有一個(gè)空閑快,如果沒(méi)有,查找下一個(gè)更大的塊,如果有,請(qǐng)求滿足。
? 在512個(gè)頁(yè)框的鏈表中檢查是否有一個(gè)空閑塊,如果有,把512個(gè)頁(yè)框的空閑塊分為兩份,第一份用于滿足請(qǐng)求,第二份鏈接到256個(gè)頁(yè)框的鏈表中。如果沒(méi)有空閑塊,繼續(xù)尋找下一個(gè)更大的塊。如圖:

以上過(guò)程的逆過(guò)程,就是頁(yè)框塊的釋放過(guò)程,也是該算法名字的由來(lái),內(nèi)核試圖把大小為B的一對(duì)空閑伙伴塊合并為一個(gè)2B的單獨(dú)塊,滿足以下條件的兩個(gè)塊稱之為伙伴:
? 兩個(gè)塊具有相同的大小http://www.daiqiyang.com
? 他們的物理地址是連續(xù)的
第一塊的第一個(gè)頁(yè)框的物理地址是2 B 2^12
該算法是遞歸的,如果它成功合并了B,就會(huì)試圖去合并2B,以再次試圖形成更大的塊。

分段和分頁(yè)是區(qū)別:

1、分頁(yè)機(jī)制會(huì)使用大小固定的內(nèi)存塊,而分段管理則使用了大小可變的塊來(lái)管理內(nèi)存。

2、分頁(yè)使用固定大小的塊更為適合管理物理內(nèi)存,分段機(jī)制使用大小可變的塊更適合處理復(fù)雜系統(tǒng)的邏輯分區(qū)。

3、段表存儲(chǔ)在線性地址空間,而頁(yè)表則保存在物理地址空間。

4,分頁(yè)的作業(yè)地址空間是一維的,即單一的線性空間,程序員只須利用一個(gè)記憶符(線性地址的16進(jìn)制表示),即可表示一地址。

分段的作業(yè)地址空間是二維的,程序員在標(biāo)識(shí)一個(gè)地址時(shí),既需給出段名(比如數(shù)據(jù)段、代碼段和堆棧段等),又需給出段內(nèi)地址。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

新聞標(biāo)題:操作系統(tǒng)概述(二)-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://www.muchs.cn/article36/dgiesg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、用戶體驗(yàn)、App開(kāi)發(fā)微信小程序、面包屑導(dǎo)航服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)