實驗環境:ubuntu、 shell終端編譯執行
一、實驗內容
(1) 程序的建立
編寫一段程式,使用系統呼叫fork()建立兩個子程序.當此程式執行時,在系統中有乙個父程序和兩個子程序活動.讓每乙個程序在螢幕上顯示乙個字元:父程序顯示字元「a」;子程序分別顯示字元「b」和字元「c」.試觀察記錄螢幕上的顯示結果,並分析原因.
#include
#include
#include
intmain()
return0;
}
(2)程序的控制
修改已編寫的程式,將每個程序輸出乙個字元改為每個程序輸出一句話,再觀察程式執行時螢幕上出現的現象,並分析原因.
如果在程式中使用系統呼叫lockf()來給每乙個程序加鎖,可以實現程序之間的互斥,觀察並分析出現的現象.
#include
#include
#include
intmain()
else
else
}return0;
}
(3) ①編制一段程式,使其實現程序的軟中斷通訊.
要求:使用系統呼叫fork()建立兩個子程序,再用系統呼叫signal()讓父程序捕捉鍵盤上來的中斷訊號(即按del鍵);當捕捉到中斷訊號後,父程序用系統呼叫kill()向兩個子程序發出訊號,子程序捕捉到訊號後分別輸出下列資訊後終止:
child processl1 is killed by parent!
child processl2 is killed by parent!
父程序等待兩個子程序終止後,輸出如下的資訊後終止:
parent process is killed!
②在上面的程式中增加語句signal(sigint,sig-ign) 和signal(sigquit,sig-ign),
觀察執行結果,並分析原因.
#include
#include
#include
#include
#include
int waiting_control=1;
void
waiting()
;void
sig(
int num)
;int
main()
else
else
}return0;
}void
sig(
int num)
void
waiting()
(4)程序的管道通訊
編制一段程式,實現程序的管道通訊.
使用系統呼叫pipe()建立一條管道線;兩個子程序p1和p2分別向管道各寫一句話:
child 1 is sending a message!
child 2 is sending a message!
而父程序則從管道中讀出來自與兩個子程序的資訊,顯示在螢幕上.
要求父程序先接收子程序p1發來的訊息,然後再接收子程序p2發來的訊息.
#include
#include
#include
#include
#include
#include
intmain()
else
else
//父程序
}return0;
}
作業系統實驗之程序管理
實驗內容 建立新的程序 檢視執行的程序 換出某個程序 殺死執行程序以及程序之間的通訊 下面是 include conio.h include stdio.h include stdlib.h struct pcb struct pcb neicun 20 waicun 20 int count 0,...
作業系統程序管理實驗 3
繼上次的建立執行緒後,我又帶著一段新的 來了qaq 死鎖是什麼呢?死鎖是指兩個或兩個以上的執行緒在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。啥是互相競爭資源?我上次...
作業系統實驗之程序管理
程序名 要求執行時間 優先數狀態 其中,程序名 作為程序的標識,假設五個程序的程序名分別為p1,p2,p3,p4,p5。要求執行時間 假設程序需要執行的單位時間數。優先數 賦予程序的優先數,排程時總是選取優先數大的程序先執行。狀態 可假設有兩種狀態,就緒 狀態和 結束 狀態。五個程序的初始狀態都為 ...