(1)程式編譯階段
以hello world 程式為例,介紹計算機系統的基本組成結構和程式的編譯過程。
#include int main()該程式的執行經歷這樣乙個過程:
源程式首先經預處理器處理:將#include中的內容插入到源程式中,得到另乙個程式hello.i
編譯階段:hello.i程式經過編譯,變成乙個匯程式設計序hello.s
彙編階段:hello.s文字程式經過彙編器彙編,變成二進位制檔案,這裡的位元組碼編碼是機器碼,其檔案為hello.o
(2)系統的硬體組成
計算機的硬體組成可以分為如下幾個部分:
匯流排:貫穿整個系統的一組電子管到,它攜帶資訊位元組並負責在各個部件之間傳遞。匯流排傳送的位元組單位是字,是系統的基本引數,不同機器之間有差異。
i/o裝置:i/o裝置是系統與外界的聯絡通道,每個外設都是通過控制器或介面卡與i/o匯流排連線。控制器和介面卡的區別在於控制器是i/o裝置的組成部分,而介面卡是插在主機板上的。
處理器:處理器是解釋儲存在主存中指令的引擎。處理器的核心是程式計數器。
(3)hello world程式執行過程
在unix系統的shell上執行下列指令:
unix〉./hello
在鍵盤上輸入回車鍵後,shell將執行一系列指令,將hello目標檔案中的**和資料從磁碟拷貝至記憶體,完成載入過程。處理器開始hello程式的主程式中的機器語言指令。這些指令將資料從儲存器中拷貝到暫存器檔案,再從暫存器中拷貝到顯示器上,最終顯示在螢幕上。
(4)作業系統管理硬體
shell載入和執行hello程式時,程式並沒有直接訪問外設, 它依靠作業系統提供服務。
作業系統提供兩個基本功能:防止硬體被失控的應用程式濫用;在控制複雜而通常廣泛不同的低階硬體裝置方面,為應用程式提供簡單一致的方法。作業系統通過幾個抽象概念:程序、虛擬儲存器和檔案 來實現上述功能。
檔案是對i/o裝置的抽象,虛擬儲存器是對主存和磁碟i/o裝置的抽象,程序是對cpu、主存和i/o裝置的抽象表示。
作業系統通過程序為客戶提供一種該程式獨佔處理器、主存、i/o裝置的假象。
1. 程序是作業系統對程式的一種抽象。在乙個系統上可以同時執行多個程序,而每個程序都好像獨佔使用硬體,這就是併發執行,也就是說乙個程序的指令和另乙個程序的指令是交錯執行。作業系統實現這種交錯執行的機制成為上下文切換。
作業系統儲存程序執行所需的所有狀態資訊,即上下文,包括許多資訊,,包括pc和暫存器檔案到當前值。
2. 執行緒是乙個程序的多個執行單元,每個執行緒都執行在程序的上下文中,共享同樣的**和全域性資料。
程式**和資料:可執行目標檔案
堆:動態分配
共享庫:存放c標準庫和數學庫的**和資料的區域
棧:實現函式呼叫
內河虛擬儲存器:核心是作業系統總是駐留在儲存器的部分。
4. 檔案
檔案是位元組序列,所有的i/o裝置都可以看成檔案。系統中所有的輸入輸出都是適用unix i/o的一小組系統函式呼叫讀寫檔案實現。
深入理解計算機系統 計算機系統漫遊
第一章 計算機系統漫遊 計算機系統是由硬體和系統軟體組成的。所有計算機系統都是由相似的硬體和軟體組成,它們又執行著相似的功能。以hello程式為例。1.1資訊就是位 上下文 hello程式的生命是從源程式 原始檔 開始的。源程式是程式設計師編寫的,hello.c。源程式是 0和1 的位元位,8個一組...
深入理解計算機系統 計算機系統漫遊
這裡以最簡單的例子 helloworld 為例,新建乙個 hello.c 的原始檔,新增如下 include stdio.h int main 使用 gcc o hello.c hello 指令可以將原始檔轉換為可執行程式,o 選項可以指定可執行程式的名稱,不指定該選項時預設為輸出乙個 a.out ...
1 深入理解計算機系統 計算機系統漫遊
1.資訊就是 位 上下文 由 ascii字元 乙個唯一的單位元組大小的整數值來表示每個字元 構成的檔案叫文字檔案,其他所有的檔案叫二進位制檔案 2.程式被其他程式翻譯成不同格式 gcc o hello hello.c 每條 c 語句必須被其他程式轉化為一些列的低階機器語言指令。然後這些指令按照一種稱...