標籤:style 使用 ar strong 檔案 資料 sp div art
作業系統原理 我們每天都同作業系統打交道,瞭解一些作業系統原理上的知識是絕對有必要的,它能夠讓你瞭解作業系統內部是怎麼工作的,為什麼會出現這樣那樣的問題,為我們解決這些問題提供思路。
本文全然是為普通電腦使用者寫的,省略了全部難以理解的演算法、原理,沒有太多細節上的東西,僅僅是針對普通電腦使用者可能感興趣的問題給出了實現思想。寫這些東西僅僅是我的一相情願,就怕我還是寫得深了些,剛開始學習的人讀不懂。假設這10K文字能讓你對作業系統有更深的瞭解,那也就不枉了這幾個汗流浹背的夏日午後了。
Q:什麼是中斷?
A:中斷嘛,舉個easy理解的範例吧。
比方蓮蓮和唐唐在下象棋,眼看蓮蓮就快招架不住了,正當此緊要關頭,唐
唐的女友來了,非要唐唐陪她上街買衣服不可(唐唐暈倒:-) ),於是唐唐
不得不同蓮蓮商議,先把棋盤封了,待買完衣服後繼續戰鬥。掌燈時分,唐
唐帶著滿臉疲憊回到了棋盤前,結果蓮蓮不費吹灰僅僅力便反敗為勝。
這就是整個中斷過程。我們來看看中斷過程是怎樣發生的:
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,也就是說
僅僅有一顆心,要讓它一心多用,同一時候執行多個進程,就必須使用並發技術。
實現並發技術相當複雜,最easy理解的是“時間片輪轉進程調度演算法”,它
的思想簡介例如以下:
在作業系統的管理下,全部正在執行的進程輪流使用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下你肯定會看到一個“該程式執行了非法操作,即將被關閉……”
之類的對話方塊。看到這種對話方塊常令我們無比沮喪,但這是作業系統必須
做的事,我們稱它為“儲存保護”。儲存保護的目的是保護系統進程不被用
戶進程破壞,不同意進程讀寫不屬於自己的地區。道理是非常easy的:考試的
時候,你僅僅被同意在自己的試卷上面作答,假設你想看別人的試卷,甚至想
改別人試卷上的內容,你就“執行了非法操作”,肯定是要被監考“關閉”
的(前提是監考人員工作正常,否則就亂了套了,會有非常嚴重的後果)。
注意:在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來的資料,先放在緩衝區中,然後裝置能夠慢慢地從緩衝區中讀出資料。
作業系統原理