Linux進(jìn)程管理實(shí)驗(yàn)_第1頁
Linux進(jìn)程管理實(shí)驗(yàn)_第2頁
Linux進(jìn)程管理實(shí)驗(yàn)_第3頁
Linux進(jìn)程管理實(shí)驗(yàn)_第4頁
Linux進(jìn)程管理實(shí)驗(yàn)_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Linux進(jìn)程管理實(shí)驗(yàn)一、實(shí)驗(yàn)內(nèi)容:1. 利用bochs觀測(cè)linux0.11下的PC進(jìn)程控制結(jié)構(gòu)。2. 利用bochs觀測(cè)linux0.11下的fork.c源代碼文件,簡(jiǎn)單分析其中 的重要函數(shù)。3. 在fork.c適當(dāng)位置添加代碼,以驗(yàn)證fork函數(shù)的工作原理。二、Linux進(jìn)程管理機(jī)制分析Linux有兩類進(jìn)程:一類是普通用戶進(jìn)程,一類是系統(tǒng)進(jìn)程,它既可以在用戶空間運(yùn)行,又可以通過系統(tǒng)調(diào)用進(jìn)入內(nèi)核空間,并在內(nèi)核空間運(yùn)行;另一類叫做內(nèi)核進(jìn)程,這種進(jìn)程只能在內(nèi)核空間運(yùn)行。 在以i386為平臺(tái)的Linux系統(tǒng)中,進(jìn)程由進(jìn)程控制塊,系統(tǒng)堆棧, 用戶堆棧,程序代碼及數(shù)據(jù)段組成。Linux系統(tǒng)中的每一個(gè)

2、用戶進(jìn)程 有兩個(gè)堆棧:一個(gè)叫做用戶堆棧,它是進(jìn)程運(yùn)行在用戶空間時(shí)使用的 堆棧;另一個(gè)叫做系統(tǒng)堆棧,它是用戶進(jìn)程運(yùn)行在系統(tǒng)空間時(shí)使用的 堆棧。1. Linux進(jìn)程的狀態(tài):Linux進(jìn)程用進(jìn)程控制塊的state域記錄了進(jìn)程的當(dāng)前狀態(tài),一個(gè) Linux進(jìn)程在它的生存期中,可以有下面6種 狀態(tài)。1. 就緒狀態(tài)(TASK_RUNNING)在此狀態(tài)下,進(jìn)程已掛入就緒隊(duì)列, 進(jìn)入準(zhǔn)備運(yùn)行狀態(tài)。2. 運(yùn)行狀態(tài)(TASK_RUNNING)當(dāng)進(jìn)程正在運(yùn)行時(shí),它的state域中的 值不改變。但是Linux會(huì)用一個(gè)專門指針(current)指向當(dāng)前運(yùn)行的任3. 可中斷等待狀態(tài)(TASK_INTERRUPTIBLE進(jìn)程

3、由于未獲得它所申請(qǐng) 的資源而處在等待狀態(tài)。不管是資源有效或者中斷喚醒信號(hào)都能使等 待的進(jìn)程脫離等待而進(jìn)入就緒狀態(tài)。即”淺睡眠狀態(tài)”4. 不可中斷等待狀態(tài)(TASK_UNINTERRUPTIBLE這個(gè)等待狀態(tài)與上面等待狀態(tài)的區(qū)別在于只有當(dāng)它申請(qǐng)的資源有效時(shí)才能被喚醒,而其它信號(hào)不能。即深睡眠狀態(tài)”5. 停止?fàn)顟B(tài)(TASK_STOPPED當(dāng)進(jìn)程收到一個(gè)SIGSTO信號(hào)后就由運(yùn) 行狀態(tài)進(jìn)入停止?fàn)顟B(tài),當(dāng)收到一個(gè)SINCON信號(hào)時(shí),又會(huì)恢復(fù)運(yùn)行狀 態(tài)。掛起狀態(tài)。6. 終止?fàn)顟B(tài)(TASK_ZOMBIE)進(jìn)程因某種原因終止運(yùn)行,但進(jìn)程控制 塊尚未注銷。即僵死狀態(tài)”狀態(tài)圖如下所示:2. Linux進(jìn)程控制塊:

