操作系統(tǒng)第五個(gè)實(shí)驗(yàn)報(bào)告15_第1頁(yè)
操作系統(tǒng)第五個(gè)實(shí)驗(yàn)報(bào)告15_第2頁(yè)
操作系統(tǒng)第五個(gè)實(shí)驗(yàn)報(bào)告15_第3頁(yè)
操作系統(tǒng)第五個(gè)實(shí)驗(yàn)報(bào)告15_第4頁(yè)
操作系統(tǒng)第五個(gè)實(shí)驗(yàn)報(bào)告15_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、甘肅政法學(xué)院本科生實(shí)驗(yàn)報(bào)告(五)姓名:xxx學(xué)院:信息工程學(xué)院專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)班級(jí):2013級(jí)計(jì)算機(jī)科學(xué)與技術(shù)本科班實(shí)驗(yàn)課程名稱:操作系統(tǒng) 實(shí)驗(yàn)日期: 2016年5月20 日開課時(shí)間:2015-2016 學(xué)年 第二學(xué)期甘肅政法學(xué)院實(shí)驗(yàn)管理中心印制實(shí)驗(yàn)題目進(jìn)程的共享主存通信、進(jìn)程的信號(hào)量通信小組合作否姓名謝慧敏班級(jí)2013級(jí)計(jì)算機(jī)科學(xué)與技術(shù)本科班學(xué) 號(hào)201381010144一、實(shí)驗(yàn)?zāi)康?、 了解和熟悉了共享存儲(chǔ)機(jī)制;2、 加深對(duì)進(jìn)程通信的理解。 3、 熟悉消息通信機(jī)制、共享存儲(chǔ)器通信機(jī)制,進(jìn)一步認(rèn)識(shí)其與信號(hào)量通信的區(qū)別。二實(shí)驗(yàn)環(huán)境Windows 7操作系統(tǒng)Vmware 軟件Red hat

2、 linux操作系統(tǒng)三、 實(shí)驗(yàn)內(nèi)容與步驟一、進(jìn)程的共享主存通信1. 共享主存段使用的數(shù)據(jù)結(jié)構(gòu)(1)共享主存段控制塊(或共享主存段頭)每個(gè)共享主存段都有一個(gè)控制塊,用來(lái)描述共享主存段的一些屬性,共享主存段控制塊定義在sys/shm.h中,其結(jié)構(gòu)如下:struct shmid_dsstruct ipc_perm shmperm; / * 共享主存段訪問(wèn)控制結(jié)構(gòu) * /int shmsegsz; / * 共享段以字節(jié)為單位的長(zhǎng)度 * /struct ptentry * shmptbl; / * 共享頁(yè)表始址 * /ushort shmlpid; / * 最近執(zhí)行共享段操作的進(jìn)程標(biāo)識(shí) * /ushor

3、t shmcpid; / * 創(chuàng)建共享段的進(jìn)程標(biāo)識(shí) * /ushort shmnattch; / * 當(dāng)前附件段號(hào) * /ushort shmcnattch; / * 主存中的附加段號(hào) * /time_t shmatime; / * 最近一次附件操作的時(shí)間 * /time_t shmdtime; / * 最近一次與進(jìn)程分離操作的時(shí)間 * /time_t shmctime; / * 最近一次修改時(shí)間 * /為了便于管理,系統(tǒng)將維持的共享主存段組成一個(gè)表,共有SHMMNI=100個(gè)元素,其結(jié)構(gòu)如下:struct shmid_ds shmenSHMMNI; / * 共享段表 * /其訪問(wèn)控制結(jié)構(gòu)定義

4、如下:struct ipc_perm key_t key; ushort uid; /* owner euid and egid * / ushort gid; ushort cuid; ushort cgid; ushort mode; /*lower 9 bits of shmflg*/ ushort seq /*sequence number*/;(2)共享主存段的數(shù)據(jù)結(jié)構(gòu)每個(gè)共享主存段都對(duì)應(yīng)一個(gè)頁(yè)表和允許的存取權(quán)限,結(jié)構(gòu)如下;struct shmptdsint shmspte; /*開始也表項(xiàng)*/int shmsflg; /*對(duì)共享段的讀/寫權(quán)限*/每個(gè)進(jìn)程最多允許6個(gè)共享主存段(SH

5、MSEG=6).2. 申請(qǐng)一個(gè)共享主存段參與通信的進(jìn)程,通信前要先申請(qǐng)一個(gè)共享主存段,若是第一次申請(qǐng),則要為其分配一個(gè)主存空間及頁(yè)表,并對(duì)共享主存區(qū)控制塊進(jìn)行初始化,申請(qǐng)共享主存段調(diào)用語(yǔ)法如下:# include<sys/ipc.h># include<sys/shm.h>int shmget(key_t key,size_t size,int shmflg)其中,key為共享主存段的關(guān)鍵字,size是共享主存段字節(jié)長(zhǎng)度,shmflg為創(chuàng)建和訪問(wèn)標(biāo)志。返回值:成功時(shí),為與key值相關(guān)的共享主存段的標(biāo)識(shí)號(hào),且大小是頁(yè)對(duì)齊;失敗時(shí),為-1。如果key的值為IPC_PRIVA

