1. 程式人生 > >作業系統原理基礎知識

作業系統原理基礎知識

我們每天都同作業系統打交道,瞭解一些作業系統原理上的知識是絕對有必要的,它可以讓你瞭解作業系統內部是怎麼工作的,為什麼會出現這樣那樣的問題,為我們解決這些問題提供思路。
    本文完全是為普通電腦使用者寫的,省略了所有難以理解的演算法、原理,沒有太多細節上的東西,只是針對普通電腦使用者可能感興趣的問題給出了實現思想。寫這些東西只是我的一相情願,就怕我還是寫得深了些,初學者讀不懂。如果這10K文字能讓你對作業系統有更深的瞭解,那也就不枉了這幾個汗流浹背的夏日午後了。

Q:什麼是中斷?
A:中斷嘛,舉個容易理解的例子吧。
   比如蓮蓮和唐唐在下象棋,眼看蓮蓮就快招架不住了,正當此緊要關頭,唐
唐的女友來了,非要唐唐陪她上街買衣服不可(唐唐暈倒:-) ),於是唐唐
不得不同蓮蓮商量,先把棋盤封了,待買完衣服後繼續戰鬥。掌燈時分,唐
唐帶著滿臉疲憊回到了棋盤前,結果蓮蓮不費吹灰只力便反敗為勝。
這就是整個中斷過程。我們來看看中斷過程是如何發生的:
  1)中斷請求:唐唐的女友要他逛街
  2)中斷響應:唐唐準備放下棋局陪女友逛街
  3)現場保護:先把棋盤封了
  4)中斷處理:唐唐陪女友逛街買衣服
  5)恢復現場:把棋盤解封
  6)中斷返回:繼續戰鬥
  在計算機中,中斷機制是非常重要的,它用於協調系統對各種外部事件的響
應和處理,並且是實現多工的必要條件。可以這麼說,如果沒有中斷機制,
就沒有計算機。噢,對了,如果唐唐把棋移到密室中下,不讓他的女友打擾,
這就叫“中斷遮蔽”。

Q:RING3
RING0是什麼意思?
A:這得從CPU指令系統(用於控制CPU完成各種功能的命令)的特權級別說起。
在CPU的所有指令中,有一些指令是非常危險的,如果錯用,將導致整個系統
崩潰。比如:清記憶體、設定時鐘等。如果所有的程式都能使用這些指令,那
麼你的系統一天宕機n回就不足為奇了。所以,CPU將指令分為特權指令和非
特權指令,對於那些危險的指令,只允許作業系統及其相關模組使用,普通
的應用程式只能使用那些不會造成災難的指令。形象地說,特權指令就是那
些兒童不宜的東東,而非特權指令則是老少皆宜。
   Intel的CPU將特權級別分為4個級別:RING0,RING1,RING2,RING3。Windows只
使用其中的兩個級別RING0和RING3,RING0只給作業系統用,RING3誰都能用。
如果普通應用程式企圖執行RING0指令,則Windows會顯示“非法指令”錯誤信
息。儘管有CPU的特權級別作保護,遺憾的是WINDOW98本身漏洞很多,使用
Windows 98的系統一天宕機n回也是正常的。

Q:
為什麼要有作業系統?
A:哈哈,難道你還沒感受到作業系統的魅力嗎?因為有了象Windows這樣優秀的
作業系統,我們的機器才一天到晚地出問題——這個那個的問題,我們才需
要一天到晚地重灌Windows,這樣才使我們牢牢地記住了象微軟這樣的公司的
名字,和象比爾蓋茨這樣優秀的程式設計師兼老闆的名字……

   好了,說正經的,儘管Windows不穩定,但絕對不能否認它是當今最優秀的操
作系統之一。作業系統在計算機中起著重要作用,它為所有的應用程式提供
一個執行環境,並將應用程式同具體硬體隔離。比如在機器中換一塊音效卡,只
需要重新安裝一下音效卡驅動程式就完事了,但如果沒有作業系統,你就必須
為這塊新的音效卡重新購買所有的應用程式,以便這些應用程式能夠認識這塊聲
卡並能夠使用它。
   作業系統就象計算機的大管家,管理著計算機的各種資源,比如記憶體、磁碟、
