1. 程式人生 > >《深入理解計算機系統》第一章學習筆記

《深入理解計算機系統》第一章學習筆記

文件 傳遞 ati 線性 邏輯 double 動態 內容 起源

信息就是位+上下文

源程序:就是一個由0和1組合的位(bit)序列,8位組成一字(byte),每個字節表示某個文本字符。

系統中所有的信息——包括磁盤文件、存儲器中的程序、存儲器中存放的用戶數據以及網絡上傳送的數據,都是由一串位表示的。區分不同數據對象的唯一方法是我們讀到這些數據對象時的上下文。

C語言的起源:
由Dennis Ritchie在1969年~1973年創建的。
美國國家標準學會(American National Standards Institute,ANSI)在1989年頒布了ANSI C標準,後來由國際標準化組織(International Standards Organization,ISO)負責C語言的標準化工作。
Kernaghan和Ritchie合著的經典書被程序“K&R”。

程序被其他程序翻譯成不同格式

為了在系統上運行hello.c程序,每條C語句都被編譯器轉化成一系列的低級機器語言指令。然後這些指令按照一種稱為可執行目標程序的格式打好包,並以二進制磁盤文件的形式存放起來。目標程序也稱為可執行目標文件。

代碼-hello.c文件:

#include <stdio.h>

int main()
{
    printf("hello world\n");
}

在Unix系統上,從源文件到目標文件的轉化是由GCC編譯器驅動程序完成的:

unix> gcc -o hello hello.c

技術分享圖片

系統的硬件組成

總線
貫穿整個系統的是一組電子管道 , 稱做總線, 它攜帶信息字節並負責在各個部件間傳遞 。
傳送定長的字節塊 , 也就是字 ( word )。
現在的大多數機器字長有的是 4 個字節 ( 32 位 ), 有的是 8 個字節 ( 64 位 )。
假設字長為 4 個字節 , 並且總線每次只傳送 1 個字。

I/O設備
每個 I/O 設備都通過一個控制器或適配器與 I/O 總線相連 。
控制器和適配器之間的區別主要在於它們的封裝方式 。
控制器:置於 I/O 設備本身的或者系統的主印制電路板 ( 通常稱為主板 ) 上的芯片組 ;
適配器:則是一塊插在主板插槽上的卡。

主存
主存是一個臨時存儲設備 , 在處理器執行程序時 , 用來存放程序和程序處理的數據。
物理上,是一組動態隨機存取存儲器 ( DRAM )芯片。
邏輯上 , 是一個線性的字節數組 , 每個字節都有其唯一的地址 ( 即數組索引 ), 這些地址是從零開始的。

例如 , 在運行 Linux 的 IA32 機器上 , short 類型的數據需要 2 個字節 , int 、 float 和 long 類型需要 4 個字節 , 而 double 類型需要 8 個字節 。

處理器
中央處理單元 ( CPU ), 簡稱處理器 , 是解釋 ( 或執行 ) 存儲在主存中指令的引擎 。
處理器的核心是一個字長的存儲設備 (或寄存器), 稱為程序計數器( PC )。在任何時刻 , PC都指向主存中的某條機器語言指令 (即含有該條指令的地址)。

CPU 在指令的要求下可能會執行以下操作 :

加載:把一個字節或者一個字從主存復制到寄存器 , 以覆蓋寄存器原來的內容。
存儲:把一個字節或者一個字從寄存器復制到主存的某個位置 , 以覆蓋這個位置上原來的內容 。
操作: 把兩個寄存器的內容復制到ALU, ALU 對這兩個字做算術操作, 並將結果存放到 一個寄存器中 , 以覆蓋該寄存器中原來的內容 。
跳轉:從指令本身中抽取一個字, 並將這個字復制到程序計數器(PC) 中 , 以覆蓋 PC中原來的值。

存儲設備形成層次結構

存儲器層次結構的主要思想:一層上的存儲器作為低一層的存儲器的高速緩存。
技術分享圖片

《深入理解計算機系統》第一章學習筆記