東北大學秦皇島分校操作系統(tǒng)實驗4110314董家華-代碼原創(chuàng)_第1頁
東北大學秦皇島分校操作系統(tǒng)實驗4110314董家華-代碼原創(chuàng)_第2頁
東北大學秦皇島分校操作系統(tǒng)實驗4110314董家華-代碼原創(chuàng)_第3頁
東北大學秦皇島分校操作系統(tǒng)實驗4110314董家華-代碼原創(chuàng)_第4頁
東北大學秦皇島分校操作系統(tǒng)實驗4110314董家華-代碼原創(chuàng)_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計算機操作系統(tǒng)實驗報告學寫4110314姓名:董家華提交日期:2013. 11.28成績:東北大學秦皇島分校°計算機操作系統(tǒng)實驗報告實驗一熟悉l i nux/unix操作系統(tǒng)實驗?zāi)康?1. 熟悉linux/unix操作系統(tǒng)的基本操作。2. 掌握常用基本命令和系統(tǒng)調(diào)用。實驗內(nèi)容:1. 學會開機、登錄、退出與關(guān)機(1)開機很多時候,一臺機器上會安裝多個操作系統(tǒng)(operating system,簡稱os),因此,在開機時 會讓用戶選擇進入哪個os。例如,顯示“l(fā)inux lilo: ”,或在windows2000平臺下的菜單選擇 oso選擇進入linux后,linux初始化過程中會顯示大

2、量初始化信息,要求學習者逐漸讀懂這些初 始化信息,以從這個角度來理解linux的工作原理。(2)登錄與修改口令在打開終端或在neterm之炎的程序上進行遠程連接后,linux/unix在相應(yīng)初始化完成后, 會在屏幕上顯示“l(fā)ogin: ”。此時輸入用戶名(帳號)并鍵如回車,則系統(tǒng)顯示“password: ”,然 后輸入保密字(口令)并鍵入冋車。此吋,系統(tǒng)驗證所鍵入的用戶名和保密字,若正確則成功進 入系統(tǒng),顯示命令提示符#,若不正確則顯示“l(fā)ogin mcorrect”,并重新顯示“l(fā)ogin: ”,讓用戶重 新輸入正確的用戶名和保密字。有時用戶可能想修改保密字,則可以在成功進入系統(tǒng)后,在命令提

3、示符后輸入“password” 并鍵入回車,則系統(tǒng)再顯示“ncw password: ”。當用戶鍵入新保密字并鍵入回車后,系統(tǒng)再顯示 “retype new password: ”,此時需再次重復鍵入剛才輸入的新保密字并鍵入冋午,則系統(tǒng)接收并 記住i的保密字。如果用戶在登錄時忘了保密字,則只能找系統(tǒng)管理員解決問題?;蛘?,如果用戶想修改自己 的用戶名,也只能找系統(tǒng)管理員解決。(3)退出、注銷當用戶不再使用linux/unix時,在離開前,通常應(yīng)鍵入logout命令或ctrk+d開退出帳號。 若是在pc上安裝linux/unix _,則此步驟可以省略而鍵入halt或reboot命令。若是在多用戶機

4、 器上(終端/網(wǎng)絡(luò)登錄),則此步驟最好不要略過,否則會導致計帳或安全上的問題。(4)關(guān)機或重啟在limix/unix下,涉及到關(guān)機或重啟的命令有:a)鍵入halt命令。這是最常用的關(guān)機方式。b)如果用戶只是想退出linux操作系統(tǒng),并不想關(guān)機,還想再進入其他os (例如windows), 則鍵入reboot命令(重啟)。c)在多用戶機器上,系統(tǒng)管理員在關(guān)機(鍵入halt命令)前,通常要鍵入shutdown命令。 這是一條廣播性質(zhì)的命令,通知各用戶即將關(guān)機,以便給各用戶留下一定的時間作保存、 退出等工作。d)在窗口工作方式不,可以通過與windows類似的開始菜單來關(guān)機或重啟:“開始” 一“關(guān)閉