CPU等。應用程式想使用這些資源,都必須經過作業系統同意(資源申請),
並且由作業系統統一安排使用時間(資源分配),應用程式用完後必須將資源
還給作業系統(資源回收),以便其他應用程式使用。就這樣,計算機系統在
作業系統的管理下以最可能高的效率有條不紊地工作著。

Q:
什麼叫程序?程序同程式有什麼區別?
A:程序是程式在計算機上的一次執行活動。當你執行一個程式,你就啟動了一個
程序。顯然,程式是死的(靜態的),程序是活的(動態的)。
程序可以分為系統程序和使用者程序。凡是用於完成作業系統的各種功能的程序
就是系統程序,它們就是處於執行狀態下的作業系統本身;使用者程序就不必我
多講了吧,所有由你啟動的程序都是使用者程序。
程序是作業系統進行資源分配的單位。在Windows
下,程序又被細化為執行緒,也就是一個程序下有多個能獨立執行的
更小的單位。

Q:什麼是多工?
A:在同一個時間裡,同一個計算機系統中如果允許兩個或兩個以上的程序處於運
行狀態,這便是多工。現代的作業系統幾乎都是多工作業系統,能夠同時
管理多個程序的執行。多工帶來的好處是明顯的,比如你可以邊聽mp3邊上網,
與此同時甚至可以將下載的文件打印出來,而這些任務之間絲毫不會相互干擾。

Q:什麼是併發?什麼是並行
A:俗話說,一心不能二用,這對計算機也一樣,原則上一個CPU只能分配給一個
程序,以便執行這個程序。我們通常使用的計算機中只有一個CPU,也就是說
只有一顆心,要讓它一心多用,同時執行多個程序,就必須使用併發技術。
實現併發技術相當複雜,最容易理解的是“時間片輪轉程序排程演算法”,它
的思想簡單介紹如下:
   在作業系統的管理下,所有正在執行的程序輪流使用CPU,每個程序允許佔用
CPU的時間非常短(比如10毫秒),這樣使用者根本感覺不出來CPU是在輪流為
多個程序服務,就好象所有的程序都在不間斷地執行一樣。但實際上在任何
一個時間內有且僅有一個程序佔有CPU。如果一臺計算機有多個CPU,情況就不同
了,如果程序數小於CPU數,則不同的程序可以分配給不同的CPU來執行,這樣,
多個程序就是真正同時執行的,這便是並行。但如果程序數大於CPU數,則仍然需 
要使用併發技術。在Windows中,進行CPU分配是以執行緒為單位的,一個程序可能 
由多個執行緒組成,這時情況更加複雜,但簡單地說,有如下關係:
匯流排程數 <= CPU數量:並行執行
匯流排程數 > CPU數量:併發執行
   並行執行的效率顯然高於併發執行,所以在多CPU的計算機中,多工的效率
比較高。但是,如果在多CPU計算機中只執行一個程序(執行緒),就不能發揮多 
CPU的優勢。值得注意的是,Windows 9x並不支援多CPU系統,如果在多CPU系統   
上安裝Windows 9x,有再多的CPU也是白搭。

Q:什麼叫可搶佔式多工
A:程序是有優先順序的。如果即將被執行的程序的優先順序比正在執行的程序的優先
級高,則系統可以強行剝奪正在執行的程序的CPU,讓優先順序高的程序先執行。
可見,人類社會的特權思想在計算機世界中表現得多麼淋漓盡致。:-)
實際的作業系統一般將時間片思想同可強佔思想結合起來進行CPU分配。
可搶佔式多工的好處是很多的,比如當一個程序發生意外無法執行時,如果
不能強行剝奪其CPU佔有權,則整個系統都得癱瘓,由於早期的Windows 3.1不
是可搶佔式多工系統,所以Windows 3.1非常不可靠。

