子程序複製了父程序的什麼

2021-07-04 09:49:09 字數 558 閱讀 1447

這裡涉及到實體地址和邏輯位址(或稱虛擬位址)的概念

從邏輯位址到實體地址的對映稱為位址重定向

cpu產生的邏輯位址被分為

使用者只生成邏輯位址,且認為程序的位址空間為0到max。實體地址範圍從r+0到r+max,r為基位址

每個程序都有自己的虛擬位址空間,不同程序的相同的虛擬位址顯然可以對應不同的實體地址

在fork之後exec之前兩個程序用的是相同的物理空間,子程序的**段、資料段、堆疊都是指向父程序的物理空間。當父子程序中有更改相應段的行為發生時,再為子程序相應的段分配物理空間。而如果是因為exec,子程序的**段也會分配單獨的物理空間

乙個程序一旦呼叫exec類函式,它本身就」死亡」了,系統把**段替換成新的程式的**,廢棄原有的資料段和堆疊段,並為新程式分配新的資料段與堆疊段,唯一留下的,就是程序號,也就是說,對系統而言,還是同乙個程序,不過已經是另乙個程式了

子程序複製了父程序的行緩衝

printf("one");

fork();

printf("two");

子程序複製了父程序的什麼

如果你對 段 資料段 棧 堆存放哪些資料還不是很清楚,請先看我寫和linux 記憶體管理。include include include include main else 輸出 這裡就涉及到實體地址和邏輯位址 或稱虛擬位址 的概念。靜態重定向 在程式裝入主存時已經完成了邏輯位址到實體地址和變換,在...

子程序退出,父程序為什麼要等待?

在模擬實現之前,我們首先要理解什麼是阻塞狀態?作業系統將不滿足某種條件的程序從執行佇列中拿出,將其狀態設定為其他狀態並放入等待佇列中,在此等待佇列中的程序的都處於阻塞狀態。1 殭屍程序,造成記憶體洩漏 2 父程序得管理子程序,所以父程序派給子程序的任務完成的如何,我們都需要知道,如,子程序執行完成,...

父程序與子程序管道

int main else return 0 先在父程序中建立管道,然後建立子程序,子程序複製了父程序管道檔案的檔案描述符,所以父程序和子程序各具有2個管道描述符,當在子程序中關閉讀端,這時關閉的是子程序中管道檔案的讀端,而父程序的讀端沒有關閉,這時子程序往寫段寫資料的時候,因管道讀端未完全關閉,所...