




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、簡析linux內(nèi)核的執(zhí)行流程從bootsect.s到main.c(內(nèi)核版本0.11)Linux啟動的第一階段(從開機到main.c)3個任務:A、啟動BBIOSS,準備備實模式式下的中中斷向量量表和中中斷服務務程序。B、從啟動動盤加載載操作系系統(tǒng)程序序到內(nèi)存存。C、為執(zhí)行行32的的maiin函數(shù)數(shù)做過渡渡準備。內(nèi)存變化如如下:、0 xFEE0000到0 xxFFFFFF是是BIOOS啟動動塊,其其中上電電后第一一條指令令在0 xxFFFFF0。、而后0 xx000000到到0 x0003FFF總共共1KBB存放中中斷向量量表,而而接下去去的地址址到0 xx0044FF共共2566B存放放BIO
2、OS數(shù)據(jù)據(jù),從00 x0EE05BB開始的的約8KKB的內(nèi)內(nèi)存中存存放中斷斷服務程程序。、利用BIIOS中中斷0 xx19hh把硬盤盤的第一一扇區(qū)bboottsecct.ss的代碼碼加載到到內(nèi)存中中,即00 x077c000處,后后轉(zhuǎn)到該該處執(zhí)行行。、將boootseect.s的代代碼復制制到0 xx900000處處。、利用中斷斷0 x113h將將settup.s程序序加載到到內(nèi)存00 x9002000處。、再將剩余余的約2240個個扇區(qū)的的內(nèi)容加加載到00 x10000000 xx2EFFFF處處。、開始轉(zhuǎn)到到settup.s處執(zhí)執(zhí)行,第第一件事事就利用用BIOOS提供供的中斷斷服務程程序從
3、設(shè)設(shè)備上獲獲取內(nèi)核核運行的的所需系系統(tǒng)數(shù)據(jù)據(jù)并存在在0 x9900000的地地址處,這這時將原原來boootssectt.s的的代碼覆覆蓋得只只剩2BBytee的空間間。、關(guān)中斷并并將系統(tǒng)統(tǒng)代碼復復制到00 x0000000處,將將原來放放在這里里的中斷斷向量表表與BIIOS數(shù)數(shù)據(jù)區(qū)覆覆蓋掉,地地址范圍圍是0 xx0000000 x11EFFFF。同同時制作作兩表與與兩寄存存器。開地址線AA20,尋尋址空間間達到44GB,后后對82259重重新編程程,改變變中斷號號。、轉(zhuǎn)到heead.s(大大小是225K+1844B)執(zhí)執(zhí)行,執(zhí)執(zhí)行該程程序完后后是這樣樣的:0 x0000000 x004FFF
4、F:頁頁目錄與與4個頁頁表,每每一項是是4KBB,共220KBB;0 x0500000 x0054000:共共1KBB的空間間是軟盤盤緩沖區(qū)區(qū);0 x0544010 x0054bb8:共共1844B沒用用;0 x0544b90 x005cbb8:共共2KBB的空間間存中斷斷描述符符表;0 x05ccb90 x0064bb8:共共2KBB的空間間存全局局描述符符表;之后就是mmainn函數(shù)的的代碼了了!第二階段、從從maiin.cc函數(shù)到到系統(tǒng)準準備完畢畢階段。第一步:創(chuàng)創(chuàng)建進程程0,并并讓進程程0具備備在322位保護護模式下下載主機機中的運運算能力力。流程程是:復制根設(shè)備備和硬盤盤參數(shù)表表 (
5、mmainn.c中中的1002、1110、1111行行) 物理內(nèi)存規(guī)規(guī)劃格局局(maain.c的1112行行1226行,其其中有 rrd_iinitt函數(shù)定定義在kkernnel/rammdissk.cc中,此此函數(shù)用用于虛擬盤盤初始化化;而mmem_iniit函數(shù)數(shù)是用于于內(nèi)存管管理結(jié)構(gòu)構(gòu)初始化化,定義義在meem/mmemoory.c中,該該函數(shù)頁頁面使用用 虛擬盤設(shè)置置與初始始化次數(shù)均均設(shè)置成成1000,然后后再依據(jù)據(jù)主內(nèi)存存的起始位位置和終終止位置置將處于于主內(nèi)存存的所有有頁面的的使用次數(shù)數(shù)全部清清零,系系統(tǒng)以后后把使用用次數(shù)為為0的頁頁面視為空空閑頁面面。)內(nèi)存管理結(jié)結(jié)構(gòu)meem_m
6、map初初始化 異常處理類類中斷服服務程序序掛接(在maain.c的1127行行,trrap()函數(shù)數(shù)定義 keerneel/ttrapp.c,目目的是將將各種中中斷與中中斷描述述符表掛掛接。)初始化塊設(shè)設(shè)備與字字符設(shè)備備請求項項結(jié)構(gòu)(在在maiin.cc的1228、1129行行,blkk_deev_iinitt()定義在在kerrnell/bllk_ddev/ll_rw_blkk.c,chr_ddev_iniit()定義在在kerrnell/chhr_ddev/ttyy_ioo.c)將串口與顯顯示器外外設(shè)的中中斷服務務程序掛掛接(在在maiin.cc的1330行, ttyy_innit()定
7、義義在keerneel/cchr_devv/ttty_iio.cc)開啟時間設(shè)設(shè)置(在在maiin.cc的1331行,ttimee_innit()定義義于maain.c函數(shù)數(shù) 76行行staartuup_ttimee)系統(tǒng)開始激激活進程程0(在maain.c的1131行行,scchedd_innit()定義義在keerneel/ schhed.c函數(shù)數(shù)中,該該函數(shù)實實現(xiàn)進程程相關(guān)事事務設(shè)置置依據(jù)時鐘中中斷設(shè)置置,系統(tǒng)統(tǒng)調(diào)用服服務程序序掛接。系系統(tǒng)調(diào)用用函數(shù)是是對用戶戶程序的的最基本本支持,利利用的是是進程相關(guān)事事務初始始化設(shè)置置系統(tǒng)調(diào)調(diào)用軟中中斷,詳詳細見下下面講 的。)時鐘中斷設(shè)設(shè)置系統(tǒng)調(diào)用
8、服服務程序序掛接 初始化緩沖沖區(qū)管理理結(jié)構(gòu)(在在maiin.cc中1333行, buffer_init(buffer_memory_end)定義fs/buffer.c) 初始化硬、軟軟盤(mmainn.c中中1344、1335行,hhd_iinitt與fllopppy_iinitt定義于keerneel/bblk_drvv/hdd.c和和kerrnell/bllk_ddrv/flooppyy.c)開中斷(maain.c中1136行行,stti()第二步:以以進程00為母本本創(chuàng)建進進程1,使使進程11不僅僅僅具備進進程0所所擁有的的能力,而而且還能能以文件件的形式式與外設(shè)設(shè)進行數(shù)數(shù)據(jù)交互互。流程
9、程是:操作系統(tǒng)為為進程00創(chuàng)建進進程1做做準備 maain.c中1137行行,moove_to_user_modde()定義在在inccludde/aasm/sysstemm.h,實實現(xiàn)從內(nèi)核態(tài)到用用戶態(tài)。進進程0正正式開始始執(zhí)行,而而后執(zhí)行maiin.cc的1338行的的“if(!foork()”,開始始創(chuàng)建在進程槽中中為進程程1申請請一個空空閑位置置并獲取取進程號號進程1,此此時將執(zhí)執(zhí)行unnistted.h中的的sysscalll0宏宏函數(shù),得到一個個編號,對對于foork函函數(shù),其其值是22,具體體在這個程序序中的第第62行行有定義義,然后后執(zhí)行軟軟中斷復制進程00的信息息之前,先先將
10、一些些數(shù)據(jù)壓壓棧 ,進入入系統(tǒng)調(diào)調(diào)用階段段,跳到到內(nèi)核態(tài)態(tài),執(zhí)行行kerrnell/syysteem_ccalll.s中中的代碼碼,將一一些寄存存器的值壓棧棧后,通通過剛才才在unnistted.h中給給eaxx賦值初步設(shè)置進進程1管管理結(jié)構(gòu)構(gòu)的2偏偏移值在在系統(tǒng)調(diào)調(diào)用syys_ccalll_taablee中找到到syss_foork函函數(shù),跳跳到該函函數(shù)執(zhí)行行。進入后首首先申請請一個空空閑位置置并獲取取進程號號。這同樣在ssysttem_calll.ss函數(shù)中中的syys_fforkk進程0創(chuàng)建建進程11的過程程中發(fā)生生時鐘中中斷中的_ffindd_coopy_ proocesss,再再跳到
11、該該函數(shù)的的定義處處kerrnell/fork.c中,后后返回到到syss_foork中中,在從中斷返回回復制進進程信息息前,再再將一些些數(shù)據(jù)壓壓棧, 此時有有一個寄寄存器的的值和前前面的不不一樣,那就是eaax,此此時是11,它從從tassk664中中得到的。之之后執(zhí)行行coppy_pproccesss,跳到到調(diào)整進程11的管理理結(jié)構(gòu)定義處處kerrnell/foork.c中,設(shè)設(shè)置進程程1的 管理結(jié)結(jié)構(gòu)。假假如此時時發(fā)生時時鐘中斷斷,系統(tǒng)統(tǒng)會響應并執(zhí)執(zhí)行keerneel/ssysttem_calll.ss函數(shù)中的timmer_intterrruptt定義處處,先壓壓棧后設(shè)置進程11的線性性
12、地址空空間及物物理頁面面進入kkernnel/schhed.c的do_ttimeer函數(shù)數(shù),別忘忘了此時時仍在進進程0執(zhí)行,然然后便發(fā)發(fā)現(xiàn)時間間片還沒沒完,所所以跳出,并返返回到rret_froom_ssys_calll。這這是繼續(xù)調(diào)整進進程1的的管理結(jié)結(jié)構(gòu)在keerneel/ssysttem_calll.ss中定義義的,接著直接將將剛才的的壓棧數(shù)數(shù)據(jù)出棧棧,繼續(xù)續(xù)完成剛才創(chuàng)建進進程1的的任務,即即在foork.c中繼繼續(xù)調(diào)整進程11的管理理結(jié)構(gòu),同同時設(shè)置置進程進程0準備備切換到到進程111的線線性地址址空間及及物理頁頁面,直直到執(zhí)行到這條條語句“p-staate=TASSK_RUNNIIN
13、G;retturnn laast_pidd;”,標志志著系統(tǒng)切換到到進程11執(zhí)行進程11創(chuàng)建完完成。后后跳出ccopyy_prroceess.c函數(shù),返回回到syysteem_ccalll.s,將將壓棧的的進程1開始始執(zhí)行的寄存存器值出出棧,此此時eaax是11。后中中斷返回回 ,進程程由從內(nèi)內(nèi)核態(tài)變變?yōu)橛脩魬魬B(tài),即即到了uniisteed.hh的“if(_rees=0)”這條指指令中,_res的的值就是是eaxx的值,一一判斷成成立,就就返進程1開始始以數(shù)據(jù)據(jù)塊的形形式操作作硬盤回該值值。最后后回到了了maiin.cc 的“if(!foork()”中,一一判斷不不成立,跳跳出執(zhí)行下一一條指令
14、令“forr(;)paausee();”,同理理Pausee函數(shù)也也和foork函函數(shù)一樣樣,這里里就不將找到的緩緩沖塊與與請求項項掛接講了,進進入syys_ppausse()后將進進程0置為可中斷斷等待狀狀態(tài),并并調(diào)用在在kerrnell/scheed.cc定義的的schheduule()函數(shù)數(shù)切換進進程。進程切換中中斷返回回后執(zhí)行行了第一一條語句句將請求項與與硬盤處處理函數(shù)數(shù)掛接是“if(_rees=0)”,一判判斷, 剛存的的eaxx值為00,返回回到“if(!foork()”判斷為真,執(zhí)執(zhí)行innit()函函數(shù),這這在maain.c定義。進入入iniit.cc后其程程序執(zhí)行行流程見見附
15、錄,進行硬盤讀讀盤前的的工作準準備各個程程序執(zhí)行行目的正正如左邊邊寫的一一樣。給硬盤下達達讀盤命命令進程1由于于等待讀讀盤操作作掛起系統(tǒng)切換到到進程00執(zhí)行進程0執(zhí)行行過程中中發(fā)生硬硬盤中斷斷 硬盤中斷斷服務程程序響應應后,進進程0繼繼續(xù)執(zhí)行行再次響應硬硬盤中斷斷,并喚喚醒進程程1 讀盤操作作完成后后進程11繼續(xù)執(zhí)執(zhí)行 進程1繼繼續(xù)設(shè)置置硬盤管管理結(jié)構(gòu)構(gòu) 進程1獲獲取軟盤盤超級塊塊,為加加載根文文件系統(tǒng)統(tǒng)做準備備 進程1備備份超級級塊數(shù)據(jù)據(jù) 進程1將將根文件件系統(tǒng)從從軟盤拷拷貝到虛虛擬盤進程1開始始加載根根文件系系統(tǒng)進程1準備備加載根根文件系系統(tǒng)超級級塊進程1繼續(xù)續(xù)加載根根文件系系統(tǒng)進程1準備
16、備獲取根根目錄節(jié)節(jié)點進程1加載載根目錄錄節(jié)點進程1結(jié)束束加載根根文件系系統(tǒng)的過過程進程1與內(nèi)內(nèi)核文件件表掛接接,為打打開文件件做準備備確定打開操操作的起起點獲取枝梢ii節(jié)點ddev目目錄文件件的i節(jié)節(jié)點確定devv的目錄錄文件ii節(jié)點為為枝梢節(jié)節(jié)點繼續(xù)返回枝枝梢i節(jié)節(jié)點查找ttyy0文件件的i節(jié)節(jié)點將tty00設(shè)備文文件的ii節(jié)點,返返回給ssys_opeen系統(tǒng)統(tǒng)調(diào)用分析ttyy0文件件i節(jié)點點設(shè)置文件管管理結(jié)構(gòu)構(gòu)并返回回給用戶戶進程進程復制ttty00文件句句柄進程1繼續(xù)續(xù)復制ttty00文件句句柄第三步:以以進程11為母本本創(chuàng)建進進程2,使使進程22在全面面具備進進程1所所擁有的的能力和
17、和環(huán)境的的基礎(chǔ)上上,進一一步具備備支持”人機交交互“的能力力,最終終實現(xiàn)準準備階段段完成。流流程如下下:進程1準備備創(chuàng)建進進程2 與進進程0創(chuàng)創(chuàng)建進程程1一樣樣,創(chuàng)建建進程22,復 制進進程1的的管理結(jié)結(jié)構(gòu),復復制頁表表、頁目目錄 項等等,創(chuàng)建建進程22后即執(zhí)執(zhí)行到iinitt/maain.c中復制進程22的管理理結(jié)構(gòu)并并進行調(diào)調(diào)整 1766行與1186行行,分別別是:iif(!(piid =fforkk()中子進進程即進進程2執(zhí)執(zhí)行,而而父進程程( 進程程1)執(zhí)執(zhí)行1886行的的if(pidd0),父父進程調(diào)整進程22管理結(jié)結(jié)構(gòu)中與與文件有有關(guān)的內(nèi)內(nèi)容 進入入waiit函數(shù)數(shù),等待待! 進入
18、入waiit函數(shù)數(shù)后還做做了一些些動作:首先 查找找自己的的子進程程,確定定是進程程2后,判判斷進程1執(zhí)行行過程中中發(fā)生時時鐘中斷斷 進程程2是否否處于終終止狀態(tài)態(tài)或是 僵死死狀態(tài),一一判斷不不是,就就將進程程1設(shè)置置為 可中中斷等待待狀態(tài),繼繼而調(diào)用用schheduule()函數(shù)數(shù)進程1從時時鐘中斷斷返回 準準備切換換到進程程2執(zhí)行行 切換到到進程22。 進進入進程程2后開開始加載載sheell程程序。首首先執(zhí) 行iinitt/maain.c中1180行行的“cloose(0);”,就是是進程1查找找它自己己的子進進程 解除ffilpp200與ffilee_taablee644的第第一項 關(guān)
19、系,這這是從進進程1繼繼承過來來的。然然后 是是“if(opeen(etcc/rcc,OO_RDDONLLY,00))”,對進程2的的狀態(tài)進進行處理理 其中是是將進程程2的管管理結(jié)構(gòu)構(gòu)指針表表fillp 20的第一一項與ffilee_taablee644的第第一項建建立 一一個關(guān)于于資源配配置的文文件,而而后再執(zhí)執(zhí)行切換到進程程2執(zhí)行行 eexeccve函函數(shù),并并映射到到syss_exxecvve系統(tǒng)統(tǒng)調(diào)用。 再再調(diào)用ddo_eexeccve函函數(shù),目目的便是是將參數(shù)數(shù) 與與環(huán)境變變量加載載到主內(nèi)內(nèi)存的頁頁面中去去,中斷斷為打開/eetc/rc文文件做準準備 返回,但但此時在在該函數(shù)數(shù)里已經(jīng)
20、經(jīng)將EIIP的 值指指向了sshelll程序序的入口口地址,所所以返回回后 執(zhí)行行的是sshelll的第第一條指指令,但但這時卻卻發(fā)現(xiàn)進程2打開開”/ettc/rrc“配置文文件 內(nèi)存中中沒有這這一條指指令的映映射, 所以以發(fā)生“缺頁中中斷”,然后后調(diào)用ppagee_faaultt 函數(shù)中中的doo_noo_paage。通過壓棧為為加載sshelll文件件做準備備為參數(shù)和環(huán)環(huán)境變量量設(shè)置做做準備得到sheell文文件i節(jié)節(jié)點為加載參數(shù)數(shù)和環(huán)境境變量做做準備根據(jù)i節(jié)點點,為sshelll文件件進行檢檢測檢測sheell文文件頭備份文件頭頭并進行行分析對shelll文件件進行進進一步分分析拷貝參數(shù)
21、與與環(huán)境變變量調(diào)整進程22的管理理結(jié)構(gòu)繼續(xù)調(diào)整進進程2的的管理結(jié)結(jié)構(gòu)釋放進程22繼承的的頁面檢測協(xié)處理理器調(diào)整sheell程程序所在在的線性性地址空空間為shelll程序序準備參參數(shù)與環(huán)環(huán)境變量量繼續(xù)調(diào)整進進程2的的管理結(jié)結(jié)構(gòu)調(diào)整EIPP,使其其指向sshelll程序序的入口口地址Shelll程序執(zhí)執(zhí)行發(fā)生生缺頁中中斷缺頁中斷中中sheell程程序加載載前檢測測為即將載入入的內(nèi)容容申請頁頁面為shelll載入入新獲得得的頁面面根據(jù)sheell進進程的情情況,調(diào)調(diào)整頁面面內(nèi)容將線性地址址空間與與程序所所在的物物理頁面面相對應應 SShelll程序序開始執(zhí)執(zhí)行,執(zhí)執(zhí)行的內(nèi)內(nèi)容是/etcc/ rcc
22、里面的的命令,其其中便有有創(chuàng)建uupdaate進進Shelll進程準準備創(chuàng)建建upddatee進程 程,該該進程是是為同步步緩沖區(qū)區(qū)與硬盤盤而 設(shè)的進進程,它它會時不不時的進進入睡眠眠狀 態(tài),經(jīng)經(jīng)過一定定的時間間再被喚喚醒然后后更新進程2開始始執(zhí)行/etcc/rcc文件 緩沖沖區(qū)與硬硬盤的數(shù)數(shù)據(jù)。之之后創(chuàng)建建完成后后 Shhelll進程退退出,退退出操作作當然得得釋放它它占 用的的資源或或者是清清除掉,或或者是將將使用次次數(shù)準備加載uupdaate進進程 減減1。然然后為進進程1找找到一個個子進程程, 那就是是upddatee進程了了,發(fā)信信號告訴訴進程11 sheell進進程退出出,進程程1喚醒醒執(zhí)行,重重新進入入Shelll程序檢檢測“etcc/rcc”文件 maiin.cc函數(shù)中中執(zhí)行1180行行后面的的程序 再次次創(chuàng)建sshelll進程程,現(xiàn)在在進程號號是4,同同樣 與與之前的的一樣,但但此時稍稍微有點點不同的的是Shelll進程退退出 opeen的參參數(shù)是/devv/ttty0,這這是一個個設(shè)備 文文件,與與之
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 低碳項目合同履約金約定
- 2024年四川湖山電器股份有限公司招聘筆試真題
- 2024年寧波市消防救援支隊社會招錄政府專職消防員筆試真題
- 2024年臨汾市襄汾縣開發(fā)公益性崗位招用就業(yè)困難筆試真題
- 熱電施工合同范本
- 宣傳意向合同范本
- 2024年保定市第一醫(yī)院招聘工作人員考試真題
- 2025至2030年中國機床銘牌數(shù)據(jù)監(jiān)測研究報告
- 修補墻體合同范本
- 2025至2030年中國抄網(wǎng)竿數(shù)據(jù)監(jiān)測研究報告
- DZ∕T 0054-2014 定向鉆探技術(shù)規(guī)程(正式版)
- 《研學旅行市場營銷》課件-研學旅行市場營銷之內(nèi)容營銷
- 間質(zhì)性腎炎課件
- 院感基礎(chǔ)知識培訓
- 安全生產(chǎn)責任制考核制度和考核表(完整版)
- 19J102-1 19G613混凝土小型空心砌塊墻體建筑與結(jié)構(gòu)構(gòu)造
- 2024年常州信息職業(yè)技術(shù)學院單招職業(yè)技能測試題庫及答案解析
- 《中國陶瓷史》課件-1-中國陶瓷史概述
- 英語教師課堂提問省公開課一等獎全國示范課微課金獎課件
- 經(jīng)皮式氣管切開術(shù)
- 2024嘉興市城南街道招聘筆試參考題庫附帶答案詳解
評論
0/150
提交評論