5、系統(tǒng)” 一 “關(guān)機或重/s” 一。2. 窗口工作方式與中斷工作方式早期的unix版本都是傳統(tǒng)的終端工作方式,這種工作方式在系統(tǒng)啟動后就顯示命令提 示符,沒有多個窗門。隨著macintosh和windows這樣的窗門界面的出現(xiàn)和普及,unix和實驗報告計算機操作系統(tǒng)linux開始引入窗門工作方式。unix和linux卜*的窗口平臺都基于x-windows,有kde 窗口平臺,gnome窗口平臺、sun openwindows窗口平臺等。用戶登錄后就進入終端工作方式,用戶可以在終端工作方式下鍵入“sum”命令進入窗 口工作方式。進入窗口工作方式后,可以按ctrl+alt+f2進入終端工作方式,之后

6、可按 ctrl+alt+f7再從終端工作方式冋到窗u工作方式。窗口工作方式與在windows卜*的工作方式類似,可以在桌面上開多個窗口。linux/unix 窗口工作方式下,一個窗口可以對應(yīng)一個進程,也可以對應(yīng)多個進程,例如一個shell窗口(類 似與windows下的dos窗口)。3. 常用命令/系統(tǒng)調(diào)節(jié)列表表1.1給出了 linux/unix各章實驗開始前必須掌握的最基本的常用命令。表1.2給出丫 linux八jnix下各章實驗開始前必須掌握的最基本和常用的系統(tǒng)調(diào)用。表1.1 linux/unix各章實驗開始前必須掌握的基木常用命令命令名功能rs顯示進程狀態(tài)kill給進程發(fā)信號,殺死進程r

7、m刪除文件或目錄(remove files or directories )cp復制文件和目錄(copy files and directories )cat將指定文件(或標準輸入)內(nèi)容輸出至標準輸出(通常的用途是顯 示文件內(nèi)容),當輸入文件為多個時則為合并輸出(concatenate files and print on standard output)more文件分頁顯不的交互式 具(files perusal filter for ert viewing)ls顯示文件屬性和目錄內(nèi)容chmod改變文件訪問權(quán)限(change file access permissions)mkdir建立 0

8、 錄(make directories )pwd品75當前 a 衆(zhòng)名 / 工作 a 榮名(print name of current/working directory )echo顯不一丁 (display a line of text)chear清屏(clear the terminal screen )表1.2 linux/unix各章實驗幵始前必須掌握的基本常用系統(tǒng)調(diào)用名稱功能open,creat打幵和/或建立一個文件或設(shè)備 (open and possibly create a file or device)close關(guān)閉一個文件描述字(close a file descriptor)

9、readfe文件(read from a file descriptor)。別于個已打開的文件,通過 它的文件描述字,讀該文件的內(nèi)容write寫文件(write to a file descriptor)。對丁一個己打開的文件,通過它 的文件描述字,寫該文件的內(nèi)容i.seek改變文件內(nèi)當前讀寫指針位置(reposition read/write file offset)4. 外存目錄樹結(jié)構(gòu)計算機操作系統(tǒng)實驗報告 以linux 2.2版為例,外存目錄樹結(jié)構(gòu)如圖1.1所不。圖中,linux命令實用程序放在/bin和/usr/bin下,源碼放在/usr/src下,內(nèi)核程序文件vmlinux放在/bo

10、ot下,設(shè)備特別文件放在/dev 卜,幫助文件放在/usr/man下,用戶主目錄通常放在/home卜*圖1.1 linux外存目錄樹結(jié)構(gòu)5. 程序開發(fā)工具:編輯、編譯、連接、調(diào)試i. 編輯程序linux/unix的編輯程序有emacs、vi、ed等。筆者建議使用emacs.ii. 編譯程序編譯、調(diào)試c程序時,可以在emacs中編譯,也可以在命令行下編譯:# cc f.c上述命令行編譯c源程序f.c,輸出的可執(zhí)行0標程序為a.om。# cc f.c -of上述命令行編譯c源程序f.c,輸出的可執(zhí)行目標程序為f。# cc -c f.c上述命令行編譯c源程序f.c ,但只輸出目標模塊f.o。iii.