6、TE,或不為IPC_PRIVATE,創(chuàng)建的共享段與key無(wú)關(guān),關(guān)鍵字由系統(tǒng)分配。Shmflg由如下成分組成:.IPC_CREAT,創(chuàng)建一個(gè)新段。如果該標(biāo)志沒(méi)有設(shè)置,將查找與key相關(guān)的段,且該段允許用戶訪問(wèn)。.IPC_EXCL,與IPC_CREAT一起使用,確保創(chuàng)建一個(gè)新的共享段。若該段已經(jīng)存在,出錯(cuò)。低9位為三類用戶的訪問(wèn)方式的定義。3. 將共享段附加到申請(qǐng)通信的進(jìn)程空間對(duì)于已申請(qǐng)通信所需的共享段,進(jìn)程需把它附加到自己的虛擬空間后才能對(duì)其進(jìn)行讀寫,將共享段附加到申請(qǐng)通信的進(jìn)程空間的函數(shù)調(diào)用語(yǔ)法:#include < sys/sem.h >void shmat ( int shmi

7、d,void * shmadd,int shmflg);這里shmid是進(jìn)程調(diào)用shmget后返回的共享段標(biāo)識(shí)號(hào);shmadd是給出的應(yīng)附加到進(jìn)程虛空間的地址;shmflg為允許對(duì)共享段的訪問(wèn)方式。返回值:成功時(shí)為附加到進(jìn)程地址空間的虛地址,失敗時(shí)為-1。連接到進(jìn)程虛空間的地址規(guī)則為:.shmadd為0,則將該共享段附加到系統(tǒng)選擇的進(jìn)程的第一個(gè)可用地址之后。.shmadd為非0,如果shmflg指定了SHM_RND標(biāo)志,則將該共享段附加shmadd取整后指定的地址上。.shmadd為非0,如果shmflg未指定SHM_RND標(biāo)志,則將該共享段附加shmadd指定的地址上。通常將shmadd指定

8、為0,由系統(tǒng)安排連接地址。4.將共享段與進(jìn)程之間解除鏈接當(dāng)進(jìn)程不再需要共享段時(shí),將其從它的地址空間拆下,調(diào)用語(yǔ)法為:#include < sys/sem.h >int shmdt( void * shmaddr );其中,shmaddr是共享段在進(jìn)程地址空間的虛地址。返回值為0。5.對(duì)共享段進(jìn)行控制#include < sys/sem.h >int shmctl(int shmid,int cmd,struct_ds * buf);返回值:成功時(shí)為0,失敗時(shí)為-1。系統(tǒng)調(diào)用shmctl根據(jù)控制命令cmd對(duì)共享段進(jìn)行控制。cmd可能的取值有:. IPC_STAT,將有關(guān)共

9、享段的信息復(fù)制到具有shmid_ds結(jié)構(gòu)的buf中;. IPC_SET,用于用戶和用戶組,或?qū)ζ浯嫒?quán)限進(jìn)行修改,要求用戶必須為超級(jí)用戶或擁有者;. IPC_RMID,用于標(biāo)志刪除共享段。在共享段與所有進(jìn)行分離時(shí),實(shí)際進(jìn)行刪除;. IPC_LOCK,在Linux環(huán)境下,將共享段鎖在主存中;. IPC_UNLOCK,在Linux環(huán)境下,允許將共享段鎖換出主存。二、進(jìn)程的信號(hào)量【預(yù)備知識(shí)】在Linux中,一個(gè)或多個(gè)信號(hào)量構(gòu)成一個(gè)信號(hào)量集合。使用信號(hào)量機(jī)制用來(lái)實(shí)現(xiàn)進(jìn)程之間的同步和互斥,允許并發(fā)進(jìn)程一次對(duì)一組信號(hào)量進(jìn)行相同或不同的操作。每個(gè)P、V操作不限于減1或加1,而是可以加減任何整數(shù)。在進(jìn)程終止時(shí)

