qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          操作系統(tǒng)存儲(chǔ)器管理筆記

           操作系統(tǒng)裝入程序到內(nèi)存中幾種方法:
            1:絕對(duì)裝入方式(Absolute Loading Mode):
            即程序在編譯時(shí)就產(chǎn)生物理地址的目標(biāo)代碼,編譯完成后,不在需要對(duì)程序和數(shù)據(jù)進(jìn)行修改,程序員也可以在程序中賦值物理地址。
            缺點(diǎn):不靈活,要求程序員對(duì)內(nèi)存相當(dāng)熟悉,只適用于單道程序環(huán)境。
            2:靜態(tài)重定位裝入方式(Relocation Loading Mode):
            即程序在編譯時(shí)使用的是邏輯地址,在裝入的時(shí)候,臨時(shí)將邏輯地址轉(zhuǎn)換成物理地址。到內(nèi)存中后的地址為物理地址。這種方法叫做靜態(tài)重定位裝入。
            缺點(diǎn):不靈活,當(dāng)進(jìn)程有需要?jiǎng)討B(tài)改變地址時(shí)則無法改變。
            3:動(dòng)態(tài)重定位裝入方式(Dynamic Run-time Loading)
            即程序在裝入內(nèi)存之后,在內(nèi)存中仍然使用邏輯地址,只有在取該數(shù)據(jù)時(shí),才轉(zhuǎn)換成物理地址。這樣做會(huì)影響到程序的執(zhí)行速度。因此,一般將轉(zhuǎn)換成物理地址的過程做成硬件來完成轉(zhuǎn)換,需要添加一個(gè)地址轉(zhuǎn)換寄存器來支持。
            二 程序的鏈接過程
            1:靜態(tài)鏈接(Static Linking)
            程序在編譯之后形成目標(biāo)模塊,然后將目標(biāo)模塊和庫函數(shù)組合成一個(gè)模塊,不再分開的鏈接。
            缺點(diǎn):消耗內(nèi)存的資源很大,往往有的庫函數(shù)或模塊在程序的運(yùn)行過程中沒有使用,極大的浪費(fèi)了內(nèi)存空間。
            2:裝入是動(dòng)態(tài)鏈接(Load-time Dynamic Linking)
            程序在編譯時(shí)形成目標(biāo)模塊代碼,在需要調(diào)入內(nèi)存時(shí),鏈接成一個(gè)模塊裝入內(nèi)存。
            缺點(diǎn):和靜態(tài)鏈接一樣,對(duì)內(nèi)存消耗大。
            3:運(yùn)行時(shí)動(dòng)態(tài)鏈接(Runtime Dynamic Linking)
            程序在編譯時(shí)形成目標(biāo)模塊,在調(diào)入內(nèi)存時(shí)調(diào)入需要執(zhí)行的代碼模塊,當(dāng)用到某個(gè)庫函數(shù)或模塊式時(shí),由操作系統(tǒng)動(dòng)態(tài)的調(diào)入內(nèi)存執(zhí)行。
            三 內(nèi)存連續(xù)分配方式
            1:?jiǎn)我贿B續(xù)內(nèi)存分配
            把內(nèi)存區(qū)域中劃分OS分區(qū)和應(yīng)用進(jìn)程區(qū)域兩大塊,互不干涉。在應(yīng)用進(jìn)程區(qū)域的內(nèi)存按照單一的連續(xù)分配原則分配給各個(gè)進(jìn)程。
            使用范圍:?jiǎn)斡脩簦瑔稳蝿?wù)的操作系統(tǒng)中。如CP/M,MS-DOS操作系統(tǒng)。
            2:固定分區(qū)分配
            a.固定分區(qū)大小一致分配
            將內(nèi)存劃分為大小一致的多個(gè)分區(qū),這種分配方式缺乏靈活性,當(dāng)進(jìn)程太小造成空間浪費(fèi),太大則無法分配空間,導(dǎo)致裝入失敗。
            b.固定分區(qū)大小不一致分配
            將內(nèi)存劃分為大小不一致的多個(gè)分區(qū)。這樣可根據(jù)進(jìn)程大小適當(dāng)分配區(qū)域。
            分配具體操作:將各個(gè)分區(qū)按照大小排隊(duì),用一張分區(qū)表存儲(chǔ),該表中包含分區(qū)的大小,起始地址,和使用情況
            使用范圍:IBM360的MFT

           3:動(dòng)態(tài)分區(qū)分配
            根據(jù)進(jìn)程的大小動(dòng)態(tài)的分配內(nèi)存空間,需要為其配置數(shù)據(jù)結(jié)構(gòu),分配算法,分區(qū)的分配和回收操作。
            數(shù)據(jù)結(jié)構(gòu):
            空閑分區(qū)表,用于記錄空閑分區(qū)的大小,起始地址,分區(qū)序號(hào)等信息
            空閑分區(qū)鏈,在每個(gè)分區(qū)的起始地址部分設(shè)置一個(gè)分區(qū)信息數(shù)據(jù)結(jié)構(gòu),包含前后分區(qū)指針,分區(qū)尾部設(shè)置分區(qū)狀態(tài)和分區(qū)大小表目
            分區(qū)分配算法:
            a.首次適應(yīng)算法(first fit)
            在為進(jìn)程分配分區(qū)時(shí),從頭到尾查找空閑分區(qū)表,若查找到分區(qū)的大小大于或者等于要分配的進(jìn)程大小則為其分配該分區(qū)。該算法的傾向于利用內(nèi)存中的低地址空間,而保留了大部分高地址空間
            優(yōu)點(diǎn):為大進(jìn)程留下了足夠的空間。
            缺點(diǎn):產(chǎn)生很多內(nèi)存碎塊,嚴(yán)重浪費(fèi)了寶貴的內(nèi)存資源。
            b.循環(huán)首次適應(yīng)算法(next fit)
            和首次適應(yīng)算法不同的是,在查找到適應(yīng)的分區(qū)之后,以后再次分配內(nèi)存空間時(shí),從上次查找的位置開始進(jìn)行分配。
            優(yōu)點(diǎn):使內(nèi)存使用空間分布的比較均勻,減少了查找空閑空間的時(shí)間。
            缺點(diǎn):這樣查找會(huì)缺乏大的內(nèi)存空間
            c.最佳適應(yīng)算法(best fit)
            將空閑分區(qū)表按照分區(qū)的大小從小到大排好隊(duì),每次分配空閑分區(qū)時(shí)順序查找,找到適應(yīng)的分區(qū)則分配進(jìn)程,必然每次都是最佳分配。然而在宏觀上不一定是最佳的,每次分配后都會(huì)留下難以利用的內(nèi)存碎塊。
            b.最壞適應(yīng)算法(worst fit)
            將空閑分區(qū)表按從大到小的順序排好隊(duì),依次掃描空閑分區(qū)表,每次分配給進(jìn)程時(shí),都將最大的內(nèi)存空間分配之。
            優(yōu)點(diǎn):每次殘留的內(nèi)存碎塊都不至太小。對(duì)中小進(jìn)程有利,對(duì)大進(jìn)程最不利。查找效率高。
            缺點(diǎn):是內(nèi)存中缺乏大的內(nèi)存空間。
            以上四種都稱為順序搜索法。
            e.最快適應(yīng)算法(fast fit)
            該算法也稱為分類搜索法,將空閑分區(qū)表中大小大體相同的分區(qū)單獨(dú)放到一個(gè)空閑分區(qū)表中,這樣在操作系統(tǒng)中就有多個(gè)空閑分區(qū)表,再建立一個(gè)空閑分區(qū)索引表,每個(gè)索引指向一個(gè)空閑分區(qū)表,每類空閑分區(qū)的大小可以按照2kb,4kb,8kb來劃分。當(dāng)要查找空閑分區(qū)時(shí)就可以通過查找索引來快速查找合適的分區(qū)。
            優(yōu)點(diǎn):查找效率高,能保留大的分區(qū),滿足對(duì)大空間的需要,也不會(huì)產(chǎn)生內(nèi)存碎片。
            缺點(diǎn):在分區(qū)歸還內(nèi)存時(shí)算法復(fù)雜,系統(tǒng)開銷大,在分配時(shí)一個(gè)分區(qū)只給一個(gè)進(jìn)程,或多或少存在一定浪費(fèi)。而且在分區(qū)劃分越細(xì)的情況下,浪費(fèi)越嚴(yán)重。這是典型的以時(shí)間換空間的做法。
            伙伴系統(tǒng)
            伙伴系統(tǒng)是固定分區(qū)和動(dòng)態(tài)分區(qū)分配的折中方法,在伙伴系統(tǒng)中,不論已經(jīng)劃分的分區(qū)還是沒有劃分的分區(qū)大小都統(tǒng)一為2^k次冪,k可以為1,2,3......m 內(nèi)存的區(qū)域最小為2^1
            最大為2^m次冪,也就是整個(gè)內(nèi)存區(qū)域。在每次分配內(nèi)存時(shí)就分配2^i次冪大小的空間,這樣在多次分配后就會(huì)產(chǎn)生多個(gè)不連續(xù)的內(nèi)存空間。將這些大小相同的內(nèi)存空間分成一類,建立一個(gè)空閑分區(qū)鏈表,當(dāng)要分配內(nèi)存大小為m時(shí),就比較2^i<m<2^i+1的大小,查找鏈表中是否存在2^i+1,若存在就將其分配給進(jìn)程。若不存在就搜索2^i+2,若存在該大小的內(nèi)存區(qū)域,就將其分成大小的為2^i+1的兩個(gè)伙伴,一個(gè)用于分配給進(jìn)程,一個(gè)加入2^i+1的空閑鏈表中。若沒有找到,則依次類推。
            在進(jìn)行內(nèi)存回收時(shí),如果有2^i空閑區(qū)域則查找是否存在相同大小的空間,存在則合并為2^i+1,再搜索是否存在和2^i+1相同的空間若存在則再次合并。.若不存在,則加入2^i中。
            伙伴系統(tǒng)在時(shí)間性能方面比分類搜索差,比順序搜索要優(yōu)勝。在空間性能方面則相反。在多處理機(jī)的系統(tǒng)中得到大量的應(yīng)用。

          posted on 2013-11-29 10:53 順其自然EVO 閱讀(220) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2013年11月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 灯塔市| 监利县| 米泉市| 安康市| 瑞安市| 南乐县| 安达市| 繁昌县| 江北区| 福安市| 奉节县| 普洱| 焉耆| 龙南县| 五常市| 莆田市| 九台市| 罗田县| 通化县| 安阳县| 礼泉县| 海口市| 措美县| 郸城县| 新昌县| 新沂市| 资兴市| 金寨县| 闵行区| 闻喜县| 乐亭县| 称多县| 汉源县| 舒城县| 石林| 鄂州市| 长丰县| 杂多县| 加查县| 许昌县| 凯里市|