操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第1頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第2頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第3頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第4頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩18頁(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)介

操作系統(tǒng)試驗(yàn)匯報(bào)學(xué)號(hào)姓名班級(jí)試驗(yàn)一試驗(yàn)匯報(bào)【試驗(yàn)名稱】:并發(fā)程序設(shè)計(jì)(試驗(yàn)1)【試驗(yàn)?zāi)康摹浚赫莆赵诔绦蛑袆?chuàng)立新進(jìn)程的措施,觀測(cè)并理解多道程序并發(fā)執(zhí)行的現(xiàn)象?!驹囼?yàn)原理】:fork():建立子進(jìn)程。子進(jìn)程得到父進(jìn)程地址空間的一種復(fù)制。返回值:成功時(shí),該函數(shù)被調(diào)用一次,但返回兩次,fork()對(duì)子進(jìn)程返回0,對(duì)父進(jìn)程返回子進(jìn)程標(biāo)識(shí)符(非0值)。不成功時(shí)對(duì)父進(jìn)程返回-1,沒有子進(jìn)程?!驹囼?yàn)內(nèi)容】:首先分析一下程序運(yùn)行時(shí)其輸出成果有哪幾種也許性,然后實(shí)際調(diào)試該程序觀測(cè)其實(shí)際輸出狀況,比較兩者的差異,分析其中的原因。voidmain(void){intx=5;if(fork()){x+=30;printf(“%d\n”,x);}elseprintf(“%d\n”,x);printf((“%d\n”,x);}【試驗(yàn)規(guī)定】:每個(gè)同學(xué)必須獨(dú)立完畢本試驗(yàn)、提交試驗(yàn)匯報(bào)、源程序和可執(zhí)行程序。試驗(yàn)匯報(bào)中必須包括估計(jì)的試驗(yàn)成果,關(guān)鍵代碼的分析,調(diào)試記錄,實(shí)際的試驗(yàn)成果,試驗(yàn)成果分析等內(nèi)容?!竟烙?jì)的試驗(yàn)成果】 35 5 35 5【關(guān)鍵代碼分析】代碼重要由fork()函數(shù)和一種ifelse條件分支語(yǔ)句構(gòu)成。fork()函數(shù),它是Linux的系統(tǒng)調(diào)用。函數(shù)定義:intfork(void);返回值:子進(jìn)程中返回0,父進(jìn)程中返回子進(jìn)程ID,出錯(cuò)返回-1函數(shù)闡明:一種既有進(jìn)程可以調(diào)用fork函數(shù)創(chuàng)立一種新進(jìn)程。由fork創(chuàng)立的新進(jìn)程被稱為子進(jìn)程(childprocess)。fork函數(shù)被調(diào)用一次但返回兩次。兩次返回的唯一區(qū)別是子進(jìn)程中返回0值而父進(jìn)程中返回子進(jìn)程ID。子進(jìn)程是父進(jìn)程的副本,它將獲得父進(jìn)程數(shù)據(jù)空間、堆、棧等資源的副本。注意,子進(jìn)程持有的是上述存儲(chǔ)空間的“副本”,這意味著父子進(jìn)程間不共享這些存儲(chǔ)空間,它們之間共享的存儲(chǔ)空間只有代碼段。linux將復(fù)制父進(jìn)程的地址空間內(nèi)容給子進(jìn)程,因此,子進(jìn)程有了獨(dú)立的地址空間。父進(jìn)程和子進(jìn)程的代碼段都是上面的所有代碼,由定義可知不過(guò)子進(jìn)程的代碼只從創(chuàng)立此子進(jìn)程那里開始執(zhí)行。也就是從if(fork())語(yǔ)句開始,出現(xiàn)了子進(jìn)程,兩個(gè)進(jìn)程并發(fā)執(zhí)行。當(dāng)這個(gè)程序執(zhí)行if(fork())時(shí),操作系統(tǒng)創(chuàng)立一種新的進(jìn)程(子進(jìn)程),并且在進(jìn)程表中對(duì)應(yīng)為它建立一種新的PCB表項(xiàng)。其中子進(jìn)程從父進(jìn)程繼承到了大部分的參數(shù)。也有獨(dú)有的參數(shù),如進(jìn)程號(hào)等。不過(guò)此后他們是獨(dú)立的兩個(gè)進(jìn)程。在子進(jìn)程里創(chuàng)立的東西是子進(jìn)程的,在父進(jìn)程創(chuàng)立的東西是父進(jìn)程的??梢酝耆?dāng)作一般的兩個(gè)進(jìn)程。因此在執(zhí)行printf((“%d\n”,x);的時(shí)候,父子進(jìn)程當(dāng)然都會(huì)執(zhí)行它,由于他們自身程序段里均有這句代碼。【調(diào)試記錄】 在紅帽終端里做gdb調(diào)試在第五行加入斷點(diǎn),執(zhí)行run得到55,這是子進(jìn)程執(zhí)行的成果。再執(zhí)行next得到3535,這是父進(jìn)程的成果。這里可以看出,由父進(jìn)程創(chuàng)立的子進(jìn)程先執(zhí)行完畢,不過(guò)宏觀上是并發(fā)執(zhí)行?!緦?shí)際的試驗(yàn)成果】553535【試驗(yàn)成果分析】從實(shí)際成果來(lái)看,子進(jìn)程比父進(jìn)程先執(zhí)行完,不過(guò)由fork函數(shù),我們可知,兩者優(yōu)先級(jí)應(yīng)當(dāng)是同樣的。至于哪個(gè)也許先執(zhí)行,也許和操作系統(tǒng)的詳細(xì)調(diào)度算法有關(guān)。當(dāng)試驗(yàn)超過(guò)一定次數(shù)時(shí),應(yīng)當(dāng)會(huì)出現(xiàn)其他成果。試驗(yàn)二試驗(yàn)匯報(bào)【試驗(yàn)名稱】:進(jìn)程通信(試驗(yàn)2)【試驗(yàn)?zāi)康摹浚赫莆沼绵]箱方式進(jìn)行進(jìn)程通信的措施,并通過(guò)設(shè)計(jì)實(shí)現(xiàn)簡(jiǎn)樸郵箱理解進(jìn)程通信中的同步問題以及處理該問題的措施。【試驗(yàn)原理】:郵箱機(jī)制類似于平常使用的信箱。對(duì)于顧客而言使用起來(lái)比較以便,顧客只需使用send()向?qū)Ψ洁]箱發(fā)郵件receive()從自己郵箱取郵件,send()和receive()的內(nèi)部操作顧客無(wú)需關(guān)懷。由于郵箱在內(nèi)存中實(shí)現(xiàn),其空間有大小限制。其實(shí)send()和receive()的內(nèi)部實(shí)現(xiàn)重要還是要處理生產(chǎn)者與消費(fèi)者問題。進(jìn)程A進(jìn)程A進(jìn)程B信箱A信箱BSend()Send()receive()receive()【試驗(yàn)內(nèi)容】:進(jìn)程通信的郵箱方式由操作系統(tǒng)提供形如send()和receive()的系統(tǒng)調(diào)用來(lái)支持,本試驗(yàn)規(guī)定學(xué)生首先查找資料理解所選用操作系統(tǒng)平臺(tái)上用于進(jìn)程通信的系統(tǒng)調(diào)用品體形式,然后使用該系統(tǒng)調(diào)用編寫程序進(jìn)行進(jìn)程間的通信,規(guī)定程序運(yùn)行成果可以直觀地體目前界面上。在此基礎(chǔ)上查找所選用操作系統(tǒng)平臺(tái)上支持信號(hào)量機(jī)制的系統(tǒng)調(diào)用品體形式,運(yùn)用生產(chǎn)者與消費(fèi)者模型設(shè)計(jì)實(shí)現(xiàn)一種簡(jiǎn)樸的信箱,該信箱需要有創(chuàng)立、發(fā)信、收信、撤銷等函數(shù),至少可以支持兩個(gè)進(jìn)程互相互換信息,比較自己實(shí)現(xiàn)的信箱與操作系統(tǒng)自身提供的信箱,分析兩者之間存在的異同?!驹囼?yàn)規(guī)定】:每個(gè)同學(xué)必須獨(dú)立完畢本試驗(yàn)、提交試驗(yàn)匯報(bào)、源程序和可執(zhí)行程序。試驗(yàn)匯報(bào)中必須包括背景知識(shí)簡(jiǎn)介,設(shè)計(jì)方案,估計(jì)的試驗(yàn)成果,關(guān)鍵代碼的分析,調(diào)試記錄,實(shí)際的試驗(yàn)成果,試驗(yàn)成果分析等內(nèi)容。【背景知識(shí)簡(jiǎn)介】:1、sembuf數(shù)據(jù)構(gòu)造structsembuf{unsignedshortintsem_num;//semaphorenumbershortintsem_op;//semaphoreoperationshortintsem_flg;//operationflag};sem_num:是相對(duì)應(yīng)的信號(hào)量集中的某一種資源,因此其值是一種從0到對(duì)應(yīng)的信號(hào)量集的資源總數(shù)(ipc_perm.sem_nsems)之間的整數(shù)。sem_op:指明所要執(zhí)行的操作。假如其值為正數(shù),該值會(huì)加到既有的信號(hào)內(nèi)含值中。一般用于釋放所控資源的使用權(quán);假如sem_op的值為負(fù)數(shù),而其絕對(duì)值又不小于信號(hào)的現(xiàn)值,操作將會(huì)阻塞,直到信號(hào)值不小于或等于sem_op的絕對(duì)值。一般用于獲取資源的使用權(quán);假如sem_op的值為0,則操作將臨時(shí)阻塞,直到信號(hào)的值變?yōu)?。sem_flg:信號(hào)操作標(biāo)志,也許的選擇有兩種

IPC_NOWAIT//對(duì)信號(hào)的操作不能滿足時(shí),semop()不會(huì)阻塞,并立即返回,同步設(shè)定錯(cuò)誤信息。

IPC_UNDO//程序結(jié)束時(shí)(不管正?;虿徽?,保證信號(hào)值會(huì)被重設(shè)為semop()調(diào)用前的值。這樣做的目的在于防止程序在異常狀況下結(jié)束時(shí)未將鎖定的資源解鎖,導(dǎo)致該資源永遠(yuǎn)鎖定。2、semop函數(shù)函數(shù)原型:intsemop(intsemid,structsembuf*sops,unsignednsops);參數(shù)闡明:semid:信號(hào)集的識(shí)別碼,可通過(guò)semget獲取。sops:指向存儲(chǔ)信號(hào)操作構(gòu)造的數(shù)組指針。nsops:信號(hào)操作構(gòu)造的數(shù)量,恒不小于或等于1。返回闡明:成功執(zhí)行時(shí),兩個(gè)系統(tǒng)調(diào)用都返回0。失敗返回-1,錯(cuò)誤信息保留在errno中。3、semget函數(shù)函數(shù)原型:intsemget(key_tkey,intnsems,intsemflg);參數(shù)闡明:key:關(guān)鍵字值一般是由系統(tǒng)調(diào)用ftok()返回的nsems:指出了一種新的信號(hào)量集中應(yīng)當(dāng)創(chuàng)立的信號(hào)量的個(gè)數(shù)semflg:打開和存取操作與參數(shù)semflg中的內(nèi)容有關(guān)。返回闡明:假如成功,則返回信號(hào)量集的IPC標(biāo)識(shí)符。假如失敗,返回-1,錯(cuò)誤信息保留在errno中。4、semctl函數(shù)函數(shù)原型:intsemctl(intsemid,intsemnum,intcmd,unionsemunarg);參數(shù)闡明:senid:關(guān)鍵字值semnum:信號(hào)量數(shù)目cmd:要操作的詳細(xì)命令arg:semnu的一種聯(lián)合類型的副本。返回闡明:返回值:假如成功,則為一種正數(shù)。假如失敗,則為-1。錯(cuò)誤信息保留在errno中。5、pthread_create函數(shù)函數(shù)原型:intpthread_create(pthread_t*restricttidp,constpthread_attr_t*restrictattr,void*(*start_rtn)(void*),void*restrictarg);參數(shù)闡明:tidp:指向線程標(biāo)識(shí)符的指針。

attr:用來(lái)設(shè)置線程屬性。

第三個(gè)參數(shù)是線程運(yùn)行函數(shù)的起始地址。

arg:運(yùn)行函數(shù)的參數(shù)?!驹O(shè)計(jì)方案】:采用兩個(gè)程序并行的方式,打開兩個(gè)終端,為兩個(gè)進(jìn)程都創(chuàng)立一種郵箱。并且,規(guī)定先輸入操作命令,使信箱執(zhí)行哪種操作,以完畢兩個(gè)進(jìn)程間的郵件通信。同步,還應(yīng)采用pv操作,使當(dāng)郵箱滿和空的時(shí)候,分別不能執(zhí)行發(fā)送和接受的工作?!驹囼?yàn)估計(jì)成果】:A_Receive()和B_Receive()分別接受B_Send()和A_Send()發(fā)出的信息,發(fā)送的信息和接受的信息應(yīng)當(dāng)同樣?!娟P(guān)鍵代碼分析】:PV操作實(shí)現(xiàn):intp(intsem_id){structsembufsem_b;sem_b.sem_num=0;sem_b.sem_op=-1;//V操作只需將-1改為0。sem_b.sem_flg=SEM_UNDO;if(semop(sem_id,&sem_b,1)==-1){return0;}return1;}A向B發(fā)送信息:void*A_Send(void*arg){ inti;for(i=0;i<10;i++){ semaphore_P(sem_idAs); //P操作 semaphore_P(a_mutex_semaphore); //互斥 intnumber=rand(); //隨機(jī)數(shù)為發(fā)送的郵件 printf("AsendtoB:%d\n",number); b_buf[b_buf_top]=number;//郵箱B中接受A發(fā)送的郵件 b_buf_top+=1;//A向B發(fā)送郵件,B的郵件數(shù)量加一 semaphore_V(a_mutex_semaphore); //互斥 semaphore_V(sem_idBr);//V操作 sleep(1);}}【調(diào)試記錄】:pthread庫(kù)不是Linux系統(tǒng)默認(rèn)的庫(kù),連接時(shí)需要使用庫(kù)libpthread.a,因此在使用pthread_create創(chuàng)立線程時(shí),在編譯中要加-lpthread參數(shù)gcc-w-lpthreadsemaphore.c【試驗(yàn)的實(shí)際成果】:yuiuiui@yuiuiui-desktop:-$gcc-w-osemaphore-lpthreadsemaphore.cyuiuiui@yuiuiui-desktop:-$./semaphoreBsendtoA:2AreceivefromB:2AsendtoB:56BreceivefromA:56BsendtoA:37AreceivefromB:37AsendtoB:45BreceivefromA:45BsendtoA:97AreceivefromB:97AsendtoB:145BreceivefromA:145BsendtoA:564AreceivefromB:564AsendtoB:5647BreceivefromA:5647BsendtoA:23123AreceivefromB:23123AsendtoB:asdfBreceivefromA:asdfBsendtoA:rtAreceivefromB:rt【試驗(yàn)成果分析】:四個(gè)線程并發(fā)運(yùn)行,A_Send()和B_Send()發(fā)出信息,同步打印出發(fā)出的信息內(nèi)容;A_Receive()和B_Receive()分別接受B_Send()和A_Send()發(fā)出的信息,并打印出接受的信息內(nèi)容。發(fā)出的內(nèi)容和接受的內(nèi)容同樣,符合時(shí)間狀況。試驗(yàn)三試驗(yàn)匯報(bào)【試驗(yàn)?zāi)康摹浚赫莆沾疟P的工作原理和操作系統(tǒng)進(jìn)行文獻(xiàn)管理的原理【試驗(yàn)原理】:硬盤的MBR:MBR(MainBootRecord),按其字面上的理解即為主引導(dǎo)記錄區(qū),位于整個(gè)硬盤的0磁道0柱面1扇區(qū)。在總共512字節(jié)的主引導(dǎo)扇區(qū)中,MBR只占用了其中的446個(gè)字節(jié)(偏移0000--偏移01BD),此外的64個(gè)字節(jié)(偏移01BE--偏移01FD)交給了DPT(DiskPartitionTable硬盤分區(qū)表),最終兩個(gè)字節(jié)"55,AA"(偏移01FE-偏移01FF)是分區(qū)的結(jié)束標(biāo)志。這個(gè)整體構(gòu)成了硬盤的主引導(dǎo)扇區(qū)。大體的構(gòu)造如圖所示:硬盤根據(jù)分區(qū)表中的信息把硬盤劃分為最多四個(gè)分區(qū)(對(duì)于擴(kuò)展分區(qū),可深入劃分為多種邏輯分區(qū))。U盤采用類似的措施劃分分區(qū)。每個(gè)分區(qū)或軟盤上可建立獨(dú)立的文獻(xiàn)系統(tǒng)。下圖是FAT文獻(xiàn)系統(tǒng)空間分布構(gòu)造。引導(dǎo)扇區(qū)引導(dǎo)扇區(qū)FAT1FAT2根目錄區(qū)文獻(xiàn)數(shù)據(jù)區(qū)【試驗(yàn)內(nèi)容】:在掌握磁盤的工作原理和操作系統(tǒng)進(jìn)行文獻(xiàn)管理原理的基礎(chǔ)上,自行設(shè)計(jì)實(shí)目前磁盤上建立文獻(xiàn)系統(tǒng)的軟件,該軟件應(yīng)當(dāng)具有與Format類似的功能,至少支持一種文獻(xiàn)系統(tǒng)格式,如FAT、NTFS或EXT2,至少可以對(duì)一種媒體進(jìn)行格式化,如軟盤,U盤或硬盤(不得在試驗(yàn)室的機(jī)器上進(jìn)行硬盤格式化的試驗(yàn))等。不能直接調(diào)用操作系統(tǒng)提供的格式化工具或類似SHFormatDrive()的高層系統(tǒng)函數(shù)實(shí)現(xiàn)該軟件。在DOS環(huán)境可使用biosdisk()函數(shù)完畢底層盤操作,在Windows環(huán)境可使用WriteFile()函數(shù)完畢底層盤操作,在Linux環(huán)境上可參照f(shuō)ormat的源代碼。比較自己設(shè)計(jì)實(shí)現(xiàn)的軟件與FORMAT,分析存在什么異同?!驹囼?yàn)規(guī)定】每個(gè)同學(xué)必須獨(dú)立完畢本試驗(yàn)、提交試驗(yàn)匯報(bào)、源程序和可執(zhí)行程序。試驗(yàn)匯報(bào)中必須包括背景知識(shí)簡(jiǎn)介,設(shè)計(jì)方案,估計(jì)的試驗(yàn)成果,關(guān)鍵代碼的分析,調(diào)試記錄,實(shí)際的試驗(yàn)成果,試驗(yàn)成果分析等內(nèi)容。背景知識(shí)簡(jiǎn)介一種分區(qū)或磁盤能作為文獻(xiàn)系統(tǒng)使用前,需要初始化,并將記錄數(shù)據(jù)構(gòu)造寫到磁盤上。這個(gè)過(guò)程就叫建立文獻(xiàn)系統(tǒng)。大部分linux文獻(xiàn)系統(tǒng)種類具有類似的通用構(gòu)造。其中心概念是超級(jí)塊superblock,i節(jié)點(diǎn)inode,數(shù)據(jù)塊datablock,目錄塊directoryblock,和間接塊indirectionblock。超級(jí)塊包括文獻(xiàn)系統(tǒng)的總體信息。i節(jié)點(diǎn)包括除了名字外的一種文獻(xiàn)的所有信息,名字與i節(jié)點(diǎn)數(shù)目一起存在目錄中,目錄條目包括文獻(xiàn)名和文獻(xiàn)的i節(jié)點(diǎn)數(shù)目。i節(jié)點(diǎn)包括幾種數(shù)據(jù)塊的數(shù)目,用于存儲(chǔ)文獻(xiàn)的數(shù)據(jù)。i節(jié)點(diǎn)中只有少許數(shù)據(jù)塊數(shù)的空間,假如需要更多,會(huì)動(dòng)態(tài)分派指向數(shù)據(jù)塊的指針空間。這些動(dòng)態(tài)分派的塊是間接塊;為了找到數(shù)據(jù)塊,這名字指出它必須先找到間接塊的號(hào)碼。Linux文獻(xiàn)系統(tǒng)一般容許在文獻(xiàn)中產(chǎn)生孔(hole),意思是文獻(xiàn)系統(tǒng)假裝文獻(xiàn)中有一種特殊的位置只有0字節(jié),但沒有為這文獻(xiàn)的這個(gè)位置保留實(shí)際的磁盤空間。這對(duì)小的二進(jìn)制文獻(xiàn)常常發(fā)生,Linux共享庫(kù)、某些數(shù)據(jù)庫(kù)和其他某些特殊狀況。設(shè)計(jì)方案1、用一種文獻(xiàn)(3)模擬一種物理硬盤,通過(guò)對(duì)該文獻(xiàn)格式化操作,模擬linux文獻(xiàn)系統(tǒng)中的文獻(xiàn)操作。2、將文獻(xiàn)劃分為四個(gè)分區(qū)估計(jì)的試驗(yàn)成果文獻(xiàn)會(huì)被格式化,原先文獻(xiàn)里的內(nèi)容都會(huì)刪除,創(chuàng)立新的文獻(xiàn)系統(tǒng)。關(guān)鍵代碼的分析1、i節(jié)點(diǎn)構(gòu)造structinode{ structinode*i_forw; structinode*i_back; chari_flag; unsignedinti_ino;//磁盤i節(jié)點(diǎn)標(biāo)號(hào) unsignedinti_count;//引用計(jì)數(shù) unsignedshortdi_number;//關(guān)聯(lián)文獻(xiàn)數(shù) unsignedshortdi_mode;//存取權(quán)限 unsignedshortdi_uid;//磁盤i節(jié)點(diǎn)顧客id unsignedshortdi_gid;//磁盤i節(jié)點(diǎn)住id unsignedintdi_size;//大小 unsignedintdi_addr[NADDR];//物理塊號(hào)};

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論