【深入理解計算機系統】計算機系統漫遊

1.信息就是位 + 上下文

當我們寫一個如下的hello.c程序時
在這裏插入圖片描述
源程序時由0和1組成的比特序列,8個比特是一個字節,每個字節表示程序中的某些文本字符,大部分計算機用ASCII標準表示文本字符,上面程序的ASCII碼如下
在這裏插入圖片描述
由上可見,每個字節都對應一個整數值,每個文本行都有一個\n符號

像Hello.c這樣只有ASCII字符構成的文件稱爲文本文件,其它的都叫二進制文件

系統中所有的信息,都是由一串比特表示的,在不同上下文中,一個同樣的字節序列由可能由不同的含義

2.程序被其它程序翻譯成不同的格式

爲了在系統上運行一個hello.c程序,需要將它轉換爲機器語言指令,然後這些指令按照一種可執行目標程序的格式打包,並以二進制形式存放到磁盤

在UNIX系統,我們可以用GCC來將源文件轉換爲目標文件,這裏分爲四個部分
在這裏插入圖片描述

2.1 預處理

C程序第一行一般是#開頭,比如上面以#include <stdio.h> 開頭就是告訴預處理器,讀取stdio.h中的內容並直接插入進來,結果的到一個hello.i的文本文件

2.2 編譯

將hello.i翻譯成彙編語言組成的hello.s,不同的高級語言的彙編語言輸出都是一種形式

2.3 彙編

彙編器把彙編語言翻譯成機器指令,並把這些指令打包成可重定位目標程序的格式保存在hello.o中,它是一個二進制文件了

2.4 鏈接

上面的程序中調用了標準C庫中的printf函數,printf存在於一個printf.o的單獨預編譯好的目標文件,鏈接器會把它合併到hello.o中,然後就成了一個可執行目標文件了

3.處理器讀並解釋存儲在內存中的指令

如果想執行上面的程序,我們只需要在Shell中:
在這裏插入圖片描述
在shell中,如果第一個單詞不是shell內置命令,那麼shell就會認爲它是可執行文件

3.1 系統的硬件組成

總線: 貫穿整個系統的電子管道,每次傳輸定長的字節數,像4個字節(32位),8個字節(64位),這種叫字長

IO設備: 系統與外部相連的叫IO設備,比如磁盤,IO設備通過IO總線連接

主存:臨時存儲設備,用來存放程序和程序處理的數據,由一組動態隨機存取存儲器(DRAM)芯片組成

處理器:解釋或執行存儲在主存中的指令,處理器的存在一個大小爲一個字(也就是上面的定長字節數)的存儲設備(或寄存器),另外還有程序計數器(PC)始終指向主存中某條機器語言指令,PC圍繞着主存,寄存器文件,和算術/邏輯單元(ALU)進行

寄存器文件是一個小的存儲設備,有多個寄存器組成

CPU在指令的要求下可能會執行下面的動作

  • 加載,從主存複製一個字節或者一個字到寄存器,覆蓋寄存器原有內容
  • 存儲,從寄存器複製一個字節或一個字到主存,覆蓋主存原有內容
  • 操作,把倆寄存器內容複製到ALU運算,完成後存放到一個寄存器
  • 跳轉,從指令本身抽取一個字放到PC中

3.2 運行hello程序

  • 當我們輸入./hello,shell程序將字符讀入寄存器,然後放到主存
  • 敲下回車,shell執行一系列指令來加載可執行hello文件,這些指令將hello目標文件的代碼和數據從磁盤複製到主存
  • 處理器開始執行hello程序,指令將print輸出的字符串中的字節從主存複製到寄存器,然後再從寄存器到顯示設備

4.高速緩存至關重要

指令從主存和處理器之間來回遷移,必然效率較低,因而開發了L1 L2 L3多級緩存,通過局部性原理提高緩存命中率,可以大大提高效率
在這裏插入圖片描述

5.操作系統管理硬件

我們的程序並沒有直接訪問鍵盤,顯示器,磁盤,或主存,而是通過操作系統提供服務,操作系統由一些基本的抽象概念

5.1進程

操作系統對一個正在運行程序的一種抽象,操作系統會跟蹤進程運行所需的狀態信息,也就是上下文,比如程序計數器和寄存器中當前的值,主存中的內容,單核處理器同時只能執行一個進程,會不斷進行上下文切換,一個進程可以由多個線程

5.2虛擬內存

它爲每個進程提供了一種假象,每個進程看到的內存都是一致的

5.3文件

文件就是字節序列,每個IO設備,包括磁盤,網絡等都可以看作是文件

6.重要概念

6.1 Amdahl定律

意思是要想顯著加速整個系統,必須提升全系統中相當大部分的速度

6.2 併發和並行

  • 線程級併發
  • 指令級並行,當今的處理器一個時鐘週期可以處理多個指令,靠的就是指令級並行
  • 單指令,多數據並行 一條指令分成多個並行執行的操作

6.3 計算機系統中抽象的重要性

抽象使我們只關注接口,而不需要關注底層,比如文件是IO的抽象,虛擬內存是存儲的抽象,進程是正在運行的程序的抽象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章