10、,系統(tǒng)可根據(jù)需要自動(dòng)消除所有被進(jìn)程操作過(guò)的信號(hào)量的影響。1.信號(hào)量機(jī)制中使用的數(shù)據(jù)結(jié)構(gòu)系統(tǒng)中的每個(gè)信號(hào)量都有一個(gè)數(shù)據(jù)結(jié)構(gòu)定義在sys/sem.h中。結(jié)構(gòu)定義如下:struct sem ushort semval; /*信號(hào)量的當(dāng)前值*/ short sempid; /* 最近一次對(duì)該信號(hào)操作的進(jìn)程標(biāo)識(shí)*/ ushort semncnt; /*等待信號(hào)量值增加的進(jìn)程數(shù)*/ ushort semzcnt; /*等待信號(hào)量值等于0的進(jìn)程數(shù)*/2.信號(hào)量集合的數(shù)據(jù)結(jié)構(gòu)系統(tǒng)為每個(gè)信號(hào)集合保持一個(gè)頭文件定義在sys/sem.h中。結(jié)構(gòu)定義如下:struct semid_dsstruct ipc_perm

11、sem_perm; /*對(duì)信號(hào)量的訪問(wèn)方式,見消息緩沖*/time_t sem_otime; /*最后操作信號(hào)量集合的時(shí)間*/time_t sem_ctime; /*最后修改信號(hào)量集合的時(shí)間*/struct sem *sem_base; /*指向集合中第一個(gè)信號(hào)量的指針*/ ushort sem_nsems; /*集合中的信號(hào)量個(gè)數(shù)*/ 3.信號(hào)量集合的建立任何進(jìn)程在使用信號(hào)量之前,通過(guò)使用如下函數(shù)申請(qǐng)建立一個(gè)信號(hào)量集合:# include <sys/types.h># include <sys/ipc.h># include <sys/sem.h>int

12、semget(key_t key,int nsems,int semflg)其中,key為用戶進(jìn)程指定的信號(hào)量集合的關(guān)鍵字,nsems為信號(hào)量集合中的信號(hào)量數(shù),semflg為訪問(wèn)標(biāo)志。返回值:成功時(shí),返回信號(hào)量集合的標(biāo)識(shí)號(hào),失敗時(shí),返回-1。semflg 由以下成分組成:·IPC_CREAT,創(chuàng)建一個(gè)新的信號(hào)量集合。如果該標(biāo)志沒(méi)有設(shè)置,將查找于key相關(guān)的信號(hào)量集合。·IPC_EXCL,與IPC_CREAT一起使用,確保創(chuàng)建一個(gè)新的信號(hào)量集合。若該段已經(jīng)存在,出錯(cuò)。低9位為三類用戶的訪問(wèn)方式的定義。4.對(duì)信號(hào)量的操作通過(guò)調(diào)用semop()函數(shù),進(jìn)程對(duì)一信號(hào)量集合中的一個(gè)或多

13、個(gè)信號(hào)執(zhí)行P/V操作,其操作命令由用戶提供的信號(hào)操作模版(sembuf)定義,該模版的結(jié)構(gòu)如下:Structsembuf ushort sem_num; /*信號(hào)量的序號(hào)*/ short sem_op /*具體執(zhí)行的操作(即P或V操作)* / short sem_flg; /*訪問(wèn)標(biāo)志*/調(diào)用語(yǔ)法為:# include <sys/sem.h>int semop(int semid,struct sembuf *sops,unsigned nsops);其中,semid是進(jìn)程調(diào)用semget后返回的信號(hào)量集合的標(biāo)識(shí),sops是用戶提供的信號(hào)量操作模版數(shù)組(sembuf)的指針,nso

14、ps為數(shù)組sembuf中的元素?cái)?shù)(即一次需進(jìn)行的操作數(shù))。正常返回值為0。5.對(duì)信號(hào)量執(zhí)行控制操作當(dāng)要讀取和修改信號(hào)量集合的有關(guān)狀態(tài)信息,或撤銷信號(hào)量集合時(shí),調(diào)用命令semctl()對(duì)信號(hào)量執(zhí)行控制操作。其調(diào)用語(yǔ)法為:int semctl(int semid,int semnum,int cmd,union semun arg);其中,semid是信號(hào)量集合的標(biāo)識(shí),semnum是要處理信號(hào)量集合中的信號(hào)量序號(hào),cmd為要執(zhí)行的操作命令,arg為控制操作需要的參數(shù),是一個(gè)指向聯(lián)合semun的指針。函數(shù)semctl成功返回時(shí)為0。semun定義為:union semun int val;/ * v

15、alue forSETVAL * / struct semid_ds * buf ; / * buffer for IPC_SET & IPC_STAT */ ushort array ;/ * buffor for IPC_INFO * / arg;cmd的可能取值有:GETPID 返回最近一個(gè)隊(duì)信號(hào)量操作的進(jìn)程標(biāo)識(shí) GETVAL 返回索引為semnum的信號(hào)量的值 GETALL 返回一個(gè)集合中所有信號(hào)量的值到arg.array中GETNCNT 返回睡眠等待信號(hào)量值為正的進(jìn)程的數(shù)GETZCNT 返回睡眠等待信號(hào)量值為0的進(jìn)程數(shù)SETVAL 設(shè)置索引為semnum的信號(hào)量的值為arg.

