linux_1

hwaityd發表於2024-11-07

靜態庫:

  1. 以lib開頭,檔名通常:libxxx.a;

  2. 靜態庫在編譯時,會連結(複製一份)放到可執行程式;

  3. 因為要被複制到可執行檔案,所以程式碼體積會增大。它不會共享。

  4. 若庫被更新了程式需要重新編譯。

共享庫:

  1. 檔名通常libxx.so;在需要這個庫時程式需要回到共享庫區執行庫中的程式碼。
  2. 庫更新時只需要替換庫檔案而不用重新編譯。
  3. 有可能會被多個程式呼叫。

程序三大狀態:

  1. 就緒:程式已被分配資源,等待核心呼叫。
  2. 執行:程序被分配時間片,正在執行;
  3. 阻塞:程序資源用完,等待分配資源。
  4. 轉換:程序得到時間片進入執行狀態,時間片用完返回就緒態;若執行時某種資源不足,或者與其他程序爭奪資源,進入阻塞態。等分配到資源進入就緒態。

image

建立一個新程序可以用Fork();

  1. 當一個程序被Fork(),此時Fork出來的子程序就得到了父程序的當前的一切;父子程序同時執行——併發。

  2. 並行:系統呼叫多個核心,同一時刻執行多個程序。

  3. 併發:系統只呼叫一個核心,在某個時間段內,多個程序交替執行。

  4. 殭屍程序:子程序先結束,父程序沒有wait()子程序的退出碼,此時子程序稱為殭屍程序。

    解決方法:在子程序結束時讓父程序wait子程序的退出碼;或者殺死父程序,讓init程序接管子程序,再wait.

  5. 孤兒程序:父程序先結束,子程序稱為孤兒程序;通常被init程序接管再wait ;

  6. 寫時複製:當fork出子程序時,不會立即為它分配獨立的資源,它共享父程序的資源;當父程序或者子程序對這段資源進行修改時,此時會將這段資源複製一份給子程序。

系統呼叫與庫函式:

系統呼叫:系統透過呼叫某些介面函式來實現某個功能。

庫函式:為了實現複雜全面的操作會將系統呼叫進行封裝最佳化,再提供給使用者。