操作系統(tǒng)實驗報告_第1頁
操作系統(tǒng)實驗報告_第2頁
操作系統(tǒng)實驗報告_第3頁
操作系統(tǒng)實驗報告_第4頁
操作系統(tǒng)實驗報告_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

操作系統(tǒng)實驗報告學(xué)號姓名班級實驗一實驗報告【實驗名稱】:并發(fā)程序設(shè)計(實驗1)【實驗?zāi)康摹浚赫莆赵诔绦蛑袆?chuàng)立新進程的辦法,觀察并理解多道程序并發(fā)執(zhí)行的現(xiàn)象?!緦嶒炘怼浚篺ork():建立子進程。子進程得到父進程地址空間的一種復(fù)制。返回值:成功時,該函數(shù)被調(diào)用一次,但返回兩次,fork()對子進程返回0,對父進程返回子進程標記符(非0值)。不成功時對父進程返回-1,沒有子進程?!緦嶒瀮?nèi)容】:首先分析一下程序運行時其輸出成果有哪幾個可能性,然后實際調(diào)試該程序觀察其實際輸出狀況,比較兩者的差別,分析其中的因素。voidmain(void){intx=5;if(fork()){x+=30;printf(“%d\n”,x);}elseprintf(“%d\n”,x);printf((“%d\n”,x);}【實驗規(guī)定】:每個同窗必須獨立完畢本實驗、提交實驗報告、源程序和可執(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);返回值:子進程中返回0,父進程中返回子進程ID,出錯返回-1函數(shù)闡明:一種現(xiàn)有進程能夠調(diào)用fork函數(shù)創(chuàng)立一種新進程。由fork創(chuàng)立的新進程被稱為子進程(childprocess)。fork函數(shù)被調(diào)用一次但返回兩次。兩次返回的唯一區(qū)別是子進程中返回0值而父進程中返回子進程ID。子進程是父進程的副本,它將獲得父進程數(shù)據(jù)空間、堆、棧等資源的副本。注意,子進程持有的是上述存儲空間的“副本”,這意味著父子進程間不共享這些存儲空間,它們之間共享的存儲空間只有代碼段。linux將復(fù)制父進程的地址空間內(nèi)容給子進程,因此,子進程有了獨立的地址空間。父進程和子進程的代碼段都是上面的全部代碼,由定義可知但是子進程的代碼只從創(chuàng)立此子進程那里開始執(zhí)行。也就是從if(fork())語句開始,出現(xiàn)了子進程,兩個進程并發(fā)執(zhí)行。當這個程序執(zhí)行if(fork())時,操作系統(tǒng)創(chuàng)立一種新的進程(子進程),并且在進程表中對應(yīng)為它建立一種新的PCB表項。其中子進程從父進程繼承到了大部分的參數(shù)。也有獨有的參數(shù),如進程號等。但是此后他們是獨立的兩個進程。在子進程里創(chuàng)立的東西是子進程的,在父進程創(chuàng)立的東西是父進程的。能夠完全當作普通的兩個進程。因此在執(zhí)行printf((“%d\n”,x);的時候,父子進程固然都會執(zhí)行它,由于他們本身程序段里都有這句代碼?!菊{(diào)試統(tǒng)計】 在紅帽終端里做gdb調(diào)試在第五行加入斷點,執(zhí)行run得到55,這是子進程執(zhí)行的成果。再執(zhí)行next得到3535,這是父進程的成果。這里能夠看出,由父進程創(chuàng)立的子進程先執(zhí)行完畢,但是宏觀上是并發(fā)執(zhí)行?!緦嶋H的實驗成果】553535【實驗成果分析】從實際成果來看,子進程比父進程先執(zhí)行完,但是由fork函數(shù),我們可知,兩者優(yōu)先級應(yīng)當是同樣的。至于哪個可能先執(zhí)行,可能和操作系統(tǒng)的具體調(diào)度算法有關(guān)。當實驗超出一定次數(shù)時,應(yīng)當會出現(xiàn)其它成果。實驗二實驗報告【實驗名稱】:進程通信(實驗2)【實驗?zāi)康摹浚赫莆沼绵]箱方式進行進程通信的辦法,并通過設(shè)計實現(xiàn)簡樸郵箱理解進程通信中的同時問題以及解決該問題的辦法。【實驗原理】:郵箱機制類似于日常使用的信箱。對于顧客而言使用起來比較方便,顧客只需使用send()向?qū)Ψ洁]箱發(fā)郵件receive()從自己郵箱取郵件,send()和receive()的內(nèi)部操作顧客無需關(guān)心。由于郵箱在內(nèi)存中實現(xiàn),其空間有大小限制。其實send()和receive()的內(nèi)部實現(xiàn)重要還是要解決生產(chǎn)者與消費者問題。進程A進程A進程B信箱A信箱BSend()Send()receive()receive()【實驗內(nèi)容】:進程通信的郵箱方式由操作系統(tǒng)提供形如send()和receive()的系統(tǒng)調(diào)用來支持,本實驗規(guī)定學(xué)生首先查找資料理解所選用操作系統(tǒng)平臺上用于進程通信的系統(tǒng)調(diào)用品體形式,然后使用該系統(tǒng)調(diào)用編寫程序進行進程間的通信,規(guī)定程序運行成果能夠直觀地體現(xiàn)在界面上。在此基礎(chǔ)上查找所選用操作系統(tǒng)平臺上支持信號量機制的系統(tǒng)調(diào)用品體形式,運用生產(chǎn)者與消費者模型設(shè)計實現(xiàn)一種簡樸的信箱,該信箱需要有創(chuàng)立、發(fā)信、收信、撤銷等函數(shù),最少能夠支持兩個進程互相交換信息,比較自己實現(xiàn)的信箱與操作系統(tǒng)本身提供的信箱,分析兩者之間存在的異同。【實驗規(guī)定】:每個同窗必須獨立完畢本實驗、提交實驗報告、源程序和可執(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的值為負數(shù),而其絕對值又不不大于信號的現(xiàn)值,操作將會阻塞,直到信號值不不大于或等于sem_op的絕對值。普通用于獲取資源的使用權(quán);如果sem_op的值為0,則操作將臨時阻塞,直到信號的值變?yōu)?。sem_flg:信號操作標志,可能的選擇有兩種

