靜態庫:
-
以lib開頭,檔名通常:libxxx.a;
-
靜態庫在編譯時,會連結(複製一份)放到可執行程式;
-
因為要被複制到可執行檔案,所以程式碼體積會增大。它不會共享。
-
若庫被更新了程式需要重新編譯。
共享庫:
- 檔名通常libxx.so;在需要這個庫時程式需要回到共享庫區執行庫中的程式碼。
- 庫更新時只需要替換庫檔案而不用重新編譯。
- 有可能會被多個程式呼叫。
程序三大狀態:
- 就緒:程式已被分配資源,等待核心呼叫。
- 執行:程序被分配時間片,正在執行;
- 阻塞:程序資源用完,等待分配資源。
- 轉換:程序得到時間片進入執行狀態,時間片用完返回就緒態;若執行時某種資源不足,或者與其他程序爭奪資源,進入阻塞態。等分配到資源進入就緒態。
建立一個新程序可以用Fork();
-
當一個程序被Fork(),此時Fork出來的子程序就得到了父程序的當前的一切;父子程序同時執行——併發。
-
並行:系統呼叫多個核心,同一時刻執行多個程序。
-
併發:系統只呼叫一個核心,在某個時間段內,多個程序交替執行。
-
殭屍程序:子程序先結束,父程序沒有wait()子程序的退出碼,此時子程序稱為殭屍程序。
解決方法:在子程序結束時讓父程序wait子程序的退出碼;或者殺死父程序,讓init程序接管子程序,再wait.
-
孤兒程序:父程序先結束,子程序稱為孤兒程序;通常被init程序接管再wait ;
-
寫時複製:當fork出子程序時,不會立即為它分配獨立的資源,它共享父程序的資源;當父程序或者子程序對這段資源進行修改時,此時會將這段資源複製一份給子程序。
系統呼叫與庫函式:
系統呼叫:系統透過呼叫某些介面函式來實現某個功能。
庫函式:為了實現複雜全面的操作會將系統呼叫進行封裝最佳化,再提供給使用者。