天天看點

南京大學《作業系統》筆記(一)

ELF(Executable and Linkable Format, 可執行與可連結檔案)是一種為可執行檔案、目标檔案、共享連結庫和記憶體轉儲(core dump)準備的标準檔案格式。

一個ELF檔案由以下三個部分組成:

ELF頭:描述檔案的主要特性:類型、CPU架構、入口位址,現有部分的大小和偏移等;

程式頭表:列舉了所有有效的段(segment)和它們的屬性,程式頭表需要加載器将檔案中的節加載到虛拟記憶體段中;

節頭表:包含對節(section)的描述。

被作業系統加載

通過父程序的execve

不斷執行系統調用

在程式内部,對庫函數的使用會去調用作業系統的系統調用

程序管理:fork、execve、exit等

檔案/裝置管理:open、close、read、write

存儲管理:mmap、brk

退出(exit)

——任何一個複雜的應用程式在作業系統中的執行都是按照上述步驟。

一個.c檔案,經過預處理變成.i檔案,編譯變成.s檔案,彙編變成.o檔案,連結變成.out檔案。

cc1-編譯器

as-彙編器

collect2-收集器(收集構造和析構函數的資訊, 合成call_constructors和call_destructors來調用構造和析構函數)

ld-連結

collect2是ld連結器的一個封裝,gcc通過調用collect2調用ld來完成連結工作。collect2主要實作了兩個額外的功能:生成代碼調用全局靜态對象的構造函數和析構函數;支援Cfront的方式生成模闆代碼。