11、 調(diào)試程序linux卜的常用調(diào)試程序是gdb。此外,ptrace系統(tǒng)調(diào)用(跟蹤進程執(zhí)行)、strace命令 (跟蹤系統(tǒng)調(diào)用與信號)、ltrace命令(跟蹤庫函數(shù)調(diào)用,a library call tracer)等,也可以用來輔助調(diào)試。iv. make 程序如果所編制的程序由幾十個模塊組成,修改其中任一模塊吋都要將這幾十個模塊重新連 接,貝u此時make可以大大提高工作效率,減少很多重復性勞動。6. shelllinux/unix的命令解釋器俗稱shell,其有以下兩個功能:(1) 顯示命令提示符,接收、解釋、啟動執(zhí)行命令行。(2) 解釋執(zhí)行批處理文件(shell script),提供很多內(nèi)部命

12、令和大量命令組合功能。linux八jnix下的shell有很多種,有csh、bsh、ksh等。7. 如何獲得幫助信息和技術(shù)資料(1)聯(lián)機幫助命令man、info和一help選項例如,要查詢cat命令的功能和用法,鍵入以下3個命令行中的任意一個即可。# man cat 林 info cat# cat helpman命令提供的聯(lián)機幫助信息有8節(jié),分別對應(yīng)以下內(nèi)容:計算機操作系統(tǒng)實驗報告 man 1命令 man 2系統(tǒng)調(diào)用 man 3庫函數(shù)man 4設(shè)備驅(qū)動程序和設(shè)備特別文件 man 5系統(tǒng)文件 man 6游戲man 7宏程序包和語言約定 man 8系統(tǒng)管理和維護工具 (2)其他幫助這包括廠家提供的

13、手冊、市場上銷售的各種參考書,各種網(wǎng)上資源等。此外,有些窗口平臺帶有 聯(lián)機幫助菜單項。實驗二進程的創(chuàng)建和控制一,實驗?zāi)康模杭由顚M程概念的理解,明確進程和程序的區(qū)別。(2) 進一步認識并發(fā)執(zhí)行的實質(zhì)。0)加深對進程管理概念的理解。(4)分析進程的創(chuàng)建過程。二,實驗內(nèi)容:(1) 閱讀linux的fork, c源碼文件。(2) a. linux/unix的進程和cpu管理類命令:(8個)命令名功能ps顯示進程狀態(tài)pstree顯不進程樹(display a tree of processes )kill給進程發(fā)信號killhau按名給進程發(fā)信號(kill processes by name)skil

14、l,snice報告進程狀態(tài)(report process status)top品不進程狀態(tài)(display top cpu processes )procinfo顯示從/pmc搜集的系統(tǒng)狀態(tài)信息idle使進程()進入idle狀態(tài)(make process 0 idle)b. linux/unix進程和cpu管理類系統(tǒng)調(diào)用:類別個數(shù)列舉腿趣埔細s13fork( ),clone( ),vfork( ),execve( ),exit( ),nanosleep(), pause( ),wait( ),waitpid( ),wait4( ),wait3( ),kill( ),killpg()進程11ge

