《實用操作系統(tǒng)》復習要點
《《實用操作系統(tǒng)》復習要點》由會員分享,可在線閱讀,更多相關(guān)《《實用操作系統(tǒng)》復習要點(12頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、2011 年《實用操作系統(tǒng)》期末考試復習要點 一、考試題型說明 考試題型包括以下幾部分: 1、名詞解釋(共 5 題,每題 4 分,計 20 分) 2、計算題(共 1題,每題 15 分,計 15分) 3、簡答題(共 5題,每題 6分,計 30 分) 4、分析題(共 1 題,每題 10分,計 10分) 5、程序分析題(共 1題,每題 15 分,計 15 分) 6、程序設(shè)計題(共 1 題,每題 10 分,計 10 分) 二、復習說明 本次考試側(cè)重考察基本知識的掌握情況,所有考試內(nèi)容都來自課程 ppt 。大家在復習時,要 結(jié)合復習提綱,多看 ppt ,但不需要死記硬背。另外,講義
2、中的程序代碼非常多,這些代碼 主要用作大家課后理解相關(guān)實現(xiàn)機制的補充材料。 因此, 大家沒有必要去仔細研讀代碼。 需 要提醒的是,在試卷中, 也會給出一段程序代碼, 需要大家說明其中的實現(xiàn)機制。 試卷中這 部分代碼也僅僅是用于輔助大家去回想 ppt 中的相關(guān)內(nèi)容,而不是考察大家對該代碼細節(jié) (每個語句)的理解。 名詞解釋要求大家能根據(jù)自己的理解、用簡單的言語解釋相關(guān)概念。 計算題要求大家能結(jié)合相關(guān)知識, 給出計算結(jié)果。 評分時按步計算, 請大家務必寫出求解過 程。 簡單題希望大家通過對比分析、根據(jù)自己的理解扼要說明相關(guān)概念及實現(xiàn)機制的特點。 分析題要求大家根據(jù)題目要求,構(gòu)造出內(nèi)核相關(guān)算法
3、的實現(xiàn)機制示意圖。 程序分析題要求大家結(jié)合一段程序代碼,扼要說明內(nèi)核相關(guān)機制的實現(xiàn)過程。 程序設(shè)計題要求大家根據(jù)任務要求,寫出相應代碼。該題與其他課程的程序設(shè)計要求類似, 但評分時不會過分在意語法方面的細節(jié)錯誤。 三、復習提綱 (一)第一講 Linux 系統(tǒng)分析基礎(chǔ) 1 、單內(nèi)核、微內(nèi)核的概念 ? 微內(nèi)核: 只提供基礎(chǔ)功能,其他功能通過服務實現(xiàn) ? 微內(nèi)核功能被劃分為多個獨立過程,每個過程稱為服務器 單內(nèi)核:(Monolithic kernel ) 單內(nèi)核是一個很大的進程。它的內(nèi)部又可以被分為若干 模塊(或者是層次或其它) 。但是在運行的時候,它是一個獨立的二進制大映象。其模塊間 的
4、通訊是通過直接調(diào)用其它模塊中的函數(shù)實現(xiàn) 2、 特權(quán)指令的概念及 Linux 中特權(quán)等級的分類 特權(quán)指令:指具有特殊權(quán)限的指令。這類指令只用于操作系統(tǒng)或其他系統(tǒng)軟件, 一般不直接提供給用戶使用。 在多用戶、 多任務的計算機系統(tǒng)中特權(quán)指令必不可少。 它主要用于系統(tǒng)資源的分配和管理,包括改變系統(tǒng)工作方式,檢測用戶的訪問權(quán)限, 修改虛擬存儲器管理的段表、頁表,完成任務的創(chuàng)建和切換等。 3、 Makefile的作用、Makefile的編寫方法、Makefile中的常用預定義變量、 偽目標.PHONY 的作用及使用方法 ? Makefile 的作用: 采用 GNU 編譯工具對 .config 中
5、的源文件列表編譯 ? 完成內(nèi)核文件的配置、依賴關(guān)系及模塊的生成,隨后調(diào)用 Rules.make 編譯 ? Rules.make定義所有Makefile共用的編譯規(guī)則 Makefile支持的 make命令 ? make mrproper :檢查.o文件及文件依賴關(guān)系的正確性 ? make config :配置內(nèi)核并生成配置文件 ? make dep :根據(jù)配置文件創(chuàng)建相應的依賴關(guān)系樹 ? make clean :清除舊版本的目標文件 ? make zImage :編譯并用 gzip壓縮成1MB以下的內(nèi)核 未壓縮的文件是 vml in uz ? make bzImage :編譯并用
6、 gzip壓縮成1MB以上的內(nèi)核 ? make modules :編譯模塊 ? make modules_i nstall :安裝模塊 ? depmod ~a:生成模塊之間的依賴關(guān)系 ? makefile的編法:缺省情況下從 Makefile中的第一個目標開始執(zhí)行 ? 執(zhí)行過程類似一次深度優(yōu)先遍歷 sum: main .0 sum.o gcc -o sum main .0 sum.o mai n.o: mai n.c sum.h gcc -c mai n.c sum.o: sum.c sum.h gcc -c sum.c (danteng ) ? Makefile中的常用
7、預定義變量:make可直接使用許多預定義的變量 ? AR:歸檔維護程序的名稱,默認值為 ar ? ARFLAGS歸檔維護程序的選項 ? AS:匯編程序的名稱,默認值為 as ? ASFLAGS匯編程序的選項 ? CC C編譯器的名稱,默認值為 cc ? CFLAGS C編譯器的選項 ? CXX C++編譯器的名稱,默認值為 g++ ? CPPFLAGS C預編譯的選項 ? ? 系統(tǒng)環(huán)境變量的處理 ? make過程中被解釋成 make變量 偽目標.PHONY勺作用及使用方法:(./PHONY來顯示的指名一個目標是偽目標,有兩 個作用一個是改善性能,另外一個是來避免沖
8、突。 ) ? .phony是一個特殊工作目標 ? 用來指定一個假想的工作目標,即其后并不是一個實際文件, 且肯定要視為未更新 ? 使用場景 ? 避免與同名文件沖突、改善性能 ? 前例解決方法:.PHONY ? .PHONY: clea n ? clea n: ? $rm *.o exec_file ? make不檢查是否存在有文件名與依賴體中的一個名字相匹配的 文件,而直接執(zhí)行與之相應的命令 ?方法:PHON目標也可以有依賴關(guān)系 ? 使用場景 ? 當一個目錄中有多個程序,將其放在一個makefile中會更方便 ? 因為缺省目標是makefile中的第一個目標,通常將
9、這個 phony 目標叫做"all",其依賴文件為各個程序 ? all : prog1 prog2 prog3 .PHONY: all prog1 : prog1.o utils.o cc -o prog1 prog1.o utils.o prog2 : prog2.o cc -o prog2 prog2.o prog3 : prog3.o sort.o utils.o cc -o prog3 prog3.o sort.o utils.o 4、Linux函數(shù)調(diào)用過程中堆棧結(jié)構(gòu)動態(tài)變化過程 p2的執(zhí)行過程中又調(diào)用了函數(shù) p1 改進程序中,main函數(shù)中調(diào)用了函數(shù) p2,而
10、在 oin eip—? pin pd P2 du? ■ 哪一 eip 一 pi(c) ? 4 eip 一 eip 一 eip— r ■ eip—> ■ main P2(M) ? ? * *-mai n 程癢的代碼段 OL ■ 電越 \ plttfs eip Q邱 c )—— p2堆棧 eip esf V 1 , mwiri堆桟 堆棧 (二)第二講進程與線程 ? 1、Linux中進程、線程及內(nèi)核線程的區(qū)別, 及其
11、與其他操作系統(tǒng)在實現(xiàn)機制上的 主要區(qū)別。在Linux系統(tǒng)中如何區(qū)別內(nèi)核線程與進程。 ?(內(nèi)核線程)獨立運行在內(nèi)核空間的標準進程,支持內(nèi)核在后臺執(zhí)行一些操作 ? 刷新磁盤高速緩存 ? 交換出不用的頁框 ?維護網(wǎng)絡(luò)鏈接等待 ? 與普通進程的區(qū)別 ? 只運行在內(nèi)核態(tài),內(nèi)核線程沒有獨立的地址空間(mm指針被設(shè)置為NULL) ? 每個內(nèi)核線程執(zhí)行一個單獨的內(nèi)核函數(shù) ? 只使用大于 PAGE_OFFSE的線性地址空間 ? 進程與線程的區(qū)別: ?從形態(tài)角度 ? 一個進程可包含一個或多個線程 ? 從調(diào)度角度 ?進程是資源分配的基本單位 ?線程是處理器調(diào)度的獨立單位 ?從虛擬化角度
12、 ?進程提供兩種虛擬機制 ? 虛擬處理器:進程獨享處理器的假象 ?虛擬內(nèi)存:進程擁有系統(tǒng)內(nèi)所有內(nèi)存資源的假象 ? 線程之間可共享虛擬內(nèi)存,但各自擁有獨立虛擬處理器 ? 對Linux系統(tǒng)而言,線程只是一種特殊的進程! ? 內(nèi)核態(tài)(亦稱核心態(tài)或系統(tǒng)態(tài)) ? 可執(zhí)行特權(quán)指令,訪問任意物理地址(包括系統(tǒng)空間) ?用戶態(tài) ?只能在對應級別允許的范圍內(nèi)活動(用戶空間) 2、Linux 2.4 與Linux 2.6 系統(tǒng)堆棧結(jié)構(gòu)的主要區(qū)別。 Linux 2.4進程系統(tǒng)堆棧結(jié)構(gòu): Linux系統(tǒng)進程個數(shù)限制 所有進程的PCB及系統(tǒng)堆棧占用空間W 1/2的物理內(nèi)存總和 \內(nèi)樓堆袪
13、
進鶴描逹符(均」K}
"e眾前兇祁地址
Linux 2.6進程系統(tǒng)堆棧結(jié)構(gòu):
?進程描述符由slab分配器動態(tài)生成
? 棧底用新結(jié)構(gòu)struct thread」nfo,指向進程描述符
<,100% + $
兩個連續(xù)物理頁百
(約&K)
Q
1
F ;
Mruui thread iufu
kirr?r^[lx 14、鏈表
? 表頭僅有一個指向首節(jié)點的指針,而沒有指向尾節(jié)點的指針
? 在可能是海量的HASH表中存儲的表頭就能減少一半的空間消耗
? 讀拷貝更新(rcu)
? 以“ _rcu結(jié)尾的宏
4、fork()的vfork()主要差別及創(chuàng)建進程/線程的主要方法(常用函數(shù))。
asrriHnkage int Sy$_fork(strnet pt_regs regsi
< -
r vtUin do_(oi k(SIGCHLD, neys.esp., &館9時 >);
Fork:
? 說明
? 子進程完全復制父進程的資源
? 子進程的執(zhí)行獨立于父進程
? 進程間數(shù)據(jù)共享需通過專門的 15、進程間通信機制來實現(xiàn)
? 返回值
? 父進程執(zhí)行fork()返回子進程的 PID值
? 子進程執(zhí)行fork()返回0
? 調(diào)用失敗返回-1
齊niliM旳好 int SyS_VfOrkistmct pt_regs ief?) {
retufii(lo_rorlc(clone.vfqrk I clohe_vm | siGCHLD, 0);
Vfork:
? vfork()創(chuàng)建的子進程與父進程共享地址空間
? 子進程作為父進程的一個單獨線程在其地址空間運行
? 子進程從父進程繼承控制終端、信號標志位、可訪問的主存區(qū)、環(huán)
境變量和其他資源分配
? 子進程對虛擬空間任何數(shù)據(jù)的修 16、改都可為父進程所見
? 父進程將被阻塞,直到子進程調(diào)用 exeeve()或exit()
? 與fork()的關(guān)系
? 功能相同,但vfork()但不拷貝父進程的頁表項
? 子進程只執(zhí)行exee()時,vfork()為首選
?創(chuàng)建進程/線程的主要方法(常用函數(shù)):
? Linux進程創(chuàng)建方法:
?在終端輸入命令,由shell進程創(chuàng)建一個新進程
?進程創(chuàng)建函數(shù)
? pid_t fork(void);
? pid_t vfork(void);
? int cion e(i nt (*fn)(void * arg), void *staek, int flags, void * 17、arg) ;
? 創(chuàng)建輕量級線程
三函數(shù)都調(diào)用同一內(nèi)核函數(shù) do_fork( ) [/kernel/fork.c]
? Linux線程的創(chuàng)建:
? 函數(shù)調(diào)用形式
? int cion e(i nt (*fn)(void * arg), void *staek, int flags, void * arg);
? int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rt n)(void),
void *restrict arg);
? tid 18、p:新線程的線程描述表指針
? attr:為新線程定義不同屬性(如棧尺寸)默認為NULL
? 第三個和第四個參數(shù)指定執(zhí)行的函數(shù) start_rt n 和傳遞給函數(shù)
的參數(shù)arg
? 兩者區(qū)別
? cione()創(chuàng)建內(nèi)核支持的用戶線程,對內(nèi)核可見且由內(nèi)核調(diào)度
? pthread_create()由基于POSIX標準的線程庫創(chuàng)建的用戶線程
?但在 Linux 里,pthread_create()最終調(diào)用 clone()實現(xiàn)
5、Linux線程同步、條件變量相關(guān)函數(shù)的使用方法。
(三) 第三講進程調(diào)度
1、Linux 2.4與Linux 2.6調(diào)度體系結(jié)構(gòu)的主要區(qū)別
(2.6) 19、
一一二?■二 ~n
二一二 rr--r
-二二二二
I *試述LinUK 14 [j Linux 2j6逛程詢度休乘肺梅妁主耍差別.并灘旌Limx 度算
覽結(jié)構(gòu)圧譏fr機制.
1) Limi也4對有嵐第進稈存命一個a nmqume 1憂M為走頭的個hi迸榨隊列中-湘地餐 從屮選軀最込訐調(diào)度的輦程探入運杠,整牛臥列山 午讀/■弓口擬頂禺滬.實于處逼囂可以 丿[忡
2) Liniix2.6吩毎亡址理曙g瀚個數(shù)塑,活動就堵進程只列蛟組和不活砥就緒圧程*?1|敷 組.如果一個進桿體耗完丁它的“時何片二就進人屮話躍就緒雄科數(shù)卅的相應趴列的陸尾* 出所行的趟觀眾“讓皐"「它的細何片交挑 20、話氐 汁謂臥就堵迸和隊列禺隊因此. 不弼耍仟:舸其他的開錯?
至委蓋別卜Linux U的調(diào)度佯歸墓丁共亭至局馭列?HHitST CXn^開轎足桂性增 校的“陽山敗”禪牛處理曙屛百it立的就幅進程釀列,薦牛處理罌可以:rt%巨打碉鹿很 序來挑選進稈運廳,平同處理器上的進程可創(chuàng)完全ftfftt休醍*喚解和上下文臧?
0(訂調(diào)度算池皓構(gòu)|晦個敷址中有[如牛91緒建程隊列51呻1*幼毎*臥列對應丁 UU 牛砒蟄的臬一『=通過世圏標詁口列狀態(tài)*謂廈時* dgii fW_ft?t_bit找到第一于水為空
陽駅琳并取亂廿的進棍即可.不首駅剤I邛序少牛卿進程,挑選就緡程的聽度麻一毘的.
2、Linux 21、 2.4中調(diào)度優(yōu)先級的設(shè)計算法。
3、Linux 2.6 如何體現(xiàn)交互進程優(yōu)先的? 內(nèi)核有四處對交互式進程的優(yōu)先考慮
a) sleep_avg
i. 交互式進程因為休眠次數(shù)多、時間長, sleep_avg也會相對更大一些
b) interactive_credit
i. 記錄進程的交互程度
ii. 判斷進程是否是交互式進程
c) TASK_INTERACTIVE宏
d) 就緒等待時間的獎勵 對交互式進程的優(yōu)先級獎勵 :
? 通過HIGH_CREDIT()累積方式完成獎勵
?當進程從CPU切換下來時,如果是交互式進程,則它參與優(yōu)先級計算的 運行時間會比實際運行時間小,以此獲得 22、較高的優(yōu)先級
? 交互式進程處于 TASK_UNINTERRUPTIBL狀態(tài)下的休眠時間也會疊力口
到 sleep_avg 上,從而獲得優(yōu)先級獎勵
4、 Linux 2.4 與 Linux 2.6 中負載均衡的實現(xiàn)機制。
5、 idle 進程的概念與作用。
概念:System Idle Process SYSTEM不是一個真正的進程,是核心虛擬出來的,多 任務操作系統(tǒng)都有的!在沒有可用的進程時,系統(tǒng)處于空運行狀態(tài),此時就是 System
Idle Process SYSTEM在運行!故它占用 97%CPU時間,說明你的機器負荷很輕!你用
WINZIP解壓一個大的文件時, 就可看到 23、,System Idle Process SYSTEM 占用 CPU時間變
化。
作用:就是在 CPU空閑的時候,發(fā)出一個 IDLE命令,使 CPU掛起(暫時停止工作) ,
可有效的降低 CPU內(nèi)核的溫度,在操作系統(tǒng)服務里面,都沒有禁止它的選項;默認它 是占用除了當前應用程序所分配的處理器( CPU)百分比之外的所有占用率;一旦應用
程序發(fā)出請求,處理器會立刻響應的。
(五) 第五講系統(tǒng)調(diào)用與中斷處理
1、 封裝例程的概念與作用。
作用:屏蔽底層復雜性 將系統(tǒng)調(diào)用封裝成應用程序可直接調(diào)用的函數(shù) (庫函數(shù) )
概念:
2、 系統(tǒng)調(diào)用與中斷在實現(xiàn)機制上的異同點。
3、 中斷與異 24、常的主要區(qū)別。
? 中斷(外中斷)
? 異步的,來自處理器之外的中斷信號,在程序執(zhí)行的任何時候可能出現(xiàn)
? 會改變處理器執(zhí)行指令的順序
? 通常與CPU芯片內(nèi)部/外部硬件電路產(chǎn)生的電信號相對應
? 異常(內(nèi)中斷)
?同步的,在(特殊或出錯)指令執(zhí)行時由 CPU控制單元產(chǎn)生
? 內(nèi)核為每個異常提供一個專門的異常處理程序
? 異常處理程序的執(zhí)行一般依賴于執(zhí)行程序的當前現(xiàn)場,不能被屏蔽,一 旦出現(xiàn)應立即響應并進行處理
? 區(qū)別
? 中斷允許嵌套發(fā)生,但異常多數(shù)情況為一重
? 異常處理過程中可能產(chǎn)生中斷,但反之則不會發(fā)生
“中斷信號 ”通稱這兩種類型的中斷
4、 中斷上下文與 25、進程上下文的區(qū)別。
進程上下文:所謂的進程上下文,就是一個進程在執(zhí)行的時候,CPU的所有寄存器中的值、 進程的狀態(tài)以及堆棧上的內(nèi)容, 當內(nèi)核需要切換到另一個進程時, 它需要保存當前進程的所
有狀態(tài),即保存當前進程的進程上下文,以便再次執(zhí)行該進程時,能夠恢復切換時的狀態(tài), 繼續(xù)執(zhí)行。
中斷上下文:可以理解為硬件傳遞過來的這些參數(shù)和內(nèi)核需要保存的一些環(huán)境, 主要是被中
斷的進程的環(huán)境
區(qū)別:運行在進程上下文的內(nèi)核代碼是可以被搶占的( Linux2.6支持搶占)。但是一個中斷
上下文,通常都會始終占有 CPU (當然中斷可以嵌套,但我們一般不這樣做) ,不可以被打
斷。
Linux內(nèi) 26、核工作在進程上下文或者中斷上下文。提供系統(tǒng)調(diào)用服務的內(nèi)核代碼代表發(fā)起系 統(tǒng)調(diào)用的應用程序運行在進程上下文;另一方面,中斷處理程序,異步運行在中斷上下文。 中斷上下文和特定進程無關(guān)。
5、軟中斷、tasklet及工作隊列在實現(xiàn)機制上的異同點。
軟中斷可以在不同 CPU上同時運行,即使是同類型的軟中斷。 它適合需要快速響應
的處理函數(shù),比如網(wǎng)絡(luò)收發(fā)。
tasklet不可以在不同 CPU上同時運行(同類型,不同類型可以同時運行)。實現(xiàn) 方法:在該tasklet上有個變量state,調(diào)度時,如果該state不是運行狀態(tài),將運行, 并且將state設(shè)置為running狀態(tài),這樣其它 CPU不能同 27、時運行該類型 tasklet。避 免了全局變量的鎖要求。
工作隊列適合需要睡眠的任務, 它將任務交給一個內(nèi)核線程 KSoftirq來處理,這個
內(nèi)核線程和基本進程類似,只不過它映射的內(nèi)存空間是內(nèi)核空間。
6、軟中斷調(diào)度機制。
(六)第六講系統(tǒng)調(diào)用與中斷處理
1、 邏輯地址、線性地址及物理地址的概念。
物理地址:用于內(nèi)存芯片級的單元尋址,與處理器和 CPU連接的地址總線相對應。
邏輯地址:指的是機器語言指令中,用來指定一個操作數(shù)或者是一條指令的地址
線性地址:是邏輯地址到物理地址變換之間的中間層。程序代碼會產(chǎn)生邏輯地址,或者 說是段中的偏移地址,加上相應段的基地址就生成了一個線性 28、地址
2、 在x86結(jié)構(gòu)中,從邏輯地址到物理地址的轉(zhuǎn)換、計算過程。
邏輯地址到線性地址的轉(zhuǎn)換:
? 檢查TI確定段描述符位置
? 從段選擇子的index字段計算段描述符的地址
? 將邏輯地址的偏移量與段描述符 base字段的值相加,得到線性地址
線性地址到邏輯地址的轉(zhuǎn)換:
? 第一步:形成頁表地址
? CR3包含頁目錄的起始地址,用 32位線性地址的最高10位A31?A22作 為頁目錄的頁目錄項的索引, 將其乘以4(每項4個字節(jié)),與CR3中的頁
目錄的起始地址相加,形成相應頁表地址
? 第二步:形成頁面地址
? 從指定地址取出 32 位頁目錄項(頁表起始地址) ,其低 29、12 位為 0
? 用 32 位線性地址的 A21~A12 位作為頁表中的頁面的索引,將其乘以 4 ,
與頁表起始地址相加,形成 32 位頁面地址
? 第三步:形成 32 位物理地址
? 將 A11~A0 作為相對于頁面地址的偏移量,與 32 位頁面地址相加,得到 物理地址
3、 擴展分頁與物理地址擴展的概念。
擴展分頁: 用于將大段連續(xù)的線性地址轉(zhuǎn)換成相應的物理地址
物理地址:PAE只擴大物理地址尋址能力,線性地址仍然是 32位長
? 內(nèi)核編程人員用同一線性地址映射不同的 RAM區(qū),PAE可顯著
增加系統(tǒng)中的進程數(shù)量
? 只有內(nèi)核可以修改進程的頁表, 用戶態(tài)下運行的進程不 30、能使用大 于4GB的物理地址空間
4、NUMA、管理區(qū)的概念。
4、 伙伴系統(tǒng)的定義、伙伴系統(tǒng)的合并及位圖含義。
伙伴系統(tǒng)的定義:
伙伴的必要條件
a) 大小相同
b) 物理地址連續(xù)
c) 假定伙伴的大小為 b,第一個伙伴的第一個頁框的物理地址必須
是2X bx 4K的倍數(shù)
事實上伙伴是通過對大塊的物理內(nèi)存劃分獲得的
d) 假如從第 0 個頁面開始到第 3 個頁面結(jié)束的內(nèi)存
e) 每次都對半劃分,那么第一次劃分獲得大小為 2 頁的伙伴
f) 進一步劃分,可以獲得大小為 1頁的伙伴,例如0和1, 2和3
伙伴系統(tǒng)的合并及位圖含義:
? 當兩個伙伴都空閑時,則合并成一個 31、更大的塊
? 該過程一直進行,直到找不到可以合并的伙伴為止
? 位圖用來描述伙伴的狀態(tài)
? 一對伙伴只使用一個位表示
? 0:伙伴的狀態(tài)一致,此時要么全空閑,要么全不(或部 分)空閑
如果全空閑,必然被合并 兩種情況下, 對應的塊數(shù)據(jù)結(jié)構(gòu)都不在此 free_area_t 結(jié)構(gòu)中
? 1 :伙伴的狀態(tài)不一致,此時必然有一個空閑、一個不空
閑
表示對應的塊數(shù)據(jù)結(jié)構(gòu)在此 free_area_t 結(jié)構(gòu)的 鏈表中
5、基于伙伴系統(tǒng)實現(xiàn)對內(nèi)容的分配與回收的算法。
塊分配函數(shù):__rmqueue(z one, order)
根據(jù)輸入?yún)?shù)order,在相應鏈表(管理區(qū)描述符地址zone) 32、中查找連續(xù)的 空閑頁框
返回所分配的第一個頁框?qū)捻撁枋龇牡刂?
塊釋放函數(shù): __free_pages_bulk(page, zone, order)
把釋放的頁框插入到伙伴系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)中, 以便以后可以在分配中使用
在這里循環(huán)檢查bitmap確認伙伴塊是否空閑,空閑則合并成一個單獨的 塊,并把此塊加入到合適的鏈表中
page
I14
4
1 L
P?.g:e
3
』
o1
4
1
■?■ S—
2
5
3
9、10頁面分配馬的示意
內(nèi)存分配的Buddy算法
IL
5
4
12
n
3
gp
―
pa^e
?
2
inap
4
—
1
map
pag?
1
Jr
―>
0
fr ee_are a.[]
……|5
p也舉 pags
訶導頁面釋放潔
7、Slab分配器的概念與作用。
內(nèi)存管理的目標是提供一種方法, 為實現(xiàn)各種目的而在各個用戶之間實現(xiàn)內(nèi)存共享。
內(nèi)存管理方法應該實現(xiàn)以下兩個功能: 一是最小化管理內(nèi)存所需的時間; 二是最大化用于
般應用的可用內(nèi)存(最小化管理開銷) 。
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。