Linux操作系統原理筆記


 

 

在Linux操作系統內核內部,進程是通過一個鏈表,而且是一個雙向鏈表來管理的。

進程描述符:每一個進程都有其描述符,每一個描述符彼此之間都有關聯性的。

 

雙向鏈表:

 

一個進程內部可能包含多個線程。

 

 

上下文切換(Context swtch)

 

 

假如說進程A從當前CPU上被拿走,切換成進程B,進程A有自己的描述符(task_struct),且被掛起。被Suspend(棧指針),CPU內部,包括指令計數器等保存下來。

保存在進程描述符文件當中。而進程描述符是由內核維持。所以這些信息都保存在內核中。

當A進程被切換出去,就意味着B進程被調度上來。這一過程被叫做恢復線程(Resume)

總的過程就叫做上下文切換。

 

進程A------CPU------進程B

 

上下文切換由誰完成?----由內核。

這意味着:

      每一次進程切換都要先從用戶空間轉到內核模式,然后再到用戶模式。

注意:不可能由一個進程到另一個進程,必須由內核來指揮完成。

 

所以CPU的整體時間就分為兩部分:

一部分是用戶空間所有進程加起來的計的時間

另一部分是內核空間所占用的時間

 

不管是那個進程,CPU總是分配到用戶空間一部分,又分配到內核空間一部分。

 

Linux支持進程搶占。

 優先級高的可以搶占優先級低的。

 但不是隨時都可以搶占,-------系統時鍾。

系統時鍾:

   有內部的時間頻率。

   Tick:滴答----時間解析度

   操作系統是怎么記錄時間的?

   每一次滴答(tick),都會產生可搶的時鍾中斷。

滴答來了,就可以搶了。

 

Linux的進程類別:

1、 交互式進程(IO密集型):等待IO,對CPU要求量特別小。

2、 批處理進程(CPU密集型):也可以理解成守護進程。

3、 實時進程(Real-time):隨時運行,優先級非常高的進程

 

對於PC(桌面):交互式進程優先級應該是高優先級的,IO,,,,,

對於服務器來說:一般以批處理為主(CPU)

 

現在很多調度器可以這樣來實現:

     讓批處理進程多一些時間片。----時間片比較大,但優先級低。

     而交互式進程時間片少,但優先級高。

   調度就是按照優先級來完成的。

 

Top命令是用來顯示系統運行的進程信息。

 

Linux優先級:

1、 實時進程優先級:1-99   數字越小,優先級越低。通常與內核相關。

2、 靜態優先級:通常用來描述用戶進程優先級。

100-139 數字越小,優先級越高。

所以優先級范圍是1-139

實時優先級比靜態優先級高。

 

很顯然,內核進程通常都是實時優先級。

TOP

 

 

 

 

顯示RT的為實時進程。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM