1. 程式人生 > >連結、裝載與庫——計算機組成

連結、裝載與庫——計算機組成

*從這篇開始連續記錄我的讀書筆記,將書中重要的知識點總結,方便自己以後快速回憶與閱讀。那就先從《程式設計師的自我修養——裝載、連結與庫》第一章開始嘍。*

第一章 溫故而知新

1.1 從Hello World 說起

1.2 萬變不離其宗

1.計算機中有三個最為關鍵的部件,分別為中央處理器CPU記憶體I/O控制晶片

早期計算機硬體結構

早期的CPU的核心頻率與記憶體一樣,所以直接連線在同一個匯流排(Bus)上。但為了協調I/O裝置與匯流排之間的速度,一般每個裝置都會有一個相應的I/O控制器

2.由於CPU核心頻率的提升,且遠遠快於記憶體的速度,於是產生了與記憶體頻率相一致的系統匯流排

,而CPU採用倍頻的方式與系統匯流排進行通訊

硬體結構框架

為了協調CPU、記憶體和高速的圖形裝置,專門設計了一個高速的北橋晶片,以便它們之間能夠高速地交換資料。但如果相對低速的裝置全部連線在北橋上,北橋同時處理不同速度的裝置,設計會十分複雜。於是設計了專門處理低速裝置的南橋(Southbridge)晶片,將低速裝置都連線在南橋上,由南橋彙總後連線到北橋上。90年代時,PC在系統總線上採用PCI結構,在低速裝置上採用ISA匯流排。

3.多對稱處理器(SMP,Symmetry Multi-Processing),每個CPU在系統中所處地位和所發揮的功能一樣,是相互對稱的。多核處理器(Multi-core Processor)

實際上就是SMP的簡化版,它們之間的區別很小,邏輯上來看它們是完全相同的。區別在於多核和SMP在快取共享等方面有細微的差別,使得程式在優化上可以有針對性地處理。

1.3 站得高,望得遠

1.計算機系統軟體體系結構採用一種層的結構。

“電腦科學領域的任何問題都可以通過增加一個間接的中間層來解決。”

計算機軟體體系結構

  • 每個層次之間都需要相互通訊,一般將通訊的協議成為介面(Interface),介面的下層是介面提供者,由它定義介面;介面的上層是介面的使用者,它使用介面來實現所需功能。

  • 從整體層次結構上來看,開發工具與應用程式是是屬於同一個層次的,都使用作業系統應用程式程式設計介面(Application Programming Interface)

    。應用程式介面的提供者執行庫,什麼樣的執行庫提供什麼樣的API。執行庫使用作業系統提供的系統呼叫介面(System call Interface),系統呼叫介面在實現中往往以軟體中斷(Software Interrupt)的方式提供。

1.4 作業系統做什麼

作業系統的一個功能是提供抽象的介面,另外一個主要功能是管理硬體資源。

1.4.1 不要讓CPU打盹

1.如何高效、充分的利用CPU?

  • 計算機發展早期,為了充分利用CPU資源,編寫了一個監控程式,當某個程式暫時無需使用CPU時,監控程式就把另外正在等待CPU資源的程式啟動,使CPU充分利用。這種方法被稱為多道程式(Multiprogramming)。其最大的問題是程式之間的排程太粗糙,程式之間不分輕重緩急。

  • 經過改進,程式執行模式變成一種協作模式,即每個程式執行一段時間後都主動讓出CPU給其他程式,使得一段時間內每個程式都有機會執行一小段時間。這種程式協作模式叫做分時系統(Time-Sharing System)。但如果一個程式一直霸佔CPU,那麼其他程式都得等著。

  • 多工(Multi-tasking)系統,作業系統接管了所有的硬體資源,並且本身執行在一個手硬體保護的級別。所有的應用程式都以程序(Process)的方式執行在比作業系統許可權更低的級別,每個程序都有自己獨立的地址空間,使得程序之間的地址空間相互隔離。

  • CPU由作業系統統一進行分配,每個程序根據程序優先順序的高低都有機會得到CPU,如果執行時間超出了一定時間,作業系統會暫停該程序,將CPU資源分配給其他等待執行的程序。這種分配方式即搶佔式(Preemptive)作業系統可以強制剝奪並且分配給它認為目前最需要的程序。

    程序轉換流程

1.4.2 裝置驅動

1.當成熟的作業系統出現以後,硬體逐漸被抽象成了一系列概念。在UNIX中,硬體裝置的訪問跟訪問普通檔案一樣。從硬體細節中解放,將繁瑣的的硬體細節全交給作業系統中的硬體驅動(Device Driver)程式來完成。

2.檔案系統是作業系統中最重要的部分之一,檔案系統管理者磁碟中檔案的儲存方式。

檔案在磁碟中的結構

硬碟的結構介紹:

  • 硬碟基本儲存單位為扇區(Sector),每個扇區一般為512位元組。一個磁碟往往有多個碟片,每個碟片分兩面,每面按照同心圓劃分為若干個磁軌,每個磁軌劃分為若干個扇區。

  • 如果按照每個磁軌都擁有相同的數量的扇區,那麼靠近盤面外圍的磁軌密度肯定比內圈更加稀疏。但如果不同的磁軌扇區數又不同,計算起來就十分麻煩。現代硬碟為了遮蔽這些複雜的硬體細節,普遍使用LBA(Logical Block Address)的方式,即整個硬碟中所有的扇區從0開始編號,一直到最後一個扇區,這個扇區編號叫做邏輯扇區號

*下次的讀書筆記將總結第一章剩下的內容,主要為記憶體及其分配機制、執行緒相關等內容。*