linux進程基礎

參考:Linux進程基礎html

做者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉載,也請保留這段聲明。謝謝!node

 

程序和進程算法

同一個程序能夠執行屢次,每次均可以在內存中開闢獨立的空間來裝載,從而產生多個進程。不一樣的進程還能夠擁有各自獨立的IO接口。shell

如何建立一個進程

實際上,當計算機開機的時候,內核(kernel)只創建了一個init進程。Linux內核並不提供直接創建新進程的系統調用。剩下的全部進程都是init進程經過fork機制創建的。新的進程要經過老的進程複製自身獲得,這就是fork。fork是一個系統調用。進程存活於內存中。每一個進程都在內存中分配有屬於本身的一片空間 (address space)。當進程fork的時候,Linux在內存中開闢出一片新的內存空間給新的進程,並將老的進程空間中的內容複製到新的空間中,此後兩個進程同時運行。安全

老進程成爲新進程的父進程(parent process),而相應的,新進程就是老的進程的子進程(child process)。一個進程除了有一個PID以外,還會有一個PPID(parent PID)來存儲的父進程PID。若是咱們循着PPID不斷向上追溯的話,總會發現其源頭是init進程。因此說,全部的進程也構成一個以init爲根的樹狀結構。bash

以下,咱們查詢當前shell下的進程:數據結構

 

root@vamei:~# ps -o pid,ppid,cmd
  PID  PPID CMD
16935  3101 sudo -i
16939 16935 -bash
23774 16939 ps -o pid,ppid,cmd

咱們能夠看到,第二個進程bash是第一個進程sudo的子進程,而第三個進程ps是第二個進程的子進程。函數

fork一般做爲一個函數被調用。這個函數會有兩次返回將子進程的PID返回給父進程,0返回給子進程。實際上,子進程總能夠查詢本身的PPID來知道本身的父進程是誰,這樣,一對父進程和子進程就能夠隨時查詢對方。post

一般在調用fork函數以後,程序會設計一個if選擇結構。當PID等於0時,說明該進程爲子進程,那麼讓它執行某些指令,好比說使用exec庫函數(library function)讀取另外一個程序文件,並在當前的進程空間執行 (這其實是咱們使用fork的一大目的: 爲某一程序建立進程);而當PID爲一個正整數時,說明爲父進程,則執行另一些指令。由此,就能夠在子進程創建以後,讓它執行與父進程不一樣的功能。url

 

進程與線程(thread)

儘管在UNIX中,進程與線程是有聯繫但不一樣的兩個東西,但在Linux中,線程只是一種特殊的進程。多個線程之間能夠共享內存空間和IO接口。因此,進程是Linux程序的惟一的實現方式。

 

總結

程序,進程,PID,內存空間

子進程,父進程,PPID,fork, wait

 

《Linux核心筆記》

#進程的調度

全部進程部分時間運行於用戶模式,部分時間運行於系統模式。如何支持這些模式,底層硬件的實現各不相同,可是存在一種安全機制可使它們在用戶模式和系統模式之間來回切換。

通常等待發生在系統調用過程當中,此時進程處於系統模式;處於等待狀態的進程將被掛起而其餘的進程被調度管理器選出來執行。

解決進程等待:時間片輪轉策略

 可運行進程是一個只等待CPU資源的進程。Linux使用基於優先級的簡單調度算法來選擇下一個運行進程。當選定新進程後,系統必須將當前進程的狀態,處理器中的寄存器以及上下文狀態保存到task_struct結構中。同時它將從新設置新進程的狀態並將系統控制權交給此進程。

#進程的文件、文件系統

描述一個進程的數據結構task_struct中,包含兩個描敘系統中每一個進程所使用的文件系統相關信息。

第一個fs_struct包含了指向進程的VFS inode和其屏蔽碼。這個屏蔽碼值是建立新文件時所使用的缺省值,能夠經過系統調用來改變。

第二個數據結構files_struct包含了進程當前所使用的全部文件的信息。這些文件有些多是真正的文件,有的則是輸出/輸入終端或者物理設備,但程序都將它們視爲文件。

#虛擬內存

進程的虛擬內存包括可執行代碼和多個資源數據。首先加載的是程序映象,例如ls。ls和全部可執行映象同樣,是由可執行代碼和數據組成的。

最後Linux進程調用通用庫過程,好比文件處理子程序。若是每一個進程都有庫過程的拷貝,那麼共享就變得沒有意義。而Linux可使多個進程同時使用共享庫。來自共享庫的代碼和數據必須鏈接進入進程的虛擬地址空間以及共享此庫的其它進程的虛擬地址空間。

 

#程序執行機制:見另外一篇blog

 

#IPC進程間通宵機制

1. 信號

2. 管道

3. Unix System V IPC機制:套接字、信號量、共享內存

相關文章
相關標籤/搜索