Updated December 25, 2018
存儲(chǔ)器管理
可執(zhí)行存儲(chǔ)器: 寄存器和主存儲(chǔ)器
主存儲(chǔ)器: 簡(jiǎn)稱(chēng)內(nèi)存或主存. 通常, 處理機(jī)都是從主存儲(chǔ)器中取得指令和數(shù)據(jù)的, 并將其取得的指令放入指令寄存器中, 將其所讀取的數(shù)據(jù)裝入到數(shù)據(jù)寄存器中.
高速緩存: 它是介于寄存器和主存儲(chǔ)器之間的存儲(chǔ)器, 主要用于備份主存中較常用的數(shù)據(jù), 以減少處理機(jī)對(duì)主存儲(chǔ)器的訪問(wèn)次數(shù), 這樣可提高程序執(zhí)行速度.
從寫(xiě)程序到運(yùn)行程序
- 編譯: 源代碼編譯成若干個(gè)目標(biāo)模塊(編譯就是把高級(jí)語(yǔ)言翻譯成機(jī)器語(yǔ)言)
- 鏈接: 將一組目標(biāo)模塊以及所需庫(kù)函數(shù)鏈接在一起, 形成一個(gè)完整的裝入模塊
- 裝入: 將裝入模塊裝入內(nèi)存運(yùn)行
裝入的3種方式:
- 絕對(duì)裝入: 程序中所使用的絕對(duì)地址既可在編譯或匯編時(shí)給出, 也可由程序員直接賦予. 絕對(duì)裝入只適用于單道程序環(huán)境.
- 靜態(tài)重定位: 又稱(chēng)可重定位裝入, 把在裝入時(shí)對(duì)目標(biāo)程序中指令和數(shù)據(jù)地址的修改過(guò)程稱(chēng)為重定位. 又因?yàn)榈刂纷儞Q通常是在進(jìn)程裝入時(shí)一次完成, 以后不再改變, 故稱(chēng)為靜態(tài)重定位. 靜態(tài)重定位不允許程序運(yùn)行時(shí)在內(nèi)存中移動(dòng)位置.
- 動(dòng)態(tài)重定位: 又稱(chēng)動(dòng)態(tài)運(yùn)行時(shí)裝入, 裝入程序在把裝入模塊裝入內(nèi)存后, 并不立即把裝入模塊中的邏輯地址轉(zhuǎn)換為物理地址, 而是把地址轉(zhuǎn)換推遲到程序真正要執(zhí)行時(shí)才進(jìn)行. 為使地址轉(zhuǎn)換不影響指令的執(zhí)行速度, 這種方式需要一個(gè)重定位寄存器的支持.
鏈接的3種方式:
- 靜態(tài)鏈接: 在程序運(yùn)行之前, 先把各目標(biāo)模塊及它們所需的庫(kù)函數(shù)連接成一個(gè)完整的可執(zhí)行文件, 之后不再拆開(kāi)
- 裝入時(shí)動(dòng)態(tài)鏈接: 在裝入內(nèi)存時(shí), 采取邊裝入邊鏈接的鏈接方式. 優(yōu)點(diǎn)是便于修改和更新, 便于實(shí)現(xiàn)對(duì)目標(biāo)模塊的共享.
- 運(yùn)行時(shí)動(dòng)態(tài)鏈接: 將對(duì)某些模塊的鏈接推遲到程序執(zhí)行時(shí)才進(jìn)行. 優(yōu)點(diǎn)是加快程序的鏈接過(guò)程, 節(jié)省內(nèi)存空間
連續(xù)分配方式: 指為用戶進(jìn)程分配的必須是一個(gè)連續(xù)的內(nèi)存空間
- 單一連續(xù)分配: 內(nèi)存被分為系統(tǒng)區(qū)和用戶區(qū), 而在用戶區(qū)內(nèi)存中只能有一道用戶程序
- 固定分區(qū)分配: 將整個(gè)用戶區(qū)內(nèi)存劃分為若干個(gè)固定大小的分區(qū), 在每個(gè)分區(qū)中只裝入一道作業(yè).
- 動(dòng)態(tài)分區(qū)分配: 又稱(chēng)可變分區(qū)分配, 在實(shí)現(xiàn)動(dòng)態(tài)分區(qū)分配時(shí), 將涉及到分區(qū)分配中所用的數(shù)據(jù)結(jié)構(gòu), 分區(qū)分配算法和分區(qū)分配回收這樣三方面的問(wèn)題
基于順序搜索的動(dòng)態(tài)分區(qū)分配算法
- 首次適應(yīng)(first fit)算法
空閑分區(qū)以地址遞增的順序排列. 每次分配內(nèi)存時(shí)順序查找空閑分區(qū)鏈/空閑分區(qū)表, 找到大小能滿足的第一個(gè)分區(qū). 該算法保留了高址部分的大空閑區(qū), 缺點(diǎn)是低址部分不斷被劃分, 會(huì)留下很多碎片. - 循環(huán)首次適應(yīng)(next fit)算法
next fit算法在為進(jìn)程分配內(nèi)存空間時(shí), 不是每次都從鏈?zhǔn)组_(kāi)始查找, 而是從上次找到的空閑分區(qū)的下一個(gè)空閑分區(qū)開(kāi)始查找. - 最佳適應(yīng)(best fit)算法
空閑分區(qū)以容量遞增的順序排列. 每次分配內(nèi)存時(shí)順序查找空閑分區(qū)鏈/空閑分區(qū)表, 找到大小能滿足的第一個(gè)分區(qū). 缺點(diǎn)是會(huì)留下很多碎片. - 最壞適應(yīng)(worst fit)算法
與最佳適應(yīng)算法相反, 對(duì)中, 小作業(yè)有利
基于索引搜索的動(dòng)態(tài)分區(qū)分配算法
- 快速適應(yīng)(quick fit)算法
- 伙伴系統(tǒng)(buddy system)
- 哈希算法