1. 程式人生 > 其它 >南京大學《作業系統》筆記(一)

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

ELF檔案

ELF(Executable and Linkable Format, 可執行與可連結檔案)是一種為可執行檔案、目標檔案、共享連結庫和記憶體轉儲(core dump)準備的標準檔案格式。
一個ELF檔案由以下三個部分組成:

  • ELF頭:描述檔案的主要特性:型別、CPU架構、入口地址,現有部分的大小和偏移等;
  • 程式頭表:列舉了所有有效的段(segment)和它們的屬性,程式頭表需要載入器將檔案中的節載入到虛擬記憶體段中;
  • 節頭表:包含對節(section)的描述。

程式在linux系統中的執行步驟

  1. 被作業系統載入
    通過父程序的execve
  2. 不斷執行系統呼叫
    在程式內部,對庫函式的使用會去呼叫作業系統的系統呼叫
    程序管理:fork、execve、exit等
    檔案/裝置管理:open、close、read、write
    儲存管理:mmap、brk
  3. 退出(exit)
    ——任何一個複雜的應用程式在作業系統中的執行都是按照上述步驟。

gcc的執行步驟

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

  1. cc1-編譯器
  2. as-彙編器
  3. collect2-收集器(收集構造和解構函式的資訊, 合成call_constructors和call_destructors來呼叫構造和解構函式)
  4. ld-連結
    collect2是ld連結器的一個封裝,gcc通過呼叫collect2呼叫ld來完成連結工作。collect2主要實現了兩個額外的功能:生成程式碼呼叫全域性靜態物件的建構函式和解構函式;支援Cfront的方式生成模板程式碼。