第五十五章、linux下進程的基本知識

在上一篇文章中我把第四十章的學生信息庫的一個查詢功能改成了帶網絡的,當然是有些問題的,在大家的評論裡呢,也被說了if...else用的太多了,所以呢這次我小改了一下,同時呢把其他功能也實現了一下,當然裡面只是簡單的實現,裡面呢什麼保護數據完整性啊,輸入數據判斷啊這些基本是沒有的,如果大家有興趣看看同時想把它在完善下可以私信回覆"

帶網絡的學生信息庫"獲取。

接下來我們來講下在linux下怎麼來創建一個進程。

在這之前我們先來簡單瞭解下進程:

進程我們一般認為是具有一定功能的關於一個數據集合的一次運行活動,是處於活動狀態的計算機程序。

進程在期生存週期內一般會有哪幾種狀態呢:

1、 運行態:進程佔用CPU,正在運行;

2、 就緒態:進程本身具備運行條件,等待CPU;

3、 等待態:等待除CPU之外的其他資源或條件,不能運行。

進程就在這3種狀態之間相互轉化。

接下來我們來了解下進程識別號、真實用戶識別號、真實組識別號、有效用戶識別號、有效組識別號:

這個有點複雜,我就舉個例子,有個用戶A運行程序X產生一個進程P,用戶A的識別號為10,組識別號為1,程序X的所有者用戶識別號為100,組識別號為2,當前set_user_ID位為1,set_group_ID為0,那麼進程P的真實用戶識別號為10,有效用戶識別號為100,真實組識別號與有效組識別號都為1,有效用戶/組識別號常用來判斷讀/寫文件的優先權限。

第五十五章、linux下進程的基本知識

那麼linux中進程怎麼調度呢?

linux系統中,進程有兩種運行模式:用戶模式和系統模式。

用戶模式的權限比系統模式下的小很多,對於一般的進程,都是部分時間運行於用戶模式,部分時間運行於系統模式。進程通過系統調用在這兩種模式之間切換;

當系統調用發生時,進程將由用戶模式切換到系統模式繼續執行;

當系統調用返回時,進程將由系統模式切換回用戶模式。

在linux中,進程不能被搶佔,只要能夠運行他們就不會被停止。當進程必須等待某個系統事件時,他才決定釋放出CPU。進程常因為執行系統調用需要等待。由於處於等待狀態的進程還可能佔用CPU時間,所以linux採用了預加載調度策略,在此策略中,每個進程只允許運行很短的時間(200ms),當這個時間用完之後,系統將選擇另一個進程來運行,原來的進程必須等待一段時間以繼續運行,這段時間稱為時間片。

可運行進程是一個只等待CPU資源的進程,linux基於優先級的簡單調度算法來選擇下一個運行進程,當選定新進程後,系統必須將當前進程的狀態處理器中的寄存器以及上下文狀態保存到task_struct結構中,同時他將重新設置新進程的狀態並將系統控制權交給此進程。為了將CPU時間合理的分配給系統中每個可執行進程,調度管理器必須將這些時間信息也保存在task_struct結構中。


分享到:


相關文章: