深入理解計算機系統學習筆記(一)

2021-07-02 12:12:32 字數 1585 閱讀 9695

為了說明程式的編譯過程,我們用經典的hello world程式作為例子

#include 

int main(int argc, char

const *argv)

在linux系統中,我們用gcc編譯器將源程式檔案helloworld.c編譯成可執行目標檔案helloworld。

zengwh@zengwh

:~/test_code

$ gcc helloworld.c -o hello

zengwh@zengwh

:~/test_code

$ ./hello

hello world!!!

這個過程經過四個階段,分別是預處理階段,編譯階段,彙編階段和鏈結階段。執行這個四個階段的程式分別是預處理器,編譯器,彙編器和鏈結器,一起構成了編譯系統。

快取記憶體用來存放處理器近期可能需要的資訊,用來加快程式在cpu的執行,下圖是乙個典型系統中的快取記憶體儲存器。

位於處理器晶元上的l1快取記憶體訪問速度跟訪問暫存器的速度幾乎一樣快,l2快取記憶體通過一條特殊的匯流排連線到cpu,訪問速度比l1慢5倍左右,但比訪問主存要快5-10倍。更新的系統還會有l3快取記憶體,他們都是用一種sram的硬體技術實現的。這樣,系統就可以獲得很大的一塊儲存器,而且訪問速度也很快。

程式具有訪問區域性區域裡的資料和**的趨勢。通過將可能經常訪問的資料儲存在快取記憶體中的方法,大部分的儲存器操作都將在快速的快取記憶體中完成,程式效能大大提公升。

在處理器中,指令集結構是對實際處理器硬體的抽象,在作業系統中,檔案是對i/o的抽象,虛擬儲存器是對程式儲存器的抽象,程序是對乙個正在執行的程式的抽象,虛擬機器則是對整個計算機(包括作業系統,處理器和程式)的抽象

程序是作業系統中對乙個正在執行的程式的乙個抽象。乙個系統可以同時執行多個程序程式,而每個程序都好像獨佔使用硬體。併發執行則是說乙個程序的指令和另乙個程序的指令是交錯執行的。

乙個程序可以由多個執行緒組成,每個執行緒執行在程序的上下文中,並共享同樣的**和全域性資料。

虛擬儲存器是乙個抽象概念,為每個程序提供乙個假象,即每個程序好像在獨佔使用主存。每個程序看到的是一致的儲存器,即是虛擬位址空間。圖中的位址是從下往上增大。

堆:堆可以執行的時候動態地擴充套件和收縮,比如呼叫malloc或free函式的時候。

核心虛擬儲存器:位址空間頂部區域是為核心保留的,不允許應用程式讀寫這個區域的內容或者直接呼叫核心**定義的函式。

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

第1章計算機系統漫遊 1.1 位 bit 位元組 8位 二進位制檔案 其他檔案 1.2 hello.c hello.i 修改文字,例如將標頭檔案內容插入 hello.s 匯程式設計序 hello.o 可重定位目標程式 二進位制 printf.o hello 可執行目標程式 二進位制 gun gun ...

深入理解計算機系統學習筆記(一)概述

計算機系統由硬體和系統軟體構成,乙個程式的執行離不開軟硬體的協作。先來簡要的介紹一下計算機系統的硬體組成。雖然一些高階程式語言編寫的程式與硬體無關,但程式終究是要控制硬體來執行,所有的高階語言源程式都會被編譯為機器指令而後由硬體來執行,1 cpu cpu是 處理單元的簡稱。它負責解釋執行儲存在主儲存...

深入理解計算機系統 筆記

cu control unit cpu暫存器,晶元的快取記憶體sram 晶元外的快取記憶體sram 主存dram 本地硬碟 網路分布式檔案系統。拷貝次數越少,越好,netty,零拷貝 dma控制器與cpu分時使用記憶體的三種方式 程序 作業系統對執行程式的一種抽象,乙個系統上,多個程序都好像獨佔硬體...