linux下什麼是進程?
進程,通俗來說,就是進行中的程序,運行中的程序,又叫PCB(process control block)
在linux作業系統下描述進程的是一個名叫task_struct的結構體,那麼這個結構體包含哪些東西呢?
都知道程式要運行,肯定首先得將磁碟中對應的可執行檔載入到記憶體中,那麼我們怎麼知道它在記憶體中哪裡呢?這個時候就需要透過一個叫做進程標識符(pid)的東西來找到它。就像我們人一樣,有代表自己身分的東西,就是身分證。
找到了程式在哪裡之後,想要執行的話,一定得知道對應的程式碼及程式碼所依賴的資料吧,所以記憶體指標就誕生了。記憶體指標就是用來指向程式的程式碼及對應的資料的。此時程式便可以運作了。
但是由於進程眾多,而一般中央處理器CPU只有一個,要確保眾多進程的順利實現,就需要有一個進程間執行的先後順序,即優先級。有了優先權之後實現多進程就容易得多。
但是值得注意的是,CPU並不是將一個進程執行完了才執行下一個哦,它會在一個程序執行了一段時間以後執行下一個進程,當下一個進程又執行了一段時間以後接著執行後續進程。此時就會出現一個問題,一個未執行完的程式當想要再次接著之前的地方執行該怎麼辦呢?不用擔心,我們會用「上下文」來保護現場。
前面又說到一個程序要被執行一段時間以後CPU才會接著執行下一個程序,那麼一個程序該執行多久才會讓出CPU呢?這裡我們用「記帳資訊」來記錄這個時間。
此外,進程在執行的時候又會出現許多狀態,如就緒狀態(R),可中斷睡眠狀態(S),不可中斷睡眠狀態(D)等等,所以結構體中還會記錄進程的狀態。當然還有I/O狀態訊息,即標準輸入,標準輸出,標準錯誤輸出。
綜上,一個描述進程的結構體task_struct中包含有以下部分:
● 標識符:用來記錄進程的id,即pid
● 記憶體指標:指向程式碼及相關資料等等
● 優先權;
● 上下文:儲存了該行程上次在CPU的執行現場
● 記帳資訊:記錄了一個程序何時應該讓出CPU
● 狀態:記錄進程的相關狀態
● I/O狀態資訊;
● 訊號相關資訊
推薦:linux系統基礎教學
以上是linux下什麼是進程的詳細內容。更多資訊請關注PHP中文網其他相關文章!