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

下載本文檔

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

文檔簡介

1、學(xué)號:4110314姓名:董家華提交日期:2013.11.28成績:東北大學(xué)秦皇島分校計算機(jī)操作系統(tǒng)實驗報告&茁計算機(jī)操作系統(tǒng)實驗報告東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第1頁實驗一 熟悉 Linux/UNIX 操作系統(tǒng)實驗?zāi)康?1. 熟悉 Linux/UNIX 操作系統(tǒng)的基本操作。2. 掌握常用基本命令和系統(tǒng)調(diào)用。實驗內(nèi)容:1. 學(xué)會開機(jī)、登錄、退出與關(guān)機(jī)(1) 開機(jī)很多時候,一臺機(jī)器上會安裝多個操作系統(tǒng)(Operat ing System 簡稱 OS),因此,在開機(jī)時 會讓用戶選擇進(jìn)入哪個 OS。例如,顯示“ Linux LILO :”,或在 Windows2000 平臺下的菜單

2、選擇 OS。選擇進(jìn)入 Linux 后,Linux 初始化過程中會顯示大量初始化信息,要求學(xué)習(xí)者逐漸讀懂這些初 始化信息,以從這個角度來理解 Linux 的工作原理。(2) 登錄與修改口令在打開終端或在 Neterm 之類的程序上進(jìn)行遠(yuǎn)程連接后,Linux/UNIX 在相應(yīng)初始化完成后, 會在屏幕上顯示“ login:”。此時輸入用戶名(帳號)并鍵如回車,則系統(tǒng)顯示“ password ”,然 后輸入保密字(口令)并鍵入回車。此時,系統(tǒng)驗證所鍵入的用戶名和保密字,若正確則成功進(jìn) 入系統(tǒng),顯示命令提示符#,若不正確則顯示“l(fā)ogin in correct,并重新顯示“l(fā)ogi n:”,讓用戶重 新

3、輸入正確的用戶名和保密字。有時用戶可能想修改保密字,則可以在成功進(jìn)入系統(tǒng)后,在命令提示符后輸入“password并鍵入回車,則系統(tǒng)再顯示“ new password ”。當(dāng)用戶鍵入新保密字并鍵入回車后,系統(tǒng)再顯示“retype new password ”,此時需再次重復(fù)鍵入剛才輸入的新保密字并鍵入回車,則系統(tǒng)接收并 記住新的保密字。如果用戶在登錄時忘了保密字,則只能找系統(tǒng)管理員解決問題。或者,如果用戶想修改自己 的用戶名,也只能找系統(tǒng)管理員解決。(3) 退出、注銷當(dāng)用戶不再使用 Linux/UNIX 時,在離開前,通常應(yīng)鍵入 logout 命令或 ctrk+D 開退出帳號。 若是在 PC 上

4、安裝 Linux/UNIX 下,則此步驟可以省略而鍵入 halt 或 reboot 命令。若是在多用戶機(jī) 器上(終端/網(wǎng)絡(luò)登錄),則此步驟最好不要略過,否則會導(dǎo)致計帳或安全上的問題。(4) 關(guān)機(jī)或重啟在 Linux/UNIX 下,涉及到關(guān)機(jī)或重啟的命令有:a)鍵入 halt 命令。這是最常用的關(guān)機(jī)方式。b)如果用戶只是想退出 Linux 操作系統(tǒng),并不想關(guān)機(jī),還想再進(jìn)入其他 OS(例如 Window,則鍵入 reboot 命令(重啟)。c)在多用戶機(jī)器上,系統(tǒng)管理員在關(guān)機(jī)(鍵入 halt 命令)前,通常要鍵入 shutdown 命令。 這是一條廣播性質(zhì)的命令,通知各用戶即將關(guān)機(jī),以便給各用戶留

5、下一定的時間作保存、 退出等工作。d)在窗口工作方式下,可以通過與 Windows 類似的開始菜單來關(guān)機(jī)或重啟:“開始”一“關(guān) 閉系統(tǒng)”一“關(guān)機(jī)或重啟”一。2. 窗口工作方式與中斷工作方式早期的 UNIX 版本都是傳統(tǒng)的終端工作方式, 這種工作方式在系統(tǒng)啟動后就顯示命令提 示符,沒有多個窗口。隨著 Macintosh 和 Windows 這樣的窗口界面的出現(xiàn)和普及,UNIX 和計算機(jī)操作系統(tǒng)實驗報告東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第2頁Linux 開始引入窗口工作方式。UNIX 和 Linux 下的窗口平臺都基于 X-Windows,有 KDE 窗口平臺,GNOME 窗口平臺、SUN O

