程序的編譯處理過程
預(yù)處理階段——編譯階段——匯編階段——鏈接階段
預(yù)處理:(修改原始程序袱饭,插入一些引用庫)
修改原始c程序川无,如讀取stdio.h的內(nèi)容,插入到程序文本虑乖,得到另一個(gè)c程序懦趋,以.i結(jié)尾
編譯:(編譯成匯編語言)
將.i翻譯成.s,包含一個(gè)匯編語言程序疹味,匯編語言中的每條語句都是都以一種標(biāo)準(zhǔn)的文本格式確切描述一條低級(jí)機(jī)器語言指令仅叫。匯編語言為不同高級(jí)語言的不同編譯器提供了通用的輸出語言。
匯編:(將匯編語言翻譯成機(jī)器語言)
匯編器將.s翻譯成機(jī)器語言糙捺。并把這些語言指令打包成一種可重定位的目標(biāo)語言诫咱。并將結(jié)果保持在.o程序。這次就是二進(jìn)制文件了洪灯。它的字節(jié)編碼是機(jī)器指令而不是字符坎缭。打開將看到亂碼
鏈接:(連接,合并签钩,變成可執(zhí)行文件)
鏈接到引用的預(yù)編譯好的函數(shù)庫掏呼。并合并到hello.o中。最后變成可執(zhí)行目標(biāo)文件边臼,加載到內(nèi)存哄尔,系統(tǒng)就可以運(yùn)行了。
編譯器先把源文件轉(zhuǎn)換成匯編文件柠并,再調(diào)用匯編器和連接器生成可執(zhí)行文件
匯編語言:一種以計(jì)算機(jī)指令為基礎(chǔ)的低級(jí)語言
匯編器:將匯編文本翻譯為機(jī)器語言(machine code岭接,二進(jìn)制文件)
鏈接器:處理合并,鏈接(link)臼予,將有關(guān)的目標(biāo)文件彼此連接生成二進(jìn)制的可加載鸣戴,可執(zhí)行的程序。它的核心工作是符號(hào)表的解析和重定位粘拾。
典型計(jì)算機(jī)硬件模型
存儲(chǔ)器結(jié)構(gòu)的主要思想就是上一級(jí)的存儲(chǔ)器作為低一級(jí)存儲(chǔ)器的高速緩存窄锅。
操作系統(tǒng):應(yīng)用程序與硬件之間插入的一層軟件。
OS基本功能:1.防止硬件被失控的軟件濫用 2.向應(yīng)用程序提供簡單一致的機(jī)制來控制復(fù)雜而又通常大相徑庭的低級(jí)硬件設(shè)備(底層硬件設(shè)備缰雇,并不低級(jí))
進(jìn)程:
操作系統(tǒng)對一個(gè)正在運(yùn)行的程序的抽象入偷。實(shí)現(xiàn)進(jìn)程這抽象概念需要低一級(jí)的硬件和os通力合作追驴。進(jìn)程的切換就是系統(tǒng)上下文切換。
線程:
一個(gè)進(jìn)程可以由多個(gè)稱之為線程的執(zhí)行單元組成疏之。每個(gè)線程都運(yùn)行在進(jìn)程的上下文中殿雪,并共享同樣的代碼和全局?jǐn)?shù)據(jù)。
線程是非常重要的編程模型锋爪,因?yàn)?b>多線程之間比多進(jìn)程之間更容易共享數(shù)據(jù)丙曙,線程更加高效。
虛擬存儲(chǔ)器:
抽線概念其骄,為每個(gè)進(jìn)程提供假象亏镰。它的運(yùn)作需要硬件和os的精密復(fù)雜交互,包括對處理器生成的每個(gè)地址的硬件翻譯拯爽。
基本思想是把一個(gè)進(jìn)程虛擬存儲(chǔ)器的內(nèi)容存儲(chǔ)到磁盤上索抓,然后用主存(dram)做磁盤(disk)的告訴緩存。
地址從下往上是增大的某抓。
文件:
文件就是字節(jié)序列纸兔。每個(gè)IO設(shè)備都可視為文件。文件這個(gè)概念簡單而精致否副,因?yàn)樗驊?yīng)用程序提供一個(gè)統(tǒng)一的視角汉矿,來看待系統(tǒng)中各式各樣的I/O設(shè)備。
Linux:
一個(gè)完整的备禀,符合posix(unix標(biāo)準(zhǔn)洲拇,消除unix版本差異)標(biāo)準(zhǔn)的unix os的版本。
everything is file曲尸,不僅是一種技術(shù)赋续,而是一種文化現(xiàn)象。
SIMD單指令多數(shù)據(jù):一條指令并行執(zhí)行多個(gè)數(shù)據(jù)操作另患。