15、tpriority,setpriority,nice, sched get priority max,度先管$調(diào)優(yōu)級t5 f e -uldtechtseudechsr,ldleeu t.n,edd_nihecrrc hltscbe ssis-al,rioedpt-pschlntee, i-gmetd_2 4earhtrr二ed_ched-smraa中sed-echs進程號(組)的設(shè)置與查看7id si et stpge9.tgpsegidtpgedtpesdp1中g(shù)ed 1tpeg髓觸顧柵飯価肖2sem曇,ccatrpt難城程/cp魏臟臟蹦用6ido6(8rnve11d pcapr68rnvt

16、rr巧el11an0rs(erlinux八jnix進程和cpu管理類系統(tǒng)調(diào)用(1): 與進程建撤和狀態(tài)有關(guān)的系統(tǒng)調(diào)用(13個)名/格式/參數(shù)功能參數(shù)/返冋 值的解釋其他說明fork(), vfork ()建立一個子進 程(create a child process)對父進程:返回子進 程號。對子進程: 返冋0 不成功:返 回-1linux2.2 下,vfork 只是 fork的一個別名而已,兩者完全相同。而在 unix下兩者則冇所區(qū) 別。viint clone(int(*fn) (void*arg), void*childstack, int flags, void * arg)建立一個子進

17、 程(creat a child process)僅在linux卜有。int execve (const char*filename,執(zhí)行程序 (execute功能:用指 定程序覆在.庫函數(shù)級對應(yīng)cxcclc, execlp, execl,execv,char*const argv ,char*const envp);program )蓋當前程 序代碼 返冋:成功 與否exeevp五個函數(shù)。參見 man3一exitterminate thecurrentprocess終止當前 進程nanoslccppauseexecution for a specified time暫停執(zhí)行 指定的一 段時間

18、'vait,waitpidwait for process termination等待進程 終止wait3,wait4wait for process termination, bsd tylebsd風格 的等待進 程終止killsend signal to a process向一個進 程發(fā)信號killpgsend signal to a process group向一個進 程組發(fā)信 號pausewait for signal等待信號d. linux/unix進程和cpu管理類系統(tǒng)調(diào)用(2)與進程號/組有關(guān)的系統(tǒng)調(diào)用(7個)名/格式功能getpid,getppid獲得進程號(get p

19、rocess identification)setpgid,getpgid,setpgrp,getpgrp設(shè)置/查詢進程組(set/get process group )setsid建立一個會話并設(shè)置進程組號 (creates a session and sets the process group id)e. linux/unix進程和cpu管理類系統(tǒng)調(diào)用(3):與進程調(diào)度有關(guān)的系統(tǒng)調(diào)用(11個)名/格式功能getpriority,setpriority設(shè)置/查看程序調(diào)度優(yōu)先級 (get/set program scheduling priority)nice改變進程優(yōu)先級(change p

20、rocess priority)sched_get一priority一max, schcd gct priority min設(shè)置靜態(tài)優(yōu)先級范圍(get static priority range)sched_setparam,sched_getparam設(shè)置/查看調(diào)度參數(shù) (set and get scheduling parameters)schcd_sctschcdulcr>schcd_gctschcdulcr設(shè)置/查看調(diào)度算法和參數(shù) (set and get scheduling algorithm/ parameters)sched_rr_get_interval查看指定進程的s

21、ched.rr值(get the sci ied rr interval for the namedprocess)°計算機操作系統(tǒng)實驗報告f. unux/unix進程管理類系統(tǒng)調(diào)用:與進程跟蹤/進程運行時間有關(guān)的系統(tǒng)調(diào)用(2個)名/格式功能p trace進系呈足艮蹤(process trace)times得到進程時間(get process times)g. linux/unix進程和cpu管理類系統(tǒng)調(diào)用(5):其他與進程和cpu管理有關(guān)的系統(tǒng)調(diào)用(6個)名/格式功能pred進程控制(operations on a process)personality設(shè)置進程執(zhí)行域(set th

22、e process execution domain)acct開/關(guān)進程記中長(switch process accounting on or off)idle使進程 0 進入 idle 狀態(tài)(make process 0 idle)vm86old,vm86進入虛擬 8068 方式(enter virtual 8068 mode)h. linux線程庫常用函數(shù)函數(shù)名功能pthrcad crcatc建立一個新線程pthrcad_canccl,pthrcad_sctcancclstatc, pthread setcanceltype,pthread testcancel線程撤消(thread ca

23、ncellation)pthread一join等待另一線程終止pthread exit退出當前線程pthread sigmask,pthread k 川,sigwait線程屮的信號處理三,實驗步驟:(1)進程的創(chuàng)建編寫一段程序,使用系統(tǒng)調(diào)用fork 創(chuàng)建兩個子進程。當此程序運行時,在系統(tǒng)中有一個父 進程和兩個子進程活動。讓每一個進程在屏幕上顯示一個字符:父進程顯示字符“a”;子進程分 別顯示字符“b”和字符“c”。試觀察記錄屏幕上的顯示結(jié)果,并分析原因。<程序1# include<stdio.h> main ()intpl, p2;while (pi = fork () =

24、= -l);/* 創(chuàng)建子進程 pi */if(pl = =0)/*子進程創(chuàng)建成功*/putchar (b);elsewhile (p2 = fork () = = -1); if(p2 = = 0) putchar (c); else putchar(a);/*創(chuàng)建另一個子進程* /*子進程創(chuàng)建成功*/*父進程執(zhí)行*/分析:從進程并發(fā)執(zhí)行來沿,輸出bac,acb等情況都有可能。原因:forko創(chuàng)建進程所需的時間要多于輸出一個字符的時間,因此在主進程創(chuàng)建進程2的同 吋,進程1就輸出了 “b”,而進程2和主程序的輸出次序是有隨機性的,所以會出現(xiàn)上述結(jié)果。(2)進程的控制修改已編寫的程序,將每個進程

