Linux內核學習(二)---Linux中的進程、線程和輕量級進程

       對於操作系統教科書中是這樣定義的;進程是程序執行的一個實例。它是資源配置的最小單位;而爲了提高程序的並行性同時降低上下文切換的時間消耗,提出了線程的概念,一個進程中可以有多個線程,線程是程序執行的最小單位;

       在Linux系統中,Linux內核有必要再區分一下這幾個概念;

       進程,從內核觀點看,進程的目的就是擔當分配系統資源(包括CPU時間、內存等)的實體;當一個進程創建時,它幾乎與父進程相同。它接受父進程地址空間的一個(邏輯)拷貝,並從進程創建系統調用的下一條指令開始執行與父進程相同的代碼。

        對於線程,Linux系統中,分爲內核線程和用戶線程。其中,內核線程只運行在內核上,可以在全系統範圍內競爭處理器資源;同時唯一使用的資源是內核棧和上下文切換時保持寄存器的空間; 而用戶線程,則完全建立在用戶空間,其創建、調用和銷燬均在用戶空間上實現,並不需要內核幫忙;

       輕量級線程(LWP),是一種實現多任務的方法,Linux使用輕量級線程對多線程應用程序提供更好的支持。輕量級進程是內核線程的高度抽象,每一個輕量級進程都與一個特定的內核線程相關聯;這裏需要注意,由名字可知,輕量級進程與線程並不相同,同時它也有別於普通進程;

      輕量級進程區別於普通進程在於它只有一個最小的執行上下文和調度程序所需的統計信息,這也是之所以成爲輕量級的原因。一般來說,一個進程代表程序的一個實例,但LWP則代表程序執行的線程。(在內核不支持線程的時候,LWP可以很方便的提供線程的實現)

     Linux所使用的線程庫LinuxThreads是用戶空間的線程庫,採取的是線程-進程1對1模型,即一個用戶線程對應一個輕量級進程,同時一個輕量級進程對應一個特定的內核線程。這樣,將線程的調度等同於進程的調度,調度由內核完成,而線程的創建、同步、銷燬則由核外線程庫完成。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章