內(nèi)容簡(jiǎn)介:
操作系統(tǒng)課程設(shè)計(jì)——進(jìn)程管理
以下是課程設(shè)計(jì)題目:
實(shí)驗(yàn)一 進(jìn)程管理
一、實(shí)驗(yàn)?zāi)康?br>
1.了解進(jìn)程與程序的區(qū)別,加深對(duì)進(jìn)程概念的理解
2.掌握進(jìn)程并發(fā)執(zhí)行的原理,及其所引起的同步、互斥問(wèn)題的方法
3.利用Linux系統(tǒng)提供的進(jìn)程通信原語(yǔ),學(xué)會(huì)解決進(jìn)程同步、互斥問(wèn)題的方法
4.Linux 系統(tǒng)中進(jìn)程通信的基本原理。
二、實(shí)驗(yàn)預(yù)備內(nèi)容
1.閱讀 Linux 的 sched.h 源碼文件 , 加深對(duì)進(jìn)程管理概念的理解。
2.閱讀 Linux 的 fork.c 源碼文件 , 分析進(jìn)程的創(chuàng)建過(guò)程。
3.閱讀 Linux 系統(tǒng)的 msg.c 、 sem.c 和 shm.c 等源碼文件 , 熟悉 Linux 的三種通信機(jī)制。
三、實(shí)驗(yàn)內(nèi)容
1) 進(jìn)程的創(chuàng)建
編寫(xiě)一段程序 , 使用系統(tǒng)調(diào)用 fork( ) 創(chuàng)建兩個(gè)子進(jìn)程。當(dāng)此程序運(yùn)行時(shí) , 在系統(tǒng)中有一個(gè)父進(jìn)程和兩個(gè)子進(jìn)程活動(dòng)。讓每一個(gè)進(jìn)程在屏幕上顯示一個(gè)字符 : 父進(jìn)程顯示字符“a”;子進(jìn)程分別顯示字符“b”和字符“c” 。試觀察記錄屏幕上的顯示結(jié)果 , 并分析原因。
2) 進(jìn)程的控制
修改已編寫(xiě)的程序,將每個(gè)進(jìn)程輸出一個(gè)字符改為每個(gè)進(jìn)程輸出一句話 , 在觀察程序執(zhí)行時(shí)屏幕上出現(xiàn)的現(xiàn)象,并分析原因。
如果在程序中使用系統(tǒng)調(diào)用lockf( ) 來(lái)給每一個(gè)進(jìn)程加鎖 , 可以實(shí)現(xiàn)進(jìn)程之間的互斥 ,觀察并分析出現(xiàn)的現(xiàn)象。
3) 程序編寫(xiě)
①編制一段程序 , 使其實(shí)現(xiàn)進(jìn)程的軟中斷通信。
要求 : 使用系統(tǒng)調(diào)用 fork( ) 創(chuàng)建兩個(gè)子進(jìn)程 , 再用系統(tǒng)調(diào)用 signal ( ) 讓父進(jìn)程捕捉鍵盤(pán)上來(lái)的中斷信號(hào) (即按 DEL 鍵 ); 當(dāng)捕捉到中斷信號(hào)后 , 父進(jìn)程用系統(tǒng)調(diào)用 Kill( ) 向兩個(gè)子進(jìn)程發(fā)出信號(hào) , 子進(jìn)程捕捉到信號(hào)后分別輸出下列信息后終止 :
Child Processll is Killed by Parent !
Child Process12 is Killed by Parent !
父進(jìn)程等待兩個(gè)子進(jìn)程終止后 , 輸出如下的信息后終止 :
Parent Process is Killed !
②在上面的程序中增加語(yǔ)句 signal (SUINT,SIG--IGN) 和 signal (SIGQUIT,SIG-IGN), 觀察執(zhí)行結(jié)果 , 并分析原因。
4) 進(jìn)程的管道通信
編制一段程序 , 實(shí)現(xiàn)進(jìn)程的管道通信。
使用系統(tǒng)調(diào)用 pipe() 建立一條管道線 ; 兩個(gè)子進(jìn)程 Pl 和 P2 分別向管道各寫(xiě)一句話 :
Child 1 is sending a message !
Child 2 is sending a message !
而父進(jìn)程則從管道中讀出來(lái)自于兩個(gè)子進(jìn)程的信息 , 顯示在屏幕上。要求父進(jìn)程先接收子進(jìn)程 Pl 發(fā)來(lái)的消息 , 然后再接收子進(jìn)程 P2 發(fā)來(lái)的消息。
四、思考
(1) 系統(tǒng)是怎樣創(chuàng)建流程的 ?
(2) 可執(zhí)行文件加載時(shí)進(jìn)行了哪些處理 ?
(3)當(dāng)首次調(diào)用新創(chuàng)建進(jìn)程時(shí) , 其入口在哪里 ?
(4)進(jìn)程通信有什么特點(diǎn) ?
以下是程序的一部分,包括具體實(shí)例講解,一個(gè)word文檔和8個(gè)c程序文件:
實(shí)驗(yàn)一范例
1) 進(jìn)程的創(chuàng)建
編寫(xiě)一段程序 , 使用系統(tǒng)調(diào)用 fork( ) 創(chuàng)建兩個(gè)子進(jìn)程。當(dāng)此程序運(yùn)行時(shí) , 在系統(tǒng)中有一個(gè)父進(jìn)程和兩個(gè)子進(jìn)程活動(dòng)。讓每一個(gè)進(jìn)程在屏幕上顯示一個(gè)字符 : 父進(jìn)程顯示字符“a”;子進(jìn)程分別顯示字符“b”和字符“c” 。試觀察記錄屏幕上的顯示結(jié)果 , 并分析原因。
#include ﹤unistd.h﹥ /*fork01.c */
#include ﹤stdio.h﹥
int main()
{
int p1,p2;
while ((p1=fork())= =-1);
if (p1= =0) putchar(’b’);
else
{
while ((p2=fork())= =-1);
if(p2= =0) putchar(’c’);
else putchar(’a’);
}
return 0;
}
注:fork()函數(shù):
fork(): 創(chuàng)建一個(gè)新進(jìn)程。
int fork()
其中返回 int 取值意義如下 :
0: 創(chuàng)建子進(jìn)程 , 從子進(jìn)程返回的 id 值
大于 0: 從父進(jìn)程返回的子進(jìn)程 id 值
-1: 創(chuàng)建失敗
相關(guān)說(shuō)明:
1. 如您下載的資料不止一份,建議您注冊(cè)成為本站會(huì)員。會(huì)員請(qǐng)登錄后下載。
2. 會(huì)員購(gòu)買(mǎi)金幣50元以下,0.7元/個(gè),50元以上,0.5元/個(gè)。具體請(qǐng)看:下載與付款。
3. 會(huì)員48小時(shí)內(nèi)下載同一文件,不重復(fù)扣金幣。
4. 下載后請(qǐng)用WinRAR或 WinZIP解壓縮后使用。
5. 如仍有其他下載問(wèn)題,請(qǐng)看常見(jiàn)問(wèn)題解答。
下載地址:
|