25、輸出一個字符改為每個進程輸出一句話,在觀察程序執(zhí)行時 屏幕上出現(xiàn)的現(xiàn)象,并分析原因。如果在程序中使用系統(tǒng)調(diào)用bckf()來給每一個進程加鎖,可以實現(xiàn)進程之間的互斥,觀察并 分析出現(xiàn)的現(xiàn)象。<程序2# include<stdio. h> main ()intpl,p2,i;while (pi = fork() = = -1); if (pi = =0)for(i = 0; i<500; i+) printf ("child %dn”,i);elsewhile (p2 二 fork () ) = = -1); if(p2 =()for(i = 0;i<500

26、;i+) printf (“son%dn”,i)elsefor(i=0, i<500; i+)printf (daughter % dn”,i);分析:由于函數(shù)primfg輸出的字符串之間不會被中斷,因此,字符串內(nèi)部的字符順序輸出時 不變。但是,由于進程并發(fā)執(zhí)行時的調(diào)度順序和父子進程的搶占處理機問題,輸出字符串的順序 和先后隨著執(zhí)行的不同而發(fā)生變化。這與打印單字符的結(jié)果相同。<程序3# includc<stdio. h> main()intpl,p2,i;while (pi = fork () = = -1);if (pi = = 0)lockf(l,1,0),for(

27、i = 0 ; i<500 ; i+) printf (“child %d/n”,i); lockf(l, 0, 0);elsewhile (p2 =fork() = = -l); if (p2 = =0)lockf(l, 1, 0);for(i = 0; i<500; i+) printffson %dn”,i); lockf(l,0,0);elselockf(l,1,0);for(i = 0;i<500;i+) printf(“daughter %dn”,i);lockf(l, 0, 0);大致與未上鎖的輸出結(jié)果相同,也是隨著執(zhí)行吋間不同,輸出結(jié)果的順序有所不同。分析:因

28、為上述程序執(zhí)行時,不同進程之間不存在共享臨界資源(其屮打印機的互斥性已由操 作系統(tǒng)保證)問題,所以,加鎖與不加鎖效果相同。四,實驗總結(jié):通過本次實驗加深對進程概念的理解,明確了進程和程序的區(qū)別。進一步認識并發(fā)執(zhí)行的 實質(zhì)。加深對進程是如何管理的。學會了 linux的fork, c源碼文件。limix/unix的進程和 cpu管理類命令更加明白了進程的創(chuàng)建過程使我收益匪淺。實驗五使用動態(tài)優(yōu)先權(quán)的進程調(diào)度算法模擬一、實驗?zāi)康耐ㄟ^動態(tài)優(yōu)先權(quán)算法的模擬加深對進程概念進程調(diào)度過程的理解。二、實驗內(nèi)容(1) 用c語言來實現(xiàn)對n個進程采用動態(tài)優(yōu)先權(quán)優(yōu)先算法的進程調(diào)度。(2) 每個用來標識進程的進程控制塊pc

