操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)08_第1頁(yè)
操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)08_第2頁(yè)
操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)08_第3頁(yè)
操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)08_第4頁(yè)
操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)08_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

實(shí)驗(yàn)一熟悉Linux/UNIX操作系統(tǒng)(2學(xué)時(shí))[實(shí)驗(yàn)?zāi)康腯:1.熟悉Linux/UNIX操作系統(tǒng)的基本操作。2.掌握常用基本命令和系統(tǒng)調(diào)用。[實(shí)驗(yàn)內(nèi)容]:1.學(xué)會(huì)開機(jī)、登錄、退出與關(guān)機(jī)(1)開機(jī)很多時(shí)候,一臺(tái)機(jī)器上會(huì)安裝多個(gè)操作系統(tǒng)(OperatingSystem,簡(jiǎn)稱OS因此,在開機(jī)時(shí)會(huì)讓用戶選擇進(jìn)入哪個(gè)OS。例如,顯示“LinuxLILO:,或在Windows2000平臺(tái)下的菜單選擇OS。選擇進(jìn)入Linux后,Linux初始化過(guò)程中會(huì)顯示大量初始化信息,要求學(xué)習(xí)者逐漸讀懂這些初始化信息,以從這個(gè)角度來(lái)理解Linux的工作原理。(2)登錄與修改口令在打開終端或在Neterm之類的程序上進(jìn)行遠(yuǎn)程連接后,Linux/UNIX在相應(yīng)初始化完成后,會(huì)在屏幕上顯示“:。此時(shí)輸入用戶名(帳號(hào))并鍵如回車,則系統(tǒng)顯示“password:,然后輸入保密字(口令)并鍵入回車。此時(shí),#,若不正確則顯示“l(fā)ogin”,并重新顯示“的用戶名和保密字。入“password”并鍵入回車,則系統(tǒng)再顯示“newpassword密字并鍵入回車后,系統(tǒng)再顯示“retypenewpassword剛才輸入的新保密字并鍵入回車,則系統(tǒng)接收并記住新的保密字。用戶想修改自己的用戶名,也只能找系統(tǒng)管理員解決。(3)退出、注銷當(dāng)用戶不再使用Linux/UNIXlogout命令或ctrk+D開退出帳號(hào)。若是在PC上安裝Linux/UNIX下,則此步驟可以省略而鍵入halt或reboot否則會(huì)導(dǎo)致計(jì)帳或安全上的問(wèn)題。(4)關(guān)機(jī)或重啟在Linux/UNIX下,涉及到關(guān)機(jī)或重啟的命令有:a)鍵入halt命令。這是最常用的關(guān)機(jī)方式。b)如果用戶只是想退出LinuxOS(例如Windowsrebootc)在多用戶機(jī)器上,系統(tǒng)管理員在關(guān)機(jī)(鍵入halt命令)前,通常要鍵入shutdown命令。這是一條廣播性質(zhì)的命令,通知各用戶即將關(guān)機(jī),以便給各用戶留下一定的時(shí)間作保存、退出等工作。d)Windows類似的開始菜單來(lái)關(guān)機(jī)或重啟:“開始”—“關(guān)閉系統(tǒng)”—“關(guān)機(jī)或重啟”—……。2.窗口工作方式與中斷工作方式1早期的UNIX后就顯示命令提示符,沒有多個(gè)窗口。隨著Macintosh和Windows這樣的窗口界面的出現(xiàn)和普及,UNIX和Linux開始引入窗口工作方式。UNIX和Linux下的窗口平臺(tái)都基于,有KDE窗口平臺(tái),GNOME窗口平臺(tái)、SUNOpenWindows窗口平臺(tái)等。用戶登錄后就進(jìn)入終端工作方式,用戶可以在終端工作方式下鍵入“Ctrl+Alt+F2進(jìn)入終端工作方式,之后可按Ctrl+Alt+F7再?gòu)慕K端工作方式回到窗口工作方式。窗口工作方式與在Windows口。Linux/UNIX窗口工作方式下,一個(gè)窗口可以對(duì)應(yīng)一個(gè)進(jìn)程,也可以對(duì)應(yīng)多個(gè)進(jìn)程,例如一個(gè)Shell窗口(類似與Windows下的DOS3.常用命令系統(tǒng)調(diào)節(jié)列表表1.1給出了Linux/UNIX各章實(shí)驗(yàn)開始前必須掌握的最基本的常用命令。表1.2給出了Linux/UNIX下各章實(shí)驗(yàn)開始前必須掌握的最基本和常用的系統(tǒng)調(diào)用。表1.1Linux/UNIX各章實(shí)驗(yàn)開始前必須掌握的基本常用命令KillRm給進(jìn)程發(fā)信號(hào),殺死進(jìn)程刪除文件或目錄(removefilesordirectories)復(fù)制文件和目錄(copyfilesand)將指定文件(或標(biāo)準(zhǔn)輸入)內(nèi)容輸出至標(biāo)準(zhǔn)輸出(通常的用途是顯concatenatefilesandprintonstandard)Cp文件分頁(yè)顯示的交互式工具(filesperusalfilterforcrt)顯示文件屬性和目錄內(nèi)容顯示當(dāng)前目錄名工作目錄名(printnameofcurrent/working)PwdEchochear顯示一行(displayalineof)清屏(cleartheterminal)表1.2Linux/UNIX各章實(shí)驗(yàn)開始前必須掌握的基本常用系統(tǒng)調(diào)用打開和或建立一個(gè)文件或設(shè)備(openandpossiblycreateafileor)Close關(guān)閉一個(gè)文件描述字(closeafile)讀文件(readfromafile過(guò)它的文件描述字,讀該文件的內(nèi)容ReadWrite寫文件(writetoafile2它的文件描述字,寫該文件的內(nèi)容改變文件內(nèi)當(dāng)前讀寫指針位置(repositionread/writefile)Lseek4.外存目錄樹結(jié)構(gòu)以Linux2.2版為例,外存目錄樹結(jié)構(gòu)如圖1.1Linux命令實(shí)用程序放在/bin和/usr/bin/usr/srcvmlinux放在/boot下,設(shè)備特別文件放在/dev/usr/man下,用戶主目錄通常放在/home下??/rootbinbootdevhomelibmnfprocusrbinsrcmanlib圖1.1Linux外存目錄樹結(jié)構(gòu)5.程序開發(fā)工具編輯、編譯、連接、調(diào)試i.編輯程序Linux/UNIX的編輯程序有Emacs、、ed等。筆者建議使用Emacs.編譯程序ii.編譯、調(diào)試C程序時(shí),可以在Emacs中編譯,也可以在命令行下編譯:#ccf.c上述命令行編譯C源程序f.c,輸出的可執(zhí)行目標(biāo)程序?yàn)閍.out。#ccf.c–of上述命令行編譯C源程序f.c,輸出的可執(zhí)行目標(biāo)程序?yàn)椤?cc–cf.c上述命令行編譯C源程序f.c,但只輸出目標(biāo)模塊f.o。iii.調(diào)試程序Linux下的常用調(diào)試程序是GDB。此外,ptrace系統(tǒng)調(diào)用(跟蹤進(jìn)程執(zhí)行straceLtracealibrarycall)等,也可以用來(lái)輔助調(diào)試。make程序iv.如果所編制的程序由幾十個(gè)模塊組成,修改其中任一模塊時(shí)都要將這幾十個(gè)模塊重新連接,則此時(shí)make可以大大提高工作效率,減少很多重復(fù)性勞動(dòng)。6.SHELLLinux/UNIX的命令解釋器俗稱SHELL,具有以下兩個(gè)功能:(1)顯示命令提示符,接收、解釋、啟動(dòng)執(zhí)行命令行。(2)解釋執(zhí)行批處理文件(Shell),提供很多內(nèi)部命令和大量命令組合功3能。Linux/UNIX下的SHELL有很多種,有、、KSH等。7.如何獲得幫助信息和技術(shù)資料(1)聯(lián)機(jī)幫助命令man、info和—help選項(xiàng)例如,要查詢cat命令的功能和用法,鍵入以下3個(gè)命令行中的任意一個(gè)即可。#mancat#infocat#cat–helpman命令提供的聯(lián)機(jī)幫助信息有8節(jié),分別對(duì)應(yīng)以下內(nèi)容:man1命令man2系統(tǒng)調(diào)用man3庫(kù)函數(shù)man4設(shè)備驅(qū)動(dòng)程序和設(shè)備特別文件man5系統(tǒng)文件man6游戲man7宏程序包和語(yǔ)言約定man8系統(tǒng)管理和維護(hù)工具(2)其他幫助些窗口平臺(tái)帶有聯(lián)機(jī)幫助菜單項(xiàng)。4實(shí)驗(yàn)二進(jìn)程的創(chuàng)建和控制(2學(xué)時(shí))[實(shí)驗(yàn)?zāi)康腯:加深對(duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別。進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的實(shí)質(zhì)。加深對(duì)進(jìn)程管理概念的理解。分析進(jìn)程的創(chuàng)建過(guò)程。[實(shí)驗(yàn)預(yù)備內(nèi)容]:(1)閱讀Linux的.c源碼文件。Linux/UNIX的進(jìn)程和CPU管理類命令(8個(gè))(2)a.PstreeKill顯示進(jìn)程樹(displayatreeofprocesses)給進(jìn)程發(fā)信號(hào)Killhall按名給進(jìn)程發(fā)信號(hào)(killprocessesbyname)Skill,sniceTop報(bào)告進(jìn)程狀態(tài)(reportprocessstatus)顯示進(jìn)程狀態(tài)(displaytopCPUprocesses)顯示從/proc搜集的系統(tǒng)狀態(tài)信息ProcinfoIdle使進(jìn)程0進(jìn)入idle狀態(tài)(makeprocess0)Linux/UNIX進(jìn)程和CPU管理類系統(tǒng)調(diào)用:b.個(gè)數(shù)Getpriority,setpriority,nice,sched_get_priority_max,sched_get_priority_min,Sched_setparam,sched_getparam,sched_setscheduler,sched_getscheduler,sched_rr_get_interval,sched_yieldGetpid,getppid,setpgid,getpgid,setpgrp,getpgrp,setsid26Personality,vm86,prctl,acct,idle,vm86old/CPU5管理相關(guān)的系統(tǒng)調(diào)用c.Linux/UNIX進(jìn)程和CPU管理類系統(tǒng)調(diào)用(1與進(jìn)程建撤和狀態(tài)有關(guān)的系統(tǒng)調(diào)用(13個(gè))名/格式/參數(shù)的解釋對(duì)父進(jìn)程:返回子進(jìn)程號(hào)。Linux2.2下,vfork只是fork完全相同。而在UNIX下兩者則有所區(qū)別。對(duì)子進(jìn)程:返回0不成功:返回-1功能:用指定程序覆蓋當(dāng)前程序代碼intexecve(constchar*filename,char*const在庫(kù)函數(shù)級(jí)對(duì)應(yīng)execle,execlp,execl,execvp五個(gè)函數(shù)。參見man3返回:成功與否終止當(dāng)前進(jìn)程暫停執(zhí)行指定的一段時(shí)間nanosleepwait,waitpidwait3,wait4kill等待進(jìn)程終止向一個(gè)進(jìn)程發(fā)信號(hào)sendsignaltoaprocessgroupwaitforsignal向一個(gè)進(jìn)程組發(fā)信號(hào)等待信號(hào)killpgpause6d.Linux/UNIX進(jìn)程和CPU管理類系統(tǒng)調(diào)用(2)與進(jìn)程號(hào)/組有關(guān)的系統(tǒng)調(diào)用(7個(gè))名/格式Getpid,getppidSetpgid,getpgid,setpgrp,getpgrp獲得進(jìn)程號(hào)(getprocessidentification)設(shè)置/查詢進(jìn)程組(set/getprocessgroup)建立一個(gè)會(huì)話并設(shè)置進(jìn)程組號(hào)setsid(createsasessionandsetstheprocessgroupID)Linux/UNIX進(jìn)程和CPU管理類系統(tǒng)調(diào)用(3(11個(gè))e.設(shè)置/查看程序調(diào)度優(yōu)先級(jí)(get/setprogramscheduling)改變進(jìn)程優(yōu)先級(jí)(changeprocesspriority)nicesched_get_priority_max,sched_get_priority_min設(shè)置靜態(tài)優(yōu)先級(jí)范圍(getstaticpriorityrange)sched_setparam,sched_getparamsched_setscheduler,sched_getschedulersched_rr_get_interval(setandgetschedulingalgorithm/parameters)查看指定進(jìn)程的SCHED_RR值(gettheSCHED_RRintervalforthenamedprocess)Linux/UNIX進(jìn)程管理類系統(tǒng)調(diào)用(4):與進(jìn)程跟蹤進(jìn)程運(yùn)行時(shí)間有關(guān)的系統(tǒng)調(diào)用(2個(gè))f.進(jìn)程跟蹤(processtrace)times得到進(jìn)程時(shí)間(getprocesstimes)g.Linux/UNIX進(jìn)程和CPU管理類系統(tǒng)調(diào)用(5):其他與進(jìn)程和CPU管理有關(guān)的系統(tǒng)調(diào)用(6個(gè))personalityacct設(shè)置進(jìn)程執(zhí)行域(settheprocessexecutiondomain)開/關(guān)進(jìn)程記帳(switchprocessaccountingonoroff)使進(jìn)程0進(jìn)入idle狀態(tài)(makeprocess0idle)進(jìn)入虛擬8068方式(entervirtual8068mode)vm86old,vm867h.Linux線程庫(kù)常用函數(shù)線程撤消(threadcancellation)pthread_sigmask,pthread_kill,sigwait線程中的信號(hào)處理[實(shí)驗(yàn)內(nèi)容]:(1)進(jìn)程的創(chuàng)建編寫一段程序,使用系統(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)程顯示字符“b”和字符“屏幕上的顯示結(jié)果,并分析原因。程序>#include<stdio.h>main(){int,p2;while((pl=fork())==-1;/*創(chuàng)建子進(jìn)程p1*/if==0)/*子進(jìn)程創(chuàng)建成功*/putchar(b;else{while((p2=fork())==;if(p2==0)/*創(chuàng)建另一個(gè)子進(jìn)程*//*子進(jìn)程創(chuàng)建成功*/putchar(c‘);elseputchar(a‘);}/*父進(jìn)程執(zhí)行*/}運(yùn)行結(jié)果>有時(shí)會(huì)出現(xiàn)bac)分析:從進(jìn)程并發(fā)執(zhí)行來(lái)看,輸出,acb等情況都有可能。原因:fork()創(chuàng)建進(jìn)程所需的時(shí)間要多于輸出一個(gè)字符的時(shí)間,因此在主進(jìn)程創(chuàng)建進(jìn)程21b2和主程序的輸出次序是有隨機(jī)性的,所以會(huì)出現(xiàn)上述結(jié)果。(2)進(jìn)程的控制8觀察程序執(zhí)行時(shí)屏幕上出現(xiàn)的現(xiàn)象,并分析原因。如果在程序中使用系統(tǒng)調(diào)用lockf()來(lái)給每一個(gè)進(jìn)程加鎖,可以實(shí)現(xiàn)進(jìn)程之間的互斥,觀察并分析出現(xiàn)的現(xiàn)象。程序1>#.h>main(){intpl,p2,i;while((p1=fork())==-1);if(p1==0)for(=0;i<500;i++)printf("child%d\ni);else{while((p2=fork())==-1);if(p2==0)for(i=0;i<500;i++)printf(%d\n,i)elsefor(i=0,i<500;i++)printf%d\ni);}}運(yùn)行結(jié)果>son或childsonchildsondaughter等分析:由于函數(shù)printf(輸出的字符串之間不會(huì)被中斷,因此,字符串內(nèi)部單字符的結(jié)果相同。9程序2>#.h>main(){int,p2,;while((pl=fork())==-1);if(pl==0){,1,0),for(i=0;i<500;i++)printf((―child%d/n‖,i);,0,0);}else{while((p2=fork())==-1);if(p2==0){,1,0);for(i=0;i<500;i++)printf(―son%d\n‖,i);,0,0);}else{,1,0);for(i=0;i<500;i++)printf(―daughter%d\n‖,i);,0,0);}}}運(yùn)行結(jié)果>所不同。分析:因?yàn)樯鲜龀绦驁?zhí)行時(shí),不同進(jìn)程之間不存在共享臨界資源其中打印機(jī)的互斥性已由操作系統(tǒng)保證問(wèn)題,所以,加鎖與不加鎖效果相同。10實(shí)驗(yàn)三實(shí)現(xiàn)進(jìn)程的軟中斷通信(4學(xué)時(shí))[實(shí)驗(yàn)?zāi)康腯:1.掌握基本的軟中斷通信方法。2.利用系統(tǒng)調(diào)用signal()捕捉中斷信號(hào)。3.理解Linux系統(tǒng)中的進(jìn)程通信的基本原理。[實(shí)驗(yàn)內(nèi)容]:(1)編制一段程序,使其實(shí)現(xiàn)進(jìn)程的軟中斷通信。要求:使用系統(tǒng)調(diào)用fork(創(chuàng)建兩個(gè)子進(jìn)程,再用系統(tǒng)調(diào)用signal()讓父進(jìn)程捕捉鍵盤上來(lái)的中斷信號(hào)即按^C鍵調(diào)用Kill()向兩個(gè)子進(jìn)程發(fā)出信號(hào),子進(jìn)程捕捉到信號(hào)后分別輸出下列信息后終止:ChildProcessllisKilledbyParent!ChildProcessl2isKilledbyParent!父進(jìn)程等待兩個(gè)子進(jìn)程終止后,輸出如下的信息后終止:ParentProcessisKilled!(2)在上面的程序中增加語(yǔ)句signal(SIGINT,SIG_IGN)和signalSIG_IGN),signal(SIGINT,SIG_IGN)和分別為忽略Del鍵信號(hào)以及忽略中斷信號(hào)。任務(wù)1程序>#.h>#include<signal.h>#.h>voidwaiting(,stop();intwait_mark;main(){intpl,p2,stdout;while((p1=fork())==-1);/*創(chuàng)建進(jìn)程p1*/if(p1>0){while((p2=fork())==-1);if(p2>0){wait_mark=1;signal(,stop);waiting(0);kill,16);kill,17);wait(0);/*接收Del信號(hào),并轉(zhuǎn)stop*/向p1發(fā)中斷信號(hào)16*//*向p2發(fā)中斷信號(hào)17*/同步*/11wait(0);printf(parentprocessiskilled!\n‖)exit(0);}else{wait_mark=1;signal(SIGINT,SIG_IGN);********signal,stop);printf(%d,SIG_DFL);waiting();lockf(stdout,1,0);printf(childprocess2iskilledbyparent!\n‖)lockf,0,0);exit(0);}}else{wait_mark=l;signal(SIGINT,SIG_IGN);********signal,stop);printf(%d,SIG_DEL);waiting(;lockf,1,0);printf("childprocess1iskilledbyparent!\n‖)1ockf(,0,0);exit(0);}}voidwaiting(){while(wait_mark!=0);}voidstop(){wait_mark=0;}運(yùn)行結(jié)果)childprocess1iskilledbyparent!childprocess2iskilledbyparent!Parentprocessiskilled!12分析上述程序中,實(shí)用函數(shù)signal()都放在一段程序的前面部位,而不是在signal(的執(zhí)行只是為進(jìn)程指定信號(hào)量16或17的作用,以及分配相應(yīng)的與stop()過(guò)程鏈接的指針。從而,signal(函數(shù)必須在程序前面部分執(zhí)行。該程序段前面部分用了兩個(gè)walt,為什么請(qǐng)讀者思考。該程序段中每個(gè)進(jìn)程退出時(shí)都用了語(yǔ)句exit(0,為什么請(qǐng)讀者思考。任務(wù)2程序>#include.h>#includc.h>#include.h>intpid1,pid2;intEndFlag=0;pf1=;pf2=;voidIntDelete(){,16);,17);EndFlag=1;}voidIntl(){printf(childprocessliskilled!byparent\n‖);exit;}voidInt2(){printf(childprocess2iskilled!byparent\n”);exit(0);}main(){intexitpid;signal,SIG_IGN);,;while=fork())=-1);if=0){signal(,Intl);signal,SIG_IGN);13pause(;;}else{while((pid=fork())=-1);if(pid2=0){,Intl);,SIG_IGN);pause(

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論