IPC_NOWAIT//對信號的操作不能滿足時,semop()不會阻塞,并立刻返回,同時設(shè)定錯誤信息。

IPC_UNDO//程序結(jié)束時(不管正?;虿徽?,確保信號值會被重設(shè)為semop()調(diào)用前的值。這樣做的目的在于避免程序在異常狀況下結(jié)束時未將鎖定的資源解鎖,造成該資源永遠鎖定。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)當創(chuàng)立的信號量的個數(shù)semflg:打開和存取操作與參數(shù)semflg中的內(nèi)容有關(guān)。返回闡明:如果成功,則返回信號量集的IPC標記符。如果失敗,返回-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:指向線程標記符的指針。

attr:用來設(shè)立線程屬性。

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

arg:運行函數(shù)的參數(shù)。【設(shè)計方案】:采用兩個程序并行的方式,打開兩個終端,為兩個進程都創(chuàng)立一種郵箱。并且,規(guī)定先輸入操作命令,使信箱執(zhí)行哪種操作,以完畢兩個進程間的郵件通信。同時,還應(yīng)采用pv操作,使當郵箱滿和空的時候,分別不能執(zhí)行發(fā)送和接受的工作?!緦嶒烆A(yù)計成果】:A_Receive()和B_Receive()分別接受B_Send()和A_Send()發(fā)出的信息,發(fā)送的信息和接受的信息應(yī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(); //隨機數(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)默認的庫,連接時需要使用庫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ā)運行,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)進行文獻管理的原理【實驗原理】:硬盤的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é)束標志。這個整體構(gòu)成了硬盤的主引導(dǎo)扇區(qū)。大致的構(gòu)造如圖所示:硬盤根據(jù)分區(qū)表中的信息把硬盤劃分為最多四個分區(qū)(對于擴展分區(qū),可進一步劃分為多個邏輯分區(qū))。U盤采用類似的辦法劃分分區(qū)。每個分區(qū)或軟盤上可建立獨立的文獻系統(tǒng)。下圖是FAT文獻系統(tǒng)空間分布構(gòu)造。引導(dǎo)扇區(qū)引導(dǎo)扇區(qū)FAT1FAT2根目錄區(qū)文獻數(shù)據(jù)區(qū)【實驗內(nèi)容】:在掌握磁盤的工作原理和操作系統(tǒng)進行文獻管理原理的基礎(chǔ)上,自行設(shè)計實現(xiàn)在磁盤上建立文獻系統(tǒng)的軟件,該軟件應(yīng)當含有與Format類似的功效,最少支持一種文獻系統(tǒng)格式,如FAT、NTFS或EXT2,最少能夠?qū)σ环N媒體進行格式化,如軟盤,U盤或硬盤(不得在實驗室的機器上進行硬盤格式化的實驗)等。不能直接調(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ī)定】每個同窗必須獨立完畢本實驗、提交實驗報告、源程序和可執(zhí)行程序。實驗報告中必須包含背景知識介紹,設(shè)計方案,預(yù)計的實驗成果,核心代碼的分析,調(diào)試統(tǒng)計,實際的實驗成果,實驗成果分析等內(nèi)容。背景知識介紹一種分區(qū)或磁盤能作為文獻系統(tǒng)使用前,需要初始化,并將統(tǒng)計數(shù)據(jù)構(gòu)造寫到磁盤上。這個過程就叫建立文獻系統(tǒng)。大部分linux文獻系統(tǒng)種類含有類似的通用構(gòu)造。其中心概念是超級塊superblock,i節(jié)點inode,數(shù)據(jù)塊datablock,目錄塊directoryblock,和間接塊indirectionblock。超級塊涉及文獻系統(tǒng)的總體信息。i節(jié)點涉及除了名字外的一種文獻的全部信息,名字與i節(jié)點數(shù)目一起存在目錄中,目錄條目涉及文獻名和文獻的i節(jié)點數(shù)目。i節(jié)點涉及幾個數(shù)據(jù)塊的數(shù)目,用于存儲文獻的數(shù)據(jù)。i節(jié)點中只有少量數(shù)據(jù)塊數(shù)的空間,如果需要更多,會動態(tài)分派指向數(shù)據(jù)塊的指針空間。這些動態(tài)分派的塊是間接塊;為了找到數(shù)據(jù)塊,這名字指出它必須先找到間接塊的號碼。Linux文獻系統(tǒng)普通允許在文獻中產(chǎn)生孔(hole),意思是文獻系統(tǒng)假裝文獻中有一種特殊的位置只有0字節(jié),但沒有為這文獻的這個位置保存實際的磁盤空間。這對小的二進制文獻經(jīng)常發(fā)生,Linux共享庫、某些數(shù)據(jù)庫和其它某些特殊狀況。設(shè)計方案1、用一種文獻(3)模擬一種物理硬盤,通過對該文獻格式化操作,模擬linux文獻系統(tǒng)中的文獻操作。2、將文獻劃分為四個分區(qū)預(yù)計的實驗成果文獻會被格式化,原先文獻里的內(nèi)容都會刪除,創(chuàng)立新的文獻系統(tǒng)。核心代碼的分析1、i節(jié)點構(gòu)造structinode{ structinode*i_forw; structinode*i_back; chari_flag; unsignedinti_ino;//磁盤i節(jié)點標號 unsignedinti_count;//引用計數(shù) unsignedshortdi_number;//關(guān)聯(liá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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論