29、b用結(jié)構(gòu)來描述,包括以下字段:1,進程標識數(shù)id。2, 進程優(yōu)先數(shù)priority,并規(guī)定優(yōu)先數(shù)越大的進程,其優(yōu)先權(quán)越高。3, 進程已占用的cpu時間cputime。4, 進程還需占用的cpu時間alltime。當進程運行完畢時,alltime變?yōu)?。5, 進程的阻塞時間startblock,表示當進程再運行startblock個時間片后,將進入阻塞狀6, 進程被阻塞的時間blocktime,表示已足賽的進程再等待blocktime個時間片后,將轉(zhuǎn)換 成就緒狀態(tài)。7, 進程狀態(tài)start。8, 隊列指針next,用來將pcb排成隊列。(3) 優(yōu)先數(shù)改變的原則:1,進程在就緒隊列屮呆一個時間片,

30、優(yōu)先數(shù)加1。2,進程每運行一個時間片,優(yōu)先數(shù)減3。(4) 假設(shè)在調(diào)度前,系統(tǒng)中有5個進程,它們的初始狀態(tài)如下:id01234pr1ority9383()290cputime00000alltime33634startbl2-1-1-1-1ockblockti30000mestatereadyreadyreadyreadyready(5) 為了清楚的觀察各進程的調(diào)度過程,程序應(yīng)將每個時間片內(nèi)的情況顯示出來,參照的異體 格式如下:running prog: i ready-queue: -> idl-id2 block-queue: -id3-> id4id01234priorityp

31、0plp2p3p4cuptimecoclc2c3c4alltimeaoa1a2a3a4startblocktot1t2t3t4blocktimebobib2b3b4statesosis2s3s4三,實驗步驟:que.javapublic class que private int maxsize; private int quearray; private int front; private int rear; private int nltems; public que(int s) maxsize=s;quearray=new intmaxsize;front=0;rear=-l;nlt

32、ems=0;public void insert(int j) if(rear=maxsize-l) rear=-l;quearray+rear=j;nltems+;public int remove()int temp=quearrayfront+; if(front=maxsize) front=0;nltems-; return temp;public int peekfront()return quearrayfront;public boolean isempty() return(nltems=0);public boolean isfull()return(nitems=maxs

33、ize);public int size() return nltems;pcb.javaimport java.util.ijnkedust; import java.util.qucuc; import java.util.scanner;public class pcb public int id; public int priority; public int cputimc; public int alltime; public int startblock; public int blocktime; public int stat;/int id,int priority,int

34、 cputimc,int alltimc,int startblock,int blocktimc,int state public pcb (int id,int cputime,int alltime,int blocktime,int stat) / supero;this.id=id;tbis.priority=priority;this.cputimc=cputimc;this.alltime 二alltime;this.startblock=startblock;this.blocktime=blocktime;this.st

35、at=stat;public void modifypriorityq if(priority>0) priori ty-=3;,public void modifycputimeq cputime+=l;public void modi fyalltimeq if (alltime>0) all time-=1;public void modifystartblockq if(startblock>0) startblock-=l;public void modifyblocktimcq if(blocktime0) block time-=1;public void mo

36、di fystat 10 stat= 1;public void modifystatnegativeq 實驗報告°計算機操作系統(tǒng) stat=-l;public void modifystatoq stat 二 0; class runprivate static final queue queue = null;pcb| id=new pcb5; id0=new pcb(0,9,0,3,2,3,0); idl=new pcb(1,39,03,-1,0,0); id2=new pcb(2,30,0,6,-l,0,0); id3|=new pcb(3,29,0,3,-l,0,0); i