Q:多個程序在併發/並行執行過程中會產生衝突嗎?
A:如果沒有任何保護機制,肯定是會的。這種衝突一般發生在對資源的爭奪上。
顯然,如果一條馬路窄到只能通過一輛馬車,則當有兩輛馬車想同時通過時,
某個馬車伕就必須發揚風格,先讓一讓,否則結果肯定是人仰馬翻。
作業系統細心地管理著這一切,以避免程序間的衝突,程式設計師們也常常需要
細心地按照某種既定規則編寫程式,以便作業系統管理。
更具體的方法、原理已經遠遠超過了初學者能接受的水平,我還是把它略去
吧。

Q:什麼是虛擬儲存器?
A:虛擬儲存技術是非常重要的儲存管理技術,它的核心思想是利用巨大的硬碟
空間來彌補不足的實際記憶體空間。在虛擬記憶體管理下,應用程式可以使用的
儲存空間遠遠大於實際的記憶體大小。我們將一臺計算機實際安裝的記憶體稱為
物理儲存器,將通過虛擬儲存技術得到的比實際記憶體空間大得多的儲存空間
成為虛擬儲存器。虛擬儲存技術的實現也是非常複雜,如果細講的話肯定又 
是吃力不討好,這裡只提一提最簡單的思想。記憶體單元在計算機中是有編號 
的,叫記憶體地址。如果你的計算機中有1M實體記憶體(天哪,286的說?呵呵, 
舉例子方便嘛),則實體記憶體的地址範圍為0到1048575(1024 x 1024 - 1)。 
如果想訪問地址為1048576的單元,顯然是不可以的,因為最大隻到1048575了 
。但是,如果這時我將實體記憶體中所有的東西先儲存到硬碟上,然後通過某種 
方法將1048576對映到地址為0的物理儲存單元上,我不就又得到另外整整一個 
M的儲存空間了嗎,當程式要訪問地址為0的單元時,我把原先儲存在硬碟上的 
內容調回實體記憶體中就可以了。這個想法夠巧妙吧,它就是虛擬儲存技術的核 
心思想。於是我就可以得到n個1M空間了。真正的虛擬儲存管理比上面我所提的 
還要複雜、巧妙得多,它能夠實現讓不同的程序在不同的地址空間上執行(即 
讓每個程序認為自己佔有所有的儲存空間,可以任意使用,不必在乎系統中的 
其他程序是如何使用儲存空間的。這猶如讓不同的程序執行在不同的計算機上) 
,並且要考慮最優的記憶體使用效率。

Q:如果一個程序訪問了不屬於自己地址空間內的儲存單元,會發生什麼情況?
A:在Windows下你肯定會看到一個“該程式執行了非法操作,即將被關閉……”
之類的對話方塊。看到這樣的對話方塊常令我們無比沮喪,但這是作業系統必須
做的事,我們稱它為“儲存保護”。儲存保護的目的是保護系統程序不被用
戶程序破壞,不允許程序讀寫不屬於自己的區域。道理是很簡單的:考試的
時候,你只被允許在自己的試卷上面作答,如果你想看別人的試卷,甚至想
改別人試卷上的內容,你就“執行了非法操作”,肯定是要被監考“關閉”
的(前提是監考人員工作正常,否則就亂了套了,會有很嚴重的後果)。
注意:在Windows中引起系統關閉一個程序的原因很多,除了非法讀寫其他
程序儲存區(地址越界)外,還有如執行了只有作業系統才能執行的ring0
指令、程式中出現除數為0的情況等等。

Q:什麼是硬碟分割槽?
A:最早的時候,作業系統無法管理較大的硬碟空間,所以將一個大的硬碟空間
分為多個較小的區域以便於管理。另外,有時需要在系統中安裝多個操作系
統,也需要將硬碟分為不同的區域,讓不同的作業系統分別管理,互不干擾。
現在已經沒有因為作業系統無法管理大硬碟而需要對硬碟進行分割槽的可能性
了,但我們仍然對硬碟進行分割槽,除了安裝多個作業系統外,主要的還是為
了對各種檔案進行管理比較方便。
作業系統為不同的硬碟分割槽賦予不同的碟符,這樣就在邏輯上把一個大硬碟
分割成了多個小硬碟。

