Linux的程序和執行緒的現狀及其發展史簡述

2022-01-20 09:02:56 字數 1811 閱讀 6384

基於同乙個task_struct結構體,這個結構體既能代表程序也能代表執行緒,同時這個結構體也是核心排程的最小單位。

這個結構體有2個字段,pid欄位用於唯一標識乙個task_struct(用於核心排程), tgid欄位標記一組task_struct, tg是thread group的首字母。

tgid=pid表示程序(主線程),tgid!=pid表示子執行緒。

q: 這2個字段的值怎麼來的呢,這個就要說的程序和子執行緒的建立過程。

當乙個新程序被建立時,它作為主線程代表這個程序(pid=tgid)。當主線程用clone方法啟動另乙個執行緒時,該執行緒會獲得自己的pid(使得自己可以被核心獨立排程),tgid繼承自主執行緒的tgid),

這樣的話,子執行緒和主線程的pid是不同的,tgid是相同的(就是主線程的pid)。

建立時呼叫的函式。

建立程序用fork or exec,建立核心執行緒(lwp)用clone。

資源共享。虛擬記憶體空間,程序基礎資料,開啟的檔案等。

排程效能。執行緒上線文切換時,虛擬位址空間是不變的,但是程序上下文切換時,是需要重新對映虛擬位址空間。

一直以來, linux核心並沒有執行緒的概念. 每乙個執行實體都是乙個task_struct結構, 通常稱之為程序.

linux核心在 2.0.x版本就已經實現了輕量級程序lwp,clone建立輕量級程序, fork建立普通程序。

後來為了引入多執行緒,linux2.0~2.4實現了俗稱linuxthreads的多執行緒

這種實現本質上是一種lwp的實現方式,即通過輕量級程序來模擬線程,核心並不知道有執行緒這個概念,在核心看來,都是程序。

此時:a程式建立了10個執行緒, 那麼shell下執行ps時將看到11個a的程序。(因為還有個管理執行緒)

到了2.6, 是nptl的方式

在linux 2.6中, 核心有了執行緒組的概念, task_struct結構中增加了乙個tgid(thread group id)欄位. 如果這個task是某程序的乙個"主線程", 則它的tgid等於pid, 否則tgid等於程序的pid(即主線程的pid).

在clone系統呼叫中, 傳遞clone_thread引數就可以把新程序的tgid設定為父程序的tgid(否則新程序的tgid會設為其自身的pid).

有了tgid, 核心或相關的shell程式就知道某個tast_struct是代表乙個程序還是代表乙個執行緒, 也就知道在什麼時候該展現它們, 什麼時候不該展現(比如在ps的時候, 執行緒就不要展現了).

ps: 同乙個task_struct結構體,如果tgid==pid是程序,否則就是執行緒。

此時:a程式建立了10個執行緒, 那麼shell下執行ps時,應該只能看到1個程序(基於我的推測,未證實).

ngpt

上述linuxthreads和nptl都是1:1模型(1個使用者執行緒對應1個核心級執行緒),而ngpt則打算實現m:n模型(m個執行緒對應n個核心級執行緒).

q: 核心如何區分程序和執行緒呢 // 參考附錄1

a: getpid(獲取程序id): 從原理返回pid欄位,變成返回tgid。

q: 執行緒切換為什麼比程序切換快嗎?

a: 更確切的說,是同乙個程序的執行緒切換要快,因為他們共享了一些記憶體段(.text**段,.bss,data資料段,檔案描述符)。

如果是不同程序的執行緒切換,那麼和不同程序的切換,是沒有理由更快的。

how kernel distinguishes between thread and process

「3」. linux程序、執行緒模型,lwp,pthread_self()

UML的現狀及未來發展

uml是在多種物件導向建模方法的基礎上發展起來的建模語言,主要用於軟體密集型系統的建模。它的演化,可以按其性質劃分為以下幾個階段 最初的階段是專家的聯合行動,由三位oo 物件導向 方法學家將他們各自的方法結合在一起,形成uml 0.9。第二階段是公司的聯合行動,由十幾家公司組成的 uml夥伴組織 將...

中藥新藥研發工作的現狀及思考

我國中藥的臨床應用已相當廣泛,但中藥的臨床療效卻始終不能令人滿意,如何提高中藥的臨床療效,確保人民用藥安全有效已成為每個醫藥工作者共同面對的問題。本文著重從中藥新藥研發過程中存在的問題談幾點看法,僅供同行參考。1 新藥臨床欠缺實實在在的療效 在中藥新藥研製和評審中,重基礎 藥學 藥理學 毒理學 輕臨...

PAIP 國內軟體公司的現狀及解決 txt

paip.國內軟體公司的現狀及解決.txt 1.溝通 國內公司的溝通真的很差.大型企業日常工作都是以郵件為基礎展開,交流的時間太少。缺少會議紀錄一類的文件.也不太重視 2.文件 軟體文件缺少 3.民主決策 這個真的很重要 4.測試 這方面投入太少了.外企和國內公司相比更制度化些,總的來說,外企在文件...