4 作業系統 程序撤銷與建立

2021-10-03 07:12:59 字數 1302 閱讀 5541

程序的建立

建立pcb

分配儲存空間

引導程式

入就緒鏈

在unix系統中:

pid = fork()建立乙個子程序(父程序的複製品)

execl(prog, args)載入並執行乙個新的程式

程序的撤銷

去配資源

撤銷pcb

通知父程序

在unix系統中:

exit() vs.kill

進入作業系統判斷結束

除初始程序外,其他程序都由父程序建立,並形成了程序家族

unix

pid = fork()

建立子程序,子程序是父程序的複製品,子程序與父程序併發執行

返回值:pid

子程序返回0,父程序返回子程序的編號

execl(prog, args)載入並執行乙個新的程式,覆蓋原來的程式

prog: 執行的程式

args:程式執行的引數,最後以0結束

exit(status) :程序自我結束

程序自我結束,通知父程序,喚醒父程序

系統做善後處理:收回儲存程式,撤銷pcb

status:子程序結束時的狀態

pid = wait(&status)

如果沒有結束子程序,父程序等待,有結束的子程序,直接返回

引數status為子程序exit(status)的引數子程序結束時的狀態,返回值是終止子程序的編號

fork() 建立子程序

pcb分為兩個資料結構,乙個是proc結構,包含著常用資訊,常駐記憶體,乙個是user結構,可以隨程序進入外存

執行到fork(),將父程序複製到子程序中,但是p_pid(程序編號)&&p_ppid(父程序編號)需要改變

程式**理解:

首先pcb包含兩部分內容,一部分是proc結構,另一部分是user結構proc結果常駐在記憶體中,包含著程序id,父程序id等資訊。

然後執行pid = fork() 建立乙個新的子程序,將父程序中的資訊複製到子程序中,父程序pid返回不是0執行父程序**,子程序pid是0 執行子程序**

子程序執行父程序中原來有的execl(「p」,0)程式為p,無引數,需要有引數結尾標誌0,然後p程式覆蓋掉原來的程式,執行完畢後有exit(status),父程序(根據情況)wait(&s),子程序結束,返回值為子程序編號

作業系統之程序與執行緒4

忙等的演算法 執行緒阻塞喚醒實現不忙等 t0執行,t2還未執行 t0t1flag 0 true 沒執行turn 1 沒執行未進入迴圈,獲得了資源 沒執行t0執行時,t1也執行了 t0進入迴圈判斷前,t1將自己的競爭標誌位置為true,導致t0一直迴圈等待直到t1執行了turn 0將許可權交給t0時,...

程序(一) 作業系統 程序建立

馮諾依曼體系結構 認識作業系統 程序概念 程序狀態 環境變數 程式位址空間 進度排程 現代計算機硬體體系結構 輸入裝置 採集獲取資料 鍵盤 輸出裝置 資料輸出 顯示器 儲存器 記憶體 運算器 處理器cpu 控制器 硬體結構決定軟體行為 qq聊天 所有的硬體都是圍繞著記憶體工作的 為什麼不使用更大的硬...

作業系統之程序建立

作業系統基於某種原因決定建立乙個新程序時,會按如下步驟操作 為新程序分配乙個唯一的程序識別符號。此時,主程序表中會新增乙個新表項,每個程序乙個表項。為程序分配空間。這包括程序映像中的所有元素。因此,作業系統必須知道私有使用者位址空間 程式和資料 和使用者棧需要多少空間。預設情況下會根據程序的型別分配...