計算機(jī)的硬件的能力是有限的,但是人們想將計算機(jī)中硬件的所有潛能發(fā)揮;
作為計算機(jī)的軟件操作系統(tǒng),它的一個功能是提供抽象的接口,另一個主要功能是管理硬件資源;
1,不要讓CPU打盹
(1)多任務(wù)系統(tǒng)
操作系統(tǒng)接管了所有的硬件資源,并且本身運(yùn)行在一個受硬件保護(hù)的級別;
所有的應(yīng)用程序都以進(jìn)程的方式運(yùn)行在比操作系統(tǒng)權(quán)限更低的級別;
每個進(jìn)程都有自己獨(dú)立的地址空間,使進(jìn)程之間的地址空間相互隔離;
(2)搶占式分配CPU
CPU由操作系統(tǒng)統(tǒng)一進(jìn)行分配,每個進(jìn)程根據(jù)進(jìn)程優(yōu)先級的高低都有機(jī)會得到CPU;
但是,如果運(yùn)行時間超出了一定的時間,操作系統(tǒng)會暫停該進(jìn)程,將CPU資源分配給其他等待的進(jìn)程,這種CPU的分配方式稱為搶占式;
操作系統(tǒng)可以強(qiáng)制剝奪CPU資源并且分配給它認(rèn)為目前最需要的進(jìn)程;
如果操作系統(tǒng)分配給每個進(jìn)程的時間都很短,即CPU在多個進(jìn)程間快速地切換,從而造成了很多進(jìn)程都在同時運(yùn)行的假象。
2,設(shè)備驅(qū)動
對于操作系統(tǒng)上面的運(yùn)行庫和應(yīng)用程序來說,它們希望看到的是一個統(tǒng)一的硬件訪問模式;
如:開發(fā)應(yīng)用程序時,讀寫硬件端口,處理硬件中斷等事情,都由操作系統(tǒng)來實現(xiàn)。
(1)定義:是由操作系統(tǒng)中的硬件驅(qū)動程序來完成,驅(qū)動程序可以看做是操作系統(tǒng)的一部分;
它往往跟操作系統(tǒng)內(nèi)核一起運(yùn)行在特權(quán)級,但它又與操作系統(tǒng)內(nèi)核之間有一定的獨(dú)立性,是的驅(qū)動程序有比較好的靈活性。
(2)操作系統(tǒng)不可能為每個硬件設(shè)備開發(fā)一個驅(qū)動程序
因為,PC硬件多如牛毛,這些驅(qū)動程序的開發(fā)工作通常由硬件生產(chǎn)廠商完成;
只是操作系統(tǒng)開發(fā)者為廠商提供了一系列接口和框架,使的按照接口和框架開發(fā)的驅(qū)動程序可以在操作系統(tǒng)上使用。
(3)以讀取文件為例:
操作系統(tǒng)中的文件系統(tǒng)保存了文件的存儲結(jié)構(gòu),負(fù)責(zé)維護(hù)這些數(shù)據(jù)結(jié)構(gòu)并且保證磁盤中的扇區(qū)能夠有效的組織和利用;
在操作系統(tǒng)中,要讀取文件時,使用一個read的系統(tǒng)調(diào)用實現(xiàn);
文件系統(tǒng)收到read請求后,判斷出文件在磁盤中的位置;
然后,文件系統(tǒng)就向硬盤驅(qū)動發(fā)出讀取請求,磁盤驅(qū)動程序收到請求以后就向硬盤發(fā)出I/O命令;
向硬件發(fā)送I/O命令的方式有很多種,其中最為常見的一種就是通過讀寫I/O端口寄存器來實現(xiàn);
例如,在x86平臺上,有多個硬件端口寄存器,不同的硬件被分配到了不同的I/O端口地址,CPU提供了兩條專門的指令in和out來實現(xiàn)對硬件端口的讀寫。
3,內(nèi)存不夠怎么辦?
操作系統(tǒng)的多任務(wù)功能使得CPU能夠在多個進(jìn)程之間很好的共享;
操作系統(tǒng)的I/O抽象模型也很好的實現(xiàn)了I/O設(shè)備的共享和抽象。
為更有效的利用硬件資源,同時運(yùn)行多個程序,此時CPU的利用率將會提高,
那么,很明顯的一個問題是,如何將計算機(jī)上的有限的物理內(nèi)存分配給多個程序使用?
(1)內(nèi)存分配策略的問題:
解決以下三個問題的思路:
增加中間層,即使用一種間接的地址訪問方法,此時我們就想到將程序給出的地址看作是一種虛擬地址,
然后,通過某些映射,將虛擬地址轉(zhuǎn)換成實際的物理地址。(保證程序的物理地址不重疊)
1)地址空間不隔離
因為,所有的程序都直接訪問物理地址,程序所使用的內(nèi)存空間不是相互隔離的;
此時,出現(xiàn)存儲器,管理用戶程序運(yùn)行時的執(zhí)行環(huán)境,用戶想象自己有一個獨(dú)立的地址空間;
地址空間:
a)虛擬地址空間:指虛擬的,人們想象出來的地址空間,其實它并不存在,
每個進(jìn)程都有自己獨(dú)立的虛擬空間,而且每個進(jìn)程只能訪問自己的地址空間,
這樣就有效地做到了進(jìn)程的隔離。
b)物理地址空間:是實實在在存在的,存在于計算機(jī)中,而且對于每一臺計算機(jī)來說只是唯一的一個,
你可以把物理地址想象成物理內(nèi)存;
例如:32位機(jī),有32條地址線,那么物理空間為4GB,
但是若計算機(jī)上只裝了512MB的內(nèi)存,那么物理地址的前部分是有效的,后面的部分是無效的。
2)內(nèi)存使用率低
由于內(nèi)存空間的有限,使的程序執(zhí)行時不能將所有的全部裝入內(nèi)存,若那樣做了則需要大量的數(shù)據(jù)換出換入,導(dǎo)致效率低下。
a)分段:能解決問題1和3,問題2不能解決,因為,它還是以整個程序為單位,在內(nèi)存中進(jìn)行地址映射。
假設(shè)程序所占用的虛擬空間,然后從實際的物理內(nèi)存中分配一個相同大小的物理地址空間;
通過軟件來設(shè)置,虛擬空間與物理空間的地址映射;
如:操作系統(tǒng)來設(shè)置這個映射函數(shù),實際的地址轉(zhuǎn)換由硬件完成;
(CPU會將虛擬地址轉(zhuǎn)換成實際的物理地址)
b)分頁:根據(jù)程序的局部性原理,將程序分成固定大小的頁(頁的大小由硬件決定)。
涉及到的名詞:虛擬頁,物理頁,磁盤頁
3)程序運(yùn)行的地址不確定
程序的重定位問題。(程序裝入內(nèi)存的位置不確定)
|
|