版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
引導(dǎo)啟動和系統(tǒng)初始化李韓超—2015/06/02引導(dǎo)啟動程序(boot)
bootsect.s(磁盤引導(dǎo)塊程序)
head.s(與內(nèi)核其他程序一起鏈接成system模塊)
匯編程序
setup.s(操作系統(tǒng)加載程序)
初始化程序(init)
main.cC程序引導(dǎo)啟動Bootsect.s將由BIOS讀入到內(nèi)存絕對地址0x7C00(31KB)處,當(dāng)它被執(zhí)行時(shí)就會把自己移動到絕對地址0x90000(576KB)處,并把啟動設(shè)備后2KB字節(jié)代碼(setup.s)讀入到內(nèi)存0x90200(576.5KB)處,而內(nèi)核的其他部分(system模塊:head.s和main.c)則被讀入到從內(nèi)存地址0x10000(64KB)開始處。虛線表示setup.s程序把system模塊移動到物理內(nèi)存其實(shí)位置處(這樣system模塊中代碼的地址也即等于實(shí)際的物理地址,便于對內(nèi)核代碼和數(shù)據(jù)操作)代碼注釋//bootsect.s被bios啟動子程序加載至0x7c00處,并將自己移到了0x90000處,并跳轉(zhuǎn)到那里。//然后它使用BIOS中斷將setup直接加載到自己的后面0x90200處,并將system加載到0x10000處!設(shè)備號0x306指定根文件系統(tǒng)設(shè)備是第二個(gè)硬盤的第一個(gè)分區(qū)幾個(gè)程序的開始地址ds寄存器:bootsect程序的原始地址es寄存器:bootsect被移到的地址Sub
ai,b
:ai=ai-b減法Si寄存器清零47-56行的作用是將自身(bootsect)從目前段位置0x07c0移動到0x9000處,共256字,然后跳轉(zhuǎn)到移動后代碼的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ū)。如果讀出錯,則復(fù)位驅(qū)動器,并重試判斷是否成功,成功則繼續(xù)初始化程序(init)
12
3
4
5
利用之前去的的系統(tǒng)參數(shù)設(shè)置系統(tǒng)的根文件設(shè)備號以及一些內(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)級切換到第三特權(quán)級。
此時(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則會在系統(tǒng)空閑時(shí)被調(diào)度執(zhí)行,因此進(jìn)程0也被稱為idle進(jìn)程。
此時(shí)進(jìn)程0僅執(zhí)行pause()系統(tǒng)調(diào)用,并又會調(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)核啟動時(shí)所掛載(mount)的第一個(gè)文件系統(tǒng),內(nèi)核代碼的映像文件保存在根文件系統(tǒng)中,系統(tǒng)引導(dǎo)啟動程序會在根文件系統(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和錯誤輸出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è)新的會話,并運(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í)的出錯碼1---操作未許可;2—文件或目錄不存在子進(jìn)程//關(guān)閉句柄0:stdin//以只讀方式打開/etc/rc//句柄:標(biāo)識應(yīng)用程序中的不同對象和同類對象中的不同的實(shí)例//execve:execve(執(zhí)行文件)在父進(jìn)程中fork一個(gè)子進(jìn)程,在子進(jìn)程中調(diào)用exec函數(shù)啟動新的程序(shell程序)(接上)186-188:父進(jìn)程等待子進(jìn)程的結(jié)束。&i是存放返回狀態(tài)信息的位置。如果wait()返回值不等于子進(jìn)程號,則繼續(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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國咨詢策劃服務(wù)產(chǎn)業(yè)運(yùn)營狀況與發(fā)展?jié)摿Ψ治鰣?bào)告
- 2024-2030年棕櫚酸甲酯搬遷改造項(xiàng)目可行性研究報(bào)告
- 2024-2030年撰寫:中國金屬切削機(jī)床制造項(xiàng)目風(fēng)險(xiǎn)評估報(bào)告
- 2024-2030年撰寫:中國泛影酸項(xiàng)目風(fēng)險(xiǎn)評估報(bào)告
- 2024-2030年工程技術(shù)研究中心公司技術(shù)改造及擴(kuò)產(chǎn)項(xiàng)目可行性研究報(bào)告
- 2022-2023學(xué)年四川省成都市彭州市小學(xué)三年級上冊語文期末試題及答案
- 2023-2024學(xué)年江蘇省南京市鼓樓區(qū)小學(xué)三年級上冊語文期末試題及答案
- 拔河課程設(shè)計(jì)仿真
- 2025年高考物理復(fù)習(xí)熱搜題速遞之機(jī)械波(2024年7月)
- 氨堿法制堿課程設(shè)計(jì)
- GB/T 18488-2024電動汽車用驅(qū)動電機(jī)系統(tǒng)
- 2023-2024學(xué)年成都市武侯區(qū)九年級上英語(一診)期末考試題(含答案)
- DZ∕T 0130-2006 地質(zhì)礦產(chǎn)實(shí)驗(yàn)室測試質(zhì)量管理規(guī)范(正式版)
- 2024年高中語文選擇性必修下冊理解性默寫含答案
- 2023北師大版新教材高中數(shù)學(xué)選擇性必修第一冊同步練習(xí)-全書綜合測評
- 人工智能基礎(chǔ)題庫(含答案)
- 中藥鑒定學(xué)智慧樹知到期末考試答案章節(jié)答案2024年中國藥科大學(xué)
- 中西友誼觀差異研究-以《哪吒之魔童降世》和《哈利·波特》為例
- JJG 693-2011可燃?xì)怏w檢測報(bào)警器
- 2024-2029年中國水利行業(yè)發(fā)展分析及發(fā)展前景與趨勢預(yù)測研究報(bào)告
- 電表分戶申請書范本合集3篇
評論
0/150
提交評論