【操作系统】常用总结
基礎(chǔ)知識(shí)
操作系統(tǒng)
操作系統(tǒng)(Operation System, OS)是管理和控制計(jì)算機(jī)硬件與軟件資源的計(jì)算機(jī)程序,是直接運(yùn)行在“裸機(jī)”上的最基本的系統(tǒng)軟件,任何其他軟件都必須在操作系統(tǒng)的支持下才能運(yùn)行。
操作系統(tǒng)是計(jì)算機(jī)系統(tǒng)資源的管理者,分為:
處理機(jī)管理
存儲(chǔ)器管理
設(shè)備管理
文件管理
操作系統(tǒng)是用戶與計(jì)算機(jī)硬件系統(tǒng)之間的接口,同時(shí)也是計(jì)算機(jī)硬件和其他軟件的接口,分為:
命令接口
程序接口
功能:
管理計(jì)算機(jī)系統(tǒng)的硬件、軟件及數(shù)據(jù)資源;
控制程序運(yùn)行;
改善人機(jī)界面;
為其他應(yīng)用軟件提供支持,讓計(jì)算機(jī)系統(tǒng)所有資源最大限度地發(fā)揮作用;
提供各種形式的用戶界面,使用戶有一個(gè)好的工作環(huán)境;
為其他軟件的開發(fā)提供必要的服務(wù)和相應(yīng)的接口等。
特征:
并發(fā):兩個(gè)或者多個(gè)事件在同一時(shí)間間隔內(nèi)發(fā)生;
共享:系統(tǒng)中的資源可供內(nèi)存中多個(gè)并發(fā)執(zhí)行的進(jìn)程共同使用;
虛擬:把一個(gè)物理上的實(shí)體變?yōu)槿舾蓚€(gè)邏輯上的對(duì)應(yīng)物;
異步:在多道程序環(huán)境下,允許多個(gè)程序并發(fā)執(zhí)行,但因資源有限,進(jìn)程的執(zhí)行不是一貫到底,而是走走停停,以不可預(yù)知的速度向前推送,這就是進(jìn)程的異步性。
基本概念
互斥:進(jìn)程之間訪問臨界資源時(shí)相互排斥的現(xiàn)象;
臨界資源:一次僅允許一個(gè)進(jìn)程使用的資源,如 打印機(jī)。
臨界區(qū):每個(gè)進(jìn)程中訪問臨界資源的那段代碼。
并發(fā):同一時(shí)間段有幾個(gè)程序都處于已經(jīng)啟動(dòng)到運(yùn)行完畢之間,并且這幾個(gè)程序都在同一個(gè)處理機(jī)上運(yùn)行,但任一個(gè)時(shí)刻點(diǎn)上只有一個(gè)程序在處理機(jī)上運(yùn)行。并發(fā)的兩種關(guān)系是同步和互斥;
并行:單處理器中進(jìn)程被交替執(zhí)行,表現(xiàn)出一種并發(fā)的外部特征;在多處理器中,進(jìn)程可以交替執(zhí)行,還能重疊執(zhí)行,實(shí)現(xiàn)并行處理,并行就是同時(shí)發(fā)生的多個(gè)并發(fā)事件,具有并發(fā)的含義,但并發(fā)不一定是并行,也就是說事件之間不一定要同一時(shí)刻發(fā)生;
同步:進(jìn)程之間存在依賴關(guān)系,一個(gè)進(jìn)程結(jié)束的輸出作為另一個(gè)進(jìn)程的輸入。具有同步關(guān)系的一組并發(fā)進(jìn)程之間發(fā)送的信息稱為消息或者事件;
異步:和同步相對(duì),同步是順序執(zhí)行,而異步是彼此獨(dú)立,在等待某個(gè)事件的過程中繼續(xù)做自己的事,不要等待這一事件完成后再工作。
線程是實(shí)現(xiàn)異步的一個(gè)方式,異步是讓調(diào)用方法的主線程不需要同步等待另一個(gè)線程的完成,從而讓主線程干其他事情。
多線程:多線程是進(jìn)程中并發(fā)運(yùn)行的一段代碼,能夠?qū)崿F(xiàn)線程之間的切換執(zhí)行;
異步和多線程:不是同等關(guān)系,異步是目的,多線程只是實(shí)現(xiàn)異步的一個(gè)手段,實(shí)現(xiàn)異步可以采用多線程技術(shù)或者交給其他進(jìn)程來處理。
發(fā)展歷程
手工階段
單道批處理系統(tǒng)
多道批處理系統(tǒng)
分時(shí)操作系統(tǒng)
實(shí)時(shí)操作系統(tǒng)
網(wǎng)絡(luò)操作系統(tǒng)和分布式操作系統(tǒng)
網(wǎng)絡(luò)操作系統(tǒng)和分布式操作系統(tǒng)的不同之處在于:
在分布式操作系統(tǒng)中,若干臺(tái)計(jì)算機(jī)相互協(xié)同完成同一任務(wù);
而在網(wǎng)絡(luò)操作系統(tǒng)中,每臺(tái)計(jì)算機(jī)都是相互獨(dú)立的,它們并不能相互協(xié)同完成同一任務(wù)。
CPU的工作狀態(tài)
大多數(shù)計(jì)算機(jī)系統(tǒng)將CPU執(zhí)行狀態(tài)分為目態(tài)與管態(tài)。
管態(tài)就是 supervisor(管理者) mode 翻譯來的。
那么目態(tài)呢,其實(shí)是 object(目標(biāo)) mode 翻譯來的。
管態(tài):supervisor(管理者) mode 又叫特權(quán)態(tài)、系統(tǒng)態(tài)或者核心態(tài)。CPU在管態(tài)下可以執(zhí)行指令系統(tǒng)的全集。
如果程序處于管態(tài),則該程序就可以訪問計(jì)算機(jī)的任何資源,即 它的資源訪問權(quán)限不受限制。
通常,操作系統(tǒng)在管態(tài)下運(yùn)行。
目態(tài):object(目標(biāo)) mode又叫常態(tài)或用戶態(tài)。機(jī)器處于目態(tài)時(shí),程序只能執(zhí)行非特權(quán)指令,不能直接使用系統(tǒng)資源,也不能改變CPU的工作狀態(tài),并且只能訪問這個(gè)用戶程序自己的存儲(chǔ)空間。
科普:為什么叫 object mode 呢?
通常CPU執(zhí)行兩種不同性質(zhì)的程序:一種是操作系統(tǒng)內(nèi)核程序;另一種是用戶自編程序或系統(tǒng)外層的應(yīng)用程序。
對(duì)操作系統(tǒng)而言,這兩種程序的作用不同,前者是后者的管理者,因此“管理程序”要執(zhí)行一些特權(quán)指令,而“被管理程序”出于安全考慮不能執(zhí)行這些指令。
因?yàn)楣芾碚咝枰芾硭褪?strong>管理者的管理目標(biāo)。所以就叫 object mode。
目態(tài)(用戶態(tài))→管態(tài)(核心態(tài))
系統(tǒng)調(diào)用:這是用戶態(tài)進(jìn)程主動(dòng)要求切換到核心態(tài)的一種方式,用戶態(tài)進(jìn)程通過系統(tǒng)調(diào)用申請使用操作系統(tǒng)提供的服務(wù)程序完成工作。
系統(tǒng)調(diào)用機(jī)制的核心是使用了操作系統(tǒng)為用戶開放的一個(gè)中斷來實(shí)現(xiàn)。
異常:當(dāng) CPU 在執(zhí)行用戶態(tài)程序時(shí),發(fā)生了某些事先不可知的異常,這時(shí)會(huì)觸發(fā)由當(dāng)前運(yùn)行進(jìn)程切換到處理此異常的內(nèi)核相關(guān)程序中,也就轉(zhuǎn)到了核心態(tài),如 缺頁異常。
I/O設(shè)備的中斷:當(dāng) I/O 設(shè)備完成用戶請求操作后,會(huì)向CPU發(fā)出相應(yīng)的中斷信號(hào),這時(shí)CPU會(huì)暫停執(zhí)行下一條即將要執(zhí)行的指令,轉(zhuǎn)而去執(zhí)行與中斷信號(hào)對(duì)應(yīng)的處理程序,如果先前執(zhí)行的指令是用戶態(tài)下的程序,那么這個(gè)轉(zhuǎn)換的過程自然也就發(fā)生了由用戶態(tài)到核心態(tài)的切換。
例如,硬盤讀寫操作完成,系統(tǒng)會(huì)切換到硬盤讀寫的中斷處理程序中,執(zhí)行后續(xù)的操作。
其中,系統(tǒng)調(diào)用可以認(rèn)為是用戶進(jìn)程主動(dòng)發(fā)起的,異常和外部設(shè)備中斷則是被動(dòng)的。
管理功能
處理機(jī)管理:
進(jìn)程控制:在傳統(tǒng)多道程序環(huán)境中,要是作業(yè)運(yùn)行,必須先為它創(chuàng)建一個(gè)或多個(gè)進(jìn)程,并為之分配必要的資源。當(dāng)進(jìn)程運(yùn)行結(jié)束后,立即撤銷該進(jìn)程,以便能及時(shí)回收該進(jìn)程所占用的各類資源。
進(jìn)程同步:為多個(gè)進(jìn)程(含線程)的運(yùn)行進(jìn)行協(xié)調(diào)。
進(jìn)程互斥方式:進(jìn)程(線程)在對(duì)臨界資源進(jìn)行訪問時(shí),應(yīng)采用互斥方式。
進(jìn)程同步方式:在相互合作去完成共同任務(wù)的諸進(jìn)程(線程)間,由同步機(jī)構(gòu)對(duì)它們的執(zhí)行次序加以協(xié)調(diào)。
進(jìn)程通信:在多道程序環(huán)境下,為了加速應(yīng)用進(jìn)程的運(yùn)行,應(yīng)在系統(tǒng)中建立多個(gè)進(jìn)程,并且再為一個(gè)進(jìn)程建立若干個(gè)線程,由這些進(jìn)程(線程)相互合作去完成一個(gè)共同的任務(wù),而在這些進(jìn)程(線程)之間又往往需要交換信息。
調(diào)度:在后備隊(duì)列上等待的每個(gè)作業(yè)或者進(jìn)程,通常都需要調(diào)度才能執(zhí)行,調(diào)度的任務(wù),即 將處理機(jī)分配給它。
存儲(chǔ)器管理:
內(nèi)存分配:采用靜態(tài)和動(dòng)態(tài)兩種方式實(shí)現(xiàn)內(nèi)存分配數(shù)據(jù)結(jié)構(gòu),以記錄內(nèi)存使用情況,按照一定算法分配,對(duì)不再需要的內(nèi)存進(jìn)行回收。
內(nèi)存保護(hù):確保每道用戶程序都只在自己的內(nèi)存空間運(yùn)行,彼此互不干擾。
地址映射:編譯后的程序的地址分為邏輯地址和物理地址,多道程序環(huán)境中,每道程序不可能都從 “0” 地址開始,要保證程序運(yùn)行,則須將邏輯地址轉(zhuǎn)換成內(nèi)存空間中的物理地址。
動(dòng)態(tài)重定位:在程序執(zhí)行過程中,每當(dāng)訪問指令或數(shù)據(jù)時(shí),將要訪問的程序或數(shù)據(jù)的邏輯地址轉(zhuǎn)換成物理地址。
實(shí)現(xiàn)方法:在系統(tǒng)中增加一個(gè)重定位寄存器,用來裝入程序在內(nèi)存中的起始地址,程序執(zhí)行時(shí),真正訪問的內(nèi)存地址是相對(duì)地址與重定向寄存器中的地址相加之和,從而實(shí)現(xiàn)動(dòng)態(tài)重定位。
內(nèi)存擴(kuò)充:從邏輯上去擴(kuò)充內(nèi)存容量,使用戶所感受到的內(nèi)存容量比實(shí)際容量大得多,或者讓更多的程序能并發(fā)執(zhí)行。
設(shè)備管理:
緩沖管理:緩沖區(qū)機(jī)制能夠有效緩解 CPU 運(yùn)行的高速性和 I/O 低速性的矛盾。
設(shè)備分配:設(shè)置設(shè)備控制表、控制器控制表等數(shù)據(jù)結(jié)構(gòu),能夠了解指定設(shè)備當(dāng)前是否可用,是否忙碌,以及該設(shè)備被分配出去,系統(tǒng)是否還安全。
設(shè)備處理程序:實(shí)現(xiàn) CPU 和設(shè)備管理器之間的通信,由 CPU 向設(shè)備控制器發(fā)出 I/O 命令,要求它完成指定的 I/O 操作,反之由 CPU 接收從控制器發(fā)來的中斷請求,并給予迅速的響應(yīng)和相應(yīng)的處理。
文件管理:
文件存儲(chǔ)空間的管理:由文件系統(tǒng)對(duì)諸多文件及文件的存儲(chǔ)空間實(shí)施統(tǒng)一的管理,對(duì)每個(gè)文件分配必要的外存空間,提高外存的利用率和文件系統(tǒng)的執(zhí)行速度。
目錄管理:相當(dāng)于文件的索引,建立目錄項(xiàng)(文件名、文件屬性、文件在磁盤中的物理位置等),方便用戶查詢檢索。
文件的讀/寫管理和保護(hù):防止未經(jīng)批準(zhǔn)的用戶存取文件、防止冒名頂替存取文件、防止以不正確的方式使用文件。
進(jìn)程與線程
對(duì)于操作系統(tǒng)來說,一個(gè)任務(wù)就是一個(gè)進(jìn)程(Process),比如打開一個(gè)瀏覽器就是啟動(dòng)一個(gè)瀏覽器進(jìn)程,打開一個(gè)記事本就啟動(dòng)了一個(gè)記事本進(jìn)程,打開兩個(gè)記事本就啟動(dòng)了兩個(gè)記事本進(jìn)程,打開一個(gè) Word 就啟動(dòng)了一個(gè) Word 進(jìn)程。
有些進(jìn)程還不止同時(shí)干一件事,比如Word,它可以同時(shí)進(jìn)行打字、拼寫檢查、打印等事情。在一個(gè)進(jìn)程內(nèi)部,要同時(shí)干多件事,就需要同時(shí)運(yùn)行多個(gè)“子任務(wù)”,我們把進(jìn)程內(nèi)的這些“子任務(wù)”稱為線程(Thread)。類比:
進(jìn)程 = 工廠
線程 = 工廠里各個(gè)流水線
進(jìn)程
進(jìn)程可以認(rèn)為是程序執(zhí)行時(shí)的一個(gè)實(shí)例。進(jìn)程是系統(tǒng)進(jìn)行資源分配的獨(dú)立實(shí)體,且每個(gè)進(jìn)程擁有獨(dú)立的地址空間。(即 資源的分配和調(diào)度的一個(gè)獨(dú)立單元)
進(jìn)程控制塊(Process Control Block, PCB):保存運(yùn)行期間進(jìn)程的數(shù)據(jù),PCB 是進(jìn)程存在的唯一標(biāo)志。
進(jìn)程 = 程序 + 數(shù)據(jù) + PCB
一個(gè)進(jìn)程無法直接訪問另一個(gè)進(jìn)程的變量和數(shù)據(jù)結(jié)構(gòu),如果希望讓一個(gè)進(jìn)程訪問另一個(gè)進(jìn)程的資源,需要使用進(jìn)程間通信,比如:管道、文件、套接字等。
進(jìn)程的五種基本狀態(tài)及其轉(zhuǎn)換:
創(chuàng)建狀態(tài):進(jìn)程正在被創(chuàng)建,尚未轉(zhuǎn)到就緒狀態(tài),創(chuàng)建進(jìn)程需要申請一個(gè)空白的 PCB,并向 PCB 寫一些控制和管理進(jìn)程的信息,然后由系統(tǒng)分配資源,將進(jìn)程轉(zhuǎn)入就緒狀態(tài)。
就緒狀態(tài):進(jìn)程已處于準(zhǔn)備執(zhí)行的狀態(tài),獲得了除處理機(jī)以外的一切所需資源。
執(zhí)行狀態(tài):進(jìn)程在處理機(jī)上運(yùn)行。在單處理機(jī)環(huán)境下,每一時(shí)刻最多只有一個(gè)進(jìn)程運(yùn)行。
阻塞狀態(tài):進(jìn)程正在等待某一事件(服務(wù)請求)而暫停運(yùn)行,如 等待某資源變?yōu)榭捎茫ú话ㄌ幚頇C(jī))或等待輸入輸出 I/O 完成,即使處理機(jī)空閑,該進(jìn)程也不能運(yùn)行。
結(jié)束狀態(tài):進(jìn)程正從系統(tǒng)中消失,這可能是進(jìn)程正常結(jié)束或其他原因中斷退出運(yùn)行,當(dāng)進(jìn)程需要結(jié)束運(yùn)行時(shí),系統(tǒng)首先必須置該進(jìn)程為結(jié)束狀態(tài),然后再進(jìn)一步處理資源釋放和回收。
注意:后備隊(duì)列在外存中,而就緒隊(duì)列在內(nèi)存中。
進(jìn)程同步與互斥
PV 操作是一種實(shí)現(xiàn)進(jìn)程互斥與同步的有效方法。PV操作與信號(hào)量的處理相關(guān),P 表示通過(荷蘭語 passeren)的意思,V 表示釋放(荷蘭語 vrijgeven)的意思。
具體來源可以查看PV操作的來源
互斥與同步:
互斥:是指某一資源同時(shí)只允許一個(gè)訪問者對(duì)其進(jìn)行訪問,具有唯一性和排它性。但互斥無法限制訪問者對(duì)資源的訪問順序,即 訪問是無序的。
同步:是指在互斥的基礎(chǔ)上(大多數(shù)情況),通過其它機(jī)制實(shí)現(xiàn)訪問者對(duì)資源的有序訪問。在大多數(shù)情況下,同步已經(jīng)實(shí)現(xiàn)了互斥,特別是所有寫入資源的情況必定是互斥的。少數(shù)情況是指可以允許多個(gè)訪問者同時(shí)訪問資源。
在操作系統(tǒng)中,信號(hào)量S是一整數(shù)。
當(dāng) S≥0 時(shí),S 表示可供并發(fā)進(jìn)程使用的資源實(shí)體數(shù);
當(dāng) S<0 時(shí),S 表示正在等待使用資源實(shí)體的進(jìn)程數(shù)。
建立一個(gè)信號(hào)量必須說明此信號(hào)量所代表的意義并且賦初值。
除賦初值外,信號(hào)量僅能通過PV操作來訪問。
信號(hào)量 S(semaphore) 代表“資源數(shù)”
P 操作的主要?jiǎng)幼魇牵?strong>通過(荷蘭語 passeren)(即 讓進(jìn)程使用資源)
S 減 1;
類比:“占用了一個(gè)資源”
若相減結(jié)果仍大于或等于 0,則進(jìn)程繼續(xù)執(zhí)行;
類比:“若占用一個(gè)資源后,還有多余的資源或者剛好用完資源,那么就代表該進(jìn)程有資源可以利用,進(jìn)程也就可以繼續(xù)執(zhí)行”
若相減結(jié)果小于 0,則該進(jìn)程被阻塞(掛起),之后放入等待該信號(hào)量的等待隊(duì)列中,然后轉(zhuǎn)入進(jìn)程調(diào)度。
類比:“若占用一個(gè)資源后,還欠別人資源,那么就代表該進(jìn)程根本就沒有資源可以用了,所以先欠著,掛個(gè)號(hào),等待”
V 操作的主要?jiǎng)幼魇牵?strong>釋放(荷蘭語 vrijgeven)(即 讓進(jìn)程釋放資源)
S 加 1;
類比:“資源占用完了,物歸原主,釋放資源”
若相加結(jié)果大于 0,則進(jìn)程繼續(xù)執(zhí)行;
類比:“若釋放資源后,資源數(shù)大于 0,就代表庫存里的資源充裕,奉還資源后,還有資源可以給你利用,那就繼續(xù)占用資源,繼續(xù)執(zhí)行”
若相加結(jié)果小于或等于 0,則從該信號(hào)的等待隊(duì)列中釋放一個(gè)等待進(jìn)程(喚醒,等待→就緒),然后再返回原進(jìn)程繼續(xù)執(zhí)行 或轉(zhuǎn)入進(jìn)程調(diào)度。
類比:“若一個(gè)進(jìn)程結(jié)束,釋放資源后,資源數(shù)還是欠別人的或者為 0,就代表庫存里的資源很緊張,資源剛一釋放就被其他進(jìn)程一搶而空,所以自己就不能用了,得先來后到,把資源給下一個(gè)進(jìn)程用,讓下一個(gè)進(jìn)程就緒。
如果執(zhí)行不需要此資源,那么等自己執(zhí)行完后(有的執(zhí)行并不一定需要此資源)把處理機(jī)讓給下一個(gè)進(jìn)程用;
如果執(zhí)行需要此資源,那么轉(zhuǎn)入進(jìn)程調(diào)度,重新排隊(duì),等等再執(zhí)行,把處理機(jī)讓給下一個(gè)進(jìn)程用,讓下一個(gè)進(jìn)程執(zhí)行。”
注意:PV 操作對(duì)于每一個(gè)進(jìn)程來說,都只能進(jìn)行一次,而且必須成對(duì)使用。
代碼化如下:
P 操作:
P(S) {
S--;
if(S < 0) {
保留調(diào)用進(jìn)程CPU現(xiàn)場;
將該進(jìn)程的PCB插入S的等待隊(duì)列;
置該進(jìn)程為“等待”狀態(tài);
轉(zhuǎn)入進(jìn)程調(diào)度;
}
}
V 操作:
V(S) {
S++;
if(S <= 0) {
移出S等待隊(duì)列首元素;
將該進(jìn)程的PCB插入就緒隊(duì)列;
置該進(jìn)程為“就緒”狀態(tài);
}
}
進(jìn)程通信
根據(jù)交換信息量的多少和效率的高低,進(jìn)程通信分為如下低級(jí)通信和高級(jí)通信。
低級(jí)通信:只能傳遞狀態(tài)和整數(shù)值(控制信息)。(如 同步互斥工具:PV 操作)
由于進(jìn)程的互斥和同步,需要在進(jìn)程間交換一定的信息,故不少學(xué)者將它們也歸為進(jìn)程通信。
特點(diǎn):傳送信息量小,效率低,每次通信傳遞的信息量固定,若傳遞較多信息則需要進(jìn)行多次通信。
編程復(fù)雜:用戶直接實(shí)現(xiàn)通信的細(xì)節(jié),容易出錯(cuò)。
高級(jí)通信:提高信號(hào)通信的效率,傳遞大量數(shù)據(jù),減輕程序編制的復(fù)雜度。
提供三種方式:
共享內(nèi)存模式
消息傳遞模式
共享文件模式
共享內(nèi)存模式
在通信進(jìn)程之間存在一塊可直接訪問的共享空間,通過對(duì)這片共享空間進(jìn)行寫/讀操作,實(shí)現(xiàn)進(jìn)程之間的信息交換。
在對(duì)共享空間進(jìn)行寫/讀操作時(shí),需要同步互斥工具(如 P操作、V操作),對(duì)共享空間的寫/讀進(jìn)行控制。
類比:
進(jìn)程 = 物品
共享空間 = 錢
用錢進(jìn)行交換,而不用物物交換
消息傳遞模式
在消息傳遞模式中,進(jìn)程間的數(shù)據(jù)交換是以格式化的消息(Message)為單位的。
進(jìn)程通過系統(tǒng)提供的發(fā)送消息和接收消息兩個(gè)原語進(jìn)行數(shù)據(jù)交換。
若通信進(jìn)程之間不存在可直接訪問的共享空間,則必須利用操作系統(tǒng)提供的信息傳遞方法實(shí)現(xiàn)進(jìn)程通信。
可分為直接和間接兩種通信方式:
直接:將消息發(fā)送給接收進(jìn)程,并將它掛在接收進(jìn)程的信息緩沖隊(duì)列中,接收進(jìn)程從消息緩沖隊(duì)列中取得消息。
間接:將消息發(fā)送給某個(gè)中間實(shí)體(信箱),接受進(jìn)程從中間實(shí)體中取得消息,又稱為信箱通信方式。
類比:
甲給乙寫信
直接:甲直接把信交給乙
間接:甲通過郵差把信交給乙
共享文件模式
共享文件:用于連接一個(gè)發(fā)送進(jìn)程和一個(gè)接收進(jìn)程,以實(shí)現(xiàn)它們之間通信的文件,就是共享文件,又名 pipe(管道)文件。
向管道提供輸入的發(fā)送進(jìn)程,以字節(jié)流形式將大量的數(shù)據(jù)送入管道;
而接收管道輸出的接收進(jìn)程,則從管道中接收數(shù)據(jù)。
為了協(xié)調(diào)雙方的通信,管道機(jī)制必須提供互斥、同步和確定對(duì)方存在三方面的協(xié)調(diào)能力。
線程
對(duì)線程最基本的理解就是“輕量級(jí)進(jìn)程”,它是一個(gè)基本的 CPU 執(zhí)行單元,也是程序執(zhí)行流的最小單元,由線程 ID、程序計(jì)數(shù)器、寄存器集合和堆棧組成。(即 CPU 調(diào)度的基本單元)
線程控制塊(Thread Control Block, TCB):保存運(yùn)行期間線程的數(shù)據(jù),TCB 是線程存在的唯一標(biāo)志。
線程屬于進(jìn)程,是進(jìn)程的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立和分配的基本單位。
線程自己不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源,但它可以與同屬一個(gè)進(jìn)程的其他線程共享進(jìn)程所擁有的全部資源。
一個(gè)進(jìn)程可以創(chuàng)建和撤銷另一個(gè)線程,同一個(gè)進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行。
區(qū)別
進(jìn)程是資源分配和調(diào)度的一個(gè)獨(dú)立單元;
而線程是 CPU 調(diào)度的基本單元。
同一個(gè)進(jìn)程中可以包括多個(gè)線程,并且線程共享整個(gè)進(jìn)程的資源(寄存器、堆棧、上下文),一個(gè)進(jìn)程至少包括一個(gè)線程。
進(jìn)程的創(chuàng)建調(diào)用 fork 或者 vfork,而線程的創(chuàng)建調(diào)用 pthread_create;
進(jìn)程結(jié)束后它擁有的所有線程都將銷毀,而線程的結(jié)束不會(huì)影響同個(gè)進(jìn)程中的其他線程的結(jié)束。
線程是輕量級(jí)的進(jìn)程,它的創(chuàng)建和銷毀所需要的時(shí)間比進(jìn)程小很多,所有操作系統(tǒng)中的執(zhí)行功能都是創(chuàng)建線程去完成的。
線程中執(zhí)行時(shí)一半都要進(jìn)行同步和互斥,因?yàn)樗鼈児蚕硗贿M(jìn)程的所有資源。
線程有自己的私有屬性 TCB、線程 id、寄存器、硬件上下文;
而進(jìn)程也有自己的私有屬性進(jìn)程控制塊 PCB,
這些私有屬性是不被共享的,用來表示一個(gè)進(jìn)程或一個(gè)線程的標(biāo)志。
處理機(jī)調(diào)度
高級(jí)調(diào)度:(作業(yè)調(diào)度,外存 → 內(nèi)存)根據(jù)某種算法,把外存上處于后備隊(duì)列中那些作業(yè)調(diào)入內(nèi)存。
中級(jí)調(diào)度:(內(nèi)存調(diào)度,內(nèi)存 → 外存)將那些暫時(shí)不能運(yùn)行的進(jìn)程調(diào)至外存等待,把進(jìn)程狀態(tài)改為就緒駐外存狀態(tài)或掛機(jī)狀態(tài)。
低級(jí)調(diào)度:(進(jìn)程調(diào)度,就緒 → 執(zhí)行)按照某種算法從就緒隊(duì)列(內(nèi)存)中選取一個(gè)進(jìn)程,將處理機(jī)分配給它。
調(diào)度算法
調(diào)度算法是根據(jù)系統(tǒng)的資源分配策略所規(guī)定的資源分配算法。
有的調(diào)度算法適用于作業(yè)調(diào)度,有的適用于進(jìn)程調(diào)度,有的兩種都適用。
周轉(zhuǎn)時(shí)間=等待時(shí)間+執(zhí)行時(shí)間
先來先服務(wù)調(diào)度(FCFS)
先來先服務(wù)調(diào)度(First Come First Service, FCFS):按照作業(yè)/進(jìn)程進(jìn)入系統(tǒng)的先后次序進(jìn)行調(diào)度,先進(jìn)入系統(tǒng)者先調(diào)度,即 啟動(dòng)等待時(shí)間最長的作業(yè)/進(jìn)程。
適用性:作業(yè)調(diào)度、進(jìn)程調(diào)度。
優(yōu)點(diǎn):
算法簡單
對(duì)長作業(yè)/進(jìn)程有利(短的要等好久)
有利于CPU繁忙型作業(yè)/進(jìn)程
科普:CPU 繁忙意味著是長作業(yè),不需要頻繁的輸入輸出
缺點(diǎn):
效率低
對(duì)短作業(yè)/進(jìn)程不利
因?yàn)槎套鳂I(yè)執(zhí)行時(shí)間很短,若令它等待較長時(shí)間,則帶權(quán)周轉(zhuǎn)時(shí)間會(huì)很高。
不利于 I/O 繁忙型作業(yè)進(jìn)程
I/O 繁忙意味著不停地中斷完成,是短作業(yè)
短作業(yè)優(yōu)先調(diào)度(SJF)
短作業(yè)優(yōu)先調(diào)度(Shortest Job First, SJF):該算法每次從后備隊(duì)列/就緒隊(duì)列中選擇一個(gè)估計(jì)時(shí)間最短的作業(yè)/進(jìn)程,將資源分配給它。
適用性:作業(yè)調(diào)度、進(jìn)程調(diào)度。
優(yōu)點(diǎn):
平均等待時(shí)間和平均周轉(zhuǎn)時(shí)間最少
缺點(diǎn):
對(duì)長作業(yè)/進(jìn)程不利(可能導(dǎo)致長作業(yè)/進(jìn)程長期不被調(diào)度,發(fā)生“饑餓”現(xiàn)象)
不能保證緊迫性作業(yè)/進(jìn)程會(huì)被及時(shí)處理
由于作業(yè)/進(jìn)程的長短只是根據(jù)客戶說提供的估計(jì)執(zhí)行時(shí)間而定的,而用戶有可能會(huì)有意或無意地縮短氣作業(yè)的估計(jì)運(yùn)行時(shí)間,致使該算法不一定能真正做到短作業(yè)優(yōu)先調(diào)度。
優(yōu)先級(jí)調(diào)度
優(yōu)先級(jí)調(diào)度:該算法每次從后備隊(duì)列/就緒隊(duì)列中選擇優(yōu)先級(jí)最高的一個(gè)作業(yè)/進(jìn)程,將資源分配給它。
適用性:作業(yè)調(diào)度、進(jìn)程調(diào)度。
根據(jù)新的更高優(yōu)先級(jí)進(jìn)程能否搶占正在執(zhí)行的進(jìn)程,可將該調(diào)度分為:
非搶占式優(yōu)先級(jí)調(diào)度算法:
當(dāng)有進(jìn)程正在處理機(jī)上運(yùn)行時(shí),即使有更高優(yōu)先級(jí)的進(jìn)程進(jìn)入就緒隊(duì)列,也需等待當(dāng)前進(jìn)程運(yùn)行完成,等待主動(dòng)讓出處理機(jī)后,才把處理機(jī)分配給高優(yōu)先級(jí)的進(jìn)程。
搶占式優(yōu)先權(quán)調(diào)度算法:
當(dāng)有進(jìn)程正在處理機(jī)上運(yùn)行時(shí),只要又出現(xiàn)了另一個(gè)其優(yōu)先權(quán)更高的進(jìn)程,進(jìn)程調(diào)度程序就立即停止當(dāng)前進(jìn)程(原優(yōu)先權(quán)最高的進(jìn)程)的執(zhí)行,重新將處理機(jī)分配給新到的優(yōu)先權(quán)最高的進(jìn)程。
高響應(yīng)比優(yōu)先調(diào)度(HRRN)
高響應(yīng)比優(yōu)先調(diào)度(Highest Response Ratio Next, HRRN):該算法是對(duì) FCFS 調(diào)度算法和 SJF 調(diào)度算法的一種綜合平衡,同時(shí)考慮每個(gè)作業(yè)的等待時(shí)間和估計(jì)的運(yùn)行時(shí)間。
在每次進(jìn)行作業(yè)調(diào)度時(shí),先計(jì)算后備作業(yè)隊(duì)列中每個(gè)作業(yè)的響應(yīng)比,從中選出響應(yīng)比最高的作業(yè)投入運(yùn)行。
響應(yīng)比=作業(yè)周轉(zhuǎn)時(shí)間/作業(yè)執(zhí)行時(shí)間=(等待時(shí)間+要求服務(wù)時(shí)間)/要求服務(wù)時(shí)間
適用性:主要用于作業(yè)調(diào)度
優(yōu)點(diǎn):
等待時(shí)間相同的作業(yè),要求服務(wù)的時(shí)間越短,其優(yōu)先權(quán)越高,此時(shí)對(duì)短作業(yè)有利;
等待時(shí)間相同的作業(yè),等待時(shí)間越長,其優(yōu)先權(quán)越高,此時(shí)等同于先來先服務(wù)調(diào)度算法;
對(duì)于長作業(yè),優(yōu)先權(quán)隨等待時(shí)間的增加而提高,其等待時(shí)間足夠長時(shí),其優(yōu)先權(quán)便可提升到很高,從而也可獲得處理機(jī),此時(shí)對(duì)長作業(yè)有利,克服了饑餓狀態(tài)。
缺點(diǎn):
要進(jìn)行響應(yīng)比計(jì)算,增加了系統(tǒng)開銷。
時(shí)間片輪轉(zhuǎn)調(diào)度
該算法將所有就緒進(jìn)程按到達(dá)的先后次序排成一個(gè)隊(duì)列,每次調(diào)度時(shí),把處理機(jī)分配給隊(duì)首進(jìn)程,并令其執(zhí)行一個(gè)時(shí)間片;
當(dāng)執(zhí)行的時(shí)間片用完時(shí),由一個(gè)計(jì)時(shí)器發(fā)出時(shí)鐘中斷請求,調(diào)度程序便停止該進(jìn)程的執(zhí)行,并將其放到就緒隊(duì)列尾;
然后,再把處理機(jī)分配給就緒隊(duì)列中新的隊(duì)首。
適用性:主要用于分時(shí)系統(tǒng)中進(jìn)程調(diào)度
多級(jí)反饋隊(duì)列調(diào)度
該算法是時(shí)間片輪轉(zhuǎn)調(diào)度算法和優(yōu)先級(jí)調(diào)度算法的綜合和發(fā)展,通過動(dòng)態(tài)調(diào)整進(jìn)程優(yōu)先級(jí)和時(shí)間片大小,可以兼顧多方面的系統(tǒng)目標(biāo)。
設(shè)置多個(gè)就緒隊(duì)列,并賦予不同優(yōu)先級(jí),優(yōu)先級(jí)越高,時(shí)間片越小,進(jìn)程在進(jìn)入待調(diào)度的隊(duì)列等待時(shí),首先進(jìn)入優(yōu)先級(jí)最高的 Q1 等待,一個(gè)時(shí)間片結(jié)束后,若進(jìn)程沒有運(yùn)行完,則轉(zhuǎn)入低一級(jí)的就緒隊(duì)列隊(duì)尾,僅當(dāng)高優(yōu)先級(jí)隊(duì)列中無就緒進(jìn)程才開始調(diào)度低一級(jí)的就緒隊(duì)列中的進(jìn)程(若此刻有進(jìn)程進(jìn)入了高優(yōu)先級(jí)隊(duì)列中,那么要先轉(zhuǎn)去調(diào)用高優(yōu)先級(jí)隊(duì)列)。
例子:
假設(shè)系統(tǒng)中有 3 個(gè)反饋隊(duì)列 Q1,Q2,Q3,時(shí)間片分別為 2,4,8。
設(shè)有3個(gè)作業(yè)J1,J2,J3分別在時(shí)間 0,1,3 時(shí)刻到達(dá)。而它們所需要的 CPU 時(shí)間分別是 3,2,1 個(gè)時(shí)間片。
時(shí)刻 0:J1 到達(dá)。于是進(jìn)入到隊(duì)列 1,運(yùn)行 1 個(gè)時(shí)間片,時(shí)間片還未到,此時(shí) J2 到達(dá)。
時(shí)刻 1:J2 到達(dá)。由于同一隊(duì)列采用先來先服務(wù),于是 J2 等待。J1 在又運(yùn)行了 1 個(gè)時(shí)間片后,已經(jīng)完成了在 Q1 中的 2 個(gè)時(shí)間片的限制,于是 J1 置于 Q2 等待被調(diào)度。當(dāng)前處理機(jī)分配給 J2。
時(shí)刻 2:J1 進(jìn)入 Q2 等待調(diào)度,J2 獲得 CPU 開始運(yùn)行。
時(shí)刻 3:J3 到達(dá),由于同一隊(duì)列采用先來先服務(wù),故 J3 在 Q1 等待調(diào)度,J1 也在 Q2 等待調(diào)度。
時(shí)刻 4:J2 處理完成,由于 J3,J1 都在等待調(diào)度,但是 J3 所在的隊(duì)列比 J1 所在的隊(duì)列的優(yōu)先級(jí)要高,于是 J3 被調(diào)度,J1 繼續(xù)在 Q2 等待。
時(shí)刻 5:J3 經(jīng)過 1 個(gè)時(shí)間片,完成。
時(shí)刻 6:由于 Q1 已經(jīng)空閑,于是開始調(diào)度 Q2 中的作業(yè),則 J1 得到處理器開始運(yùn)行。J1 再經(jīng)過一個(gè)時(shí)間片,完成了任務(wù)。于是整個(gè)調(diào)度過程結(jié)束。
從上面的例子看,在多級(jí)反饋隊(duì)列中,后進(jìn)的作業(yè)不一定慢完成。
死鎖
死鎖是指多個(gè)進(jìn)程因競爭臨界資源而造成的一種僵局(互相等待),若無外力作用,這些進(jìn)程都無法向前推進(jìn)。
產(chǎn)生死鎖的根本原因:系統(tǒng)能夠提供的資源個(gè)數(shù)比要求該資源的進(jìn)程數(shù)要少。
產(chǎn)生死鎖的基本原因:
資源競爭
例子:
A 有紙,B 有筆
A:你不給我筆,我就不給你紙,我就寫不了作業(yè)
B:你不給我紙,我就不給你筆,我就寫不了作業(yè)
彼此僵持不下。。
進(jìn)程推進(jìn)順序非法
例子:
A 要前進(jìn) 2 步,到桌子前拿東西,再后退 2 步;
結(jié)果順序非法:
A 先后退,就永遠(yuǎn)到不了桌子前,觸發(fā)不了,死鎖。
產(chǎn)生死鎖的必要條件:(互斥、不剝奪、占有、環(huán)路)
互斥條件:涉及的資源是非共享的,即 一次只有一個(gè)進(jìn)程使用。如果有另一個(gè)進(jìn)程申請?jiān)撡Y源,那么申請進(jìn)程必須等待,直到該資源被釋放。
互斥:有你沒我,有我沒你
不剝奪條件(非搶占):進(jìn)程所獲得的資源在未使用完畢之前,不能被其他進(jìn)程強(qiáng)行奪走,即 只能由獲得該資源的進(jìn)程自己來釋放。
不剝奪:你不能強(qiáng)行搶我的
占有并等待(部分分配):進(jìn)程每次申請它所需要的一部分資源。在等待一新資源的同時(shí),進(jìn)程繼續(xù)占用已分配到的資源。
占有:這個(gè)資源我馬上要用的,拿著等一會(huì)
環(huán)路條件(循環(huán)等待):存在一種進(jìn)程循環(huán)鏈,鏈中每一個(gè)進(jìn)程已獲得的資源同時(shí)被鏈中下一個(gè)資源所請求。
環(huán)路:你不給我,我不給你
注意:這四個(gè)條件是死鎖的必要條件,只要系統(tǒng)發(fā)生死鎖,這些條件必然成立;
反之,只要上述條件之一不滿足,就不會(huì)發(fā)生死鎖。
處理策略
預(yù)防死鎖
預(yù)防死鎖:通過設(shè)置一些限制條件,破壞死鎖的一些必要條件,讓死鎖無法發(fā)生。
避免死鎖
避免死鎖:在動(dòng)態(tài)分配資源的過程中,用一些算法(如 銀行家算法)防止系統(tǒng)進(jìn)入不安全狀態(tài),避免死鎖的發(fā)生。
銀行家算法
Dijkstra E W 于 1968 年提出銀行家算法。之所以稱為銀行家算法,是因?yàn)樵撍惴捎糜阢y行系統(tǒng)。
新進(jìn)程進(jìn)入系統(tǒng)時(shí),它必須說明各類資源類型的實(shí)例的最大需求量,這一數(shù)量不能超過系統(tǒng)各類資源的總數(shù)。
當(dāng)進(jìn)程申請一組資源時(shí),該算法需要檢查申請者對(duì)各類資源的最大需求量:
如果系統(tǒng)現(xiàn)存的各類資源的數(shù)量可以滿足當(dāng)前它對(duì)各類資源的最大需求量時(shí),就滿足當(dāng)前的申請;
否則,進(jìn)程必須等待,直到其他進(jìn)程釋放足夠的資源為止。
換言之,僅當(dāng)申請者可以在一定時(shí)間內(nèi)無條件地歸還它所申請的全部資源時(shí),才能把資源分配給它。
死鎖的檢測及解除
死鎖的檢測及解除:在死鎖發(fā)生前不做任何操作,只是檢測當(dāng)前是否發(fā)生死鎖,若發(fā)生死鎖,則采取一些措施(如 資源剝奪法、撤銷進(jìn)程法、進(jìn)程回退法)來解除死鎖。
主存管理
實(shí)存管理:
分區(qū)式管理:最簡單直觀的方式,在內(nèi)存中連續(xù)分配一個(gè)區(qū),將整個(gè)進(jìn)程放入這個(gè)區(qū)。
缺點(diǎn)是會(huì)產(chǎn)生外碎片,即 時(shí)間長了會(huì)在分區(qū)之間產(chǎn)生難以被利用的小空間。
固定分區(qū):把主存中可分配的用戶區(qū)域預(yù)先劃分成若干個(gè)連續(xù)的分區(qū),每個(gè)連續(xù)區(qū)的大小可以相同,也可以不同。但是,一旦劃分好分區(qū)之后,主存中分區(qū)的個(gè)數(shù)就固定了,且每個(gè)分區(qū)的大小也固定不變。這是一種靜態(tài)分區(qū)法。
在固定分區(qū)方式管理下,每個(gè)分區(qū)用來裝入一個(gè)作業(yè)。由于主存中有多個(gè)分區(qū),就可同時(shí)在每個(gè)分區(qū)中裝入一個(gè)作業(yè)。所以,這種存儲(chǔ)管理方式適用于多道程序系統(tǒng)。
可變分區(qū):內(nèi)存管理的可變分區(qū)模式,又稱變長分區(qū)模式、動(dòng)態(tài)分區(qū)分配模式。
這種分配方式不會(huì)預(yù)先劃分內(nèi)存分區(qū),而是在進(jìn)程裝入內(nèi)存時(shí),根據(jù)進(jìn)程的大小動(dòng)態(tài)地建立分區(qū),并使分區(qū)的大小正好適合進(jìn)程的需要。因此系統(tǒng)分區(qū)的大小和數(shù)目是可變的。
與固定分區(qū)的區(qū)別就是:動(dòng)態(tài)的劃分分區(qū)。克服固定分區(qū)管理的“內(nèi)碎片”問題。
分頁式管理:將內(nèi)存分成固定大小的頁,離散分配若干頁將整個(gè)進(jìn)程載入。
頁面可以不連續(xù)是其重要優(yōu)點(diǎn),不會(huì)產(chǎn)生外碎片,更有效地利用了內(nèi)存,不過會(huì)產(chǎn)生一些內(nèi)碎片,即 分配給進(jìn)程的最后一個(gè)頁往往不能正好用完,不過在頁面大小不是很大的時(shí)候可以接受。
分段式管理:將程序分為若干個(gè)段,如數(shù)據(jù)段和代碼段,加以不同的保護(hù)。
施加保護(hù)是分段式的優(yōu)點(diǎn),但其仍是像分區(qū)式管理一樣的連續(xù)分配。
段頁式管理:同樣將程序分段,加以不同的保護(hù),但是各段不再連續(xù)分配,而采用分頁式離散分配。
注意:以上四種全是實(shí)存管理,即 進(jìn)程要么全部載入內(nèi)存中,要么就不能載入。
虛存管理:
請求式分頁:將進(jìn)程放入虛擬內(nèi)存中,由于一個(gè)進(jìn)程的頁面不會(huì)同時(shí)全部被用到,只將需要用到的頁面調(diào)入物理內(nèi)存。即進(jìn)程并沒有整個(gè)在物理內(nèi)存中。
幾個(gè)請求式分頁的概念:
固定分配:物理內(nèi)存中分配給進(jìn)程的內(nèi)存塊數(shù)一定。
可變分配:物理內(nèi)存先分配給進(jìn)程一些內(nèi)存塊,如不夠,可適當(dāng)增加。
局部置換:發(fā)生在分配的內(nèi)存塊已用完,又發(fā)生了缺頁時(shí),只能置換本來就是自己的內(nèi)存塊。
全局置換:發(fā)生在分配的內(nèi)存塊已用完,又發(fā)生了缺頁時(shí),可以置換到操作系統(tǒng)保留的空閑頁。這其實(shí)相當(dāng)于增加了進(jìn)程占有的內(nèi)存塊數(shù)。
三種分配方式:固定分配局部置換、可變分配全局置換、可變分配局部置換。固定分配、全局置換不能組合。
內(nèi)存碎片
內(nèi)存碎片分為:內(nèi)部碎片和外部碎片
內(nèi)部碎片:已經(jīng)被分配出去(能明確指出屬于哪個(gè)進(jìn)程)卻不能被利用的內(nèi)存空間;
內(nèi)部碎片是處于(操作系統(tǒng)分配的用于裝載某一進(jìn)程的內(nèi)存)區(qū)域內(nèi)部或頁面內(nèi)部的存儲(chǔ)塊。
占有這些區(qū)域或頁面的進(jìn)程并不使用這個(gè)存儲(chǔ)塊。
而在進(jìn)程占有這塊存儲(chǔ)塊時(shí),系統(tǒng)無法利用它。
直到進(jìn)程釋放它,或進(jìn)程結(jié)束時(shí),系統(tǒng)才有可能利用這個(gè)存儲(chǔ)塊。
外部碎片:還沒有被分配出去(不屬于任何進(jìn)程),但由于太小了無法分配給申請內(nèi)存空間的新進(jìn)程的內(nèi)存空閑區(qū)域。
外部碎片是處于任何兩個(gè)已分配區(qū)域或頁面之間的空閑存儲(chǔ)塊。
這些存儲(chǔ)塊的總和可以滿足當(dāng)前申請的長度要求,但是由于它們的地址不連續(xù)或其他原因,使得系統(tǒng)無法滿足當(dāng)前申請。
分區(qū)存儲(chǔ)管理
在分區(qū)存儲(chǔ)管理中,程序的地址空間是一維線性的,因?yàn)槭?strong>連續(xù)分配的,指令或操作數(shù)地址只要給出一個(gè)信息量即可決定。(連續(xù)分配)
分區(qū)式管理:最簡單直觀的方式,在內(nèi)存中連續(xù)分配一個(gè)區(qū),將整個(gè)進(jìn)程放入這個(gè)區(qū)。
缺點(diǎn)是會(huì)產(chǎn)生外碎片,即 時(shí)間長了會(huì)在分區(qū)之間產(chǎn)生難以被利用的小空間。
固定分區(qū):把主存中可分配的用戶區(qū)域預(yù)先劃分成若干個(gè)連續(xù)的分區(qū),每個(gè)連續(xù)區(qū)的大小可以相同,也可以不同。但是,一旦劃分好分區(qū)之后,主存中分區(qū)的個(gè)數(shù)就固定了,且每個(gè)分區(qū)的大小也固定不變。這是一種靜態(tài)分區(qū)法。
在固定分區(qū)方式管理下,每個(gè)分區(qū)用來裝入一個(gè)作業(yè)。由于主存中有多個(gè)分區(qū),就可同時(shí)在每個(gè)分區(qū)中裝入一個(gè)作業(yè)。所以,這種存儲(chǔ)管理方式適用于多道程序系統(tǒng)。
可變分區(qū):內(nèi)存管理的可變分區(qū)模式,又稱變長分區(qū)模式、動(dòng)態(tài)分區(qū)分配模式。
這種分配方式不會(huì)預(yù)先劃分內(nèi)存分區(qū),而是在進(jìn)程裝入內(nèi)存時(shí),根據(jù)進(jìn)程的大小動(dòng)態(tài)地建立分區(qū),并使分區(qū)的大小正好適合進(jìn)程的需要。因此系統(tǒng)分區(qū)的大小和數(shù)目是可變的。
與固定分區(qū)的區(qū)別就是:動(dòng)態(tài)的劃分分區(qū)。克服固定分區(qū)管理的“內(nèi)碎片”問題。
分區(qū)存儲(chǔ)管理中常用的分配策略有:首次適應(yīng)算法、循環(huán)首次適應(yīng)算法、最佳適應(yīng)算法和最壞適應(yīng)算法。
首次適應(yīng)算法
首次適應(yīng)算法:按地址從小到大排序,分配第一個(gè)符合條件的分區(qū),即 第一個(gè)足夠裝入它的可利用的空閑區(qū)。
優(yōu)點(diǎn):
保留高地址部分的大空閑區(qū),有利于后來的大型作業(yè)分配。
缺點(diǎn):
低地址部分被不斷劃分,留下許多難以利用的小空閑區(qū);
每次分配時(shí)都要從低地址部分開始查找,增加查找時(shí)的系統(tǒng)開銷。
循環(huán)首次適應(yīng)算法
循環(huán)首次適應(yīng)算法:在首次適應(yīng)算法的基礎(chǔ)上,從上次查找結(jié)束的位置開始查找,分配第一個(gè)足夠裝入它的可利用的空閑區(qū)。
優(yōu)點(diǎn):
使內(nèi)存中的空閑分區(qū)分布更均勻,減少了查找時(shí)的系統(tǒng)開銷。
缺點(diǎn):
缺乏大的空閑區(qū),可能導(dǎo)致不能裝入大型作業(yè)。
最佳適應(yīng)算法
最佳適應(yīng)算法:是按空間從小到大排序,分配第一個(gè)符合條件的分區(qū),即 與它所需大小最接近的空閑區(qū)。
優(yōu)點(diǎn):
每次分配的空閑區(qū)都是最合適的
缺點(diǎn):
在內(nèi)存中留下許多難以利用的小空閑區(qū)
最壞適應(yīng)算法
最壞適應(yīng)算法:是按空間從大到小排序,分配第一個(gè)符合條件的分區(qū),即 最不適合它的空閑區(qū),即 最大的空閑區(qū)。
優(yōu)點(diǎn):
產(chǎn)生碎片的幾率最小,對(duì)中小型作業(yè)有利。
缺點(diǎn):
缺乏大的空閑區(qū),對(duì)大型作業(yè)不利。
頁式存儲(chǔ)管理
在頁式存儲(chǔ)管理中,程序的地址空間是一維線性的,因?yàn)橹噶罨虿僮鲾?shù)地址只要給出一個(gè)信息量即可決定。(離散分配)
理解:頁式存儲(chǔ)管理只用給出一個(gè)邏輯地址就行,因?yàn)轫摰拇笮∈枪潭ǖ模恍枰桃鈩澐郑?dāng)然不是邏輯地址÷頁的大小=頁號(hào)...余 偏移量,因?yàn)轫撌酱鎯?chǔ)是離散分配的。
根據(jù)下文的地址變換過程可知,我們只需要提供邏輯地址這一個(gè)地址,就可以找到這個(gè)頁式存儲(chǔ)物理地址,所以是地址空間一維的,只用一個(gè)邏輯地址。
不存在外碎片,存在內(nèi)碎片
頁之間一頁緊跟著一頁,沒有外碎片;但是頁內(nèi)有可能分配不滿,有內(nèi)碎片。
分頁式管理:將內(nèi)存分成固定大小的頁,離散分配若干頁將整個(gè)進(jìn)程載入。于是一個(gè)連續(xù)的程序空間在主存中可能是不連續(xù)的。為了保證程序能正確地執(zhí)行,必須在執(zhí)行每條指令時(shí)將程序中的邏輯地址變換為實(shí)際的物理地址,即 進(jìn)行動(dòng)態(tài)重定位。
在頁式系統(tǒng)中,實(shí)現(xiàn)這種地址變換的機(jī)構(gòu)稱為頁面映射表,簡稱頁表。
頁面可以不連續(xù)是其重要優(yōu)點(diǎn),不會(huì)產(chǎn)生外碎片,更有效地利用了內(nèi)存,不過會(huì)產(chǎn)生一些內(nèi)碎片,即 分配給進(jìn)程的最后一個(gè)頁往往不能正好用完,不過在頁面大小不是很大的時(shí)候可以接受。
其實(shí)如何利用頁表來進(jìn)行地址變換,這與計(jì)算機(jī)所采用的地址結(jié)構(gòu)有關(guān),而地址結(jié)構(gòu)又與選擇的頁面尺寸有關(guān)。
虛地址結(jié)構(gòu):(因?yàn)槭?strong>邏輯上的虛擬地址,所以由人為規(guī)定結(jié)構(gòu),比較隨意)
| 頁號(hào) | 頁內(nèi)位移 |
|---|---|
| P | W |
就如上表所示,虛地址是由頁號(hào)和頁內(nèi)位移組合而成。
地址變換過程:(邏輯地址→物理地址)
在收到邏輯地址(Logic Address, LA)后,進(jìn)行處理,得到物理地址(Physical Address, PA):
將邏輯地址 LA 劃分為頁號(hào) P 和頁內(nèi)位移 W;
根據(jù)頁號(hào) P 查頁表,得到塊號(hào) B;
物理地址 PA = 塊號(hào) B * 頁的大小 + 頁內(nèi)位移 W。
頁面置換算法
在地址映射過程中,若在頁面中發(fā)現(xiàn)所要訪問的頁面不在內(nèi)存中,則產(chǎn)生缺頁中斷。
當(dāng)發(fā)生缺頁中斷時(shí),如果操作系統(tǒng)內(nèi)存中沒有空閑頁面,則操作系統(tǒng)必須在內(nèi)存選擇一個(gè)頁面將其移出內(nèi)存,以便為即將調(diào)入的頁面讓出空間。而用來選擇淘汰哪一頁的規(guī)則叫做頁面置換算法。抖動(dòng)(顛簸):是指在頁面置換過程中,剛剛調(diào)出的頁面馬上又要調(diào)入內(nèi)存,剛剛調(diào)入的頁面馬上又要調(diào)出,發(fā)生頻繁的頁面調(diào)度行為。
缺頁中斷率=成功訪問次數(shù)/總訪問次數(shù)
最佳置換算法(OPTimal replacement, OPT):將以后永不使用的或者在最長時(shí)間內(nèi)不會(huì)被訪問的頁面調(diào)出,但由于人們無法預(yù)知進(jìn)程在內(nèi)存下的若干頁面中哪個(gè)是未來最長時(shí)間內(nèi)不再被訪問的,因而該算法無法實(shí)現(xiàn)。
先進(jìn)先出置換算法(First In First Out, FIFO):將最早進(jìn)入內(nèi)存的頁面調(diào)出。
該算法會(huì)產(chǎn)生Belady異常,即 發(fā)生缺頁時(shí),如果對(duì)一個(gè)進(jìn)程未分配它所要求的全部頁面,有時(shí)分配頁數(shù)↑,缺頁率反而↑的異常現(xiàn)象。(先進(jìn)先出,結(jié)果進(jìn)來了一個(gè)需要的頁,也出去了一個(gè)需要的頁)
最近最久未使用置換算法(Least Recently Used, LRU):是將最近最長時(shí)間未訪問的頁面調(diào)出。該算法為每個(gè)頁面設(shè)置一個(gè)訪問字段,記錄頁面上次被訪問以來所經(jīng)歷的時(shí)間,調(diào)出頁面時(shí)選擇時(shí)間最長的頁面。
最不經(jīng)常使用置換算法(Least Frequently Used ,LFU):將最近應(yīng)用次數(shù)最少的頁淘汰。
時(shí)鐘置換算法(CLOCK):也稱為最近未用算法(NRU),該算法是為每個(gè)頁面設(shè)置一個(gè)使用位,需要替換頁面時(shí),循環(huán)檢查各個(gè)頁面,將使用位為 1 的頁面重置為 0(使用時(shí)再置為1),直到遇到第一個(gè)使用位為 0 的頁面,將其調(diào)出。
如果在每個(gè)頁面再增加一個(gè)修改位,則得到改進(jìn)型的 CLOCK 置換算法,類似的,需要替換頁面時(shí),將使用位和修改位都為 0 的頁面調(diào)出。
段式存儲(chǔ)管理
段式存儲(chǔ)管理的用戶地址是二維的、按段劃分的。(離散分配)
理解:段式存儲(chǔ)管理必須給出(段號(hào),偏移量),因?yàn)?strong>段的大小不固定,必須給出這個(gè)地址結(jié)構(gòu)(邏輯地址),由此找到段表中程序員設(shè)置的基址,由地址結(jié)構(gòu)(邏輯地址)和基址這兩個(gè)地址我們可以得到段式存儲(chǔ)物理地址,所以是二維的,需要用到兩個(gè)地址。
存在外碎片,不存在內(nèi)碎片
段內(nèi)緊密連接為一個(gè)整體,沒有內(nèi)碎片;段之間不一定緊密連接,存在外碎片。
分段式管理:將程序分為若干個(gè)段,如數(shù)據(jù)段和代碼段,加以不同的保護(hù)。
施加保護(hù)是分段式的優(yōu)點(diǎn),雖然不同段可以離散分配,但其段內(nèi)仍是連續(xù)分配。
在這樣的系統(tǒng)中作業(yè)的地址空間由若干邏輯分段組成,每個(gè)分段有自己的名字,對(duì)于一個(gè)分段而言,它是一個(gè)連續(xù)的地址區(qū)。
由于標(biāo)識(shí)某一程序地址時(shí),要同時(shí)給出段名和段內(nèi)地址,因此地址空間是二維的(實(shí)際上,為了實(shí)現(xiàn)方便,在第一次訪問某段時(shí),操作系統(tǒng)就用唯一的段號(hào)來代替該段的段名)。
程序地址的一般形式由(s,w)組成,這里 s 是段號(hào),w 是段內(nèi)位移。
| 段號(hào) | 段內(nèi)位移 |
|---|---|
| s | w |
注意:這里雖然和分頁一樣,但是進(jìn)入段表后,要找到段表中程序員設(shè)置的基址,所以是二維的地址結(jié)構(gòu)。
分頁和分段的異同
相同點(diǎn):
分頁和分段都采用離散分配(也就是不連續(xù)的分配地址,類似于鏈表)的方式
都要通過地址映射機(jī)構(gòu)來實(shí)現(xiàn)地址變換
不同點(diǎn):
從功能上看:
頁是信息的物理單位,分頁是為實(shí)現(xiàn)離散分配方式,以消除內(nèi)存的外零頭,提高內(nèi)存利用率,是為了滿足系統(tǒng)管理的需要;
而段是信息的邏輯單位,它含有一組意義相對(duì)完整的信息,是為了滿足用戶的需要。
頁的大小是由系統(tǒng)確定且固定不變的;
而段的長度不固定,取決于用戶編寫的程序。
分頁的作業(yè)地址空間是一維的;
而分段的作業(yè)地址空間是二維的。
理解:
分頁存儲(chǔ)管理里面的地址結(jié)構(gòu)是:頁號(hào)+位移量,這個(gè)地址結(jié)構(gòu)就是一個(gè)地址;
根據(jù)頁號(hào)在頁表項(xiàng)中找到對(duì)應(yīng)頁項(xiàng),這個(gè)頁項(xiàng)代表了一個(gè)塊號(hào),但是這個(gè)塊號(hào)并不是一個(gè)地址,因?yàn)樗袎K是事先已經(jīng)劃分好且長度相等的,這些塊是操作系統(tǒng)自己知道的,所以操作系統(tǒng)就可以僅根據(jù)地址結(jié)構(gòu)直接訪問,即分頁存儲(chǔ)管理的地址空間是一維的。
分段存儲(chǔ)管理里面的地址結(jié)構(gòu)是:段號(hào)+段內(nèi)地址(位移量),這個(gè)地址結(jié)構(gòu)就是一個(gè)地址;
根據(jù)段號(hào)在段表項(xiàng)中找到對(duì)應(yīng)段項(xiàng),這個(gè)段項(xiàng)和頁項(xiàng)的組成成分不一樣,其中還包含了一個(gè)基址,就是段在內(nèi)存中的起始地址,這個(gè)地址不是操作系統(tǒng)劃分,而是程序員事先設(shè)置的,操作系統(tǒng)并不知道,所以操作系統(tǒng)要訪問內(nèi)存就必須要結(jié)合地址結(jié)構(gòu)和段表中的基址,所以分段的地址空間是二維的。總結(jié):
分頁是地址結(jié)構(gòu)+塊號(hào),地址結(jié)構(gòu)是地址,塊號(hào)只是一個(gè)數(shù)字而已,所以是一維;(因?yàn)殚L度固定,所以只需要塊號(hào)數(shù)字就行)
分段是地址結(jié)構(gòu)+基址,兩者都是地址,所以是二維的。(因?yàn)殚L度不固定,所以需要基址才能找到)
段頁式存儲(chǔ)管理
段頁式存儲(chǔ)管理的用戶地址也是二維的、按段劃分的。只是在段中再劃分成若干大小相等的頁。
理解:段頁式存儲(chǔ)管理也必須給出(段號(hào),偏移量),雖然段的大小不固定,但是段內(nèi)頁號(hào)和頁內(nèi)偏移可以根據(jù)偏移量算出來,所以還是二維的。
段頁式管理:同樣將程序分段,加以不同的保護(hù),但是各段不再連續(xù)分配,而采用分頁式離散分配。
地址結(jié)構(gòu)就由段號(hào)、段內(nèi)頁號(hào)、頁內(nèi)位移三部分組成。
注意:不要看三部分就是三維的了,其實(shí)用戶使用的部分也是二維的。
| 段號(hào) | 段內(nèi)頁號(hào) | 頁內(nèi)位移 |
|---|
用戶使用的仍是段號(hào)和段內(nèi)相對(duì)地址,
由地址變換機(jī)構(gòu)自動(dòng)將段內(nèi)相對(duì)地址的高幾位解釋為段內(nèi)頁號(hào),將剩余的低位解釋為頁內(nèi)位移。
用戶地址空間的最小單位不是段而是頁,而主存按頁的大小劃分,按頁裝入。
這樣,一個(gè)段可以裝入到若干個(gè)不連續(xù)的主存塊內(nèi),段的大小不再受主存可用區(qū)的限制了。
虛擬存儲(chǔ)器
虛擬存儲(chǔ)器:是指具有請求調(diào)入功能和置換功能,并能從邏輯上對(duì)內(nèi)存容量加以擴(kuò)充的一種存儲(chǔ)器系統(tǒng)。
它使得應(yīng)用程序認(rèn)為它擁有連續(xù)的可用的內(nèi)存(一個(gè)連續(xù)完整的地址空間),而實(shí)際上,它通常是被分隔成多個(gè)物理內(nèi)存碎片,還有部分暫時(shí)存儲(chǔ)在外部磁盤存儲(chǔ)器上,在需要時(shí)進(jìn)行數(shù)據(jù)交換。
局部性原理:是指CPU訪問存儲(chǔ)器時(shí),無論是存取指令還是存取數(shù)據(jù),所訪問的存儲(chǔ)單元都趨于聚集在一個(gè)較小的連續(xù)區(qū)域中。
時(shí)間局部性(Temporal Locality):如果一個(gè)信息項(xiàng)正在被訪問,那么在近期它很可能還會(huì)被再次訪問。
程序循環(huán)、堆棧等是產(chǎn)生時(shí)間局部性的原因。
空間局部性(Spatial Locality):在最近的將來將用到的信息很可能與正在使用的信息在空間地址上是臨近的。
順序局部性(Order Locality):在典型程序中,除轉(zhuǎn)移類指令外,大部分指令是順序進(jìn)行的。順序執(zhí)行和非順序執(zhí)行的比例大致是 5:1。此外,對(duì)大型數(shù)組訪問也是順序的。
指令的順序執(zhí)行、數(shù)組的連續(xù)存放等是產(chǎn)生順序局部性的原因。
虛擬存儲(chǔ)器基于局部性原理,在程序裝入時(shí),可以只將程序的一部分裝入內(nèi)存,就可以啟動(dòng)程序執(zhí)行。
在執(zhí)行過程中,當(dāng)所訪問的信息不在內(nèi)存中時(shí),由操作系統(tǒng)將所需內(nèi)容調(diào)入內(nèi)存,使程序繼續(xù)執(zhí)行;
解釋:因?yàn)榫植啃栽恚韵乱徊叫枰L問的信息很有可能就在附近。
同時(shí),操作系統(tǒng)將內(nèi)存中暫時(shí)不用的內(nèi)容調(diào)出到外存。
這樣,系統(tǒng)就好像為用戶提供了一個(gè)比實(shí)際內(nèi)存大得多的存儲(chǔ)器,稱為虛擬存儲(chǔ)器。
特征:
離散性:是指內(nèi)存分配時(shí)采用離散分配的方式。若采用連續(xù)分配方式,需要將作業(yè)裝入到連續(xù)的內(nèi)存區(qū)域,這樣需要連續(xù)地一次性申請一部分內(nèi)存空間,無法實(shí)現(xiàn)虛擬存儲(chǔ)功能,只有采用離散分配方式,才能為它申請內(nèi)存空間,以避免浪費(fèi)內(nèi)存空間。
多次性:作業(yè)無需在運(yùn)行時(shí)一次性全部裝入內(nèi)存,而是可以分成多次調(diào)入內(nèi)存。
對(duì)換性:作業(yè)運(yùn)行時(shí)無需常駐內(nèi)存,可以進(jìn)行調(diào)入調(diào)出。
虛擬性:從邏輯上擴(kuò)充了內(nèi)存的容量,使用戶所感覺到的內(nèi)存容量遠(yuǎn)大于實(shí)際容量。
文件系統(tǒng)
文件分配
文件分配對(duì)應(yīng)于文件的物理結(jié)構(gòu),是指如何為文件分配磁盤塊(外存)。
常用的磁盤空間分配方法有三種:
連續(xù)分配:要求每個(gè)文件在磁盤上占有一組連續(xù)的塊。
鏈接分配:采取離散分配的方式,分為隱式鏈接分配和顯式鏈接分配。
類比:像鏈表那樣一個(gè)一個(gè)地順序查找。
隱式鏈接分配:每個(gè)文件對(duì)應(yīng)一個(gè)磁盤塊的鏈表,磁盤塊任意分布,除最后一個(gè)盤塊外,每一個(gè)盤塊都有指向下一個(gè)盤塊的指針(類似于數(shù)據(jù)結(jié)構(gòu)中的鏈表)。
顯式鏈接分配:把用于鏈接文件各物理塊的指針提取出來,顯式地存放在內(nèi)存里的一張鏈接表中,該表整個(gè)磁盤僅設(shè)置一張,由于分配給文件的所有盤塊號(hào)都放在該表中,故稱該表為文件分配表(FAT)。
這本質(zhì)上仍然是鏈接分配,即 進(jìn)程給出文件物理塊起始地址等信息,然后根據(jù)內(nèi)存FAT中地址的鏈接情況進(jìn)行查找,得到所需物理塊。在查找過程中仍然是一個(gè)一個(gè)地順序查找。
索引分配:把每個(gè)文件的所有盤塊號(hào)集中在一起構(gòu)成索引塊(表)。
索引分配與顯式鏈接分配不同,索引分配是隨機(jī)查找,不需要借助前一個(gè)物理塊來找到后一個(gè),直接就可以查找到,直達(dá)。
磁盤調(diào)度算法
| 調(diào)度算法 | 算法思想 | 優(yōu)點(diǎn) | 缺點(diǎn) |
|---|---|---|---|
| 先來先服務(wù)算法(FCFS) | 按照進(jìn)程請求訪問磁盤的先后順序進(jìn)行調(diào)度。 | 簡單,公平。 | 未對(duì)尋道進(jìn)行優(yōu)化,平均尋道時(shí)間較長,僅適用于磁盤請求較少的場合。 |
| 最短尋道時(shí)間優(yōu)先算法(SSTF) | 選擇與當(dāng)前磁頭所在磁道距離最近的請求作為下一次服務(wù)的對(duì)象。 | 較 FCFS 有較好的尋道性能以及較少的尋道時(shí)間。 | 會(huì)導(dǎo)致饑餓現(xiàn)象 |
| 掃描(電梯調(diào)度)算法(SCAN) | 在磁頭當(dāng)前移動(dòng)方向上選擇與當(dāng)前磁頭所在磁道距離最近的請求最為下一次服務(wù)的對(duì)象。 | 具有較好的尋道性能,而且防止了饑餓現(xiàn)象。 | 存在一個(gè)請求剛好被錯(cuò)過而需要等待很久的情形。 |
| 循環(huán)掃描算法(CSCAN) | 規(guī)定磁頭單向移動(dòng),如自里向外移動(dòng),當(dāng)磁頭移動(dòng)到最外的磁道時(shí)立即返回到最里磁道,如此循環(huán)進(jìn)行掃描。 | 兼顧較好的尋道性能,防止饑餓現(xiàn)象,同時(shí)解決了一個(gè)請求等待時(shí)間過長的問題。 | 可能出現(xiàn)磁臂長時(shí)間停留在某處不懂的情況(磁臂黏著)。 |
| N-Step-SCAN 算法 (對(duì) SCAN算法的優(yōu)化) |
將磁盤請求隊(duì)列分成若干個(gè)長度為 N 的子隊(duì)列,磁盤調(diào)度將按照 FCFS 依次處理這些子隊(duì)列,而每處理一個(gè)隊(duì)列時(shí)又是按照 SCAN 算法,對(duì)一個(gè)隊(duì)列處理后再處理其他隊(duì)列,將新請求隊(duì)列放入新隊(duì)列。 | 無磁臂黏著。 | |
| FSCAN 算法 (對(duì) SCAN 算法的優(yōu)化) |
將請求隊(duì)列分成兩個(gè)子隊(duì)列,將新出現(xiàn)請求磁盤 IO 的進(jìn)程放入另一個(gè)子隊(duì)列。 | 無磁臂黏著。 |
先來先服務(wù)算法(First Come First Service, FCFS):根據(jù)進(jìn)程請求訪問磁盤的先后順序進(jìn)行調(diào)度。
最短尋找時(shí)間優(yōu)先算法(Shortest Seek Time First, SSTF):選擇處理的磁道是與當(dāng)前磁頭所在磁道距離最近的磁道,使每次的尋找時(shí)間最短。
該算法會(huì)產(chǎn)生“饑餓”現(xiàn)象。
掃描算法(SCAN):也叫電梯算法,在磁頭當(dāng)前移動(dòng)方向上選擇與當(dāng)前磁頭所在距離最近的請求作為下一次服務(wù)的對(duì)象。
實(shí)際上是在 SSTF 算法的基礎(chǔ)上規(guī)定了磁頭運(yùn)動(dòng)的方向。
循環(huán)掃描算法(Cyclic SCAN, C-SCAN):在SCAN算法的基礎(chǔ)上規(guī)定磁頭單向移動(dòng)來提供服務(wù),到達(dá)磁盤端點(diǎn)返回時(shí),直接快速返回起始端。
若磁頭移動(dòng)到最遠(yuǎn)端的請求后,即刻返回,而不是到達(dá)端點(diǎn)再返回,則將改進(jìn)后的SCAN算法和C-SCAN算法稱為LOOK算法和C-LOOK算法。
I/O 管理
I/O 控制方式
程序 I/O 方式:計(jì)算機(jī)從外部設(shè)備讀取數(shù)據(jù)到存儲(chǔ)器,每次讀取一個(gè)字的數(shù)據(jù)。對(duì)讀入的每個(gè)字,CPU 需要對(duì)外設(shè)狀態(tài)進(jìn)行循環(huán)檢查,直到確定該字已經(jīng)在 I/O 控制器的數(shù)據(jù)寄存器中。
該方式適用于早期的無中斷計(jì)算機(jī)系統(tǒng)中。
CPU 和 I/O 設(shè)備只能串行工作,導(dǎo)致CPU的利用率相當(dāng)?shù)汀?/p>
中斷驅(qū)動(dòng) I/O 控制方式:允許 I/O 設(shè)備主動(dòng)打斷 CPU 的運(yùn)行并請求服務(wù),從而使 CPU 在對(duì) I/O 控制器發(fā)送命令后可以做其他工作。
該方法普遍用于現(xiàn)代的計(jì)算機(jī)系統(tǒng)中。
由于數(shù)據(jù)中每個(gè)字在存儲(chǔ)器與 I/O 控制器之間的傳輸都必須經(jīng)過 CPU,仍然會(huì)消耗 CPU 較多的時(shí)間。
DMA I/O 控制方式:(CPU 與 I/O 并行)
在 I/O 設(shè)備和內(nèi)存之間開辟直接的數(shù)據(jù)交換通路,數(shù)據(jù)的基本單位是數(shù)據(jù)塊,所傳送的數(shù)據(jù)是從設(shè)備直接送入內(nèi)存;
或者相反,僅在傳送數(shù)據(jù)塊的開始和結(jié)束時(shí)需要 CPU 干預(yù),數(shù)據(jù)傳送是在 DMA 控制器的控制下完成的。
該方法適用于 I/O 設(shè)備為塊設(shè)備時(shí)和主機(jī)進(jìn)行數(shù)據(jù)交換。
塊設(shè)備是 I/O 設(shè)備中的一類,是將信息存儲(chǔ)在固定大小的塊中,每個(gè)塊都有自己的地址,還可以在設(shè)備的任意位置讀取一定長度的數(shù)據(jù),如 硬盤、U 盤、SD 卡等。
直接內(nèi)存存取(Direct Memory Access, DMA)是所有現(xiàn)代電腦的重要特色,它允許不同速度的硬件裝置來溝通,而不需要依賴于 CPU 的大量中斷負(fù)載。
否則,CPU 需要從來源把每一片段的資料復(fù)制到暫存器,然后把它們再次寫回到新的地方。在這個(gè)時(shí)間中,CPU 對(duì)于其他的工作來說就無法使用。
I/O 通道控制方式:是 DMA 方式的發(fā)展,只在一組數(shù)據(jù)的傳輸開始和結(jié)束時(shí)需要 CPU 干預(yù),可以實(shí)現(xiàn) CPU、通道和 I/O 設(shè)備三者的并行操作。
該方式適用于設(shè)備與主機(jī)進(jìn)行數(shù)據(jù)交換是一組數(shù)據(jù)塊的情況,使用該方法要求系統(tǒng)必須配置相應(yīng)的通道及通道控制器。
緩沖區(qū)
引入緩沖區(qū)的目的是什么?
緩和 CPU 與 I/O 設(shè)備間速度不匹配的矛盾;
減少對(duì) CPU 的中斷頻率,放寬對(duì) CPU 中斷響應(yīng)時(shí)間的限制;
解決基本數(shù)據(jù)單元大小(即 數(shù)據(jù)粒度)不匹配的問題;
提高 CPU 和 I/O 設(shè)備之間的并行性。
總結(jié)
以上是生活随笔為你收集整理的【操作系统】常用总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苏州地铁概览
- 下一篇: pro什么意思(Acrobat)