計算機是一個很是普遍的概念,大到佔用數層樓的用於科學計算的超級計算機,小到手機上的前嵌入式芯片均可以稱爲計算機。雖然它們在外形、結構以及性能上都有很大的差別,可是它們都有計算的概念。如今咱們討論一下計算機系統的基礎,主要分爲硬件部分和軟件部分,爲接下來的深刻學習作一點知識儲備。編程
一:硬件部分windows
撇開計算機硬件中紛繁複雜的各類設備、芯片以及外圍接口等,站在軟件開發者的角度看,咱們只須要抓住硬件的幾個關鍵部分:中央處理器CPU、內存和I/O控制芯片以及設備,這三個部分幾乎就是計算機的核心了。數組
1.內存。內存是一個臨時存儲設備,在處理器執行程序時,用來存放程序和程序要處理的數據,從物理上來講,內存是由一組動態隨機存取存儲器(DRAM)芯片組成,從邏輯上來講,存儲器是一個線性的字節數組,每一個字節都有其惟一的地址,以便查詢,這些地址是從零開始的。工具
2.中央處理器CPU。簡稱處理器,是解釋存儲在內存中的指令的引擎。處理器從程序計數器(PC)指向的存儲器處讀取指令,執行該指令指示的簡單操做,而後更新PC,使其指向下一條指令,而這一條指令並不必定與存儲器中剛剛執行的指令相鄰。隨着製造CPU的工藝到達了物理上的極限,CPU的頻率再也不快速增加,這樣的狀況下,爲了提升計算機的運行速度,多核計算機應運而生。性能
3.I/O設備。輸入/輸出(I/O)設備是系統與外部世界的聯繫通道,做爲用戶輸入的鍵盤和鼠標、做爲用戶輸出的顯示器以及用於長期存儲數據和程序的磁盤都是I/O設備。每個I/O設備都經過一個控制器或適配器與I/O總線相連,而控制器和適配器的功能就是在I/O總線和I/O設備之間傳遞消息,這樣CPU即可以經過I/O總線來與I/O設備通訊。這裏將會涉及到非阻塞型I/O和阻塞性I/O等概念,之後會深刻理解。學習
二:軟件部分開發工具
系統軟件這個概念比較模糊,傳統意義上通常將擁有管理計算機自己的軟件稱爲系統軟件,以區別普通的應用程序。系統軟件能夠分爲兩塊,一塊是平臺性的,好比操做系統內核、驅動程序、運行庫以及數以千計的系統工具;另外一塊是用於程序開發的,好比編譯器、彙編器、連接器等開發工具和開發庫。操作系統
「計算機的任何問題均可以經過增長一個間接的中間層來解決」。這句話幾乎歸納了計算機系統軟件體系的全部設計要點,整個體系都是按照嚴格的層次結構來設計的。設計
圖1-1 計算機軟件體系結構接口
由圖1-1 易知每一個層次之間都須要相互通訊,既然要相互通訊就必須有一個通訊協議,通常咱們稱其爲接口。接口的上面那一層是接口的使用者,接口的下面那一層是接口的提供者,由它來定義接口。在層次體系中,接口是被精心設計過的,儘可能保持穩定不變,那麼理論上層次之間只要遵循這個接口,任何一個層均可以被修改和替換。除了硬件和應用程序,其餘都是中間層,每一箇中間層都是對它下面那層的包裝與擴展。從整個層次結構上來看,開發工具與應用程序是屬於同一個層次的,由於它們都使用同一個接口:操做系統應用程序編程接口。應用程序編程接口的提供者是運行庫。什麼樣的運行庫提供什麼樣的API,例如Linux下的Glibc提供POSIX的API。Windows的運行庫提供windows的API。運行庫使用操做系統提供的系統調用接口。另外,操做系統內核層對於硬件來講是硬件接口的使用者,而硬件是接口的定義者。硬件的接口定義決定了操做系統內核,具體來講就是驅動程序如何與硬件交互通訊。硬件的生產廠商提供硬件規格,操做系統和驅動程序開發者經過閱讀硬件規格來編寫操做系統和驅動程序。