4、 在Linux中,進(jìn)程控制塊為數(shù)據(jù)結(jié)構(gòu)task_struct,它包含了大量該進(jìn) 程的信息,這些信息大致為以下幾類:1) .進(jìn)程的當(dāng)前狀態(tài)2) .調(diào)度信息3) .進(jìn)程標(biāo)識(shí)4) .進(jìn)程的通信信息5) .進(jìn)程與其它進(jìn)程之間關(guān)系的信息6) .使用文件的信息7) .虛擬內(nèi)存與物理內(nèi)存的關(guān)系8) .計(jì)時(shí)器9) .處理器與進(jìn)程的有關(guān)信息3. Fork 函數(shù):父進(jìn)程創(chuàng)建一個(gè)子進(jìn)程最方便快捷的方式就是把父進(jìn)程的控制 塊照原樣復(fù)制一個(gè),然后再根據(jù)子進(jìn)程的修改特點(diǎn)對(duì)它進(jìn)行必要的修 改,形成子進(jìn)程的控制塊。系統(tǒng)調(diào)用 fork() 通過調(diào)用 find_empty_process 及copy_process 等 函數(shù)復(fù)制

5、一個(gè)當(dāng)前進(jìn)程的進(jìn)程控制塊,然后用新進(jìn)程標(biāo)識(shí)修改舊標(biāo)識(shí), 填寫子進(jìn)程與父進(jìn)程關(guān)系,創(chuàng)建子進(jìn)程堆棧和數(shù)據(jù)區(qū)。因此,fork()執(zhí)行后,父子進(jìn)程共享同一個(gè)存儲(chǔ)空間,父進(jìn)程的所有可共享資源都被子進(jìn)程通過數(shù)據(jù)結(jié)構(gòu)的復(fù)制繼承了過來。在父進(jìn)程調(diào)用fork()與在子進(jìn)程中調(diào)用fork() ,fork()的返回值不 同!如果是在父進(jìn)程調(diào)用fork(),則fork()就復(fù)制出一個(gè)子進(jìn)程,并返回子進(jìn)程的標(biāo)識(shí)ID,如果創(chuàng)建子進(jìn)程失敗,則fork()的返回值為-1;而如果在子進(jìn)程調(diào)用fork(),貝陀返回的是0。三、實(shí)驗(yàn)步驟及結(jié)果在安裝目錄下雙擊bochs.exe,選擇提供好的linux0.11配置文件,點(diǎn)擊start

6、,啟動(dòng)虛擬機(jī),如下圖所示:Licenced f or use mi th boch courtesy of MandralkcSoft-For inforMotion on this op other UGA deuelopment products contact El in Sys terns at - (800) 723-9938 or uuu .elji tin. comHochs J3 1US - builA:RRftuisinn: 1.Z31 $ SDrtte: Z6fin4/26 17:1?;0? SPpt ioTE : apirtbios pc ib ids e 1 tor i