37、d4=new pcb(4,(),0,4,-1,0,0); int m,n;/pcb a4=l,2,3,4,5,6,7,2,3,4,5,6,7,7,2,3,4,5,6,7,7,2,3,4,5,6,7,7,2,3,4,5,6,7,7; /imid| = l,2,3,4,5;public void getido m=math.max(matb.max(ido.priority,idjlj.priorit7),math.max(matb.max(id2.priority,id3-priority)3d4.pr ority);for(int i 二 0;i<5;i+) if(idi.priorit

38、y=m) n=idi.id;void prioriuruno id | n | .modify stat 10; idn .modifypriorityo; idn.modifycputime();idn.modifyalltimco; if(idn).alltime=0) id n .priority=-100;void otherpriorityq for(int i=();i<5;i+) id i .modi fystartblockq;實驗報告計算機操作系統(tǒng) if(idi.startblock=0) idi.modifyblocktimeq; idi.modifystatnega

39、tiveo;if (id i |. startblock=0&id i .blocktime=0) idi .modifystatoq;for(int s=l;s<5;s+) if(ids.id!=n) ids .modifystato q;if(i!=n)idi.priority+;void goblocktimcq for(int i 二 0;i<5;i+)if(idi.startblock=()&&idi.blocktime!=0) idi.blocktime-= 1;public runq n=l;for(int p二l;p<20;p+)str

40、ing b=,nuuh;que queue=new que(5);getid();priorityrunq;otherpriorityq;/modifystateqgoblocktimeq;for(int i=0;i<5;i+)if(idi.stat=-l)b =integer.tostring(i);for(inti=0;i<5;i+)if(idi.stat=o)queue.insert(i);實驗報告計算機操作系統(tǒng) system.out.prindn(progress:+p); system.out.println(nrunning prog:n+n); system.out.

