![東北大學(xué)秦皇島分校操作系統(tǒng)實(shí)驗(yàn)4110314董家華-代碼原創(chuàng)_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-12/1/1a0edfc7-5b7b-404a-81a6-f5da5597de07/1a0edfc7-5b7b-404a-81a6-f5da5597de071.gif)
![東北大學(xué)秦皇島分校操作系統(tǒng)實(shí)驗(yàn)4110314董家華-代碼原創(chuàng)_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-12/1/1a0edfc7-5b7b-404a-81a6-f5da5597de07/1a0edfc7-5b7b-404a-81a6-f5da5597de072.gif)
![東北大學(xué)秦皇島分校操作系統(tǒng)實(shí)驗(yàn)4110314董家華-代碼原創(chuàng)_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-12/1/1a0edfc7-5b7b-404a-81a6-f5da5597de07/1a0edfc7-5b7b-404a-81a6-f5da5597de073.gif)
![東北大學(xué)秦皇島分校操作系統(tǒng)實(shí)驗(yàn)4110314董家華-代碼原創(chuàng)_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-12/1/1a0edfc7-5b7b-404a-81a6-f5da5597de07/1a0edfc7-5b7b-404a-81a6-f5da5597de074.gif)
![東北大學(xué)秦皇島分校操作系統(tǒng)實(shí)驗(yàn)4110314董家華-代碼原創(chuàng)_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-12/1/1a0edfc7-5b7b-404a-81a6-f5da5597de07/1a0edfc7-5b7b-404a-81a6-f5da5597de075.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告學(xué)寫(xiě)4110314姓名:董家華提交日期:2013. 11.28成績(jī):東北大學(xué)秦皇島分校°計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)一熟悉l i nux/unix操作系統(tǒng)實(shí)驗(yàn)?zāi)康?1. 熟悉linux/unix操作系統(tǒng)的基本操作。2. 掌握常用基本命令和系統(tǒng)調(diào)用。實(shí)驗(yàn)內(nèi)容:1. 學(xué)會(huì)開(kāi)機(jī)、登錄、退出與關(guān)機(jī)(1)開(kāi)機(jī)很多時(shí)候,一臺(tái)機(jī)器上會(huì)安裝多個(gè)操作系統(tǒng)(operating system,簡(jiǎn)稱os),因此,在開(kāi)機(jī)時(shí) 會(huì)讓用戶選擇進(jìn)入哪個(gè)os。例如,顯示“l(fā)inux lilo: ”,或在windows2000平臺(tái)下的菜單選擇 oso選擇進(jìn)入linux后,linux初始化過(guò)程中會(huì)顯示大
2、量初始化信息,要求學(xué)習(xí)者逐漸讀懂這些初 始化信息,以從這個(gè)角度來(lái)理解linux的工作原理。(2)登錄與修改口令在打開(kāi)終端或在neterm之炎的程序上進(jìn)行遠(yuǎn)程連接后,linux/unix在相應(yīng)初始化完成后, 會(huì)在屏幕上顯示“l(fā)ogin: ”。此時(shí)輸入用戶名(帳號(hào))并鍵如回車(chē),則系統(tǒng)顯示“password: ”,然 后輸入保密字(口令)并鍵入冋車(chē)。此吋,系統(tǒng)驗(yàn)證所鍵入的用戶名和保密字,若正確則成功進(jìn) 入系統(tǒng),顯示命令提示符#,若不正確則顯示“l(fā)ogin mcorrect”,并重新顯示“l(fā)ogin: ”,讓用戶重 新輸入正確的用戶名和保密字。有時(shí)用戶可能想修改保密字,則可以在成功進(jìn)入系統(tǒng)后,在命令提
3、示符后輸入“password” 并鍵入回車(chē),則系統(tǒng)再顯示“ncw password: ”。當(dāng)用戶鍵入新保密字并鍵入回車(chē)后,系統(tǒng)再顯示 “retype new password: ”,此時(shí)需再次重復(fù)鍵入剛才輸入的新保密字并鍵入冋午,則系統(tǒng)接收并 記住i的保密字。如果用戶在登錄時(shí)忘了保密字,則只能找系統(tǒng)管理員解決問(wèn)題。或者,如果用戶想修改自己 的用戶名,也只能找系統(tǒng)管理員解決。(3)退出、注銷當(dāng)用戶不再使用linux/unix時(shí),在離開(kāi)前,通常應(yīng)鍵入logout命令或ctrk+d開(kāi)退出帳號(hào)。 若是在pc上安裝linux/unix _,則此步驟可以省略而鍵入halt或reboot命令。若是在多用戶機(jī)
4、 器上(終端/網(wǎng)絡(luò)登錄),則此步驟最好不要略過(guò),否則會(huì)導(dǎo)致計(jì)帳或安全上的問(wèn)題。(4)關(guān)機(jī)或重啟在limix/unix下,涉及到關(guān)機(jī)或重啟的命令有:a)鍵入halt命令。這是最常用的關(guān)機(jī)方式。b)如果用戶只是想退出linux操作系統(tǒng),并不想關(guān)機(jī),還想再進(jìn)入其他os (例如windows), 則鍵入reboot命令(重啟)。c)在多用戶機(jī)器上,系統(tǒng)管理員在關(guān)機(jī)(鍵入halt命令)前,通常要鍵入shutdown命令。 這是一條廣播性質(zhì)的命令,通知各用戶即將關(guān)機(jī),以便給各用戶留下一定的時(shí)間作保存、 退出等工作。d)在窗口工作方式不,可以通過(guò)與windows類似的開(kāi)始菜單來(lái)關(guān)機(jī)或重啟:“開(kāi)始” 一“關(guān)閉
5、系統(tǒng)” 一 “關(guān)機(jī)或重/s” 一。2. 窗口工作方式與中斷工作方式早期的unix版本都是傳統(tǒng)的終端工作方式,這種工作方式在系統(tǒng)啟動(dòng)后就顯示命令提 示符,沒(méi)有多個(gè)窗門(mén)。隨著macintosh和windows這樣的窗門(mén)界面的出現(xiàn)和普及,unix和實(shí)驗(yàn)報(bào)告計(jì)算機(jī)操作系統(tǒng)linux開(kāi)始引入窗門(mén)工作方式。unix和linux卜*的窗口平臺(tái)都基于x-windows,有kde 窗口平臺(tái),gnome窗口平臺(tái)、sun openwindows窗口平臺(tái)等。用戶登錄后就進(jìn)入終端工作方式,用戶可以在終端工作方式下鍵入“sum”命令進(jìn)入窗 口工作方式。進(jìn)入窗口工作方式后,可以按ctrl+alt+f2進(jìn)入終端工作方式,之后
6、可按 ctrl+alt+f7再?gòu)慕K端工作方式冋到窗u工作方式。窗口工作方式與在windows卜*的工作方式類似,可以在桌面上開(kāi)多個(gè)窗口。linux/unix 窗口工作方式下,一個(gè)窗口可以對(duì)應(yīng)一個(gè)進(jìn)程,也可以對(duì)應(yīng)多個(gè)進(jìn)程,例如一個(gè)shell窗口(類 似與windows下的dos窗口)。3. 常用命令/系統(tǒng)調(diào)節(jié)列表表1.1給出了 linux/unix各章實(shí)驗(yàn)開(kāi)始前必須掌握的最基本的常用命令。表1.2給出丫 linux八jnix下各章實(shí)驗(yàn)開(kāi)始前必須掌握的最基本和常用的系統(tǒng)調(diào)用。表1.1 linux/unix各章實(shí)驗(yàn)開(kāi)始前必須掌握的基木常用命令命令名功能rs顯示進(jìn)程狀態(tài)kill給進(jìn)程發(fā)信號(hào),殺死進(jìn)程r
7、m刪除文件或目錄(remove files or directories )cp復(fù)制文件和目錄(copy files and directories )cat將指定文件(或標(biāo)準(zhǔn)輸入)內(nèi)容輸出至標(biāo)準(zhǔn)輸出(通常的用途是顯 示文件內(nèi)容),當(dāng)輸入文件為多個(gè)時(shí)則為合并輸出(concatenate files and print on standard output)more文件分頁(yè)顯不的交互式 具(files perusal filter for ert viewing)ls顯示文件屬性和目錄內(nèi)容chmod改變文件訪問(wèn)權(quán)限(change file access permissions)mkdir建立 0
8、 錄(make directories )pwd品75當(dāng)前 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各章實(shí)驗(yàn)幵始前必須掌握的基本常用系統(tǒng)調(diào)用名稱功能open,creat打幵和/或建立一個(gè)文件或設(shè)備 (open and possibly create a file or device)close關(guān)閉一個(gè)文件描述字(close a file descriptor)
9、readfe文件(read from a file descriptor)。別于個(gè)已打開(kāi)的文件,通過(guò) 它的文件描述字,讀該文件的內(nèi)容write寫(xiě)文件(write to a file descriptor)。對(duì)丁一個(gè)己打開(kāi)的文件,通過(guò)它 的文件描述字,寫(xiě)該文件的內(nèi)容i.seek改變文件內(nèi)當(dāng)前讀寫(xiě)指針位置(reposition read/write file offset)4. 外存目錄樹(shù)結(jié)構(gòu)計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告 以linux 2.2版為例,外存目錄樹(shù)結(jié)構(gòu)如圖1.1所不。圖中,linux命令實(shí)用程序放在/bin和/usr/bin下,源碼放在/usr/src下,內(nèi)核程序文件vmlinux放在/bo
10、ot下,設(shè)備特別文件放在/dev 卜,幫助文件放在/usr/man下,用戶主目錄通常放在/home卜*圖1.1 linux外存目錄樹(shù)結(jié)構(gòu)5. 程序開(kāi)發(fā)工具:編輯、編譯、連接、調(diào)試i. 編輯程序linux/unix的編輯程序有emacs、vi、ed等。筆者建議使用emacs.ii. 編譯程序編譯、調(diào)試c程序時(shí),可以在emacs中編譯,也可以在命令行下編譯:# cc f.c上述命令行編譯c源程序f.c,輸出的可執(zhí)行0標(biāo)程序?yàn)閍.om。# cc f.c -of上述命令行編譯c源程序f.c,輸出的可執(zhí)行目標(biāo)程序?yàn)閒。# cc -c f.c上述命令行編譯c源程序f.c ,但只輸出目標(biāo)模塊f.o。iii.
11、 調(diào)試程序linux卜的常用調(diào)試程序是gdb。此外,ptrace系統(tǒng)調(diào)用(跟蹤進(jìn)程執(zhí)行)、strace命令 (跟蹤系統(tǒng)調(diào)用與信號(hào))、ltrace命令(跟蹤庫(kù)函數(shù)調(diào)用,a library call tracer)等,也可以用來(lái)輔助調(diào)試。iv. make 程序如果所編制的程序由幾十個(gè)模塊組成,修改其中任一模塊吋都要將這幾十個(gè)模塊重新連 接,貝u此時(shí)make可以大大提高工作效率,減少很多重復(fù)性勞動(dòng)。6. shelllinux/unix的命令解釋器俗稱shell,其有以下兩個(gè)功能:(1) 顯示命令提示符,接收、解釋、啟動(dòng)執(zhí)行命令行。(2) 解釋執(zhí)行批處理文件(shell script),提供很多內(nèi)部命
12、令和大量命令組合功能。linux八jnix下的shell有很多種,有csh、bsh、ksh等。7. 如何獲得幫助信息和技術(shù)資料(1)聯(lián)機(jī)幫助命令man、info和一help選項(xiàng)例如,要查詢cat命令的功能和用法,鍵入以下3個(gè)命令行中的任意一個(gè)即可。# man cat 林 info cat# cat helpman命令提供的聯(lián)機(jī)幫助信息有8節(jié),分別對(duì)應(yīng)以下內(nèi)容:計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告 man 1命令 man 2系統(tǒng)調(diào)用 man 3庫(kù)函數(shù)man 4設(shè)備驅(qū)動(dòng)程序和設(shè)備特別文件 man 5系統(tǒng)文件 man 6游戲man 7宏程序包和語(yǔ)言約定 man 8系統(tǒng)管理和維護(hù)工具 (2)其他幫助這包括廠家提供的
13、手冊(cè)、市場(chǎng)上銷售的各種參考書(shū),各種網(wǎng)上資源等。此外,有些窗口平臺(tái)帶有 聯(lián)機(jī)幫助菜單項(xiàng)。實(shí)驗(yàn)二進(jìn)程的創(chuàng)建和控制一,實(shí)驗(yàn)?zāi)康模杭由顚?duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別。(2) 進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的實(shí)質(zhì)。0)加深對(duì)進(jìn)程管理概念的理解。(4)分析進(jìn)程的創(chuàng)建過(guò)程。二,實(shí)驗(yàn)內(nèi)容:(1) 閱讀linux的fork, c源碼文件。(2) a. linux/unix的進(jìn)程和cpu管理類命令:(8個(gè))命令名功能ps顯示進(jìn)程狀態(tài)pstree顯不進(jìn)程樹(shù)(display a tree of processes )kill給進(jìn)程發(fā)信號(hào)killhau按名給進(jìn)程發(fā)信號(hào)(kill processes by name)skil
14、l,snice報(bào)告進(jìn)程狀態(tài)(report process status)top品不進(jìn)程狀態(tài)(display top cpu processes )procinfo顯示從/pmc搜集的系統(tǒng)狀態(tài)信息idle使進(jìn)程()進(jìn)入idle狀態(tài)(make process 0 idle)b. linux/unix進(jìn)程和cpu管理類系統(tǒng)調(diào)用:類別個(gè)數(shù)列舉腿趣埔細(xì)s13fork( ),clone( ),vfork( ),execve( ),exit( ),nanosleep(), pause( ),wait( ),waitpid( ),wait4( ),wait3( ),kill( ),killpg()進(jìn)程11ge
15、tpriority,setpriority,nice, sched get priority max,度先管$調(diào)優(yōu)級(jí)t5 f e -uldtechtseudechsr,ldleeu t.n,edd_nihecrrc hltscbe ssis-al,rioedpt-pschlntee, i-gmetd_2 4earhtrr二ed_ched-smraa中sed-echs進(jìn)程號(hào)(組)的設(shè)置與查看7id si et stpge9.tgpsegidtpgedtpesdp1中g(shù)ed 1tpeg髓觸顧柵飯価肖2sem曇,ccatrpt難城程/cp魏臟臟蹦用6ido6(8rnve11d pcapr68rnvt
16、rr巧el11an0rs(erlinux八jnix進(jìn)程和cpu管理類系統(tǒng)調(diào)用(1): 與進(jìn)程建撤和狀態(tài)有關(guān)的系統(tǒng)調(diào)用(13個(gè))名/格式/參數(shù)功能參數(shù)/返冋 值的解釋其他說(shuō)明fork(), vfork ()建立一個(gè)子進(jìn) 程(create a child process)對(duì)父進(jìn)程:返回子進(jìn) 程號(hào)。對(duì)子進(jìn)程: 返冋0 不成功:返 回-1linux2.2 下,vfork 只是 fork的一個(gè)別名而已,兩者完全相同。而在 unix下兩者則冇所區(qū) 別。viint clone(int(*fn) (void*arg), void*childstack, int flags, void * arg)建立一個(gè)子進(jìn)
17、 程(creat a child process)僅在linux卜有。int execve (const char*filename,執(zhí)行程序 (execute功能:用指 定程序覆在.庫(kù)函數(shù)級(jí)對(duì)應(yīng)cxcclc, execlp, execl,execv,char*const argv ,char*const envp);program )蓋當(dāng)前程 序代碼 返冋:成功 與否exeevp五個(gè)函數(shù)。參見(jiàn) man3一exitterminate thecurrentprocess終止當(dāng)前 進(jìn)程nanoslccppauseexecution for a specified time暫停執(zhí)行 指定的一 段時(shí)間
18、'vait,waitpidwait for process termination等待進(jìn)程 終止wait3,wait4wait for process termination, bsd tylebsd風(fēng)格 的等待進(jìn) 程終止killsend signal to a process向一個(gè)進(jìn) 程發(fā)信號(hào)killpgsend signal to a process group向一個(gè)進(jìn) 程組發(fā)信 號(hào)pausewait for signal等待信號(hào)d. linux/unix進(jìn)程和cpu管理類系統(tǒng)調(diào)用(2)與進(jìn)程號(hào)/組有關(guān)的系統(tǒng)調(diào)用(7個(gè))名/格式功能getpid,getppid獲得進(jìn)程號(hào)(get p
19、rocess identification)setpgid,getpgid,setpgrp,getpgrp設(shè)置/查詢進(jìn)程組(set/get process group )setsid建立一個(gè)會(huì)話并設(shè)置進(jìn)程組號(hào) (creates a session and sets the process group id)e. linux/unix進(jìn)程和cpu管理類系統(tǒng)調(diào)用(3):與進(jìn)程調(diào)度有關(guān)的系統(tǒng)調(diào)用(11個(gè))名/格式功能getpriority,setpriority設(shè)置/查看程序調(diào)度優(yōu)先級(jí) (get/set program scheduling priority)nice改變進(jìn)程優(yōu)先級(jí)(change p
20、rocess priority)sched_get一priority一max, schcd gct priority min設(shè)置靜態(tài)優(yōu)先級(jí)范圍(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查看指定進(jìn)程的s
21、ched.rr值(get the sci ied rr interval for the namedprocess)°計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告f. unux/unix進(jìn)程管理類系統(tǒng)調(diào)用:與進(jìn)程跟蹤/進(jìn)程運(yùn)行時(shí)間有關(guān)的系統(tǒng)調(diào)用(2個(gè))名/格式功能p trace進(jìn)系呈足艮蹤(process trace)times得到進(jìn)程時(shí)間(get process times)g. linux/unix進(jìn)程和cpu管理類系統(tǒng)調(diào)用(5):其他與進(jìn)程和cpu管理有關(guān)的系統(tǒng)調(diào)用(6個(gè))名/格式功能pred進(jìn)程控制(operations on a process)personality設(shè)置進(jìn)程執(zhí)行域(set th
22、e process execution domain)acct開(kāi)/關(guān)進(jìn)程記中長(zhǎng)(switch process accounting on or off)idle使進(jìn)程 0 進(jìn)入 idle 狀態(tài)(make process 0 idle)vm86old,vm86進(jìn)入虛擬 8068 方式(enter virtual 8068 mode)h. linux線程庫(kù)常用函數(shù)函數(shù)名功能pthrcad crcatc建立一個(gè)新線程pthrcad_canccl,pthrcad_sctcancclstatc, pthread setcanceltype,pthread testcancel線程撤消(thread ca
23、ncellation)pthread一join等待另一線程終止pthread exit退出當(dāng)前線程pthread sigmask,pthread k 川,sigwait線程屮的信號(hào)處理三,實(shí)驗(yàn)步驟:(1)進(jìn)程的創(chuàng)建編寫(xiě)一段程序,使用系統(tǒng)調(diào)用fork 創(chuàng)建兩個(gè)子進(jìn)程。當(dāng)此程序運(yùn)行時(shí),在系統(tǒng)中有一個(gè)父 進(jìn)程和兩個(gè)子進(jìn)程活動(dòng)。讓每一個(gè)進(jìn)程在屏幕上顯示一個(gè)字符:父進(jìn)程顯示字符“a”;子進(jìn)程分 別顯示字符“b”和字符“c”。試觀察記錄屏幕上的顯示結(jié)果,并分析原因。<程序1# include<stdio.h> main ()intpl, p2;while (pi = fork () =
24、= -l);/* 創(chuàng)建子進(jìn)程 pi */if(pl = =0)/*子進(jìn)程創(chuàng)建成功*/putchar (b);elsewhile (p2 = fork () = = -1); if(p2 = = 0) putchar (c); else putchar(a);/*創(chuàng)建另一個(gè)子進(jìn)程* /*子進(jìn)程創(chuàng)建成功*/*父進(jìn)程執(zhí)行*/分析:從進(jìn)程并發(fā)執(zhí)行來(lái)沿,輸出bac,acb等情況都有可能。原因:forko創(chuàng)建進(jìn)程所需的時(shí)間要多于輸出一個(gè)字符的時(shí)間,因此在主進(jìn)程創(chuàng)建進(jìn)程2的同 吋,進(jìn)程1就輸出了 “b”,而進(jìn)程2和主程序的輸出次序是有隨機(jī)性的,所以會(huì)出現(xiàn)上述結(jié)果。(2)進(jìn)程的控制修改已編寫(xiě)的程序,將每個(gè)進(jìn)程
25、輸出一個(gè)字符改為每個(gè)進(jìn)程輸出一句話,在觀察程序執(zhí)行時(shí) 屏幕上出現(xiàn)的現(xiàn)象,并分析原因。如果在程序中使用系統(tǒng)調(diào)用bckf()來(lái)給每一個(gè)進(jìn)程加鎖,可以實(shí)現(xiàn)進(jì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輸出的字符串之間不會(huì)被中斷,因此,字符串內(nèi)部的字符順序輸出時(shí) 不變。但是,由于進(jìn)程并發(fā)執(zhí)行時(shí)的調(diào)度順序和父子進(jìn)程的搶占處理機(jī)問(wèn)題,輸出字符串的順序 和先后隨著執(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í)行時(shí),不同進(jìn)程之間不存在共享臨界資源(其屮打印機(jī)的互斥性已由操 作系統(tǒng)保證)問(wèn)題,所以,加鎖與不加鎖效果相同。四,實(shí)驗(yàn)總結(jié):通過(guò)本次實(shí)驗(yàn)加深對(duì)進(jìn)程概念的理解,明確了進(jìn)程和程序的區(qū)別。進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的 實(shí)質(zhì)。加深對(duì)進(jìn)程是如何管理的。學(xué)會(huì)了 linux的fork, c源碼文件。limix/unix的進(jìn)程和 cpu管理類命令更加明白了進(jìn)程的創(chuàng)建過(guò)程使我收益匪淺。實(shí)驗(yàn)五使用動(dòng)態(tài)優(yōu)先權(quán)的進(jìn)程調(diào)度算法模擬一、實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)動(dòng)態(tài)優(yōu)先權(quán)算法的模擬加深對(duì)進(jìn)程概念進(jìn)程調(diào)度過(guò)程的理解。二、實(shí)驗(yàn)內(nèi)容(1) 用c語(yǔ)言來(lái)實(shí)現(xiàn)對(duì)n個(gè)進(jìn)程采用動(dòng)態(tài)優(yōu)先權(quán)優(yōu)先算法的進(jìn)程調(diào)度。(2) 每個(gè)用來(lái)標(biāo)識(shí)進(jìn)程的進(jìn)程控制塊pc
29、b用結(jié)構(gòu)來(lái)描述,包括以下字段:1,進(jìn)程標(biāo)識(shí)數(shù)id。2, 進(jìn)程優(yōu)先數(shù)priority,并規(guī)定優(yōu)先數(shù)越大的進(jìn)程,其優(yōu)先權(quán)越高。3, 進(jìn)程已占用的cpu時(shí)間cputime。4, 進(jìn)程還需占用的cpu時(shí)間alltime。當(dāng)進(jìn)程運(yùn)行完畢時(shí),alltime變?yōu)?。5, 進(jìn)程的阻塞時(shí)間startblock,表示當(dāng)進(jìn)程再運(yùn)行startblock個(gè)時(shí)間片后,將進(jìn)入阻塞狀6, 進(jìn)程被阻塞的時(shí)間blocktime,表示已足賽的進(jìn)程再等待blocktime個(gè)時(shí)間片后,將轉(zhuǎn)換 成就緒狀態(tài)。7, 進(jìn)程狀態(tài)start。8, 隊(duì)列指針next,用來(lái)將pcb排成隊(duì)列。(3) 優(yōu)先數(shù)改變的原則:1,進(jìn)程在就緒隊(duì)列屮呆一個(gè)時(shí)間片,
30、優(yōu)先數(shù)加1。2,進(jìn)程每運(yùn)行一個(gè)時(shí)間片,優(yōu)先數(shù)減3。(4) 假設(shè)在調(diào)度前,系統(tǒng)中有5個(gè)進(jìn)程,它們的初始狀態(tài)如下:id01234pr1ority9383()290cputime00000alltime33634startbl2-1-1-1-1ockblockti30000mestatereadyreadyreadyreadyready(5) 為了清楚的觀察各進(jìn)程的調(diào)度過(guò)程,程序應(yīng)將每個(gè)時(shí)間片內(nèi)的情況顯示出來(lái),參照的異體 格式如下:running prog: i ready-queue: -> idl-id2 block-queue: -id3-> id4id01234priorityp
31、0plp2p3p4cuptimecoclc2c3c4alltimeaoa1a2a3a4startblocktot1t2t3t4blocktimebobib2b3b4statesosis2s3s4三,實(shí)驗(yàn)步驟: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 實(shí)驗(yàn)報(bào)告°計(jì)算機(jī)操作系統(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;實(shí)驗(yàn)報(bào)告計(jì)算機(jī)操作系統(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);實(shí)驗(yàn)報(bào)告計(jì)算機(jī)操作系統(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計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告systcm.out.print("請(qǐng)按任意鍵繼續(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();四,實(shí)驗(yàn)總結(jié):通過(guò)本次實(shí)驗(yàn)加深對(duì)動(dòng)態(tài)優(yōu)先權(quán)調(diào)度算法的理解。進(jìn)一步認(rèn)識(shí)動(dòng)態(tài)優(yōu)先權(quán)調(diào)度算法的實(shí)質(zhì)。加 深對(duì)動(dòng)態(tài)優(yōu)先權(quán)調(diào)度算法是如何進(jìn)行的,以及/解進(jìn)程控制塊對(duì)進(jìn)程的作用,使進(jìn)程能并發(fā)運(yùn)行, 使我了解了許多的知識(shí)。實(shí)驗(yàn)六使用動(dòng)態(tài)分區(qū)分配方式的模擬1、實(shí)驗(yàn)?zāi)康牧私鈩?dòng)態(tài)分區(qū)分配方式
46、中使用的數(shù)據(jù)結(jié)構(gòu)和分配算法,并進(jìn)一步加深對(duì)動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式及 其實(shí)現(xiàn)過(guò)程的理解。2、實(shí)驗(yàn)內(nèi)容(1) 用c語(yǔ)言分別實(shí)現(xiàn)采用首次適應(yīng)算法和最佳適應(yīng)算法的動(dòng)態(tài)分區(qū)分配過(guò)程albc()和回收過(guò)程 free()o其中,空閑分區(qū)通過(guò)空閑分區(qū)鏈來(lái)管理:在進(jìn)行內(nèi)存分配吋,系統(tǒng)優(yōu)先使用空閑區(qū)低端的 空間。(2) 假設(shè)初始狀態(tài)下,可用的內(nèi)存空間為640kb,并有下列的請(qǐng)求序列:作業(yè)1中請(qǐng)130kb。作業(yè)2申請(qǐng)60kb。作業(yè)3申請(qǐng)lookbo 作業(yè)2釋放60kb。作業(yè)4申請(qǐng)200kb。作業(yè)3釋放100kb。作業(yè)1釋放130kb。作業(yè)5申請(qǐng)140kb。作業(yè)6申請(qǐng)60kb。作業(yè)7申請(qǐng)50kb。計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告
47、作業(yè)6釋放60kb。請(qǐng)分別采用首次適應(yīng)算法和最佳適應(yīng)算法,對(duì)內(nèi)存塊進(jìn)行分配和冋收,要求每次分配和冋收后顯 示出空閑分區(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計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告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、計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告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. 本站所有資源如無(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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全生產(chǎn)事故隱患報(bào)告制度和舉報(bào)獎(jiǎng)勵(lì)制度范文(五篇)
- 2025高一物理預(yù)習(xí)講第7講.牛頓運(yùn)動(dòng)定律基礎(chǔ)含答案
- 2025年陜西省職教高考《語(yǔ)文》核心考點(diǎn)必刷必練試題庫(kù)(含答案)
- 土方開(kāi)挖運(yùn)輸合同
- 幼兒園圓形教學(xué)活動(dòng)策劃方案五篇
- 代理藥品銷售合同范本
- 公司口罩采購(gòu)合同范本
- 標(biāo)識(shí)的采購(gòu)合同
- 咨詢策劃合同范本
- 電氣設(shè)備安裝合同
- 《梅大高速茶陽(yáng)路段“5·1”塌方災(zāi)害調(diào)查評(píng)估報(bào)告》專題警示學(xué)習(xí)
- 2024年09月北京中信銀行北京分行社會(huì)招考(917)筆試歷年參考題庫(kù)附帶答案詳解
- 《大健康解讀》課件
- 2025年度交通運(yùn)輸規(guī)劃外聘專家咨詢協(xié)議3篇
- 2024年公司領(lǐng)導(dǎo)在新年動(dòng)員會(huì)上的講話樣本(3篇)
- 人教版道德與法治二年級(jí)下冊(cè)《第一單元 讓我試試看》大單元整體教學(xué)設(shè)計(jì)2022課標(biāo)
- 2024年3季度青島房地產(chǎn)市場(chǎng)季度簡(jiǎn)報(bào)
- 蘇東坡詞十首
- 2023年天津市文化和旅游局直屬事業(yè)單位招聘考試真題及答案
- 醫(yī)務(wù)科運(yùn)用PDCA循環(huán)提高門(mén)診醫(yī)生準(zhǔn)時(shí)出診率PDCA成果匯報(bào)
- 模具生產(chǎn)車(chē)間員工績(jī)效考核表模板
評(píng)論
0/150
提交評(píng)論