6、penWindows 窗口平臺等。用戶登錄后就進(jìn)入終端工作方式,用戶可以在終端工作方式下鍵入“starts 命令進(jìn)入窗口工作方式。進(jìn)入窗口工作方式后,可以按Ctrl+Alt+F2 進(jìn)入終端工作方式,之后可按Ctrl+Alt+F7 再從終端工作方式回到窗口工作方式。窗口工作方式與在 Windows 下的工作方式類似,可以在桌面上開多個窗口。Linux/UNIX 窗口工作方式下,一個窗口可以對應(yīng)一個進(jìn)程,也可以對應(yīng)多個進(jìn)程,例如一個 Shell 窗口(類 似與 Windows 下的 DOS 窗口)。3.常用命令/系統(tǒng)調(diào)節(jié)列表表 1.1 給出了 Linux/UNIX 各章實驗開始前必須掌握的最基本的

7、常用命令。表1.2 給出了Linux/UNIX 下各章實驗開始前必須掌握的最基本和常用的系統(tǒng)調(diào)用。表 1.1 Linux/UNIX 各章實驗開始前必須掌握的基本常用命令命令名功能Rs顯示進(jìn)程狀態(tài)Kill給進(jìn)程發(fā)信號,殺死進(jìn)程Rm刪除文件或目錄(remove files or directoriesCp復(fù)制文件和目錄(copy files and directoriesCat將指定文件(或標(biāo)準(zhǔn)輸入)內(nèi)容輸出至標(biāo)準(zhǔn)輸出(通常的用途是顯 示文件內(nèi)容),當(dāng)輸入文件為多個時則為合并輸出(con cate nate filesand print on sta ndard outputMore文件分頁顯示的

8、交互式工具(files perusal filter for crt viewingLs顯示文件屬性和目錄內(nèi)容Chmod改變文件訪冋權(quán)限(change file access permissionsmkdir建立目錄(make directoriesPwd顯示當(dāng)前 目錄名 / 工作目錄名 (print name of current/working directoryEcho顯示一行(display a line of textchear清屏(clear the terminal screen表 1.2 Linux/UNIX 各章實驗開始前必須掌握的基本常用系統(tǒng)調(diào)用名稱功能Ope n,crea

9、t打開和/或建立一個文件或設(shè)備(ope n and possibly create a file or deViceClose關(guān)閉一個文件描述字(close a file descriptorRead讀文件(read from a file descriptor。對于一個已打開的文件,通過 它的文件描述字,讀該文件的內(nèi)容Write與文件(write to a file descriptor。對于一個已打開的文件,通過匕 的文件描述字,與該文件的內(nèi)容Lseek改變文件內(nèi)當(dāng)前讀與指針位置(reposition read/write file offser4.外存目錄樹結(jié)構(gòu)東北大學(xué)秦皇島分校計算機(jī)與

10、通信工程學(xué)院第3頁養(yǎng)計算機(jī)操作系統(tǒng)實驗報告以 Linux 2.2 版為例,外存目錄樹結(jié)構(gòu)如圖 1.1 所示。圖中,Linux 命令實用程序放在/bin 和/usr/bin 下,源碼放在/usr/src 下,內(nèi)核程序文件 vmlinux 放在/boot 下,設(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 中編譯,

11、也可以在命令行下編譯:# cc f.c上述命令行編譯 C 源程序 f.c,輸出的可執(zhí)行目標(biāo)程序為 a.out。# cc f.c f上述命令行編譯 C 源程序 f.c,輸出的可執(zhí)行目標(biāo)程序為 f。# cc f.c上述命令行編譯 C 源程序 f.c ,但只輸出目標(biāo)模塊 f.o。iii.調(diào)試程序Linux 下的常用調(diào)試程序是 GDB。此外,ptrace 系統(tǒng)調(diào)用(跟蹤進(jìn)程執(zhí)行)、strace 命令 (跟蹤系統(tǒng)調(diào)用與信號)、Ltrace 命令(跟蹤庫函數(shù)調(diào)用,a library call tracer 等,也可以 用來輔助調(diào)試。iv.make 程序如果所編制的程序由幾十個模塊組成,修改其中任一模塊時都

12、要將這幾十個模塊重新連 接,則此時 make 可以大大提高工作效率,減少很多重復(fù)性勞動。6.SHELLLinux/UNIX 的命令解釋器俗稱 SHELL,具有以下兩個功能:(1) 顯示命令提示符,接收、解釋、啟動執(zhí)行命令行。(2) 解釋執(zhí)行批處理文件(Shell scrip),提供很多內(nèi)部命令和大量命令組合功能。Linux/UNIX 下的 SHELL 有很多種,有 CSH、BSH、KSH 等。7.如何獲得幫助信息和技術(shù)資料(1)聯(lián)機(jī)幫助命令 man info 和一 help 選項 例如,要查詢 cat 命令的功能和用法,鍵入以下 3 個命令行中的任意一個即可。# man cat# info c

13、at# cat -help東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第4頁man 命令提供的聯(lián)機(jī)幫助信息有 8 節(jié),分別對應(yīng)以下內(nèi)容:許計算機(jī)操作系統(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)管理和維護(hù)工具(2)其他幫助這包括廠家提供的手冊、市場上銷售的各種參考書,各種網(wǎng)上資源等。此外,有些窗口平臺帶有 聯(lián)機(jī)幫助菜單項。實驗二進(jìn)程的創(chuàng)建和控制一,實驗?zāi)康模杭由顚M(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別。(2) 進(jìn)一步認(rèn)識并發(fā)執(zhí)行的實質(zhì)。(3) 加深對進(jìn)程管理概念的

14、理解。(4) 分析進(jìn)程的創(chuàng)建過程。 二,實驗內(nèi)容:閱讀 Linux 的 fork, c 源碼文件。a. Linux/UNIX 的進(jìn)程和 CPU 管理類命令:(8 個)命令名功能Ps顯示進(jìn)程狀態(tài)Pstree顯示進(jìn)程樹(display a tree of processesKill給進(jìn)程發(fā)信號Killhall按名給進(jìn)程發(fā)信號(kill processes by name)Skills nic e報告進(jìn)程狀態(tài)(report process statusTop顯示進(jìn)程狀態(tài)(display top CPU process)Proc info顯示從/proc 搜集的系統(tǒng)狀態(tài)信息Idle使進(jìn)程 0 進(jìn)入 i

15、dle 狀態(tài)(make process 0 idle)b.Linux/UNIX 進(jìn)程和 CPU 管理類系統(tǒng)調(diào)用:類別個數(shù)列舉進(jìn)程 建撤 與狀態(tài)改 變13Fork( ),cl on e( ),vfork( ),execve( ),exit( ), nano sleep(),pause( ),wait( ),waitpid( ),wait4( ),wait3( ),kill( ),killpg()進(jìn)程11Getpriority, setpriority, ni ce, sched get priority max.謀計算機(jī)操作系統(tǒng)實驗報告東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第5頁調(diào)度 優(yōu)先 級管

16、理sched_get_priority_m in,Sched_setparam, sched_getparam, sched_setscheduler, sched_getscsched_rr_get_i nterval, sched_yield進(jìn)程 號(組)的設(shè) 置與查看7Getpid, getppid, setpgid, getpgid, setpgrp, getpgrp, setsid進(jìn)程 跟蹤 調(diào)試和進(jìn) 程運(yùn) 行時間2Ptrace( ), times其他 與進(jìn) 程/CPU管理 相關(guān) 的系統(tǒng)調(diào) 用6Pers on ality, vm86, prctl, acct, idle, vm86o

17、ldc.Linux/UNIX 進(jìn)程和 CPU 管理類系統(tǒng)調(diào)用(1):與進(jìn)程建撤和狀態(tài)有關(guān)的系統(tǒng)調(diào)用(13 個)名/格式/參數(shù)功能參數(shù)/返回 值的解釋其他說明fork(), vfork ()建立一個子進(jìn)程(create a childprocess對父進(jìn)程:返回子進(jìn)程號。對子進(jìn)程:返回 0不成功:返 回-1Linux2.2 下,vfork 只是fork 的一個別名而已, 兩者完全相同。而在UNIX 下兩者則有所區(qū) 別。vii nt clo ne(i nt(*fn)(void*arg),Void*childstack, intflags, void * arg)建立一個子進(jìn)程(creat a ch

18、ildprocess僅在 Linux 下有。int execve (constchar*file name,執(zhí)行程序(execute功能:用指 定程序覆在庫函數(shù)級對應(yīng) execle,execlp, execl, execv,東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第6頁d. Linux/UNIX 進(jìn)程和 CPU 管理類系統(tǒng)調(diào)用(2)與進(jìn)程號/組有關(guān)的系統(tǒng)調(diào)用(7 個)名/格式功能Getpid,getppid獲得進(jìn)程號(get process identificatiOnSetpgid,getpgid,setpgrp,getpgrp設(shè)置/查詢進(jìn)程組(set/get process grou)set

19、sid建立一個會話并設(shè)置進(jìn)程組號(creates a sessi on and sets the process group IDe. Linux/UNIX 進(jìn)程和 CPU 管理類系統(tǒng)調(diào)用(3):與進(jìn)程調(diào)度有關(guān)的系統(tǒng)調(diào)用(.11 個)名/格式功能getpriority,setpriority設(shè)置/查看程序調(diào)度優(yōu)先級(get/set program scheduli ng priorityn ice改變進(jìn)程優(yōu)先級(change process priority)sched_get_priority_max, sched get prioritymin設(shè)置靜態(tài)優(yōu)先級范圍(get static pr

20、iority range)sched_setparam,sched_getparam設(shè)置/查看調(diào)度參數(shù)(set and get scheduli ng parameters)sched_setscheduler,sched_getschedule設(shè)置/查看調(diào)度算法和參數(shù)?r(set and get scheduli ngalgorithm/parameters)sched_rr_get_i nterval查看指定進(jìn)程的 SCHED_RR 值(get theSCHED RR interval for the namedchar*c onstargv ,char*c onsten vp);prog

21、ram)蓋當(dāng)前程 序代碼 返回:成功 與否execvp 五個函數(shù)。參見man3exitterminate thecurre nt process終止當(dāng)前 進(jìn)程nano sleeppause executi onfor a specifiedtime暫停執(zhí)行 指定的一 段時間wait,waitpidwait for processterm ination等待進(jìn)程 終止wait3,wait4wait for processTermi natio n,BSD tyleBSD 風(fēng)格 的等待進(jìn)程終止killsend sig nal to aprocess向一個進(jìn) 程發(fā)信號killpgsend sig n

22、al to aprocess group向一個進(jìn) 程組發(fā)信 號pausewait for sig nal等待信號實驗報告計算機(jī)操作系統(tǒng)謀計算機(jī)操作系統(tǒng)實驗報告東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第7頁process)f. Linux/UNIX 進(jìn)程管理類系統(tǒng)調(diào)用(4)與進(jìn)程跟蹤/進(jìn)程運(yùn)行時間有關(guān)的系統(tǒng)調(diào)用(2 個)名/格式功能ptrace進(jìn)程跟蹤(process trace)times得到進(jìn)程時間(get processtimes)g. Linux/UNIX 進(jìn)程和 CPU 管理類系統(tǒng)調(diào)用(5)其他與進(jìn)程和 CPU 管理有關(guān)的系統(tǒng)調(diào)用(6 個)名/格式功能prctl進(jìn)程控希 9 (opera

23、tions on a process)pers on ality設(shè)置進(jìn)程執(zhí)行域(set the process executiondoma in)acct開/ 關(guān)進(jìn)程記帳(switch process accounting oi oroff)idle使進(jìn)程 0 進(jìn)入 idle 狀態(tài)(make process 0 idle)vm86old,vm86進(jìn)入虛擬 8068 方式(enter virtual 8068 mode)h. Linux 線程庫常用函數(shù)函數(shù)名功能pthread create建立一個新線程pthread_ca ncel,pthread_setca ncelstate, pthrea

24、dsetcanceltype,pthread testcancel線程撤消(thread can cellation)pthread join等待另一線程終止pthread exit退出當(dāng)前線程pthread sigmask,pthread kill,sigwait線程中的信號處理三,實驗步驟:(1)進(jìn)程的創(chuàng)建編寫一段程序,使用系統(tǒng)調(diào)用 fork ()創(chuàng)建兩個子進(jìn)程。當(dāng)此程序運(yùn)行時,在系統(tǒng)中有一個父 進(jìn)程和兩個子進(jìn)程活動。讓每一個進(jìn)程在屏幕上顯示一個字符:父進(jìn)程顯示字符“ a”;子進(jìn)程分 別顯示字符“ b”和字符“c”。試觀察記錄屏幕上的顯示結(jié)果,并分析原因。# in cludemai n (

25、)int p1,p2;while (pl = fork ( ) = = -1 );/* 創(chuàng)建子進(jìn)程 p1 */if (pl = =0)/*子進(jìn)程創(chuàng)建成功*/putchar (b);else&茁計算機(jī)操作系統(tǒng)實驗報告|分析:從進(jìn)程并發(fā)執(zhí)行來看,輸出 bac, acb 等情況都有可能。原因:fork()創(chuàng)建進(jìn)程所需的時間要多于輸出一個字符的時間,因此在主進(jìn)程創(chuàng)建進(jìn)程2 的同時,進(jìn)程 1 就輸出了“ b”,而進(jìn)程 2 和主程序的輸出次序是有隨機(jī)性的,所以會出現(xiàn)上述結(jié)果。(2 )進(jìn)程的控制修改已編寫的程序,將每個進(jìn)程輸出一個字符改為每個進(jìn)程輸出一句話,在觀察程序執(zhí)行時 屏幕上出現(xiàn)的現(xiàn)象,并分析

26、原因。如果在程序中使用系統(tǒng)調(diào)用 lockf ()來給每一個進(jìn)程加鎖,可以實現(xiàn)進(jìn)程之間的互斥,觀察并 分析出現(xiàn)的現(xiàn)象。# includevstdio. hmai n ()int pl,p2,i;while (p1 = fork( ) ) = = -1);if (p1 = =0)for ( i = 0 ; i500; i+)printf ( child % dn ”,i);elsewhile (p2 = fork ( ) ) = = -1);if (p2 = =0)for (i = 0 ; i500 ; i+)printf ( Son%dn ” )ielsefor (i = 0, i500; i+

27、)printf (daughte%dn ”,i );分析:由于函數(shù) printf()輸出的字符串之間不會被中斷,因此,字符串內(nèi)部的字符順序輸出時 不變。但是,由于進(jìn)程并發(fā)執(zhí)行時的調(diào)度順序和父子進(jìn)程的搶占處理機(jī)問題,輸出字符串的順序 和先后隨著執(zhí)行的不同而發(fā)生變化。這與打印單字符的結(jié)果相同。# includevstdio. hwhile (p2 = fork ( ) = = -1);if ( p2 = = 0)putchar ( c);else putchar( a);/*創(chuàng)建另一個子進(jìn)程*/*子進(jìn)程創(chuàng)建成功*/*父進(jìn)程執(zhí)行*/&茁計算機(jī)操作系統(tǒng)實驗報告|main ()東北大學(xué)秦皇島分校

28、計算機(jī)與通信工程學(xué)院第 8 頁謀計算機(jī)操作系統(tǒng)實驗報告東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第9頁int pl, p2, i;while (pl = fork ( ) ) = = -1);if (pl = = 0)lockf(1, 1, 0),for(i = 0 ; i500 ; i+) printf (“ child %d/n” ,i );lockf(1, 0, 0);elsewhile (p2 =fork ( ) = = -1);if (p2 = =0)lockf(1, 1, 0);for(i = 0;i500; i+) printf( “ som%c|i );lockf(1, 0, 0)

29、;elselockf(1, 1, 0);for(i = 0;i id4ID01234PRIORITYP0P1P2P3P4CUPTIMEC0C1C2C3C4ALLTIMEA0A1A2A3A4STARTBLOCKT0T1T2T3T4BLOCKTIMEB0B1B2B3B4STATES0S1S2S3S4,實驗步驟:Que.javapublic class Que 東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第 10 頁實驗報告謀計算機(jī)操作系統(tǒng)實驗報告東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第11頁privateintmaxSize ;privateint queArray ;privateintfront ;

30、privateintrear ;privateintnItems ;publicQue( int s)maxSize =s;queArray=new int maxSizefront =0;rear =-1;n Items =0;public void insert( int j)if (rear =maxSize -1)rear =-1;queArray + rear =j;n Items +;public int remove()int temp= queArray front +; if (front = maxSize )front =0;nItems -;return temp;pu

31、blic int peekFro nt()return queArray front ;public boolea n isEmpty()return ( nItems =0);public boolea n isFull()return (nItems =maxSize );public int size()return nItems ;PCB.javaimport java.util.L in kedList;import java.util.Queue;import java.util.Sca nner;東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第12頁計算機(jī)操作系統(tǒng)public class

32、 PCB public int id; public int priority; public int cputime; public int alltime; public int startblock;public int blocktime;public int stat;/int id,int prioritynt cputime,int alltime,int startblock,int blocktime,int statepublic PCB(int id,int priority,int cputime,int alltime,int startblock,int block

33、time,int stat) / super();this.id=id;this.priority=priority; this.cputime=cputime; this.alltime=alltime; this.startblock=startblock;this.blocktime=blocktime; this.stat=stat;public void modifypriority() if(priorityO) priority-=3;public void modifycputime() cputime+=1;public void modifyalltime()if (all

34、time0)alltime-=1;public void modifystartblock()if(startblock0) startblock-=1;public void modifyblocktime() if(blocktime0) blocktime-=1;public void modifystat1() stat=1;public void modifystat negative()實驗報告詬計算機(jī)操作系統(tǒng)實驗報告stat=-1;public void modifystatO()stat=0;class Runprivate static final Queue Queue =

35、 nuII;PCB id=new PCB5;id0=new PCB(0,9,0,3,2,3,0);id1=new PCB(1,39,0,3,-1,0,0);id2=new PCB(2,30,0,6,-1,0,0);id3=new PCB(3,29,0,3,-1,0,0);id4=new PCB(4,0,0,4,-1,0,0);int m,n;/PCB a4=1,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; /intid=1,2,3,4,5;public void getid()m=Math.max(Ma

36、th.max(id0.priority,id1.priority),Math.max(Math.max(id2.priority,id3.priority),rity);for(int i=0;i5;i+)if(idi.priority=m)n=idi.id;void priorityr un()id n.m odifystat1();id n.modifypriority();idn .modifycputime();id n.modifyalltime();if(id n.alltime=0)idn .priority=-100;void otherpriority()for

37、(int i=0;i5;i+)idi.modifystartblock();東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第 13 頁東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第14頁詬計算機(jī)操作系統(tǒng)實驗報告if(idi.startblock=0) idi.modifyblocktime();idi.modifystat negative。;if(idi.startblock=0&idi.blocktime=0) idi.modifystat0();for(i nt s=1;s5;s+)if(ids.id!=n)ids.modifystat0();if(i!=n)idi.priority+;voi

38、d goblocktime()for(int i=0;i5;i+)if(idi.startblock=0&idi.blocktime!=0) idi.blocktime-=1;public Ru n()n=1;for(i nt p=1;p20;p+)Stri ng b= null;Que queue=new Que(5);getid();priorityr un();otherpriority();/goblocktime();for(int i=0;i5;i+)if(idi.stat=-1)b =In teger.toStri ng(i);for(int i=0;i5;i+)if(i

39、di.stat=0)queue.i nsert(i);modifystate();東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第15頁詬計算機(jī)操作系統(tǒng)實驗報告System.out.pri ntln (Progress:+p);System.out.println(Running Prog:+n);System.out.pri nt(Ready Queue:);while(!queue.isEmpty() intq=queue.remove();System.out.pri nt(q);System.out.pri nt();System.out.pri ntl n();System.out.pri

40、ntln (Block Queue:+b);System.out.pri ntln(= =);System.out.pri nt(ID+);for(int i=0;i5;i+)System.out.pri nt(idi.id+);System.out.pri ntl n();System.out.pri nt(PRIORITY+);for(int i=0;i5;i+)System.out.pri nt(idi.priority+);System.out.pri ntl n();System.out.pri nt(CPUTIME+);for(int i=0;i5;i+)System.out.pr

41、i nt(idi.cputime+ );System.out.pri ntl n();System.out.pri nt(ALLTIME+);for(int i=0;i5;i+)System.out.pri nt(idi.alltime+);System.out.pri ntl n();System.out.pri nt(STARTBLOCK+); for(inti=0;i5;i+)System.out.print(idi.startblock+);System.out.pri ntl n();System.out.pri nt(BLOCKTIME+);for(int i=0;i5;i+)Sy

42、stem.out.pri nt(idi.blocktime+);System.out.pri ntl n();System.out.pri nt(STATE+);for(int i=0;i5;i+)System.out.pri nt(idi.stat+);System.out.pri ntl n();東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第16頁券計算機(jī)操作系統(tǒng)實驗報告System.out.print 請按任意鍵繼續(xù)); Scanner in put =new Scann er(System.i n); Stri ng str = in put. next();System.out.print

43、ln(The program has finished!Totally spend 19 processes);System.out.pri ntln (Tha nks for your view);System.out.pri ntln (Made by Don gjiahua using JAVA);Main .javaimport java.util.Queue;public class Mainpublic static void main( Stri ng args) Run run= new Run();四,實驗總結(jié):通過本次實驗加深對動態(tài)優(yōu)先權(quán)調(diào)度算法的理解。進(jìn)一步認(rèn)識動態(tài)優(yōu)先權(quán)

44、調(diào)度算法的實質(zhì)。加 深對動態(tài)優(yōu)先權(quán)調(diào)度算法是如何進(jìn)行的,以及了解進(jìn)程控制塊對進(jìn)程的作用,使進(jìn)程能并發(fā)運(yùn)行, 使我了解了許多的知識。實驗六 使用動態(tài)分區(qū)分配方式的模擬1、實驗?zāi)康牧私鈩討B(tài)分區(qū)分配方式中使用的數(shù)據(jù)結(jié)構(gòu)和分配算法,并進(jìn)一步加深對動態(tài)分區(qū)存儲管理方式及 其實現(xiàn)過程的理解。2、實驗內(nèi)容(1) 用 C 語言分別實現(xiàn)采用首次適應(yīng)算法和最佳適應(yīng)算法的動態(tài)分區(qū)分配過程alloc(和回收過程free(占其中,空閑分區(qū)通過空閑分區(qū)鏈來管理:在進(jìn)行內(nèi)存分配時,系統(tǒng)優(yōu)先使用空閑區(qū)低端的 空間。(2) 假設(shè)初始狀態(tài)下,可用的內(nèi)存空間為 640KB,并有下列的請求序列:?作業(yè) 1 申請 130KB?作業(yè) 2

45、 申請 60KB?作業(yè) 3 申請 100KB?作業(yè) 2 釋放 60KB?作業(yè) 4 申請 200KB?作業(yè) 3 釋放 100KB?作業(yè) 1 釋放 130KB?作業(yè) 5 申請 140KB?作業(yè) 6 申請 60KB?作業(yè) 7 申請 50KB東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第17頁?作業(yè) 6 釋放 60KB請分別采用首次適應(yīng)算法和最佳適應(yīng)算法,對內(nèi)存塊進(jìn)行分配和回收,要求每次分配和回收后顯 示出空閑分區(qū)鏈的情況。3、示例程序:#include #include #include #in clude#include #defi ne Free 0#defi ne Busy 1#defi ne OK

46、I#defi ne ERROR#define Status int ;int n=0;nt MAX_length=640;typedef struct FreeArea int number;int size; /int address; /structDuLNode* next; DuLNode* DuLinkList ; DuL in kList first;DuLin kList last;nt request;nt allocation(int , int , int );nt free( int );nt FF( int , int );nt BF( int , int );void

47、 show();int InitList();int InitList()first=( DuLinkList )malloc( sizeof (DuLNode); last=( DuLinkList )malloc( sizeof (DuLNode); first- prior=NULLfirst-n ext=last;last-prior=first;last- next= NULLlast-data.address=0;實驗報告計算機(jī)操作系統(tǒng)int state;計算機(jī)操作系統(tǒng)實驗報告東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第18頁int FF( int number, int reques

48、t )DuLinkList DLL=( DuLinkList )malloc( sizeof (DuLNod);DLL-data .n umber= n umber;DLL-data.size= request ;DLL-data.state= Busy;DuLNode*p=first- next;while (p)if (p-data.state= Free&p-data.size= request ) p-data.state= Busy;p-data .n umber= n umber;return OKbreak;if (p-data.state=Free&p-data

49、.size request )DLL-prior=p-prior;DLL-n ext=p;DLL-data.address=p-data.address;p-prior- n ext=DLL;p-prior=DLL;p-data.address=DLL-data.address+DLL-data.size;p-data.size-= request ;return OKreturn ERRQRnt BF( int number, int request )東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第19頁if (p-data.state=Free&p-data.size request )

50、if (p-data.size- request data.size- request ; q=p;p=p-n ext;if (q=NULL return ERRQRelse DLL-prior=q-prior;DLL-n ext=q;DLL-data.address=q-data.address;nt free( int number)DuLNode*p=first;while (p)if (p-data.number= number)p-data.state= Free;p-data .n umber= Free;if (p-prior-data.state= Free) p-prior-

51、data.size+=p-data.size; p-prior- n ext=p-n ext;p- next-prior=p-prior;if (p-next-data.state=Free)p-data.size+=p-n ext-data.size; p-n ext-n ext-prior=p;p-n ext=p-n ext- n ext;break;_東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第20頁void show()DuLNode*p=first- next;while (p)printf(分區(qū)號:);if (p-data.number= Free) printf( Free); el

52、seprintf(%d,p-data.number);printf(起始地址:%ld ,p-data.address); printf(分區(qū)大小:%ldKB,p-data.size); printf(狀態(tài):);if (p-data.state= Free) printf(空閑 n);else printf(已分配 n);p=p-n ext;void main()printf( n);int ch,d=0;pri ntf(1.FFn);pri ntf(2.BFn);printf( O.exitn);scanf( %d,&ch); printf( n); if (ch=0) exit(0)

53、; if (n=0)InitList(); if (ch=1)FF(1,130);show();printf(n);system( pause); FF(2,60);show();printf( n); system( pause);FF(3,100);system( pause);free (2);show();printf( n);system( pause);實驗報告show();printf(n);東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第21頁system( pause);free;show();printf( n);system( pause);FF(5,140);show(); p

54、rintf( n);system( pause);FF(6,60); show();printf( n);system( pause);FF(7,50); show();printf( n);system( pause);free (6); show();printf( n);system( pause);if(ch=2) BF(1,130); show();printf( n);system( pause);BF(2,60); show();printf( n);system( pause);BF(3,100); show();printf( n);system( pause);free (

55、2); show();printf( n);system( pause);BF(4,200);計算機(jī)操作系統(tǒng)實驗報告FF(4,200);show();printf( n);system( pause);東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第22頁計算機(jī)操作系統(tǒng)show();printf( n); system( pause);free (3);show();printf( n); system( pause);free;show();printf( n); system( pause);BF(5,140);show();printf(n);system( pause);BF(6,60);sh

56、ow();printf(n);system( pause);BF(7,50);show();printf( n); system( pause);free (6);show();printf( n); system( pause);實驗七請求調(diào)頁存儲管理方式的模擬1、 實驗?zāi)康耐ㄟ^對頁面、頁表、地址轉(zhuǎn)換和頁面置換過程的模擬,加深對請求調(diào)頁系統(tǒng)的原理和實現(xiàn)過 程的理解。2、 實驗內(nèi)容(1)假設(shè)每個頁面中可存放 10 條指令,分配給一作業(yè)的內(nèi)存塊數(shù)為 4。(2)用 C 語言模擬一作業(yè)的執(zhí)行過程。 該作業(yè)共有 320 條指令, 即它的地址空間為 32 頁, 目前 它的所有頁都還未調(diào)入內(nèi)存。在模擬過程

57、中,如果所訪問的指令已經(jīng)在內(nèi)存中,則顯示其物理地址,并轉(zhuǎn)下一條指令。如果所訪問的指令還未裝入內(nèi)存,則發(fā)生缺頁,此時需記錄缺頁的次數(shù), 并將相應(yīng)頁調(diào)入內(nèi)存。如果 4 個內(nèi)存塊中均已裝入該作業(yè),則需進(jìn)行頁面置換。最后顯示其物理 地址,并轉(zhuǎn)下一條指令。在所有 320 條指令執(zhí)行完畢后,請計算并顯示作業(yè)運(yùn)行過程中發(fā)生的缺 頁率。(3)置換算法:請分別考慮 OPT、FIFO 和 LRU 算法。實驗報告東北大學(xué)秦皇島分校計算機(jī)與通信工程學(xué)院第23頁(4)作業(yè)中指令的訪問次序按下述原則生成: ?50%勺指令是順序執(zhí)行的。?25%勺指令是均勻分布在前地址部分。?25%勺指令時均勻分布在后地址部分。具體的實施辦

58、法是: 在0 , 319之間隨機(jī)選取一條起始執(zhí)行指令,其序號為 mm+1 的指令;0,m-1中的某條指令處,其序號為 ml;m1+1 的指令;m1+2, 319中的某條指令處,其序號為 m2m2+1 的指令; 重復(fù)跳轉(zhuǎn)到前地址部分、順序執(zhí)行、跳轉(zhuǎn)到后地址部分、順序執(zhí)行的過程,直至執(zhí)行 320 條指 令。3、示例程序:#in elude #inelude #inelude vconio.h#inelude |#defi ne Bsize 4using namespaeestd;typedef struet BLOCK int page num;int aeeessed;BLOCK int pe;nt n;statie int temp320;BLOCK)lock Bsize ;void init();nt findExist( int eurpage); int findSpaee();int findReplaee();void display。;void suijishu();void pagestring();void OPT();void LRU();void FIFO();實驗報告2順序執(zhí)行下一條指令,即序號為3通過隨機(jī)數(shù),跳轉(zhuǎn)到前地址部分4順序執(zhí)行下一條指令,即序號為5通過隨機(jī)數(shù),跳轉(zhuǎn)到后地址部分6順序執(zhí)行下一條指令,即序號為計算機(jī)

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論