41、print(ready queue:"); whilc(!qucuc.isempty 0) int q=queue.remove(); system.out.print(cj);system.out.print(n );systcm.out.printlnf); system.out.println(nblock queue:n+b): system.out.println(=system.out.print(mid',+n for(int i=0;i<5;i+) system.out.print(id|i|.id+m );fsystem.out.printlnq; s

42、ystem.out.printc,priorityn+h for(int i=0;i<5;i+) system>out.print(id |i | .priority + nh i 9«system.out.printlnq; system.out.printf alltime"+'* for(int i=0;i<5;i+) system.out.print(id|i|.alltime+hfsystem.out.printlnq; system.out.print(mstartbi.ockm for(int i=0;i<5;i+)system

43、.out.print(id|i|.startblock+hfsystem.out.printlnq; system.out.print(nbmci<ttmr for(int i=0;i<5;i+) system.out.print(id|i| .blocktime+fsystem.out.printlnq; system.out.print(mstate for(int i=0;i<5;i+) system.out.print(idi|.stat+nfsystem.out.printlnq;ft i ylivml"system.out.printlnq; syste

44、m.out.print(ncputtme for(int i=0;i<5;i+) system.out.print(id|i|.cputime+us計算機操作系統(tǒng)實驗報告systcm.out.print("請按任意鍵繼續(xù)");scanner input = new scanner(system.in);string str = input.nextq;system.out.printlnfthe program has finished!totally spend 19 processes” system.out.prindn(mthanks for your vie

45、w);system.out.printlnfmade by dongjiahua using java);main.javaimport "java.util,queue; public class mainpublic static void main(string args) run run=new run();四,實驗總結(jié):通過本次實驗加深對動態(tài)優(yōu)先權(quán)調(diào)度算法的理解。進一步認識動態(tài)優(yōu)先權(quán)調(diào)度算法的實質(zhì)。加 深對動態(tài)優(yōu)先權(quán)調(diào)度算法是如何進行的,以及/解進程控制塊對進程的作用,使進程能并發(fā)運行, 使我了解了許多的知識。實驗六使用動態(tài)分區(qū)分配方式的模擬1、實驗?zāi)康牧私鈩討B(tài)分區(qū)分配方式

46、中使用的數(shù)據(jù)結(jié)構(gòu)和分配算法,并進一步加深對動態(tài)分區(qū)存儲管理方式及 其實現(xiàn)過程的理解。2、實驗內(nèi)容(1) 用c語言分別實現(xiàn)采用首次適應(yīng)算法和最佳適應(yīng)算法的動態(tài)分區(qū)分配過程albc()和回收過程 free()o其中,空閑分區(qū)通過空閑分區(qū)鏈來管理:在進行內(nèi)存分配吋,系統(tǒng)優(yōu)先使用空閑區(qū)低端的 空間。(2) 假設(shè)初始狀態(tài)下,可用的內(nèi)存空間為640kb,并有下列的請求序列:作業(yè)1中請130kb。作業(yè)2申請60kb。作業(yè)3申請lookbo 作業(yè)2釋放60kb。作業(yè)4申請200kb。作業(yè)3釋放100kb。作業(yè)1釋放130kb。作業(yè)5申請140kb。作業(yè)6申請60kb。作業(yè)7申請50kb。計算機操作系統(tǒng)實驗報告

47、作業(yè)6釋放60kb。請分別采用首次適應(yīng)算法和最佳適應(yīng)算法,對內(nèi)存塊進行分配和冋收,要求每次分配和冋收后顯 示出空閑分區(qū)鏈的情況。3、示例程序:#include<stdio-h>#include<stdlib. h>#include<string. h>/#includc<iostrcam. h>#include<windows> h>#define free 0#define busy 1define ok 1define error 0#define status int;int n=0;int max_length=640;

48、typedef struct freearea int number: int size; / int address; / int state;elemtype;typedef struct dulnodcelemtype data; struct dulnodc 氺prior; struct dulnode 氺next;dulnode, *dulinklist;dulinklist first;duli nkki st last;int request;int allocation(int, int, int);int free(int):int ff(int, int);int be (

49、int, int);void show();int initlist ();int initlist() f irst=(i)ulinklist)malloc(sizeof (dulnodc): last=(dulinklist)malloc(sizeof(dulnode); first->prior=null:first->ncxt=last;ast->prior=first; last-next=nlll; last->data. addresso;s計算機操作系統(tǒng)實驗報告last->data. size-mx_length; last->data. n

50、umber); last->data. state=eree; return ok; int fe(int number, int request)dulinklist dll=(dulinklist)malloc(sizcof(dulnodc): dll-data. number=number;dll-data. size=rcqucst;dll->data. state=busy;dulnode *p=first->next; while (p) if (p->data. state=free&&p-data. size=reciuest) p-da

51、ta. state=busy; p->data. number=number; return ok; break:if (p->data. statefree&&p->data. size>request) dll-prior=p-prior;dll->ncxt=p;dij,->data. address=p->data. address; p->pr ior->next=i)ll; p->prior=dll;pdata. address=dll->data. address+dll->data. size

52、; p->data. sizc-=rcquest: return ok;break;p=p-next;return error;int be(int number, int request) int ch;dulinklist dll=(dulinkli st)malloc(sizeof(dulnode); l)ll->data. numbcr=numbcr;dll->data. size=request:dll->data. state=busy;dulnodc *p=first->ncxt;dulnode *q=first>next;whi le(p)

53、計算機操作系統(tǒng)實驗報告if(p->data. state=erec&&(p->data. size>rcquest|p-data. size=rcqucst)q=p;ch=p->data. size-request; break: p=p->next;while (p) if (p->data. state=eree&&p->data. size>request) if(p->data. size-request/ch) ch=p->data. size-request; q=p;p=p-next;if

54、(q=null) return error; elsedll->prior=q->prior;dll-next=q;dll->data. addrcss=q->data. address:q->prior_nex t=dll;q-prior=dll;q->data. address+=request;q->data. size=ch;return ok;int free(int number)dulnode *p=first; while(p) if(p->data. number=number) p->data. statc=frco; p->data. number=free; if(p->prior>data. state=free)p->prior->data. size+=p->data. size; p-prior->next=p-next; p->ncxt->prior=p->prior:if(p->next->data. state=frec) p->data. size+=p->next->data. size; p-next-next-prior=p; p->ncxt=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論