深入理解計算機系統(一)
對於程序員來說,計算機基礎也是非常重要的一個部分,對於了解程序的執行過程、優化都是非常有幫助的。
一、系統的硬件組成
1、總線
貫穿整個系統的是一組電子管道,簡稱總線,總線攜帶信息字節並且負責在各個組件中傳遞。總線被設計成傳遞定長的字節塊,例如32位系統(4個字節)以及64位系統(8個字節)。
2、I/O設備
通常所使用的鍵盤、鼠標、磁盤以及顯示器等等都是I/O設備。每一個I/O設備都通過控制器或適配器與I/O總線相連接。
3、主存
主存是一個臨時存放數據的物質,用來存放指令以及程序運行時的數據。是由一組動態隨機存取存儲器芯片組成,從邏輯上來說,主存是一個線性的字節數組,每個字節都有其對應的唯一的地址。
4、處理器
處理器是計算機系統中的計算處理核心,解釋存放在主存中的指令,並且處理器中包含程序計數器,計數器中存放指向主存中的指令地址,處理器獲取指令並且執行。
二、一個hello world程序是如何運行的?
三、高速緩存
cpu從寄存器中讀取信息的速度比從主存中讀取快100倍,讀取磁盤中的信息速度就更慢了,因此為了解決不同組件讀取速度的差異,引入了高速緩存。
四、操作系統
軟件跟硬件之間的關系由操作系統連接:
操作系統主要提供兩個主要的功能:
a、防止程序濫用硬件資源
b、向程序提供簡單、統一的機制來控制硬件
為了實現這兩個功能,操作系統抽象了幾個概念:
1、進程
進程是對系統中正在運行的程序的一種抽象,每個進程都好像是占有整個計算機系統的資源,不同的進程獨立運行。對於單核cpu(多核cpu則多個進程並行運行)來說,操作系統通過上下文的切換(由操作系統內核管理)達到並發的效果。
所謂並發就是看起來是多個進程同時運行,但是在某個具體的時間點,只有一個進程運行。這麽設計的主要原因就是提高運行速度,最大限度的榨取cpu的性能,原因如下:
現在系統中存在兩個進程A、B,A進程先運行,然後執行I/O操作,例如入庫或是寫入到磁盤等等,cpu的運行速度可能比磁盤速度快100萬倍,如果這時候cpu阻塞在這,大大浪費性能;因此通過上下文切換的方式,讓B進程執行,大大提高性能。
2、線程
在現代系統中,線程是程序運行的最小單位,主要是由於線程更輕量級,線程之間切換的成本小於進程之間的切換,而且多線程之間更容易共享數據。
3、虛擬內存
在每個運行的進程中,都會存在這樣一種假象,就是進程獨占內存。每個進程看到的內存都是一致的,稱為虛擬地址空間。
深入理解計算機系統(一)