Q:什麼是硬碟分割槽的主引導記錄?
A:主引導記錄是每個硬碟分割槽的命根子,上面記錄著一個分割槽所佔用的硬碟空
間的位置等重要資訊。如果一個分割槽的主引導記錄被破壞,這個分割槽就算玩
完了。

Q:什麼是活動分割槽?
A:活動分割槽是在系統加電後具有自舉(引導系統)能力的分割槽,在活動分割槽上
的主引導記錄中有一段主載入程式,每當系統啟動後,這段程式被調入記憶體
執行,以引導(啟動)儲存在硬碟上的作業系統。不同的作業系統引導的方
法是不同的,所以這段主載入程式隨著系統上安裝的作業系統的不同而不同。

Q:Windows是怎樣儲存磁碟檔案的?
A:首先,Windows以“簇”為單位使用硬碟上的空間。根據硬碟空間的大小,一
個簇的大小是不一樣的。一般說,簇越小,硬碟空間的利用率越大,簇越大,
儲存速度越快。每個檔案必須被分成以簇的大小為單位的多個塊,然後儲存在 
硬碟上。為此,需要一個表格來記錄一個檔案被分成的塊都儲存在硬碟的哪些簇 
上,這個表格在Win9x中就是FAT表。FAT表也儲存在硬碟上。所以,FAT表是檔案 
系統的命根子,破壞了它,一個磁碟所有的檔案就玩完了。於是,Windows除了使 
用一個FAT表外,還會備份一個。

Q:什麼是檔案目錄表?
A:檔案目錄表同FAT表一樣是非常重要的,它記錄著所有檔案的檔名、屬性和在
FAT表中的起始位置。當你需要讀寫一個檔案時,Windows就從檔案目錄表中找
這個檔案,如果找到,按照檔案目錄表中所指示的該檔案在FAT表中的起始位置
讀出FAT表中與這個檔案有關的儲存資訊,就可以讀寫這個檔案了。

Q:什麼叫虛擬裝置?
A:不同的I/O裝置速度有快有慢。在作業系統中,為了有效地利用各種裝置,可以
使用高速裝置來模擬低速裝置,從而得到的就是虛擬裝置。
在Windows中典型的例子就是印表機。我們不難發現在啟動列印時印表機並沒有
工作,而是硬碟在響,然後所有的列印文件都進入列印佇列,排隊列印。在前
一個文件還在印表機上列印的時候,下一個文件已經進入列印佇列,提交這個
文件的程序無須等待印表機將這個文件列印完畢,就可以繼續處理別的事情了。
這是由於Windows使用硬碟模擬印表機。所有的列印工作實際上都“列印”到了
硬碟上。硬碟速度比印表機快得多,所以一下子就完成了。此時有另一個程序
負責從硬碟上讀出列印資料,列印到實際的印表機上,這個程序在後臺工作,
不影響前臺的其他程序。

Q:什麼是與裝置無關性(裝置獨立性)?
A:計算機的外部裝置很多,同種型別的裝置又有不同廠家、不同型號的產品。這
些產品總會有些細微的差別。這就給應用程式的編寫帶來很大的困難,因為一
個應用程式不可能顧及到所有硬體的相容性。為此,作業系統將具體的硬體設
備同整個系統隔離開來,對硬體的具體操作、與硬體有關的相容性問題等統統
由裝置驅動程式來解決,同時作業系統嚮應用程式提供統一的操縱裝置的方法,
應用程式只需要按套路呼叫作業系統提供的功能即可,無須關心實際的裝置是
什麼,這就是與裝置無關性。
  這樣,每增添或改動一個系統上的硬體,只需要安裝相應的驅動程式即可。

Q:什麼是緩衝(buffering)技術?
A:在資料到達與離去速度不匹配的地方,就應該使用緩衝技術。緩衝技術好比是
一個水庫,如果上游來的水太多,下游來不及排走,水庫就起到“緩衝”作用,
先讓水在水庫中停一些時候,等下游能繼續排水,再把水送往下游。
  通常CPU的速度要比I/O裝置的速度快得多得多,所以可以設定緩衝區,對於從
CPU來的資料,先放在緩衝區中,然後裝置可以慢慢地從緩衝區中讀出資料。