版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、XX學(xué)校實驗報告課程名稱: 學(xué) 院: 專 業(yè) 班: 姓 名: 學(xué) 號: 指導(dǎo)教師: 2011 年 3 月目錄實驗1 進程管理3一、實驗?zāi)康?二、實驗內(nèi)容3三、實驗要求3四、程序說明和程序流程圖4五、程序代碼5六、程序運行結(jié)果及分析7七指導(dǎo)教師評議8實驗2 進程通信9一、實驗?zāi)康?二、實驗內(nèi)容9三、實驗要求9四、程序說明和程序流程圖9五、程序代碼11七指導(dǎo)教師評議14實驗3 存儲管理15一、實驗?zāi)康?5二、實驗內(nèi)容15三、實驗要求15四、程序說明和程序流程圖16六、程序運行結(jié)果及分析23七指導(dǎo)教師評議23實驗4 文件系統(tǒng)24一、實驗?zāi)康?4二、實驗內(nèi)容24三、實驗要求24四、程序說明和程序流程圖
2、24五、程序代碼26六、程序運行結(jié)果及分析26七指導(dǎo)教師評議27實驗1 進程管理一、實驗?zāi)康?. 弄清進程和程序的區(qū)別,加深對進程概念的理解。2. 了解并發(fā)進程的執(zhí)行過程,進一步認(rèn)識并發(fā)執(zhí)行的實質(zhì)。3. 掌握解決進程互斥使用資源的方法。二、實驗內(nèi)容1. 管道通信使用系統(tǒng)調(diào)用pipe( )建立一個管道,然后使用系統(tǒng)調(diào)用fork( )創(chuàng)建2個子進程p1和p2。這2個子進程分別向管道中寫入字符串:“Child process p1 is sending message!”和“Child process p2 is sending message!”,而父進程則從管道中讀出來自兩個子進程的信息,并顯示
3、在屏幕上。2. 軟中斷通信使用系統(tǒng)調(diào)用fork( )創(chuàng)建2個子進程p1和p2,在父進程中使用系統(tǒng)調(diào)用signal( )捕捉來自鍵盤上的軟中斷信號SIGINT(即按Ctrl-C),當(dāng)捕捉到軟中斷信號SIGINT后,父進程使用系統(tǒng)調(diào)用kill( )分別向2個子進程發(fā)出軟中斷信號SIGUSR1和SIGUSR2,子進程捕捉到信號后分別輸出信息“Child process p1 is killed by parent!”和“Child process p2 is killed by parent!”后終止。而父進程等待2個子進程終止后,輸出信息“Parent process is killed!”后終止
4、。三、實驗要求1. 根據(jù)實驗內(nèi)容編寫C程序。2. 上機調(diào)試程序。3. 記錄并分析程序運行結(jié)果。四、程序說明和程序流程圖實驗1管道通信所涉及的流程圖:實驗2軟中斷信號所涉及的流程圖:五、程序代碼/*expe1_1.c*/#include void main( ) int i, r, p1, p2, fd2; char buf50, s50; pipe(fd); /* 父進程建立管道 */ while (p1=fork()=-1); /* 創(chuàng)建子進程P1,失敗時循環(huán) */ if (p1=0) /* 由子進程P1返回,執(zhí)行子進程P1 */ lockf(fd1, 1, 0); /* 加鎖鎖定寫入端 *
5、/ sprintf(buf, Child process P1 is sending messages! n); printf(Child process P1! n); write(fd1, buf, 50); /* 把buf中的50個字符寫入管道 */ sleep(5); /* 睡眠5秒,讓父進程讀 */ lockf(fd1, 0, 0); /* 釋放管道寫入端 */ exit(0); /* 關(guān)閉P1*/ else /* 從父進程返回,執(zhí)行父進程 */ while (p2=fork()=-1); /* 創(chuàng)建子進程P2,失敗時循環(huán) */ if (p2=0) /* 從子進程P2返回,執(zhí)行子進程
6、P2 */ lockf(fd1, 1, 0); /* 鎖定寫入端 */ sprintf(buf, Child process P2 is sending messages! n); printf(Child process P2! n); write(fd1, buf, 50); /* 把buf中的字符寫入管道 */ sleep(5); /* 睡眠5秒,讓父進程讀 */ lockf(fd1, 0, 0); /* 釋放管道寫入端 */ exit(0); /* 關(guān)閉P2*/ wait(0);if (r=read(fd0, s, 50)= -1) printf(cannot read pipe! n
7、); else printf(%s, s); wait(0);if (r=read(fd0, s, 50)= -1) printf(cannot read pipe! n); else printf(%s, s); exit(0); /*exp1-2.c*/#include#include#includeint p1,p2;void main() void ppdo();void p1do();void p2do();signal(SIGINT,ppdo);p1=fork();if(p1=0) signal(SIGUSR1,p1do);for(;); else p2=fork(); if(p2
8、=0) signal(SIGUSR2,p2do); for(;); wait(0); wait(0); printf(nParent process is killed!n); exit(0);void ppdo() kill(p1,SIGUSR1); kill(p2,SIGUSR2);void p1do() printf(nChild process p1 is killed by parent!n); exit(0);void p2do() printf(nChild process p2 is killed by parent!n); exit(0);六、程序運行結(jié)果及分析實驗1管道通信
9、運行結(jié)果截圖實驗1管道通信結(jié)果分析父進程建立后,創(chuàng)建了子進程P1,P2,然后P1,P2分別向管道中寫入字符串“Child process p1 is sending message!”和“Child process p2 is sending message!”,父進程從管道中讀取字符串。實驗2軟中斷通信運行結(jié)果截圖實驗2軟中斷通信結(jié)果分析先預(yù)設(shè)中斷信號SIGINT,再先后創(chuàng)建子進程P1和P2,預(yù)設(shè)中斷信號SIGUSR1,SIGUER2,當(dāng)我們按下“Ctrl+C”時,父進程發(fā)出中斷信號SIGUSR1和SIGUSR2,通知子進程P1和P2,子進程捕捉到信號后分別輸出相應(yīng)的信息后,終止,最后輸出“
10、Parent process is killed!”后終止。實驗后思考: 通過這次實驗,深刻地了解到了管道通信和軟中斷通信的詳細(xì)過程,深化了老師課堂上的講解,對整個過程的把握也更加清晰了。 很值得的一次學(xué)習(xí)經(jīng)歷,做完實驗,再畫流程圖,程序運行的細(xì)節(jié)熟悉于心,了如指掌。七指導(dǎo)教師評議 成績等級 實驗2 進程通信一、實驗?zāi)康?. 了解進程間通信IPC的三種方式:消息隊列、共享內(nèi)存和信號量。2. 掌握使用消息隊列進行進程間通信的有關(guān)系統(tǒng)調(diào)用和編程方法。3. 掌握使用共享內(nèi)存進行進程間通信的有關(guān)系統(tǒng)調(diào)用和編程方法。二、實驗內(nèi)容1. 消息隊列使用系統(tǒng)調(diào)用msgget( )、msgsnd( )、msgrc
11、v( )和msgctl( ),用消息隊列機制實現(xiàn)客戶進程和服務(wù)器進程間的通信??蛻暨M程首先建立一個描述符為msgqid的消息隊列,接著向服務(wù)器進程發(fā)送一個消息正文為自己的進程標(biāo)識pid且類型為1的消息,然后接收來自服務(wù)器進程的消息,并在屏幕上顯示:“Client receives a message from xxxx!”,其中“xxxx”為服務(wù)器進程的進程標(biāo)識。服務(wù)器進程首先捕捉軟中斷信號(除不能捕捉的SIGKILL),若捕捉到時則調(diào)用函數(shù)cleanup( )刪除消息隊列,終止服務(wù)器進程。否則重復(fù)下列操作:接收所有類型為1的消息,并在屏幕上顯示:“Server receives a mess
12、age from xxxx!”,其中“xxxx”為客戶進程的進程標(biāo)識;然后服務(wù)器進程將客戶進程的進程標(biāo)識作為返回消息的類型,而將自己的進程標(biāo)識作為消息正文發(fā)送給客戶進程。2. 共享內(nèi)存使用系統(tǒng)調(diào)用shmget( )、shmat( )和shmctl( ),用共享內(nèi)存機制實現(xiàn)進程間的通信。其中一個進程向共享內(nèi)存中寫入數(shù)據(jù),另一個進程從共享內(nèi)存中讀出數(shù)據(jù)并顯示在屏幕上。三、實驗要求1. 根據(jù)實驗內(nèi)容編寫C程序。2. 上機調(diào)試程序。3. 記錄并分析程序運行結(jié)果。四、程序說明和程序流程圖實驗1消息隊列流程圖五、程序代碼實驗1消息隊列/* msg_client.c */#include #include
13、#include #define MSGKEY 75struct msgform long mtype; char mtext256;main() struct msgform msg; int msgqid,pid,*pint; /* 文件主 同組用戶 其他用戶 rwxrwxrwx */ msgqid=msgget(MSGKEY,0777); /* rw-rw-rw- */ pid=getpid(); pint=(int*)msg.mtext; *pint=pid; msg.mtype=1; msgsnd(msgqid,&msg,sizeof(int),0); msgrcv(msgqid,&
14、msg,256,pid,0); printf(client: receive from pid %dn,*pint);/* msg_server.c */#include #include #include #define MSGKEY 75struct msgform long mtype; char mtext256;msg;int msgqid;main() int i,pid,*pint; extern cleanup(); for (i=0;i20;i+) signal(i,cleanup); msgqid=msgget(MSGKEY, 0777|IPC_CREAT); for (;
15、) msgrcv(msgqid,&msg, 256,1,0); pint=(int*)msg.mtext; pid=*pint; printf(server: receive from pid %dn,pid); msg.mtype=pid; *pint=getpid(); msgsnd(msgqid,&msg,sizeof(int),0);cleanup() msgctl(msgqid,IPC_RMID,0); exit(0);實驗2共享內(nèi)存#include#include#include#define SHMKEY 75#define K 1024int shmid;main() int
16、i, * pint; char * addr;extern char * shmat(); shmid = shmget(SHMKEY, 8 * K, 0777); addr = shmat (shmid,0,0); pint = (int *)addr; while ( * pint=0 ) for (i=0; i256; *pint+) printf(%dn, *pint+);#include#include#include#define SHMKEY 75#define K 1024int shmid;main() int i, * pint; char * addr; extern c
17、har * shmat(); extern cleanup(); for(i=0; i20; i+) sinal (i, cleanup); shmid = shmget (SHMKEY, 16 * K, 0777|IPC_CREAT); addr = shmat (shmid,0,0); printf(addr 0x%x n, addr); pint = (int *)addr; for(i=0; i256; i+) *pint+ =i; pint = (int *)addr; *pint = 256; pause();cleanup() shmctl (shmid, IPC_RMID, 0
18、); exit(0);六、程序運行結(jié)果及分析實驗1消息隊列運行結(jié)果截圖客戶端:服務(wù)器端:實驗1消息隊列結(jié)果分析服務(wù)端程序監(jiān)聽軟中斷,建立消息隊列,循環(huán)在隊列中接收類型為1的消息,每接收一個消息向隊列中增加一個類型為客戶進程ID的消息。當(dāng)發(fā)生軟中斷時,刪除消息隊列??蛻舳诉M程創(chuàng)建和服務(wù)端相同的消息隊列,并向消息隊列中發(fā)送類型為1的消息,然后接收類型為客戶進程ID的消息。實驗后思考: 對消息隊列的運行情況有所了解,但關(guān)于內(nèi)存共享部分尚需仔細(xì)研究。七指導(dǎo)教師評議 成績等級 實驗3 存儲管理一、實驗?zāi)康?. 了解虛擬存儲管理技術(shù)的原理與特點。2. 掌握請求頁式存儲管理的頁面置換算法。二、實驗內(nèi)容1.
19、通過隨機數(shù)產(chǎn)生一個指令序列,共320條指令。指令的地址按下述原則生成:(1) 50%的指令是順序執(zhí)行的;(2) 25%的指令均勻分布在前地址部分;(3) 25%的指令均勻分布在后地址部分。實現(xiàn)方法:(1) 在0,319的指令地址中隨機選取一起點s;(2) 執(zhí)行指令s;(3) 順序執(zhí)行一條指令,即執(zhí)行地址為s+1的指令;(4) 在前地址0,s中隨機選取一條地址為m的指令執(zhí)行;(5) 順序執(zhí)行一條指令,即執(zhí)行地址為m+1的指令;(6) 在后地址m+2,319中隨機選取一條指令s;(7) 重復(fù)(2)(6),直到執(zhí)行320次指令。2. 將指令序列變換為頁地址流,設(shè):(1) 頁面大小為1K;(2) 用戶
20、內(nèi)存容量為432頁面(page frame);(3) 用戶虛存容量為32K(即32頁)。若10條指令為1頁,則320條指令在虛存中的存放方式為:第0頁(虛存地址0,9)第0條第9條指令;第1頁(虛存地址10,19)第10條第19條指令; 第31頁(虛存地址310,319)第310條第319條指令。3. 計算并輸出下列算法在不同內(nèi)存容量下的命中率(命中率=1-缺頁率)。(1) FIFOFirst In First Out Page Replacement Algorithm(2) LRULeast Recently Used Page Replacement Algorithm三、實驗要求1.
21、根據(jù)實驗內(nèi)容編寫C程序。2. 上機調(diào)試程序。3. 記錄并分析程序運行結(jié)果。四、程序說明和程序流程圖程序說明為:1. 通過隨機數(shù)產(chǎn)生一個指令序列,共320條指令。指令的地址按下述原則生成:(1) 50%的指令是順序執(zhí)行的;(2) 25%的指令均勻分布在前地址部分;(3) 25%的指令均勻分布在后地址部分。實現(xiàn)方法:(1) 在0,319的指令地址中隨機選取一起點s;(2) 執(zhí)行指令s;(3) 順序執(zhí)行一條指令,即執(zhí)行地址為s+1的指令;(4) 在前地址0,s中隨機選取一條地址為m的指令執(zhí)行;(5) 順序執(zhí)行一條指令,即執(zhí)行地址為m+1的指令;(6) 在后地址m+2,319中隨機選取一條指令s;(7
22、) 重復(fù)(2)(6),直到執(zhí)行320次指令。2. 將指令序列變換為頁地址流,設(shè):(1) 頁面大小為1K;(2) 用戶內(nèi)存容量為432頁面(page frame);(3) 用戶虛存容量為32K(即32頁)。若10條指令為1頁,則320條指令在虛存中的存放方式為:第0頁(虛存地址0,9)第0條第9條指令;第1頁(虛存地址10,19)第10條第19條指令; 第31頁(虛存地址310,319)第310條第319條指令。3. 計算并輸出下列算法在不同內(nèi)存容量下的命中率(命中率=1-缺頁率)。(1) FIFOFirst In First Out Page Replacement Algorithm(2)
23、LRULeast Recently Used Page Replacement Algorithm流程圖:五、程序代碼#include #include / #include /* Windows環(huán)境,getpid()原型在process.h中 */#define TRUE 1#define FALSE 0#define INVALID -1#define NULL 0#define total_instruction 320/* 指令條數(shù) */#define total_vp 32/* 虛頁數(shù) */#define clear_period 50/* NRU清0周期 */typedef str
24、uct /* 頁表結(jié)構(gòu) */ int pn,pfn,counter,time;/* counter(LFU),time(LRU) */ pl_type;pl_type pltotal_vp;/*頁表 */struct pfc_struct /* 存儲頁面表 */ int pn,pfn; struct pfc_struct *next;typedef struct pfc_struct pfc_type;pfc_type pfctotal_vp,*freepf_head,*busypf_head,*busypf_tail;int diseffect,atotal_instruction;/* 缺
25、頁次數(shù),指令流 */int pagetotal_instruction,offsettotal_instruction;void initialize(int);void fifo(int);void lru(int);void opt(int); void lfu(int); void nur(int);void main() int s,i,j; srand(getpid()*10);/* 進程標(biāo)識作為隨機數(shù)種子 */ s=(float)319*rand()/;/* 0319 */ / s=(float)319*rand()/32767;/* 0319 */ for (i=0; itota
26、l_instruction; i+=4) ai=s; /* s=0319 */ ai+1=ai+1; /* s+1 */ ai+2=(float)ai*rand()/;/*m=0s*/ / ai+2=(float)ai*rand()/32767;/*m=0s*/ ai+3=ai+2+1; /* m+1*/ s=(float)rand()*(317-ai+2)/+ai+2+2;/* m+2319 */ / s=(float)rand()*(317-ai+2)/32767+ai+2+2;/* m+2319 */ for (i=0;itotal_instruction;i+) pagei=ai/10
27、; offseti=ai%10; for (i=4;i=32;i+)/* 用戶內(nèi)存工作區(qū)4-32個頁面 */ printf(%2d page frames,i); fifo(i); lru(i); opt(i); lfu(i); nur(i); printf(n); void initialize(int total_pf) int i; diseffect=0; for (i=0;itotal_vp;i+) pli.pn=i;pli.pfn=INVALID; pli.counter=0;pli.time=-1; for (i=1;itotal_pf;i+) pfci-1.next=&pfci
28、;pfci-1.pfn=i-1; pfctotal_pf-1.next=NULL; pfctotal_pf-1.pfn=total_pf-1; freepf_head=&pfc0; void fifo(int total_pf) int i,j; pfc_type *p; initialize(total_pf); busypf_head=busypf_tail=NULL;/* 置忙頁面隊列為空 */ for (i=0;inext; plbusypf_head-pn.pfn=INVALID; freepf_head=busypf_head; /* 釋放忙隊列中的第1個頁面(淘汰1頁),即出隊
29、*/ freepf_head-next=NULL; busypf_head=p;/* 插入到空閑頁面鏈表 */ p=freepf_head-next; freepf_head-next=NULL; freepf_head-pn=pagei; plpagei.pfn=freepf_head-pfn; if (busypf_tail=NULL)/* 忙隊列為空時,入隊 */ busypf_head=busypf_tail=freepf_head; else/* 忙隊列為非空時,入隊 */ busypf_tail-next=freepf_head; busypf_tail=freepf_head;
30、freepf_head=p; printf( FIFO: %6.4f,1-(float)diseffect/320);void lru(int total_pf) int min,minj,i,j,present_time; initialize(total_pf);present_time=0; for (i=0;itotal_instruction;i+) if (plpagei.pfn=INVALID) diseffect+; if (freepf_head=NULL) min=32767; for (j=0;jplj.time&plj.pfn!=INVALID) min=plj.tim
31、e;minj=j; freepf_head=&pfcplminj.pfn;/* 插入空閑鏈表 */ plminj.pfn=INVALID; plminj.time=-1; freepf_head-next=NULL; plpagei.pfn=freepf_head-pfn; plpagei.time=present_time; freepf_head=freepf_head-next; else plpagei.time=present_time; present_time+; printf( LRU: %6.4f,1-(float)diseffect/320); void opt(int t
32、otal_pf) int i,j,max,maxpage,d,disttotal_vp; initialize(total_pf); for (i=0;itotal_instruction;i+) if (plpagei.pfn=INVALID) diseffect+; if (freepf_head=NULL) for (j=0;jtotal_vp;j+) if (plj.pfn!=INVALID) distj=32767; else distj=0;/* 頁在內(nèi)存中距離非0,不在內(nèi)存距離為0 */ d=1;/* 計算內(nèi)存中頁面與當(dāng)前訪問頁面的距離 */ for (j=i+1;jtotal_
33、instruction;j+) if (plpagej.pfn!=INVALID) distpagej=d; d+; max=-1;/* 淘汰距離最遠的頁 */ for (j=0;jtotal_vp;j+) if (maxnext=NULL; plmaxpage.pfn=INVALID; plpagei.pfn=freepf_head-pfn; freepf_head=freepf_head-next; printf( OPT: %6.4f,1-(float)diseffect/320);void lfu(int total_pf) int i,j,min,minpage; initializ
34、e(total_pf); for (i=0;itotal_instruction;i+) if (plpagei.pfn=INVALID) diseffect+; if (freepf_head=NULL) min=32767; for (j=0;jplj.counter & plj.pfn!=INVALID) min=plj.counter;minpage=j; plj.counter=0; freepf_head=&pfcplminpage.pfn; plminpage.pfn=INVALID; freepf_head-next=NULL; plpagei.pfn=freepf_head-
35、pfn; freepf_head=freepf_head-next; else plpagei.counter+; printf( LFU: %6.4f,1-(float)diseffect/320);void nur(int total_pf) int i,j,dp,cont_flag,old_dp; initialize(total_pf); dp=0; for (i=0;itotal_instruction;i+) if (plpagei.pfn=INVALID) diseffect+; if (freepf_head=NULL) cont_flag=TRUE;old_dp=dp; wh
36、ile (cont_flag) if (pldp.counter=0&pldp.pfn!=INVALID) cont_flag=FALSE; else dp+; if (dp=total_vp) dp=0; if (dp=old_dp) for (j=0;jnext=NULL; plpagei.pfn=freepf_head-pfn; freepf_head=freepf_head-next; else plpagei.counter=1; if (i%clear_period=0) for (j=0;jtotal_vp;j+) plj.counter=0; printf( NUR: %6.4f,1-(float)diseffect/320);六、程序運行結(jié)果及分析實驗運行結(jié)果截圖:實驗結(jié)果分析:先隨機產(chǎn)生320條指令,然后轉(zhuǎn)化為頁地址流,分別執(zhí)行FI
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《電視劇數(shù)據(jù)分析》課件
- 《長期資產(chǎn)核算》課件
- 《大數(shù)據(jù)的介紹》課件
- 七年級生物上冊 第2單元 第3章 第2節(jié) 細(xì)胞是生命活動的單位說課稿 (新版)北師大版
- 三年級信息技術(shù)下冊 我的飛行表演說課稿 華中師大版
- 《剎車系統(tǒng)培訓(xùn)》課件
- 《成熟性畸胎瘤》課件
- 《靜電培訓(xùn)教材》課件
- 《運算定律復(fù)習(xí)》課件
- 《個人收入和分配》課件
- 軟件系統(tǒng)項目實施方案(共3篇)
- 2024年全國現(xiàn)場流行病學(xué)調(diào)查職業(yè)技能競賽考試題庫-上部分(600題)
- 2025年中國鐵路設(shè)計集團有限公司招聘筆試參考題庫含答案解析
- (一模)晉城市2025年高三年第一次模擬考試 物理試卷(含AB卷答案解析)
- (2024年)肺栓塞的護理課件
- 叉車操作規(guī)程
- 2021年春新青島版(五四制)科學(xué)四年級下冊全冊教學(xué)課件
- 土建工程技術(shù)標(biāo)范本(DOC167頁)
- 惡性腫瘤化療后重度骨髓抑制病人的護理論文
- cmu200_中文使用詳細(xì)說明
- 注塑參數(shù)DOE分析范例
評論
0/150
提交評論