版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
操作系統(tǒng)實驗報告學(xué)號姓名班級實驗一實驗報告【實驗名稱】:并發(fā)程序設(shè)計(實驗1)【實驗?zāi)康摹浚赫莆赵诔绦蛑袆?chuàng)立新進(jìn)程的辦法,觀察并理解多道程序并發(fā)執(zhí)行的現(xiàn)象?!緦嶒炘怼浚篺ork():建立子進(jìn)程。子進(jìn)程得到父進(jìn)程地址空間的一種復(fù)制。返回值:成功時,該函數(shù)被調(diào)用一次,但返回兩次,fork()對子進(jìn)程返回0,對父進(jìn)程返回子進(jìn)程標(biāo)記符(非0值)。不成功時對父進(jìn)程返回-1,沒有子進(jìn)程?!緦嶒瀮?nèi)容】:首先分析一下程序運(yùn)行時其輸出成果有哪幾個可能性,然后實際調(diào)試該程序觀察其實際輸出狀況,比較兩者的差別,分析其中的因素。voidmain(void){intx=5;if(fork()){x+=30;printf(“%d\n”,x);}elseprintf(“%d\n”,x);printf((“%d\n”,x);}【實驗規(guī)定】:每個同窗必須獨(dú)立完畢本實驗、提交實驗報告、源程序和可執(zhí)行程序。實驗報告中必須包含預(yù)計的實驗成果,核心代碼的分析,調(diào)試統(tǒng)計,實際的實驗成果,實驗成果分析等內(nèi)容?!绢A(yù)計的實驗成果】 35 5 35 5【核心代碼分析】代碼重要由fork()函數(shù)和一種ifelse條件分支語句構(gòu)成。fork()函數(shù),它是Linux的系統(tǒng)調(diào)用。函數(shù)定義:intfork(void);返回值:子進(jìn)程中返回0,父進(jìn)程中返回子進(jìn)程ID,出錯返回-1函數(shù)闡明:一種現(xiàn)有進(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)程持有的是上述存儲空間的“副本”,這意味著父子進(jìn)程間不共享這些存儲空間,它們之間共享的存儲空間只有代碼段。linux將復(fù)制父進(jìn)程的地址空間內(nèi)容給子進(jìn)程,因此,子進(jìn)程有了獨(dú)立的地址空間。父進(jìn)程和子進(jìn)程的代碼段都是上面的全部代碼,由定義可知但是子進(jìn)程的代碼只從創(chuàng)立此子進(jìn)程那里開始執(zhí)行。也就是從if(fork())語句開始,出現(xiàn)了子進(jìn)程,兩個進(jìn)程并發(fā)執(zhí)行。當(dāng)這個程序執(zhí)行if(fork())時,操作系統(tǒng)創(chuàng)立一種新的進(jìn)程(子進(jìn)程),并且在進(jìn)程表中對應(yīng)為它建立一種新的PCB表項。其中子進(jìn)程從父進(jìn)程繼承到了大部分的參數(shù)。也有獨(dú)有的參數(shù),如進(jìn)程號等。但是此后他們是獨(dú)立的兩個進(jìn)程。在子進(jìn)程里創(chuàng)立的東西是子進(jìn)程的,在父進(jìn)程創(chuàng)立的東西是父進(jìn)程的。能夠完全當(dāng)作普通的兩個進(jìn)程。因此在執(zhí)行printf((“%d\n”,x);的時候,父子進(jìn)程固然都會執(zhí)行它,由于他們本身程序段里都有這句代碼?!菊{(diào)試統(tǒng)計】 在紅帽終端里做gdb調(diào)試在第五行加入斷點,執(zhí)行run得到55,這是子進(jìn)程執(zhí)行的成果。再執(zhí)行next得到3535,這是父進(jìn)程的成果。這里能夠看出,由父進(jìn)程創(chuàng)立的子進(jìn)程先執(zhí)行完畢,但是宏觀上是并發(fā)執(zhí)行?!緦嶋H的實驗成果】553535【實驗成果分析】從實際成果來看,子進(jìn)程比父進(jìn)程先執(zhí)行完,但是由fork函數(shù),我們可知,兩者優(yōu)先級應(yīng)當(dāng)是同樣的。至于哪個可能先執(zhí)行,可能和操作系統(tǒng)的具體調(diào)度算法有關(guān)。當(dāng)實驗超出一定次數(shù)時,應(yīng)當(dāng)會出現(xiàn)其它成果。實驗二實驗報告【實驗名稱】:進(jìn)程通信(實驗2)【實驗?zāi)康摹浚赫莆沼绵]箱方式進(jìn)行進(jìn)程通信的辦法,并通過設(shè)計實現(xiàn)簡樸郵箱理解進(jìn)程通信中的同時問題以及解決該問題的辦法?!緦嶒炘怼浚亨]箱機(jī)制類似于日常使用的信箱。對于顧客而言使用起來比較方便,顧客只需使用send()向?qū)Ψ洁]箱發(fā)郵件receive()從自己郵箱取郵件,send()和receive()的內(nèi)部操作顧客無需關(guān)心。由于郵箱在內(nèi)存中實現(xiàn),其空間有大小限制。其實send()和receive()的內(nèi)部實現(xiàn)重要還是要解決生產(chǎn)者與消費(fèi)者問題。進(jìn)程A進(jìn)程A進(jìn)程B信箱A信箱BSend()Send()receive()receive()【實驗內(nèi)容】:進(jìn)程通信的郵箱方式由操作系統(tǒng)提供形如send()和receive()的系統(tǒng)調(diào)用來支持,本實驗規(guī)定學(xué)生首先查找資料理解所選用操作系統(tǒng)平臺上用于進(jìn)程通信的系統(tǒng)調(diào)用品體形式,然后使用該系統(tǒng)調(diào)用編寫程序進(jìn)行進(jìn)程間的通信,規(guī)定程序運(yùn)行成果能夠直觀地體現(xiàn)在界面上。在此基礎(chǔ)上查找所選用操作系統(tǒng)平臺上支持信號量機(jī)制的系統(tǒng)調(diào)用品體形式,運(yùn)用生產(chǎn)者與消費(fèi)者模型設(shè)計實現(xiàn)一種簡樸的信箱,該信箱需要有創(chuàng)立、發(fā)信、收信、撤銷等函數(shù),最少能夠支持兩個進(jìn)程互相交換信息,比較自己實現(xiàn)的信箱與操作系統(tǒng)本身提供的信箱,分析兩者之間存在的異同?!緦嶒炓?guī)定】:每個同窗必須獨(dú)立完畢本實驗、提交實驗報告、源程序和可執(zhí)行程序。實驗報告中必須包含背景知識介紹,設(shè)計方案,預(yù)計的實驗成果,核心代碼的分析,調(diào)試統(tǒng)計,實際的實驗成果,實驗成果分析等內(nèi)容?!颈尘爸R介紹】:1、sembuf數(shù)據(jù)構(gòu)造structsembuf{unsignedshortintsem_num;//semaphorenumbershortintsem_op;//semaphoreoperationshortintsem_flg;//operationflag};sem_num:是相對應(yīng)的信號量集中的某一種資源,因此其值是一種從0到對應(yīng)的信號量集的資源總數(shù)(ipc_perm.sem_nsems)之間的整數(shù)。sem_op:指明所要執(zhí)行的操作。如果其值為正數(shù),該值會加到現(xiàn)有的信號內(nèi)含值中。普通用于釋放所控資源的使用權(quán);如果sem_op的值為負(fù)數(shù),而其絕對值又不不大于信號的現(xiàn)值,操作將會阻塞,直到信號值不不大于或等于sem_op的絕對值。普通用于獲取資源的使用權(quán);如果sem_op的值為0,則操作將臨時阻塞,直到信號的值變?yōu)?。sem_flg:信號操作標(biāo)志,可能的選擇有兩種
IPC_NOWAIT//對信號的操作不能滿足時,semop()不會阻塞,并立刻返回,同時設(shè)定錯誤信息。
IPC_UNDO//程序結(jié)束時(不管正常或不正常),確保信號值會被重設(shè)為semop()調(diào)用前的值。這樣做的目的在于避免程序在異常狀況下結(jié)束時未將鎖定的資源解鎖,造成該資源永遠(yuǎn)鎖定。2、semop函數(shù)函數(shù)原型:intsemop(intsemid,structsembuf*sops,unsignednsops);參數(shù)闡明:semid:信號集的識別碼,可通過semget獲取。sops:指向存儲信號操作構(gòu)造的數(shù)組指針。nsops:信號操作構(gòu)造的數(shù)量,恒不不大于或等于1。返回闡明:成功執(zhí)行時,兩個系統(tǒng)調(diào)用都返回0。失敗返回-1,錯誤信息保存在errno中。3、semget函數(shù)函數(shù)原型:intsemget(key_tkey,intnsems,intsemflg);參數(shù)闡明:key:核心字值普通是由系統(tǒng)調(diào)用ftok()返回的nsems:指出了一種新的信號量集中應(yīng)當(dāng)創(chuàng)立的信號量的個數(shù)semflg:打開和存取操作與參數(shù)semflg中的內(nèi)容有關(guān)。返回闡明:如果成功,則返回信號量集的IPC標(biāo)記符。如果失敗,返回-1,錯誤信息保存在errno中。4、semctl函數(shù)函數(shù)原型:intsemctl(intsemid,intsemnum,intcmd,unionsemunarg);參數(shù)闡明:senid:核心字值semnum:信號量數(shù)目cmd:要操作的具體命令arg:semnu的一種聯(lián)合類型的副本。返回闡明:返回值:如果成功,則為一種正數(shù)。如果失敗,則為-1。錯誤信息保存在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)記符的指針。
attr:用來設(shè)立線程屬性。
第三個參數(shù)是線程運(yùn)行函數(shù)的起始地址。
arg:運(yùn)行函數(shù)的參數(shù)。【設(shè)計方案】:采用兩個程序并行的方式,打開兩個終端,為兩個進(jìn)程都創(chuàng)立一種郵箱。并且,規(guī)定先輸入操作命令,使信箱執(zhí)行哪種操作,以完畢兩個進(jìn)程間的郵件通信。同時,還應(yīng)采用pv操作,使當(dāng)郵箱滿和空的時候,分別不能執(zhí)行發(fā)送和接受的工作。【實驗預(yù)計成果】:A_Receive()和B_Receive()分別接受B_Send()和A_Send()發(fā)出的信息,發(fā)送的信息和接受的信息應(yīng)當(dāng)同樣?!竞诵拇a分析】:PV操作實現(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)試統(tǒng)計】:pthread庫不是Linux系統(tǒng)默認(rèn)的庫,連接時需要使用庫libpthread.a,因此在使用pthread_create創(chuàng)立線程時,在編譯中要加-lpthread參數(shù)gcc-w-lpthreadsemaphore.c【實驗的實際成果】: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【實驗成果分析】:四個線程并發(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)容同樣,符合時間狀況。實驗三實驗報告【實驗?zāi)康摹浚赫莆沾疟P的工作原理和操作系統(tǒng)進(jìn)行文獻(xiàn)管理的原理【實驗原理】:硬盤的MBR:MBR(MainBootRecord),按其字面上的理解即為主引導(dǎo)統(tǒng)計區(qū),位于整個硬盤的0磁道0柱面1扇區(qū)。在總共512字節(jié)的主引導(dǎo)扇區(qū)中,MBR只占用了其中的446個字節(jié)(偏移0000--偏移01BD),另外的64個字節(jié)(偏移01BE--偏移01FD)交給了DPT(DiskPartitionTable硬盤分區(qū)表),最后兩個字節(jié)"55,AA"(偏移01FE-偏移01FF)是分區(qū)的結(jié)束標(biāo)志。這個整體構(gòu)成了硬盤的主引導(dǎo)扇區(qū)。大致的構(gòu)造如圖所示:硬盤根據(jù)分區(qū)表中的信息把硬盤劃分為最多四個分區(qū)(對于擴(kuò)展分區(qū),可進(jìn)一步劃分為多個邏輯分區(qū))。U盤采用類似的辦法劃分分區(qū)。每個分區(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ū)【實驗內(nèi)容】:在掌握磁盤的工作原理和操作系統(tǒng)進(jìn)行文獻(xiàn)管理原理的基礎(chǔ)上,自行設(shè)計實現(xiàn)在磁盤上建立文獻(xiàn)系統(tǒng)的軟件,該軟件應(yīng)當(dāng)含有與Format類似的功效,最少支持一種文獻(xiàn)系統(tǒng)格式,如FAT、NTFS或EXT2,最少能夠?qū)σ环N媒體進(jìn)行格式化,如軟盤,U盤或硬盤(不得在實驗室的機(jī)器上進(jìn)行硬盤格式化的實驗)等。不能直接調(diào)用操作系統(tǒng)提供的格式化工具或類似SHFormatDrive()的高層系統(tǒng)函數(shù)實現(xiàn)該軟件。在DOS環(huán)境可使用biosdisk()函數(shù)完畢底層盤操作,在Windows環(huán)境可使用WriteFile()函數(shù)完畢底層盤操作,在Linux環(huán)境上可參考format的源代碼。比較自己設(shè)計實現(xiàn)的軟件與FORMAT,分析存在什么異同?!緦嶒炓?guī)定】每個同窗必須獨(dú)立完畢本實驗、提交實驗報告、源程序和可執(zhí)行程序。實驗報告中必須包含背景知識介紹,設(shè)計方案,預(yù)計的實驗成果,核心代碼的分析,調(diào)試統(tǒng)計,實際的實驗成果,實驗成果分析等內(nèi)容。背景知識介紹一種分區(qū)或磁盤能作為文獻(xiàn)系統(tǒng)使用前,需要初始化,并將統(tǒng)計數(shù)據(jù)構(gòu)造寫到磁盤上。這個過程就叫建立文獻(xiàn)系統(tǒng)。大部分linux文獻(xiàn)系統(tǒng)種類含有類似的通用構(gòu)造。其中心概念是超級塊superblock,i節(jié)點inode,數(shù)據(jù)塊datablock,目錄塊directoryblock,和間接塊indirectionblock。超級塊涉及文獻(xiàn)系統(tǒng)的總體信息。i節(jié)點涉及除了名字外的一種文獻(xiàn)的全部信息,名字與i節(jié)點數(shù)目一起存在目錄中,目錄條目涉及文獻(xiàn)名和文獻(xiàn)的i節(jié)點數(shù)目。i節(jié)點涉及幾個數(shù)據(jù)塊的數(shù)目,用于存儲文獻(xiàn)的數(shù)據(jù)。i節(jié)點中只有少量數(shù)據(jù)塊數(shù)的空間,如果需要更多,會動態(tài)分派指向數(shù)據(jù)塊的指針空間。這些動態(tài)分派的塊是間接塊;為了找到數(shù)據(jù)塊,這名字指出它必須先找到間接塊的號碼。Linux文獻(xiàn)系統(tǒng)普通允許在文獻(xiàn)中產(chǎn)生孔(hole),意思是文獻(xiàn)系統(tǒng)假裝文獻(xiàn)中有一種特殊的位置只有0字節(jié),但沒有為這文獻(xiàn)的這個位置保存實際的磁盤空間。這對小的二進(jìn)制文獻(xiàn)經(jīng)常發(fā)生,Linux共享庫、某些數(shù)據(jù)庫和其它某些特殊狀況。設(shè)計方案1、用一種文獻(xiàn)(3)模擬一種物理硬盤,通過對該文獻(xiàn)格式化操作,模擬linux文獻(xiàn)系統(tǒng)中的文獻(xiàn)操作。2、將文獻(xiàn)劃分為四個分區(qū)預(yù)計的實驗成果文獻(xiàn)會被格式化,原先文獻(xiàn)里的內(nèi)容都會刪除,創(chuàng)立新的文獻(xiàn)系統(tǒng)。核心代碼的分析1、i節(jié)點構(gòu)造structinode{ structinode*i_forw; structinode*i_back; chari_flag; unsignedinti_ino;//磁盤i節(jié)點標(biāo)號 unsignedinti_count;//引用計數(shù) unsignedshortdi_number;//關(guān)聯(lián)文獻(xiàn)數(shù) unsignedshortdi_mode;//存取權(quán)限 unsignedshortdi_uid;//磁盤i節(jié)點顧客id unsignedshortdi_gid;//磁盤i節(jié)點住id unsignedintdi_size;//大小 unsignedintdi_addr[NADDR];//物理塊號};
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 燈用化學(xué)配料工崗后測試考核試卷含答案
- 創(chuàng)業(yè)指導(dǎo)師崗前品質(zhì)考核試卷含答案
- 重冶萃取工安全實操水平考核試卷含答案
- 鋼筋骨架工崗前理論知識考核試卷含答案
- 熱工試驗工安全實操評優(yōu)考核試卷含答案
- 2024年溫州商學(xué)院馬克思主義基本原理概論期末考試題附答案
- 2024年湖北三峽職業(yè)技術(shù)學(xué)院馬克思主義基本原理概論期末考試題附答案
- 2024年湖北師范大學(xué)輔導(dǎo)員招聘備考題庫附答案
- 2025年企業(yè)品牌管理與市場定位手冊
- 2024年荔浦縣輔警招聘考試備考題庫附答案
- 2026新疆阿合奇縣公益性崗位(鄉(xiāng)村振興專干)招聘44人筆試備考試題及答案解析
- 2025-2026學(xué)年遼寧省葫蘆島市連山區(qū)八年級(上)期末數(shù)學(xué)試卷(含答案)
- 上海市松江區(qū)2026屆初三一模物理試題(含答案)
- 小學(xué)六年級英語2026年上學(xué)期語法改錯綜合真題
- 2026長治日報社工作人員招聘勞務(wù)派遣人員5人備考題庫完美版
- 護(hù)理核心制度內(nèi)容精要
- 湖南省婁底市期末真題重組卷-2025-2026學(xué)年四年級語文上冊(統(tǒng)編版)
- 光伏板清洗施工方案
- 閱讀理解體裁與命題方向(復(fù)習(xí)講義)-2026年春季高考英語(上海高考專用)
- 指南抗菌藥物臨床應(yīng)用指導(dǎo)原則(2025版)
- 2025年華僑生聯(lián)考試題試卷及答案
評論
0/150
提交評論