
程序的編譯處理過程
預(yù)處理階段——編譯階段——匯編階段——鏈接階段
預(yù)處理:(修改原始程序,插入一些引用庫)
修改原始c程序,如讀取stdio.h的內(nèi)容,插入到程序文本,得到另一個c程序,以.i結(jié)尾
編譯:(編譯成匯編語言)
將.i翻譯成.s,包含一個匯編語言程序,匯編語言中的每條語句都是都以一種標準的文本格式確切描述一條低級機器語言指令。匯編語言為不同高級語言的不同編譯器提供了通用的輸出語言。
匯編:(將匯編語言翻譯成機器語言)
匯編器將.s翻譯成機器語言。并把這些語言指令打包成一種可重定位的目標語言。并將結(jié)果保持在.o程序。這次就是二進制文件了。它的字節(jié)編碼是機器指令而不是字符。打開將看到亂碼
鏈接:(連接,合并,變成可執(zhí)行文件)
鏈接到引用的預(yù)編譯好的函數(shù)庫。并合并到hello.o中。最后變成可執(zhí)行目標文件,加載到內(nèi)存,系統(tǒng)就可以運行了。
編譯器先把源文件轉(zhuǎn)換成匯編文件,再調(diào)用匯編器和連接器生成可執(zhí)行文件
匯編語言:一種以計算機指令為基礎(chǔ)的低級語言
匯編器:將匯編文本翻譯為機器語言(machine code,二進制文件)
鏈接器:處理合并,鏈接(link),將有關(guān)的目標文件彼此連接生成二進制的可加載,可執(zhí)行的程序。它的核心工作是符號表的解析和重定位。
典型計算機硬件模型


存儲器結(jié)構(gòu)的主要思想就是上一級的存儲器作為低一級存儲器的高速緩存。

操作系統(tǒng):應(yīng)用程序與硬件之間插入的一層軟件。
OS基本功能:1.防止硬件被失控的軟件濫用 2.向應(yīng)用程序提供簡單一致的機制來控制復雜而又通常大相徑庭的低級硬件設(shè)備(底層硬件設(shè)備,并不低級)

進程:
操作系統(tǒng)對一個正在運行的程序的抽象。實現(xiàn)進程這抽象概念需要低一級的硬件和os通力合作。進程的切換就是系統(tǒng)上下文切換。
線程:
一個進程可以由多個稱之為線程的執(zhí)行單元組成。每個線程都運行在進程的上下文中,并共享同樣的代碼和全局數(shù)據(jù)。
線程是非常重要的編程模型,因為多線程之間比多進程之間更容易共享數(shù)據(jù),線程更加高效。
虛擬存儲器:
抽線概念,為每個進程提供假象。它的運作需要硬件和os的精密復雜交互,包括對處理器生成的每個地址的硬件翻譯。
基本思想是把一個進程虛擬存儲器的內(nèi)容存儲到磁盤上,然后用主存(dram)做磁盤(disk)的告訴緩存。

地址從下往上是增大的。
文件:
文件就是字節(jié)序列。每個IO設(shè)備都可視為文件。文件這個概念簡單而精致,因為它向應(yīng)用程序提供一個統(tǒng)一的視角,來看待系統(tǒng)中各式各樣的I/O設(shè)備。
Linux:
一個完整的,符合posix(unix標準,消除unix版本差異)標準的unix os的版本。
everything is file,不僅是一種技術(shù),而是一種文化現(xiàn)象。
SIMD單指令多數(shù)據(jù):一條指令并行執(zhí)行多個數(shù)據(jù)操作。
