版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
引導(dǎo)啟動(dòng)和系統(tǒng)初始化李韓超—2015/06/02引導(dǎo)啟動(dòng)程序(boot)
bootsect.s(磁盤引導(dǎo)塊程序)
head.s(與內(nèi)核其他程序一起鏈接成system模塊)
匯編程序
setup.s(操作系統(tǒng)加載程序)
初始化程序(init)
main.cC程序引導(dǎo)啟動(dòng)Bootsect.s將由BIOS讀入到內(nèi)存絕對(duì)地址0x7C00(31KB)處,當(dāng)它被執(zhí)行時(shí)就會(huì)把自己移動(dòng)到絕對(duì)地址0x90000(576KB)處,并把啟動(dòng)設(shè)備后2KB字節(jié)代碼(setup.s)讀入到內(nèi)存0x90200(576.5KB)處,而內(nèi)核的其他部分(system模塊:head.s和main.c)則被讀入到從內(nèi)存地址0x10000(64KB)開始處。虛線表示setup.s程序把system模塊移動(dòng)到物理內(nèi)存其實(shí)位置處(這樣system模塊中代碼的地址也即等于實(shí)際的物理地址,便于對(duì)內(nèi)核代碼和數(shù)據(jù)操作)代碼注釋//bootsect.s被bios啟動(dòng)子程序加載至0x7c00處,并將自己移到了0x90000處,并跳轉(zhuǎn)到那里。//然后它使用BIOS中斷將setup直接加載到自己的后面0x90200處,并將system加載到0x10000處!設(shè)備號(hào)0x306指定根文件系統(tǒng)設(shè)備是第二個(gè)硬盤的第一個(gè)分區(qū)幾個(gè)程序的開始地址ds寄存器:bootsect程序的原始地址es寄存器:bootsect被移到的地址Sub
ai,b
:ai=ai-b減法Si寄存器清零47-56行的作用是將自身(bootsect)從目前段位置0x07c0移動(dòng)到0x9000處,共256字,然后跳轉(zhuǎn)到移動(dòng)后代碼的go標(biāo)位處由int指令引發(fā)的中斷,讀磁盤扇區(qū)到內(nèi)存intnn為中斷類型碼,它的功能是引發(fā)中斷過程Jnc標(biāo)志位JumpnotCarry:沒進(jìn)位時(shí)跳轉(zhuǎn)68-77行的作用是利用BIOS中斷INT0x13將setup模塊從磁盤第二個(gè)扇區(qū)開始讀到0x90200開始處,共讀4個(gè)扇區(qū)。如果讀出錯(cuò),則復(fù)位驅(qū)動(dòng)器,并重試判斷是否成功,成功則繼續(xù)初始化程序(init)
12
3
4
5
利用之前去的的系統(tǒng)參數(shù)設(shè)置系統(tǒng)的根文件設(shè)備號(hào)以及一些內(nèi)存全局變量(主內(nèi)存的開始地址,系統(tǒng)所擁有的內(nèi)存容量,作為高速緩沖區(qū)內(nèi)存的末端地址)
239
內(nèi)核進(jìn)行所有方面的硬件初始化工作(陷阱門,塊設(shè)備,字符設(shè)備和tty),還有人工設(shè)置第一個(gè)任務(wù)(task0)。
待所有初始化工作完成后程序就設(shè)置中斷允許標(biāo)志以開啟中斷,并切換到任務(wù)0中運(yùn)行
-----------以上是內(nèi)核的初始化--------------------
內(nèi)核將執(zhí)行權(quán)切換到用戶模式(任務(wù)0),也即CPU從0特權(quán)級(jí)切換到第三特權(quán)級(jí)。
此時(shí)main.c的主程序就工作在任務(wù)0中,然后系統(tǒng)調(diào)用fork()創(chuàng)建出一個(gè)用于運(yùn)行init()的子進(jìn)程,并在其中調(diào)用init()函數(shù)。
進(jìn)程1執(zhí)行時(shí)原進(jìn)程0則會(huì)在系統(tǒng)空閑時(shí)被調(diào)度執(zhí)行,因此進(jìn)程0也被稱為idle進(jìn)程。
此時(shí)進(jìn)程0僅執(zhí)行pause()系統(tǒng)調(diào)用,并又會(huì)調(diào)用調(diào)度函數(shù)。
在該函數(shù)中程序?qū)⒗^續(xù)進(jìn)行應(yīng)用環(huán)境的初始化并執(zhí)行shell登錄程序。
init()函數(shù)的功能:1.安裝根文件目錄;2.顯示系統(tǒng)信息
3.運(yùn)行系統(tǒng)初始資源配置文件rc中的命令
4.執(zhí)行用戶登錄shell程序
首先代碼調(diào)用系統(tǒng)調(diào)用setup(),用來收集硬盤設(shè)備分區(qū)表信息并安裝根文件系統(tǒng)
根文件系統(tǒng):
內(nèi)核啟動(dòng)時(shí)所掛載(mount)的第一個(gè)文件系統(tǒng),內(nèi)核代碼的映像文件保存在根文件系統(tǒng)中,系統(tǒng)引導(dǎo)啟動(dòng)程序會(huì)在根文件系統(tǒng)掛載之后從中把一些初始化腳本(如rcS,inittab)和服務(wù)加載到內(nèi)存中去運(yùn)行。
然后init()打開一個(gè)終端設(shè)備tty0,并復(fù)制其文件描述符以產(chǎn)生標(biāo)準(zhǔn)輸入stdin,標(biāo)準(zhǔn)輸出stdout和錯(cuò)誤輸出stderr設(shè)備。
內(nèi)核隨后利用這些描述符在終端上顯示一些系統(tǒng)信息。init()又創(chuàng)建一個(gè)進(jìn)程2,并在其中為建立用戶交互使用環(huán)境而執(zhí)行一些初始配置操作。
*用戶交互使用環(huán)境即shell程序:一種具備特殊功能的程序,它是介于使用者和UNIX/linux操作系統(tǒng)之核心程序(kernel)間的一個(gè)接口
具體操作:內(nèi)核調(diào)用/bin/sh程序,首先通過關(guān)閉文件描述符0,并立即打開配置文件etc/rc,從而把標(biāo)準(zhǔn)輸入stdin定向到etc/rc文件上。然后再執(zhí)行shell處理rc。
最后,在新建進(jìn)程中為用戶建立一個(gè)新的會(huì)話,并運(yùn)行用戶登錄shell程序代碼注釋Inline內(nèi)嵌語句,這里使用內(nèi)嵌語句主要是防止弄亂堆棧。具體可以去看書!內(nèi)嵌語句,幾個(gè)系統(tǒng)調(diào)用中斷一些系統(tǒng)文件Extern:extern可置于變量或者函數(shù)前,以表示變量或者函數(shù)的定義在別的文件中,提示編譯器遇到此變量或函數(shù)時(shí),在其它模塊中尋找其定義。另外,extern也可用來進(jìn)行鏈接指定。系統(tǒng)各部分初始化//這段宏讀取CMOS實(shí)時(shí)時(shí)鐘信息。outb_p和inb_p是include/asm/io.h中定義的端口輸入輸出宏//定義宏,將BCD碼轉(zhuǎn)化為二進(jìn)制數(shù)值(因?yàn)镃MOS中存的都是BCD碼)設(shè)置系統(tǒng)時(shí)間//內(nèi)核初始化主程序。初始化結(jié)束后將以任務(wù)0的身份運(yùn)行//內(nèi)核進(jìn)行所有方面的初始化工作//空閑時(shí)無限循環(huán)pause()--------------以上是main()即內(nèi)核初始化-----------------------//產(chǎn)生格式化信息并輸出到標(biāo)準(zhǔn)輸出設(shè)備stdout(1),即屏幕//fork()創(chuàng)建子進(jìn)程(進(jìn)程2),子進(jìn)程返回0,父進(jìn)程返回pid//exit()退出時(shí)的出錯(cuò)碼1---操作未許可;2—文件或目錄不存在子進(jìn)程//關(guān)閉句柄0:stdin//以只讀方式打開/etc/rc//句柄:標(biāo)識(shí)應(yīng)用程序中的不同對(duì)象和同類對(duì)象中的不同的實(shí)例//execve:execve(執(zhí)行文件)在父進(jìn)程中fork一個(gè)子進(jìn)程,在子進(jìn)程中調(diào)用exec函數(shù)啟動(dòng)新的程序(shell程序)(接上)186-188:父進(jìn)程等待子進(jìn)程的結(jié)束。&i是存放返回狀態(tài)信息的位置。如果wait()返回值不等于子進(jìn)程號(hào),則繼續(xù)等待。//創(chuàng)建子進(jìn)程失敗//關(guān)閉stdin,stdout,stderr
//再次執(zhí)行系統(tǒng)解釋程序/bin/sh//復(fù)制一個(gè)現(xiàn)有的句柄,產(chǎn)生一個(gè)與“源句柄特性”完全一樣的新句柄
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能交通系統(tǒng)代理服務(wù)合同4篇
- 2025年度智能鋁板裝配一體化工程承包合同4篇
- 2025年度智慧城市建設(shè)項(xiàng)目承包經(jīng)營合同范本8篇
- 2025年度水電工程水土保持與生態(tài)修復(fù)承包合同集錦4篇
- 2025年度體育場館設(shè)施升級(jí)改造勞務(wù)分包合同3篇
- 2024年精簡版房地產(chǎn)銷售協(xié)議綱要版
- 2025年度特種車輛租賃與維護(hù)服務(wù)協(xié)議3篇
- 2025年度文化創(chuàng)意產(chǎn)業(yè)園區(qū)建設(shè)承包借款合同4篇
- 2025年度智能路燈與充電樁一體化安裝服務(wù)合同3篇
- 2024藝人經(jīng)紀(jì)合同糾紛案例
- 《消防設(shè)備操作使用》培訓(xùn)
- 新交際英語(2024)一年級(jí)上冊(cè)Unit 1~6全冊(cè)教案
- 2024年度跨境電商平臺(tái)運(yùn)營與孵化合同
- 2024年電動(dòng)汽車充電消費(fèi)者研究報(bào)告-2024-11-新能源
- 湖北省黃岡高級(jí)中學(xué)2025屆物理高一第一學(xué)期期末考試試題含解析
- 上海市徐匯中學(xué)2025屆物理高一第一學(xué)期期末學(xué)業(yè)水平測試試題含解析
- 稻殼供貨合同范本
- 《采氣樹基礎(chǔ)知識(shí)》課件
- 超齡員工用工免責(zé)協(xié)議書
- 機(jī)械工程師招聘筆試題及解答(某大型國企)
- 軟件運(yùn)維考核指標(biāo)
評(píng)論
0/150
提交評(píng)論