操作系統必須與基本硬件系統密切協作。它需要那些僅僅能夠由硬件提供的服
務。為了全面理解Linux操作系統,你必須要懂得一些有關硬件的知識。本章將
對硬件:現代PC做一個簡要的介紹。
當1975年一月的"Popular Electronics"雜志以Altair 8080的圖片作為封面時,
一場革命開始了。家用電器愛好者能獨立組裝出來的Altair 8080,當時價格僅
僅為397美圓。這種帶有256字節內存的8080處理器還沒有顯示器與鍵盤,以今
天的標准來看,它是微不足道的。它的創造者,Ed Roberts,發明了"personal
computer"來描敘他的新發明。但現在PC這一術語已被用來稱呼那些自己就可以
攜帶的計算機。在這個定義上,非常強勁的計算機如AlphaAXP 也可稱為PC。
狂熱的HACKER們看到了Altair的巨大潛力,於是他們開始為它編寫軟件和設計
硬件。對早期的先驅來說這意味者某種自由;一種從頑固的超級批處理主機中
解放出來的自由。滾滾而來的財富讓許多著迷於此(一台可以放在廚房餐桌上
的計算機)的大學生紛紛退學。許多五花八門的硬件開始出現,軟件HACKER們
忙著為這些新機器編寫軟件。有意思的是IBM首先堅定的進行現代PC的設計和
制造並於1982年推出產品。該產品的構造是:8080CPU、64K字節主存、兩個軟
盤驅動器以及25行80列的彩色CGA顯示器。雖然以現在觀點看那些都不是多麼
先進的東西但當時銷售情況卻很好。緊接著,1983年,帶有昂貴的10MB硬盤驅
動器的IBMPC-XT出現了。在IBMPC體系結構成為事實上的標准不久之後,大量仿
制者如COMPAQ公司出現了。由於這種事實標准的存在,多個硬件公司在這一快
速增長的市場上進行了激烈競爭。但用戶卻從低價中獲益。許多早期PC中的結
構特征還保留在現代PC系統中。比如Intel公司最先進的PentiumPro處理器還保
留著Intel 8086的尋址模式。當LinusTorvalds開始寫Linux時,他選擇了當時
最廣泛使用同時價格合理的Intel 80386PC。
從PC的外部來看,最引人注目的是機箱,鍵盤,鼠標以及顯示器。在機箱前部
有一些按鈕,一個微型顯示器顯示著一些數字,此外還有一個軟驅。今天的大
多數機器還包含一個CDROM,另外,如果想保護你的數據,還可以添加一個磁帶
機作為備份用。這些設備統稱為外部設備。盡管CPU是系統的總管,但是它僅僅
是一個智能設備。所有的這些外設控制器都具有某種層度的智能,如IDE控制器
。在PC內部,你可以看到一個包括CPU或者微處理器,主存和許多ISA或PCI外設
控制器插槽的主板。有些控制器,如IDE磁盤控制器必須建立在系統板上。
1.1 CPU
CPU,或者微處理器,是計算機系統的核心。微處理器進行計算或者邏輯操作並
且管理來自主存的指令並執行它。在計算機的早期時代,微處理器的功能部件
使用的是分立元件(外型很大)。這就是中央處理單元這一名詞的由來。現代
微處理器將部件結合到小型硅片上的集成電路中。在本書中CPU和微處理器及處
理器有相同的意義。微處理器的操作對象是二進制數據;數據由0和1組成。
1和0對應著電子開關的開路與斷路狀態。正如十進制的42表示有4個10和一個2
一樣,一個二進制數是一系列表示2的次冪的二進制數字組成。二進制0001對應
十進制的1,二進制的0010對應十進制的2,二進制的0011表示3,而0100對應4。
十進制42的二進制表示為101010。但是在計算機程序中,人們常用十進制來表示
數而不是直接使用二進制。在需要使用二進制數時,人們往往使用16進制數。如
十進制數只能從0到9一樣,16進制數可以從0疏導15,其中10到15分別用字母A、
B、C、D、E及F來表示。這樣16進制的2A的十進制表示為42-2*16+10=42。在C程
序語言中,16進制數的前綴為"0x";16進制的2A寫成0x2A。微處理器可以執行如
加、乘和除以及象"X是否比Y大"這種邏輯運算。處理器的執行由外部時鐘來監控。
這個時鐘稱為系統時鐘,它每隔相同的時間間隔就向CPU發送一個脈沖。在每個
時鐘脈沖上,處理器都會做一些工作。比如,處理器每個時鐘脈沖上執行一條指
令。處理器的速度一般以系統時鐘的速率來描敘。一個100MHz的處理器每秒將接
收100,000,000個時鐘滴答。但是用CPU的時鐘頻率來描敘CPU的工作能力是不正
確的,因為它們執行的指令不相同。
然而,快速的時鐘可以在某種程度上代表高性能的CPU。處理器執行的指令是非
常簡單的;例如"將內存X處的內容讀入寄存器Y"。寄存器是微處理器的內部存儲
部件,用來存儲數據並對數據執行某些指令。有些指令有可能使處理器停止當前
的工作而跳轉到內存中另外一條指令執行。現代微處理器的緊湊設計使得它有可
能每秒執行上百萬甚至億條指令。指令執行前必須從內存中取出來。指令自身要
使用的數據也必須從內存中取出來並放置在適當的地方。
微處理器中寄存器的大小、數量以及類型都取決於微處理器的類型。Intel 80486
處理器和Alpha AXP 有迥然不同的寄存器,最明顯的區別在於Intel寄存器為32位
而AlphaAXP為64位。一般來說,任何處理器都有許多通用寄存器和少量專用寄存
器。許多微處理器有以下幾種特定的寄存器。
程序計數器(PC)
此寄存器包含下條指令執行的地址。每當取回一條指令時,PC的內容將自動增加。
堆棧指針(SP)
微處理器經常需要訪問存儲臨時數據的外部RAM。堆棧是一種便捷的存放臨時數據
的方法,處理器提供了特殊指令來將數值壓入堆棧然後將其從堆棧中彈出。
堆棧以後進先出(LIFO)的方式工作。換句話說,如果你壓入兩個值X和Y,然後執行
彈棧操作,你將取到Y的值。有些處理器的堆棧從內存頂部向下增長而有些相反。
但有的處理器同時支持這兩種方式,如ARM。
處理機狀態字(PS)
指令的執行將得到執行結果;比如"寄存器X中的內容要大於寄存器Y中的內容?"將
得到正確或錯誤作為結果。PS寄存器包含著這些信息及有關處理器當前狀態的其他
信息。例如大多數處理器至少有兩種執行方式,核心(或管態)與用戶方式。PS寄
存器包含表示當前執行方式的信息。
1.2 內存
所有計算機系統都有一個由不同速度與大小的存儲器組成的層次結構。最快的的存
儲器是高速緩存,它被用來暫存主存中的內容。這種存儲器速度非常快但非常昂貴,
大多數處理器都有少量的片上高速緩存或者將其放在主板上。有些處理器的高速緩
存既包含數據也包含指令,但有些將其分成兩部分。
Alpha AXP處理器有兩個內部高速緩存,一個用來緩存數據(D-Cache)而另一個用
來緩存指令(I-Cache)。而外部高速緩存(B-Cache)將兩者混合。這樣,相對外
部高速緩存存儲器,主存的速度非常慢。
高速緩存與主存中的內容必須保持一致。換句話說,對應於地址空間的同一個位置,
如果該位置的數據被緩存入高速緩存,則其內容必須和主存中的一致。保證高速緩
存一致性的工作由硬件和操作系統共同分擔。這就是在系統中硬件和軟件必須緊密
協作的原因。
1.3 總線
主板上分立的部件通過稱為總線的線路連接在一起。系統總線的功能在邏輯上被劃
分為三部分:地址總線、數據總線和控制總線。地址總線為數據傳輸指明內存位置
(地址)。數據總線包含傳輸的數據。數據總線是雙向的;它允許數據讀入CPU也
支持從CPU讀出來。控制總線則包含幾條表示路由分時和系統的控制信號。當然還
有其他一些總線存在,例如ISA和PCI總線是將外設連接到系統的常用方式。
1.4 控制器與外設
外設是一些物理設備,比如說圖象卡或者磁盤,它們受控於位於主板或者主板上插
槽中的控制芯片。IDE磁盤被IDE控制器芯片控制而SCSI磁盤由SCSI磁盤控制器芯片
控制。這些控制器通過各種總線連接到CPU上或相互間互連。目前制造的大多數系
統使用PCI和ISA總線來連接主要系統部件。控制器是一些類似CPU的處理器,它們
可以看做CPU的智能幫手。CPU則是系統的總控。雖然所有這些控制器互不相同,但
是它們的寄存器的功能類似。運行在CPU上的軟件必須能讀出或者寫入這些控制寄
存器。其中有一個寄存器可能包含指示錯誤的狀態碼。另一個則用於控制目的,用
來改變控制器的運行模式。在總線上的每個控制器可以被CPU所單獨尋址,這是軟
件設備驅動程序能寫入寄存器並能控制這些控制器的原因。
1.5 地址空間
系統總線將CPU與主存連接在一起並且和連接CPU與系統硬件外設的總線隔離開。一
般來說,硬件外設存在的主存空間叫I/O空間。I/O空間還可以進一步細分,但這裡
我們不再深究。CPU既可以訪問系統內存空間又可以訪問I/O空間內存,而控制器自
身只能在CPU協助下間接的訪問系統內存。從設備的角度來看,比如說軟盤控制器,
它只能看到在ISA總線上的控制寄存器而不是系統內存。典型的CPU使用不同指令來
訪問內存與I/O空間。例如,可能有一條指令"將I/O地址0x3F0的內容讀入到寄存器
X"。這正是CPU控制系統硬件設備的方式:通過讀寫I/O地址空間上的外設寄存器。
在I/O空間中通用外設(IDE控制器、串行口、軟盤控制器等等)上
控制。這些控制器通過各種總線連接到CPU上或相互間互連。目前制造的大多數系
統使用PCI和ISA總線來連接主要系統部件。控制器是一些類似CPU的處理器,它們
可以看做CPU的智能幫手。CPU則是系統的總控。雖然所有這些控制器互不相同,但
是它們的寄存器的功能類似。運行在CPU上的軟件必須能讀出或者寫入這些控制寄
存器。其中有一個寄存器可能包含指示錯誤的狀態碼。另一個則用於控制目的,用
來改變控制器的運行模式。在總線上的每個控制器可以被CPU所單獨尋址,這是軟
件設備驅動程序能寫入寄存器並能控制這些控制器的原因。
1.5 地址空間
系統總線將CPU與主存連接在一起並且和連接CPU與系統硬件外設的總線隔離開。一
般來說,硬件外設存在的主存空間叫I/O空間。I/O空間還可以進一步細分,但這裡
我們不再深究。CPU既可以訪問系統內存空間又可以訪問I/O空間內存,而控制器自
身只能在CPU協助下間接的訪問系統內存。從設備的角度來看,比如說軟盤控制器,
它只能看到在ISA總線上的控制寄存器而不是系統內存。典型的CPU使用不同指令來
訪問內存與I/O空間。例如,可能有一條指令"將I/O地址0x3F0的內容讀入到寄存器
X"。這正是CPU控制系統硬件設備的方式:通過讀寫I/O地址空間上的外設寄存器。
在I/O空間中通用外設(IDE控制器、串行口、軟盤控制器等等)上