16、valSETALL 按照數(shù)組arg.array,設(shè)置一個(gè)集合中所有信號(hào)量的值IPC_STAT 若為讀,可將指定semid的信號(hào)量頭結(jié)構(gòu)讀入arg.buf中獲得信號(hào)量的值IPC_SET 按照arg.buf設(shè)置用戶標(biāo)識(shí)、組標(biāo)識(shí)和訪問(wèn)權(quán)限。若不是給定的有效用戶標(biāo)識(shí),立即返回IPC_RMID 刪除指定標(biāo)識(shí)的信號(hào)量集合四、實(shí)驗(yàn)過(guò)程與分析一、進(jìn)程的共享主存通信1、編程實(shí)現(xiàn)一個(gè)是進(jìn)程向共享段寫信息的例子。程序源代碼:#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>#define SHMKEY 75

17、#define K 1024int shmid;main() int i,*pint; char *addr; extern char *shmat(); shmid=shmget(SHMKEY,16*K,0777|IPC_CREAT); /*申請(qǐng)創(chuàng)建一個(gè)16K大小的共享存儲(chǔ)段,其標(biāo)識(shí)號(hào)為SHMKEY*/ addr=shmat(shmid,0,0); /*缺省地址將共享段附加到系統(tǒng)指定位置*/ printf(“addr ox%xn”,addr);/*打印附加到進(jìn)程地址空間的地址*/ pint=(int *) addr; for (i=0;i<256;i+) *pint+=i; /*向共享

18、主存段寫入0255個(gè)數(shù)*/ pint=(int *)addr; *pint=256; /*共享段第一個(gè)字中寫入信息長(zhǎng)度256,以便接收進(jìn)程讀*/ pause(); /*暫停等待接收進(jìn)程讀*/運(yùn)行結(jié)果:2、 編程實(shí)現(xiàn)從共享段讀信息的例子程序源代碼:#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>#define SHMKEY 75#define K 1024int shmid;main() int i,*pint; char *addr; extern char *shmat(); sh

19、mid=shmget(SHMKEY,8*K,0777); /*由SHMKEY得到共享段標(biāo)識(shí)號(hào)*/ addr=shmat(shmid,0,0); /*將共享段與本進(jìn)程相連*/ pint=(int *) addr; while (*pint=0); /*若共享區(qū)無(wú)信息時(shí),在此等待*/for (i=0;i<256;i+) printf(“%dn”,*pint+);運(yùn)行結(jié)果:二、進(jìn)程的信號(hào)量通信1、編程實(shí)現(xiàn)多個(gè)進(jìn)程對(duì)同一文件的互斥寫入。程序源代碼:#include < stdio.h >#include < stdlib.h >#include < unistd.h

20、 >#include < time.h >#include < sys/types.h >#include < sys/wait.h >#include < linux/sem.h >#define NUM_PROCS 5#define SEM_ID 250#define FILE_NAME ”/tmp/sem_MUTEX” /* 互斥共享寫入的文件名稱 */#define DELAY 400000/各子進(jìn)程互斥寫文件的通用函數(shù)void update_file(int sem _set_id,char *file_name_path,int

21、 number) struct sembuf sem_op;FILE *file;/相當(dāng)于執(zhí)行P操作,申請(qǐng)寫文件sem_op.sem_num=0;sem_op.sem_op=-1;sem_op.sem_flg=0;semop(sem_set_id,&sem_op,1);/向文件寫,寫入的數(shù)據(jù)是進(jìn)程的標(biāo)識(shí)file=fopen(file_name_path,”w”);if(file) fprintf(file,”%dn”,number); printf(“%dn”,number); fclose(file);/相當(dāng)于執(zhí)行V操作,釋放文件的使用權(quán) sem_op.sem_num=0; sem_

22、op.sem_op=1; sem_op.sem_flg=0; semop(sem_set_id,&sem_op,1);/子進(jìn)程準(zhǔn)備寫文件的通用函數(shù)void do_child_loop(int sem_set_id,char *file_name) pid_t pid=getpid(); /得到本進(jìn)程的標(biāo)識(shí) int i,j; for(i=0;i<3;i+) update_file(sem_set_id,file_name,pid); for(j=0;j<200000;j+); /*暫停一段時(shí)間*/ /主函數(shù)int main(int argc,char*argv) Int sem_set_id,child_pid;union semun sem_val;int i,rc;/創(chuàng)建一個(gè)信號(hào)量集合,標(biāo)識(shí)為225,只有一個(gè)信號(hào)量sem_set_id=semget(SEM_ID,1,IPC_CREAT|0600);if(sem_set_id=-1) perr

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論