7、to remb i 032Ct妞曲 master: Keneric 1Z34 ATA-b Hard-Disk (59 IIBytesIPress F12 f or boot menu kBootie。from Floppy,.hD(1 iFiy system * .Partit inn tflble ok .4510/fcG09G free blocks19ZZ0/Ze0O& free Inodes3462 buffers = 3545G08 bytes buffer spaceFree metfl: 1253291Z bytesOkL/usr/root Jtt利用bochs觀測(cè)linux0.

8、11下的PCB進(jìn)程控制結(jié)構(gòu)文件夾,如下所1.切換工作目錄到 /usr/src/linux/include/linux示:Llit cd n&rsrex* 1 inmix* iirtc ludel inurL usrZsxc( 1 i fiux/i nu 1, ndu” 1 inuLxl# 1 s匚oifiFig.h F s hhead hrm hsys Fif dresf h hdregkerine I . h sclied ti tty . hzusrzsi*c/ 1 inuxz inc Ludezl i nux IS2.利用vi編輯器打開sched.h頭文件,尋找struct task_s

9、truct 結(jié)構(gòu)體的定義,如下:1stritcl tak_sti?uct G slopped wLong prior*i電Loit(r sigrna 1.struct s igfacion s igact lohL32JjLonir blocked/* titmap ofsignals */var- ions f ields *z1 nt exit _code;uns i gned Long 0士孔1*電_匚口|4空 # eindl_u口亠亡Endl_dlE *艮brk舍七也七_(dá)wit;k: Lon(r pid,f ather,pgrp,session leader;uns igned hoi

10、-t hi4 j Euid t il id i unsigned short tjld jegid,sq id; long a lam;lon( utime j st ime, cut ime, cst imej start 11 me Ju.ns i gned short file sgsteht info */ Fn七 tty;uns iqned short str net m_Lnode struct m inodens Ed_raa七 :so i 七 milst be s ignedZ* 1 i f ria tty unasllong ebpPlong edi j long esi l

11、ony gsj tong noneT long ebxJlong ecXjlong edx, long fslong esj Long dsje ip j lonq cs, long ef lags, iofiff esp j 1 ong ss JslaLe - TA5K_UMINTERKUFTIBLE, p pid 工 lci3t_pid; p fither = current id: p-couri ter = p-pr iot i ty :_p-s ignal = 0;在該函數(shù)中有*p=*current 代碼,這句代碼表示:current是指向父進(jìn)程PCB吉構(gòu)體的指針,p是指向子進(jìn)程PC

12、B吉構(gòu)體的 指針,操作系統(tǒng)先把父進(jìn)程的PC結(jié)構(gòu)體完完整整的復(fù)制了一份給子 進(jìn)程。2.找到copy_mer函數(shù),發(fā)現(xiàn)其調(diào)用copy_page_tables。其中,copy_page_tables 的實(shí)現(xiàn)在 /usr/src/linux/mm/memory.c 文件中,其代碼截圖如下:ini copymewit int nr t struct task_3trnct * p)uns igned .1 ong td_datfl_has:e, nRU_(iata_bfixe,data_J in it; unsianFd I nng n n巳u_r:rHl亡一血穴否亡.jm it :cudii_l in

13、i1ml I CGxGf );lata limi L-irEL_liiiill CGxi?) u ld_c;udr_lKLJir -tLitiTEiiL- ldl 11 J );al(l_tlatn_lj4Sc - gcjt_bcsc (current ldt 2 1 ;i f tald_da ta_base !- o J d_code_base)pahicCUe den*t suppoift separate D)IIf (data_l i it ucwlj imit)necj_stflrt_codft = new-cnde-hAsei set_bdsetp-IdtEU ,reu_code

14、_baseJ; set_bcisK (ji- IdlLZJ j neu_ddt*_bt&se);IT (cupLi_piift_lcib les (j ld_dALd_buie t titw_da Lft_bnse,cli to_ L Ini L)( f rcc poiq|c_tflb les(nth)_dadatft_l innit); return -EHOnEM;return G:i iti f rce_iinye_lrtb I (n i j Nttil Luny fruniyrtK(l ung x ixtt 1p 2Z;dlr = Z0) St Oxf f c ): / _pg_dLr

15、 = G *x fur ; hike-; dir+*l iif (!(1 *dir)cont i nue;pg tabic k Curts tgntd Iotiq * J (Oxfrr f TOGO ft *d i r 1 ;for (nr-0 : hp1OZ4 ; nr *+J -EEf Cl ftfree pagcCOxfr tf f DGQ &tab Lc )i ;*pg_tab ie - W;PU_Lscirt_co20)6OxTfc) i exper_page_t ab le=(unsijneA 1 DingC Qxf f ffC *exp ejr_ii i r ) J ;pr Ln

16、tk C p Id : z I An*p-pld ;pr Fnth ( pagc-tab i c -xldn * t *expcr_pcife_4ablc J :fdrtkl=6;kls七戶t_ccjde!:expEr_r1 ir-CnsignE?d 1 dug temperf c 5 exptr_pt!jc_ttille-(mis li|ntd 1uiil| * 】(Gf ff f f(*exper_d Ir),pf imk(1 p id :黒 ldnu/ tasJcEldl:pr intk5&p-father!=4)是為了區(qū)別系統(tǒng)進(jìn)程與用戶進(jìn)程而設(shè)置的。因?yàn)椋绻贿@樣區(qū)分,會(huì)導(dǎo)致打印出一

17、些我們不想 看到的信息,造成混亂,不方便實(shí)驗(yàn)觀察。p-start_code是p所指向 進(jìn)程的頁目錄信息。exper_page_table是p所指向進(jìn)程的頁表信息。For(k1=0;k1NR_TASKS;k1+)循環(huán)是在系統(tǒng)的進(jìn)程槽中找到p所指向 進(jìn)程的父進(jìn)程,然后,將父進(jìn)程相關(guān)頁目錄,頁表信息打印。3保存并退出vi編輯器,切換工作目錄到/usr/src/linux執(zhí)10行.make clean命令,將系統(tǒng)以前的編譯信息清除掉。4. 然后執(zhí)行make命令,重新編譯linux0.11內(nèi)核5. 編譯完成后,輸入dd bs=8192 if=lmage of=/dev/fd0 ,用新生成的內(nèi)核替換掉舊的

18、內(nèi)核。/usr/irrEZl imixlJt drlif-Imdyt: uf-/clnuzfrlfi15*1 records in15+1 records out6點(diǎn)擊bochs中中的reset按鈕,重啟虛擬機(jī);重啟后,編譯運(yùn)行experiment.c文件,觀察實(shí)驗(yàn)效果,其中experiment.c程序代碼如下圖所示:Eincludettincludei n七 ma in()pid_t pi d :if(pid=forkC)=-lDpri ntF (,rfork errnr J ;else if(pid=6)pr intf (11 i am ch i Id my p i d is dSnir i d (); S lccpdGQ) Jelsepr intf(am father jmy pid

溫馨提示

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