[OS复习]存储管理1
1.概述
A.外存分為磁盤、光盤等;外存的管理放在外設(shè)的管理中
B.外存可以保存文件數(shù)據(jù)等,要運(yùn)行外存的數(shù)據(jù)必須將其裝入到內(nèi)存中(也可以成為調(diào)入內(nèi)存)
C.整個(gè)內(nèi)存空間可以分為操作系統(tǒng)自用的空間與用戶空間,創(chuàng)建進(jìn)程主要發(fā)生在用戶內(nèi)存空間
2.存儲(chǔ)管理的任務(wù)
2.1存儲(chǔ)分配
基本任務(wù):管理內(nèi)存空間的分配與回收;包括分配基本內(nèi)存空間、增加新的內(nèi)存空間(動(dòng)態(tài)申請(qǐng)或釋放內(nèi)存空間)、回收內(nèi)存空間(空間是否可以回收等,如病毒等進(jìn)程非法修改) 用于內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu)如位示圖、空閑頁框表等(內(nèi)存分配的基本單位)。它們記載了那些內(nèi)存被分配給了那個(gè)進(jìn)程,那些內(nèi)存空間是空閑的等信息。若系統(tǒng)采用了虛擬內(nèi)存技術(shù),還需要登記進(jìn)程的程序和數(shù)據(jù)中,哪些部分在內(nèi)存,哪些部分尚在外存等信息。這些數(shù)據(jù)結(jié)構(gòu)自身需要占用一定的內(nèi)存空間,也需要系統(tǒng)花費(fèi)額外的時(shí)間進(jìn)行維護(hù)。
存儲(chǔ)分配步驟
首先,根據(jù)系統(tǒng)的內(nèi)存分配算法,在空閑的內(nèi)存分區(qū)中尋找到一塊滿足進(jìn)程需要的內(nèi)存空間(該內(nèi)存空間應(yīng)該大于或等于進(jìn)程所申請(qǐng)的內(nèi)存空間),將其分配給進(jìn)程。然后,更新進(jìn)程的資源分配清單、內(nèi)存分配情況清單等數(shù)據(jù)結(jié)構(gòu)。
內(nèi)存的回收
更新相應(yīng)的數(shù)據(jù)結(jié)構(gòu),將回收的內(nèi)存空間標(biāo)識(shí)為“空閑可用”。需要思考:該內(nèi)存空間是否可以被回收?是否被其他進(jìn)程共享?是否屬于相應(yīng)的進(jìn)程?是否與相臨的空閑空間進(jìn)行合并?2.2 地址映射
邏輯地址(相對(duì)地址):一般從0開始編址 物理地址(絕對(duì)地址):標(biāo)識(shí)內(nèi)存中的每個(gè)存儲(chǔ)單元邏輯地址:高級(jí)語言或匯編語言使用符號(hào)地址(變量名或標(biāo)號(hào));源程序經(jīng)過編譯、鏈接以后,其中的符號(hào)地址就會(huì)變成數(shù)字式的邏輯地址。編譯/鏈接程序會(huì)自動(dòng)計(jì)算每一個(gè)變量或標(biāo)號(hào)所對(duì)應(yīng)的邏輯地址是多少。 靜態(tài)映射:靜態(tài)重定位(裝入時(shí)一次性完成) 地址映射:程序裝入內(nèi)存以后,由操作系統(tǒng)將邏輯地址改為邏輯地址加上起始地址,得到實(shí)際的物理地址(前提:在內(nèi)存中分配到的是連續(xù)空間)。重定位(Relocation):對(duì)目標(biāo)程序中的指令和數(shù)據(jù)地址進(jìn)行修改的過程。靜態(tài)映射實(shí)現(xiàn)簡(jiǎn)單。地址變換只在程序裝入時(shí)一次完成,程序運(yùn)行時(shí)不再改變。但不適合多道程序系統(tǒng);不允許系統(tǒng)執(zhí)行內(nèi)存的碎片整理;無法實(shí)現(xiàn)虛擬存儲(chǔ)。
動(dòng)態(tài)映射:動(dòng)態(tài)重定位
操作系統(tǒng)將程序裝入內(nèi)存以后,并不立即把目標(biāo)程序中的邏輯地址轉(zhuǎn)換為物理地址,而是在處理機(jī)執(zhí)行每一條指令時(shí)進(jìn)行地址轉(zhuǎn)換。復(fù)雜且費(fèi)時(shí)。為了系統(tǒng)效率,處理機(jī)中設(shè)置了專門的高速硬件,自動(dòng)完成地址轉(zhuǎn)換,這樣的硬件被稱作地址管理部件,如圖所示:
CPU中的地址管理部件工作示意圖
2.3存儲(chǔ)保護(hù)
防止地址越界,防止操作越權(quán)。
地址越界:進(jìn)程訪問不屬于自己的地址空間,或者說進(jìn)程在運(yùn)行時(shí)所產(chǎn)生的物理地址超越其自身的地址空間范圍。可能侵犯其他用戶進(jìn)程空間,也可能侵犯操作系統(tǒng)的存儲(chǔ)空間。
操作越權(quán):進(jìn)程對(duì)共享存儲(chǔ)區(qū)的操作違反了系統(tǒng)規(guī)定的權(quán)限。
存儲(chǔ)保護(hù)只能進(jìn)程執(zhí)行過程中動(dòng)態(tài)地進(jìn)行,不可能在運(yùn)行前一次性靜態(tài)完成。若采用動(dòng)態(tài)映射動(dòng)態(tài)計(jì)算物理地址,可能計(jì)算出錯(cuò)誤地址;若采用靜態(tài)映射,進(jìn)程執(zhí)行過程中也可能出錯(cuò),從而導(dǎo)致地址越界或操作越權(quán)。為了提高系統(tǒng)效率,存儲(chǔ)保護(hù)的主要工作必須由高速的專用硬件來完成:在地址管理部件中。
2.4存儲(chǔ)共享
為了進(jìn)程通信和節(jié)約內(nèi)存空間,兩個(gè)或多個(gè)進(jìn)程共用內(nèi)存中相同的分區(qū),即他們的物理空間有相交的部分。可以共享進(jìn)程的代碼,也可以共享進(jìn)程數(shù)據(jù)。一般地,進(jìn)程之間共享代碼的目的主要是為了節(jié)約存儲(chǔ)空間,共享數(shù)據(jù)的目的主要是為了實(shí)現(xiàn)進(jìn)程間相互通信。?
通過存儲(chǔ)共享完成通信的過程:
數(shù)據(jù)共享
一個(gè)進(jìn)程將數(shù)據(jù)寫入共享存儲(chǔ)區(qū),另一個(gè)進(jìn)程從共享存儲(chǔ)區(qū)中讀出數(shù)據(jù)。
代碼共享
程序可重入:設(shè)計(jì)程序時(shí),邏輯上將程序代碼區(qū)和數(shù)據(jù)區(qū)分開。代碼區(qū)不包含運(yùn)行程序時(shí)需要改變的數(shù)據(jù),被處理的數(shù)據(jù)都放在獨(dú)立的數(shù)據(jù)區(qū)。這樣,進(jìn)程執(zhí)行過程中就不會(huì)改變代碼部分的任何內(nèi)容。數(shù)據(jù)區(qū)是單獨(dú)的一個(gè)段、堆棧式動(dòng)態(tài)申請(qǐng)的分區(qū),或通過參數(shù)傳遞。(例如:打開多個(gè)Word,進(jìn)行文件書寫)
創(chuàng)建新進(jìn)程時(shí)(例如:打開第二個(gè)Word),不需要為該進(jìn)程的代碼部分另外申請(qǐng)內(nèi)存空間,只需將該進(jìn)程PCB中的進(jìn)程代碼空間的地址指向已有的代碼空間地址。進(jìn)程的數(shù)據(jù)區(qū),要么等到操作系統(tǒng)為其分配相應(yīng)存儲(chǔ)空間以后,將數(shù)據(jù)區(qū)地址填寫在PCB中;要么由進(jìn)程運(yùn)行時(shí)向操作系統(tǒng)動(dòng)態(tài)申請(qǐng)。?
可以將進(jìn)程的代碼視為處理數(shù)據(jù)的一組規(guī)則或公式,這一組規(guī)則或公式存儲(chǔ)在內(nèi)存中的某個(gè)分區(qū)。進(jìn)程的執(zhí)行:利用這一組規(guī)則或公式來完成數(shù)據(jù)的運(yùn)算。多個(gè)進(jìn)程共享代碼:多個(gè)進(jìn)程需要使用同一組規(guī)則或公式處理不同的數(shù)據(jù)。PCB:告訴進(jìn)程其所需的規(guī)則或公式以及需要處理的數(shù)據(jù)存儲(chǔ)在哪里,進(jìn)程的進(jìn)度等。
對(duì)于高級(jí)程序的設(shè)計(jì)而言,只要相應(yīng)的編譯程序支持可重入的程序設(shè)計(jì),那么,設(shè)計(jì)程序時(shí)就不需要考慮程序的可重入問題,不需要將程序代碼和數(shù)據(jù)嚴(yán)格分開。編譯程序在編譯時(shí),會(huì)自動(dòng)將欲處理的數(shù)據(jù)與程序代碼分開存儲(chǔ),以保證代碼部分是純的、可重入的。
2.5存儲(chǔ)擴(kuò)充
內(nèi)存:速度快、容量小、價(jià)格貴;外存:容量大、速度慢、價(jià)格便宜;
目的:在多道程序系統(tǒng)中能運(yùn)行更多、更大的程序,降低系統(tǒng)的造價(jià),提高系統(tǒng)的性價(jià)比;
存儲(chǔ)擴(kuò)充:采用軟件手段,在硬件的配合下,將部分外存空間虛擬為內(nèi)存空間,并將內(nèi)存和外存有機(jī)地結(jié)合起來,得到一個(gè)容量相當(dāng)于外存、速度接近于內(nèi)存、價(jià)格十分便宜的虛擬存儲(chǔ)系統(tǒng)。
虛擬存儲(chǔ)系統(tǒng)在邏輯上對(duì)外是一個(gè)整體,用戶感覺到系統(tǒng)提供了一個(gè)非常大的“內(nèi)存”空間。
操作系統(tǒng)負(fù)責(zé)完成內(nèi)存與外存之間的透明切換:進(jìn)程運(yùn)行時(shí)將需要的數(shù)據(jù)或代碼從外存裝入內(nèi)存,并將內(nèi)存中暫時(shí)不用的部分交換到外存。
總結(jié)
以上是生活随笔為你收集整理的[OS复习]存储管理1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [OS复习]进程互斥与同步2
- 下一篇: 飞鸽传书2007绿色版提供了无限量内部沟