




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)一一、實(shí)驗(yàn)?zāi)康?在單處理器環(huán)境下,實(shí)現(xiàn)互斥和同步的控制。熟悉并掌握常用Windows命令行。更進(jìn)一步理解PV操作的并發(fā)控制的實(shí)現(xiàn)。二、Windows命令行常用命令dir是英文單詞directory(目錄)的縮寫,主要用來顯示一個(gè)目錄下的文件和子目錄。md是英文make directory(創(chuàng)建目錄)的縮寫。功能:創(chuàng)建一個(gè)子目錄cd是英文change directory(改變目錄)的縮寫,功能:改變目錄rd是英文remove directory(刪除目錄)的縮寫,功能;:刪除目錄copy功能:復(fù)制一個(gè)或一組文件至指定的目錄中del是英文delete(刪除)的縮寫,功能:
2、刪除指定目錄下一個(gè)或一組文檔edit功能:edit是一個(gè)簡單的編輯軟件,可用于編輯程序或批處理文件。bacc功能:編譯指定的文件(如bacc dd)bainterp功能:運(yùn)行指定文件(如:bainterp dd)三、并發(fā)程序設(shè)計(jì)題目:在BACI環(huán)境下,對(duì)程序并發(fā)執(zhí)行的實(shí)驗(yàn):(1)沒有控制時(shí)正確的程序執(zhí)行的結(jié)果不正確;(2)BACI中PV操作的并發(fā)控制的實(shí)現(xiàn)。實(shí)驗(yàn)1、多進(jìn)程共享內(nèi)存堆棧(1)設(shè)計(jì)思路:(2)代碼:int stack10; semaphore s=1; int top=4;void release(int free) p(s); top+; cout<<"to
3、p="<<top<<endl; stacktop=free; v(s);main() int i; for(i=0;i<10;i+) stacki=-1; stack0=0; stack1=156; stack2=254; stack3=129; stack4=23; cobegin getspace(); release(100); cout<<"top="<<top<<endl; for(;top>=0;top-) cout<<"stack"<<
4、top<<"="<<stacktop<<endl;實(shí)驗(yàn)2、同步關(guān)系_奇數(shù)偶數(shù)假定有三個(gè)進(jìn)程R、W1、W2共享一個(gè)緩沖區(qū)B,而B每次只能存放一個(gè)整數(shù)。當(dāng)緩沖區(qū)中無數(shù)時(shí),進(jìn)程R可以從輸入設(shè)備上讀入一個(gè)整數(shù)并存入B中;若存到B中的數(shù)是奇數(shù),則允許進(jìn)程W1將其取出打??;若是偶數(shù),則允許進(jìn)程W2將其取出打印。另外規(guī)定:進(jìn)程R必須等B中的數(shù)被取出打印后才能再存放下一個(gè)數(shù),進(jìn)程W1或W2對(duì)每次存入的數(shù)只能打印一次并且都不能從空的緩沖區(qū)中取數(shù)。請(qǐng)用PV操作實(shí)現(xiàn)R、W1和W2三個(gè)進(jìn)程的并發(fā)執(zhí)行。代碼:Int buf; semaphore s1=1;s2=0
5、;s3=0;void r() p(s1);cout<<"input "<<endl;cin>>buf;if(buf%2) v(s2);else v(s3);void w1() p(s2);cout<<"w1'buf="<<buf<<endl;v(s1); void w2() p(s3);cout<<"w2'buf="<<buf<<endl; v(s1); main() cobegin r(); r(); w1()
6、; w2();實(shí)驗(yàn)二一、實(shí)驗(yàn)?zāi)康?目的 1、進(jìn)程通信是多任務(wù)協(xié)作的基礎(chǔ),具有廣泛的應(yīng)用。2、熟悉Linux的基于消息隊(duì)列的進(jìn)程通信的系統(tǒng)調(diào)用,并實(shí)現(xiàn)一個(gè)簡單的C/S結(jié)構(gòu)的實(shí)例。二、Linux環(huán)境下常見shell命令cd 改變當(dāng)前的工作目錄cd /usr/srcLs 列出當(dāng)前目錄的文件名及子目錄名ls l *.ccp文件拷貝cp *.c /mnt/usbrm刪除文件rm a.outmkdir創(chuàng)建一個(gè)子目錄mkdir /usr/myDatarmdir刪除一個(gè)子目錄rmdir /usr/myDatachmod設(shè)置文件的存取權(quán)限chmod 777 myCC.shfdisk查看文件系統(tǒng)fdisk lmo
7、unt裝載文件系統(tǒng)mount /dev/sda0 /mnt/usbumount卸載文件系統(tǒng)umount /mnt/usbpwd顯示當(dāng)前工作目錄pwdps顯示當(dāng)前運(yùn)行的進(jìn)程ps akill刪除運(yùn)行中的進(jìn)程kill 3685cc基本使用實(shí)例用法結(jié)果說明cc ex2.c編譯后生成可執(zhí)行目標(biāo)文件a.outcc o ex2 ex2.c編譯后生成可執(zhí)行目標(biāo)文件ex2cc I/mnt/usb /include ex2.c編譯器編譯過程除了在默認(rèn)路徑、還可以在指定的路徑/mnt/usb/include下查找源文件包含的頭文件cc L/mnt/usb/lib ex2.c編譯器在自動(dòng)連接時(shí),除了在默認(rèn)路徑、還可以
8、在指定的路徑/mnt/usb/lib下查找源文件用到的庫文件.另外在命令狀態(tài)下:DD :剪切一行 NDD :剪切N行 DW :剪切一個(gè)單詞 NDW :剪切N個(gè)單詞 P :粘貼 YY :復(fù)制一行 NYY :復(fù)制N行 YW:復(fù)制一個(gè)單詞 NYW :復(fù)制N個(gè)單詞虛擬機(jī)里linux對(duì)u盤的操作首先在終端輸入:fdisk l然后會(huì)看到下面的信息:紅線所畫的就是我們的優(yōu)盤接下來,創(chuàng)建一個(gè)文件夾用于映射u盤,具體命令如下:mkdir dinglinmount /dev/sdb1 dinglin(dev表示device,sdb1就是優(yōu)盤的編號(hào),這句話表示吧優(yōu)盤映射到dinglin文件夾)現(xiàn)在,已經(jīng)成功把優(yōu)盤映
9、射到dinglin文件夾然后輸入以下命令,進(jìn)入優(yōu)盤并查看文件Cd dinglinLs(從圖片中可以看到我們需要的兩個(gè)文件:cnt.c,svr.c)接下來要做的便是把文件備份一下,具體操作如下:輸入以下代碼:Cd rootMkdir diskCp /root/dinglin/cnt.c /root/diskCp /root/dinglin/svr.c /root/diskCd diskLs第一句,因?yàn)閯倓偽覀兺ㄟ^cd dinglin進(jìn)入了U盤,所以現(xiàn)在要返回root文件夾下面,不然文件夾就建到了U盤里面第2句:因?yàn)樾陆K端默認(rèn)打開的是root文件夾,這句話表示在root文件夾下面新建了disk文件
10、夾第3、4句:雖然我們已經(jīng)新建了disk,但是我們還在root文件夾下面,所以要輸入完整的路徑才能把文件復(fù)制到指定文件夾,/root/dinglin/svr.c表示源文件位置,/root/disk表示目標(biāo)路徑在復(fù)制文件的時(shí)候還有其他種方法,這里就不貼圖了Cd /rootMkdir diskCd dinglinCp cnt.c /root/diskCd /root/disk這種方法是進(jìn)入U(xiǎn)盤把文加復(fù)制過去,因?yàn)檫M(jìn)入了dinglin文件夾,所以不需要輸入完整的文件源地址現(xiàn)在,可以開始編譯和運(yùn)行了,操作如下Cc o cnt cnt.cLs./cnt第一句表示把cnt.c編譯問指定文件名的程序,第一個(gè)
11、cnt就是編譯后的文件的名稱,后面的cnt.c是我們的源文件通過ls命令。我們看到文件夾里面多出一個(gè)cnt的文件,現(xiàn)在,直接輸入./cnt運(yùn)行就可以了運(yùn)行完畢之后就是卸載U盤了,操作如下Cd /rootUmount dinglin因?yàn)槲覀冊(cè)趓oot下面建的dinglin,所以必須返回root才能umount,如果顯示device is busy,說明你可能有其他終端打開了U盤而沒有退出去,直接把其他終端關(guān)閉,在執(zhí)行一次就ok了三、消息隊(duì)列通信消息機(jī)制提供四個(gè)系統(tǒng)調(diào)用,分別是:int msgget(key_t key, int msgflg);int msgsnd(int msgqid, str
12、uct msgbuf *msgp, size_t msgsz, int msgflg)int msgrcv(int msgqid, struct msgbuf *msgp, size_t msgsz, long msgtyp, int msgflg)int msgctl(int msgqid, int cmd, struct msgqid_ds *buf)注意:在使用各種通信機(jī)制的系統(tǒng)調(diào)用前,必須include三個(gè)頭文件:<sys/types.h><sys/ipc.h><sys/msg.h>1)int msgget(key_t key, int msgflg
13、);參數(shù)KEY是一個(gè)鍵值,由FTOK獲得;MSGFLG參數(shù)是一些標(biāo)志位。該調(diào)用返回與健值KEY相對(duì)應(yīng)的消息隊(duì)列描述字。在以下兩種情況下,該調(diào)用將創(chuàng)建一個(gè)新的消息隊(duì)列:如果沒有消息隊(duì)列與健值KEY相對(duì)應(yīng),并且MSGFLG中包含了IPC_CREAT標(biāo)志位;KEY參數(shù)為IPC_PRIVATE;參數(shù)MSGFLG可以為以下:IPC_CREAT、IPC_EXCL、IPC_NOWAIT或三者的或結(jié)果。調(diào)用返回:成功返回消息隊(duì)列描述字,否則返回-1。注:參數(shù)KEY設(shè)置成常數(shù)IPC_PRIVATE并不意味著其他進(jìn)程不能訪問該消息隊(duì)列,只意味著即將創(chuàng)建新的消息隊(duì)列。2)int msgrcv(int msgqid,
14、 struct msgbuf *msgp, size_t msgsz, long msgtyp, int msgflg)該系統(tǒng)調(diào)用從msgid代表的消息隊(duì)列中讀取一個(gè)消息,并把消息存儲(chǔ)在msgp指向的msgbuf結(jié)構(gòu)中。msqid為消息隊(duì)列描述字;消息返回后存儲(chǔ)在msgp指向的地址,msgsz指定msgbuf的mtext成員的長度(即消息內(nèi)容的長度),msgtyp為請(qǐng)求讀取的消息類型;讀消息標(biāo)志msgflg可以為以下幾個(gè)常值的或:IPC_NOWAIT 如果沒有滿足條件的消息,調(diào)用立即返回,此時(shí),errno=ENOMSG IPC_EXCEPT 與msgtyp>0配合使用,返回隊(duì)列中第一個(gè)類
15、型不為msgtyp的消息 IPC_NOERROR 如果隊(duì)列中滿足條件的消息內(nèi)容大于所請(qǐng)求的msgsz字節(jié),則把該消息截?cái)?,截?cái)嗖糠謱G失。 msgrcv手冊(cè)中詳細(xì)給出了消息類型取不同值時(shí)(>0; <0; =0),調(diào)用將返回消息隊(duì)列中的哪個(gè)消息。msgrcv()解除阻塞的條件有三個(gè):1.消息隊(duì)列中有了滿足條件的消息; 2. msqid代表的消息隊(duì)列被刪除; 3.調(diào)用msgrcv()的進(jìn)程被信號(hào)中斷; 調(diào)用返回:成功返回讀出消息的實(shí)際字節(jié)數(shù),否則返回-1。3)int msgsnd(int msgqid, struct msgbuf *msgp, size_t msgsz, int ms
16、gflg)向msgid代表的消息隊(duì)列發(fā)送一個(gè)消息,即將發(fā)送的消息存儲(chǔ)在msgp指向的msgbuf結(jié)構(gòu)中,消息的大小由msgze指定。對(duì)發(fā)送消息來說,有意義的msgflg標(biāo)志為IPC_NOWAIT,指明在消息隊(duì)列沒有足夠空間容納要發(fā)送的消息時(shí),msgsnd是否等待。造成msgsnd()等待的條件有兩種:當(dāng)前消息的大小與當(dāng)前消息隊(duì)列中的字節(jié)數(shù)之和超過了消息隊(duì)列的總?cè)萘浚?當(dāng)前消息隊(duì)列的消息數(shù)(單位"個(gè)")不小于消息隊(duì)列的總?cè)萘浚▎挝?quot;字節(jié)數(shù)"),此時(shí),雖然消息隊(duì)列中的消息數(shù)目很多,但基本上都只有一個(gè)字節(jié)。 調(diào)用返回:成功返回0,否則返回-1。4)int ms
17、gctl(int msgqid, int cmd, struct msgqid_ds *buf)該系統(tǒng)調(diào)用對(duì)由msqid標(biāo)識(shí)的消息隊(duì)列執(zhí)行cmd操作,共有三種cmd操作:IPC_STAT、IPC_SET 、IPC_RMID。1. IPC_STAT:該命令用來獲取消息隊(duì)列信息,返回的信息存貯在buf指向的msqid結(jié)構(gòu)中; 2. IPC_SET:該命令用來設(shè)置消息隊(duì)列的屬性,要設(shè)置的屬性存儲(chǔ)在buf指向的msqid結(jié)構(gòu)中;可設(shè)置屬性包括:msg_perm.uid、msg_perm.gid、msg_perm.mode以及msg_qbytes,同時(shí),也影響msg_ctime成員。 3. IPC_RM
18、ID:刪除msqid標(biāo)識(shí)的消息隊(duì)列; 調(diào)用返回:成功返回0,否則返回-1。四、消息隊(duì)列應(yīng)用實(shí)例(1)題目:基于通信的字符串傳遞,實(shí)現(xiàn)在客戶端輸入一個(gè)字符串,服務(wù)器端進(jìn)行倒序,再到客戶端輸出。client.c#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#define MSGKEY 75struct msgformlong mtype;char sour256;char dest256;int sour_pid;char mtext256;int length = sizeof(st
19、ruct msgform)-sizeof(long);main()struct msgform msg;int msgqid,pid;msgqid = msgget(MSGKEY,0777);printf("msgqid=%dn",msgqid);pid=getpid();printf("input string :");scanf("%s",&msg.sour);msg.sour_pid = pid; msg.mtype=1;msgsnd(msgqid,&msg,length,0);msgrcv(msgqid,&am
20、p;msg,length,msg.sour_pid,0);printf("client: msgqid = %dn",msgqid);printf("receive from pid = %dn",msg.sour_pid);printf("receive string is %sn",msg.dest);server.c#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#define MSGKEY 75struct msgf
21、ormlong mtype;char sour256;char dest256;int sour_pid;char mtext256;msg;int msgqid;int length = sizeof(struct msgform)-sizeof(long);main()int i,pid;extern cleanup();for(i=0;i<20;i+)signal(i,cleanup);msgqid = msgget(MSGKEY,0777|IPC_CREAT);printf("server is ready . npid = %dn",getpid();for
22、(;)msgrcv(msgqid,&msg,length,1,0);printf("server: receive from pid=%dn",msg.sour_pid);printf("client string is %sn",msg.sour);msg.mtype = msg.sour_pid;msg.sour_pid = getpid();int j = 0;int len = strlen(msg.sour);for(i=len-1;i>=0;i-)msg.destj+ = msg.souri;printf("strin
23、g is %sn",msg.dest);msgsnd(msgqid,&msg,length,0);cleanup()msgctl(msgqid,IPC_RMID,0);exit(0); (2)兩個(gè)進(jìn)程利用通信進(jìn)行協(xié)作,實(shí)現(xiàn)簡單的四則運(yùn)算。一個(gè)進(jìn)程稱為客戶進(jìn)程(Client),其任務(wù)是從鍵盤上接收3個(gè)參數(shù):兩個(gè)操作數(shù)和一個(gè)運(yùn)算操作符,然后把這3個(gè)參數(shù)發(fā)送給另一個(gè)進(jìn)程,即服務(wù)器進(jìn)程(Server);服務(wù)器進(jìn)程接收客戶進(jìn)程的請(qǐng)求,并根據(jù)提供的運(yùn)算操作符,對(duì)兩個(gè)操作數(shù)進(jìn)行運(yùn)算,服務(wù)器把運(yùn)算的結(jié)果返回給客戶。client:#include <sys/types.h>#inc
24、lude <sys/ipc.h>#include <sys/msg.h>#define MSGKEY 75struct msgformlong mtype;float a,b,result;char f3;int sour_pid;int length = sizeof(struct msgform)-sizeof(long);main()struct msgform msg;int msgqid,pid;msgqid = msgget(MSGKEY,0777);pid=getpid();printf("input a = ");scanf(&quo
25、t;%f",&msg.a);printf("input b = ");scanf("%f",&msg.b);printf("input operator = ");scanf("%s",&msg.f);if(msg.f0='/' && msg.b=0)printf("Errorn");return 0;msg.sour_pid = pid; msg.mtype=1;msgsnd(msgqid,&msg,length,0);
26、msgrcv(msgqid,&msg,length,msg.sour_pid,0);printf("result = %fn",msg.result);server:#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#define MSGKEY 75struct msgformlong mtype;float a,b,result;char f3;int sour_pid;int msgqid;int length = sizeof(struct msgform)-sizeof(long);main()struct msgform msg;int i,pid;extern cleanup();for(i=0;i<20;i+)signal(i,cleanup);msgqid = msgget(MSGKEY,0777|IPC_CREAT);printf("server is waiting.n");for(;)msgrcv(msgqid,&msg,length,1,0);printf("a = %fn",msg.a);printf("b = %fn",msg.b);pr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 北海市初中數(shù)學(xué)試卷
- 豆類項(xiàng)目風(fēng)險(xiǎn)識(shí)別與評(píng)估綜合報(bào)告
- 邊坡錨桿錨索腰梁施工方案
- 浙江油田油管清洗施工方案
- 房屋地面鋪裝工程施工方案
- 三水裝配式檢查井施工方案
- “油茶+N”混交造林模式的技術(shù)創(chuàng)新與應(yīng)用實(shí)踐的效益詳述
- 智能制造與供應(yīng)鏈管理的策略及實(shí)施路徑
- 數(shù)字化改造的必要性與挑戰(zhàn)
- 變電站巡檢的重要性
- 季節(jié)性施工專項(xiàng)施工方案(常用)
- 傷口(壓瘡)的評(píng)估與記錄
- 煤礦機(jī)電運(yùn)輸類臺(tái)賬(各種記錄匯編)
- 風(fēng)電場(chǎng)道路及平臺(tái)施工組織方案
- 風(fēng)險(xiǎn)分級(jí)管控74411ppt課件(PPT 146頁)
- 三八女神節(jié)活動(dòng)策劃PPT課件
- 畢業(yè)設(shè)計(jì)(論文)3000t自由鍛液壓機(jī)本體設(shè)計(jì)
- 風(fēng)力發(fā)電機(jī)組PLC系統(tǒng)
- Q∕GDW 12131-2021 干擾源用戶接入電網(wǎng)電能質(zhì)量評(píng)估技術(shù)規(guī)范
- T∕CAEPI 32-2021 全尾砂膏體充填關(guān)鍵設(shè)備技術(shù)要求
- 第2章全站儀使用
評(píng)論
0/150
提交評(píng)論