程序能建立多少執行緒與程序邏輯位址空間(32位位址長度的話,就是4gb)(更具體地說應該是有程序位址空間中記憶體對映區的大小有關,執行緒棧是通過mmap系統呼叫在記憶體對映區建立的。)和執行緒棧(1mb)的大小有關。
程序建立的過程:
unix和linux採用另一種方式:
它把建立程序分成兩步,fork()和exec()
fork()拷貝當前程序乙個子程序(init程序是程序樹中的根程序),父程序和子程序的區別僅僅在於pid(程序id)和一些子程序沒必要繼承的父程序資源。
exec()函式將可執行檔案讀進製址空間並開始執行。
傳統的fork()系統呼叫直接把所有的資源複製給新建立的程序,但是這種方法過於簡單而且效率低下,因為它拷貝的資料可能並不能被共享,更糟糕的情況是:如果新程序打算立即執行乙個新的映像,那麼所有的拷貝將前功盡棄.
linux的fork()採用寫時拷貝的方式(copy-on-write),核心並不複製整個程序位址空間,而是讓父程序和子程序共享乙個拷貝。資源的複製只有在需要寫的時候才複製,在此之前,只是以唯讀的方式共享。所以fork()的實際開銷就是複製父程序的頁表以及給子程序建立乙個唯一的程序描述符。
程序建立的過程
1.什麼是程序?程序提供程式所需的資源,如 資料 等等 空間上的概念 程序由一大堆pe格式檔案組成。3.程序的建立 1 任何程序都是別的程序建立的 createprocess 2 程序的建立過程 對映exe檔案 建立核心物件eprocess 對映系統dll ntdll.dll 建立執行緒核心物件et...
執行緒 程序 的建立
簡單多執行緒示例 include include using namespace std dword winapi f hello lpvoid dword winapi f hi lpvoid 形參必須是這個樣子 int main int argc,char argv dword winapi f...
程序建立與執行緒建立
1.程序建立fork asmlinkage int sys fork struct pt regs regs long do fork unsigned long clone flags,unsigned long stack start,struct pt regs regs,unsigned l...