linux核心只有程序,沒有執行緒的概念。非要說區別,那就是執行緒沒有自己的單獨的位址空間(mm_struct),執行緒和其父程序共享位址空間。
pthread呼叫fork(..|clone_vm|...)來建立新的程序,子程序與父程序共享vm空間。注意,這裡實際上是共享mm_struct結構,子程序甚至沒有建立自己的mm_struct結構。如果沒有指定clone_vm屬性引數,子程序會建立自己的vm位址空間,包括mm_struct, vma_struct, pgd, pmd, pte等等。只不過這些結構的內容和父程序的完全一致,直接從父程序拷貝過來的。
cow (copy on write)
linux建立新的程序時,如果父程序的位址空間為可寫,則在建立子程序的位址空間時,將父子程序的位址空間都改為唯讀。這樣,父子程序就能以唯讀方式共享相同的物理頁面,不需要為子程序建立新的物理頁面來copy資料,節約了時間和空間。之後,如果子程序試圖寫這片位址空間,則會產生乙個page fault,page fault handler函式會檢查,判定這是乙個cow屬性的頁面,並為子程序分配乙個可寫的新頁面後返回。子程序就可以在這新的獨佔的頁面上進行寫操作,此後父子程序對各自的頁面進行操作,互不干擾,沒有關聯。
cow這種機制只是對建立程序這個操作的一種優化處理,避免花費大量的時間空間來為子程序準備資料,因為子程序可能並不需要這些資料。當子進**正需要修改這些資料時,才為其分配空間。這是一種lazy computation的概念。cow不是用來在父子程序間進行資料同步的。
linux程序和執行緒
這兩天一直在看linxu程序和執行緒的東西,總是效率比較低,這麼一點基礎的東西還看了這麼久。該自我反省一下。首先來看看程序。程序分為三個部分,程序控制塊,程式段和資料段。程序是乙個有生命的實體,程式是乙個沒有生命的實體。只有cpu賦予程式生命的時候,程式才成為乙個活動的實體,我們稱之為 程序 每乙個...
linux 程序和執行緒
程序和執行緒 程序 process 和執行緒 thread 是作業系統的基本概念,下面用乙個模擬,來解釋它們。1.計算機的核心是cpu,它承擔了所有的計算任務。它就像一座工廠,時刻在執行。2.假定工廠的電力有限,一次只能供給乙個車間使用。也就是說,乙個車間開工的時候,其他車間都必須停工。背後的含義就...
linux 程序和執行緒
程序 程序是作業系統的核心,是執行任務的單元。程序都是有對應的實體,每乙個程序被建立,系統會為他分配儲存空間等必要資源,然後在核心管理區為該程序建立管理節點,方便控制和控制程序的執行。執行緒 執行緒的作業系統的運算排程的最小單元,是包含在程序之中。1 目的 程序和執行緒都是用實現多工併發的技術收端,...