




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 嵌入式系統(tǒng)期中大作業(yè) 題目:Linux的啟動(dòng)過(guò)程分析 學(xué) 院:信息工程 專(zhuān) 業(yè):網(wǎng)絡(luò)工程 姓 名:梁法成 學(xué) 號(hào):8 2016.4.15 目 錄1.從開(kāi)機(jī)加電到執(zhí)行main函數(shù)之前的過(guò)程1.1啟動(dòng)BIOS,準(zhǔn)備實(shí)模式下的中斷向量表和中斷服務(wù)程序1.1.1BIOS的啟動(dòng)原理1.1.2BIOS在內(nèi)存中加載中斷向量表和中斷服務(wù)程序1.2加載操作系統(tǒng)內(nèi)核程序并為保護(hù)模式做準(zhǔn)備1.2.1加載第一部分內(nèi)核代碼引導(dǎo)程序(bootsect)1.2.2加載第二部分內(nèi)核代碼setup1.2.3加載第三部分內(nèi)核代碼system模塊1.3開(kāi)始向32位模式轉(zhuǎn)變,為main函數(shù)的調(diào)用做準(zhǔn)備1.3.1關(guān)中斷并將syste
2、m移動(dòng)到內(nèi)存地址起始位置0x000001.3.2設(shè)置中斷描述符表和全局描述符表1.3.3打開(kāi)A20,實(shí)現(xiàn)32位尋址1.3.4為保護(hù)模式下執(zhí)行head.s做準(zhǔn)備1.3.5head.s開(kāi)始執(zhí)行2.從main到怠速2.1 設(shè)備環(huán)境初始化及激活進(jìn)程02.1.1 與建立人機(jī)交互界面相關(guān)的外設(shè)的中斷服務(wù)程序掛接2.1.2初始化進(jìn)程02.1.3初始化硬盤(pán)2.1.4開(kāi)啟中斷2.2 進(jìn)程1的創(chuàng)建及執(zhí)行2.2.1 進(jìn)程0創(chuàng)建進(jìn)程12.2.2 內(nèi)核第一次做進(jìn)程調(diào)度2.2.3輪轉(zhuǎn)到進(jìn)程1執(zhí)行2.3 進(jìn)程2的創(chuàng)建及執(zhí)行2.3.1、打開(kāi)終端設(shè)備文件及復(fù)制文件句柄2.3.2、進(jìn)程1創(chuàng)建進(jìn)程2并切換到進(jìn)程22.3.3、加載s
3、hell程序2.3.4、實(shí)現(xiàn)系統(tǒng)怠速1.從開(kāi)機(jī)加電到執(zhí)行main函數(shù)之前的過(guò)程從開(kāi)機(jī)到main函數(shù)的執(zhí)行分三步完成,目的是實(shí)現(xiàn)從啟動(dòng)盤(pán)加載操作系統(tǒng)程序,完成執(zhí)行main函數(shù)所需要的準(zhǔn)備工作。第一步,啟動(dòng)BIOS,準(zhǔn)備實(shí)模式下的中斷向量表和中斷服務(wù)程序;第二步,從啟動(dòng)盤(pán)加載操作系統(tǒng)程序到內(nèi)存,加載操作系統(tǒng)程序的工作就是利用第一步中準(zhǔn)備的中斷服務(wù)程序?qū)崿F(xiàn)的;第三步,為執(zhí)行32位的main函數(shù)做過(guò)渡工作。本章將詳細(xì)分析這三步在計(jì)算機(jī)中是如何完成的,以及每一步在內(nèi)存中都做了些什么。1.1啟動(dòng)BIOS,準(zhǔn)備實(shí)模式下的中斷向量表和中斷服務(wù)程序問(wèn)題:在RAM中什么程序也沒(méi)有的時(shí)候,誰(shuí)來(lái)完成加載軟盤(pán)中操作系統(tǒng)
4、的任務(wù)呢?答案是:BIOS。1.1.1BIOS的啟動(dòng)原理從硬件角度看,Intel 80x86系列的CPU可以分別在16位實(shí)模式和32位保護(hù)模式下運(yùn)行。為了兼容,也為了解決最開(kāi)始的啟動(dòng)問(wèn)題,Intel 將所有80x86系列的CPU,包括最新型號(hào)的CPU的硬件都設(shè)計(jì)為加電即進(jìn)入16位實(shí)模式狀態(tài)運(yùn)行。同時(shí),還有一點(diǎn)非常關(guān)鍵的是,將CPU硬件邏輯設(shè)計(jì)為加電瞬間強(qiáng)行將CS的值置為0xF000、IP的值置為0xFFF0,這樣CS:IP就指向0xFFFF0這個(gè)地址位置。1.1.2BIOS在內(nèi)存中加載中斷向量表和中斷服務(wù)程序BIOS程序在內(nèi)存最開(kāi)始的位置(0x00000)用1 KB的內(nèi)存空間(0x000000
5、x003FF)構(gòu)建中斷向量表,在緊挨著它的位置用256字節(jié)的內(nèi)存空間構(gòu)建BIOS數(shù)據(jù)區(qū)(0x004000x004FF),并在大約57 KB以后的位置(0x0E05B)加載了8 KB左右的與中斷向量表相應(yīng)的若干中斷服務(wù)程序。中斷向量表中有256個(gè)中斷向量,每個(gè)中斷向量占4字節(jié),其中兩個(gè)字節(jié)是CS的值,兩個(gè)字節(jié)是IP的值。每個(gè)中斷向量都指向一個(gè)具體的中斷服務(wù)程序。1.2加載操作系統(tǒng)內(nèi)核程序并為保護(hù)模式做準(zhǔn)備從現(xiàn)在開(kāi)始,就要執(zhí)行真正的boot操作了,即把軟盤(pán)中的操作系統(tǒng)程序加載至內(nèi)存。對(duì)于Linux 0.11操作系統(tǒng)而言,計(jì)算機(jī)將分三批逐次加載操作系統(tǒng)的內(nèi)核代碼。第一批由BIOS中斷int0x19把
6、第一扇區(qū)bootsect的內(nèi)容加載到內(nèi)存;第二批、第三批在bootsect的指揮下,分別把其后的4個(gè)扇區(qū)和隨后的240個(gè)扇區(qū)的內(nèi)容加載至內(nèi)存。1.2.1加載第一部分內(nèi)核代碼引導(dǎo)程序(bootsect)經(jīng)過(guò)執(zhí)行一系列BIOS代碼之后,計(jì)算機(jī)完成了自檢等操作(這些和我們講的啟動(dòng)操作系統(tǒng)沒(méi)有直接的關(guān)系,讀者不必關(guān)心)。由于我們把軟盤(pán)設(shè)置為啟動(dòng)設(shè)備,計(jì)算機(jī)硬件體系結(jié)構(gòu)的設(shè)計(jì)與BIOS聯(lián)手操作,會(huì)讓CPU接收到一個(gè)int 0x19中斷。CPU接收到這個(gè)中斷后,會(huì)立即在中斷向量表中找到int 0x19中斷向量。接下來(lái),中斷向量把CPU指向0x0E6F2,這個(gè)位置就是int0x19相對(duì)應(yīng)的中斷服務(wù)程序的入口
7、地址。這個(gè)中斷服務(wù)程序的作用就是把軟盤(pán)第一扇區(qū)中的程序(512 B)加載到內(nèi)存中的指定位置。這個(gè)中斷服務(wù)程序的功能是BIOS事先設(shè)計(jì)好的,代碼是固定的,與Linux操作系統(tǒng)無(wú)關(guān)。無(wú)論Linux 0.11的內(nèi)核是如何設(shè)計(jì)的,這段BIOS程序所要做的就是“找到軟盤(pán)”并“加載第一扇區(qū)”,其余的它什么都不知道,也不必知道。按照這個(gè)簡(jiǎn)單、“生硬”的規(guī)則,int 0x19中斷向量所指向的中斷服務(wù)程序,即啟動(dòng)加載服務(wù)程序,將軟驅(qū)0號(hào)磁頭對(duì)應(yīng)盤(pán)面的0磁道1扇區(qū)的內(nèi)容復(fù)制至內(nèi)存0x07C00處。1.2.2加載第二部分內(nèi)核代碼setupbootsect對(duì)內(nèi)存的規(guī)劃BIOS已經(jīng)把bootsect也就是引導(dǎo)程序載入內(nèi)
8、存了,現(xiàn)在它的作用就是把第二批和第三批程序陸續(xù)加載到內(nèi)存中。為了把第二批和第三批程序加載到內(nèi)存中的適當(dāng)位置,bootsect首先做的工作就是規(guī)劃內(nèi)存。通常,我們是用高級(jí)語(yǔ)言編寫(xiě)應(yīng)用程序的,這些程序是在操作系統(tǒng)的平臺(tái)上運(yùn)行的。我們只管寫(xiě)高級(jí)語(yǔ)言的代碼、數(shù)據(jù)。至于這些代碼、數(shù)據(jù)在運(yùn)行的時(shí)候放在內(nèi)存的什么地方,是否會(huì)相互覆蓋,我們都不用操心,因?yàn)椴僮飨到y(tǒng)和高級(jí)語(yǔ)言的編譯器替我們做了大量的看護(hù)工作,確保不會(huì)出錯(cuò)?,F(xiàn)在我們討論的是,操作系統(tǒng)本身使用的是匯編語(yǔ)言,沒(méi)有高級(jí)語(yǔ)言編譯器替操作系統(tǒng)提供保障,只有靠操作系統(tǒng)的設(shè)計(jì)者把內(nèi)存的安排想清楚,確保無(wú)論操作系統(tǒng)如何運(yùn)行,都不會(huì)出現(xiàn)代碼與代碼、數(shù)據(jù)與數(shù)據(jù)、代碼
9、與數(shù)據(jù)之間相互覆蓋的情況。為了更準(zhǔn)確地理解操作系統(tǒng)的運(yùn)行機(jī)制,我們必須清楚操作系統(tǒng)的設(shè)計(jì)者是如何規(guī)劃內(nèi)存的。在實(shí)模式狀態(tài)下,尋址的最大范圍是1 MB。這些源代碼的作用就是對(duì)后續(xù)操作所涉及的內(nèi)存位置進(jìn)行設(shè)置,包括將要加載的setup程序的扇區(qū)數(shù)(SETUPLEN)以及被加載到的位置(SETUPSEG);啟動(dòng)扇區(qū)被BIOS加載的位置(BOOTSEG)及將要移動(dòng)到的新位置(INITSEG);內(nèi)核(ker-nel)被加載的位置(SYSSEG)、內(nèi)核的末尾位置(ENDSEG)及根文件系統(tǒng)設(shè)備號(hào)(ROOT_DEV)。設(shè)置這些位置就是為了確保將要載入內(nèi)存的代碼與已經(jīng)載入內(nèi)存的代碼及數(shù)據(jù)各在其位,互不覆蓋,并
10、且各自有夠用的內(nèi)存空間。下面,bootsect程序要執(zhí)行它的第二步工作:將setup程序加載到內(nèi)存中。加載setup這個(gè)程序,要借助BIOS提供的int 0x13中斷向量所指向的中斷服務(wù)程序(也就是磁盤(pán)服務(wù)程序)來(lái)完成。執(zhí)行int 0x13指令,產(chǎn)生0x13中斷,通過(guò)中斷向量表找到這個(gè)中斷服務(wù)程序,將軟盤(pán)第二扇區(qū)開(kāi)始的4個(gè)扇區(qū),即setup.s對(duì)應(yīng)的程序加載至內(nèi)存的SE-TUPSEG(0x90200)處。復(fù)制后的boot-sect的起始位置是0x90000,占用512字節(jié)的內(nèi)存空間。不難看出0x90200緊挨著bootsect的尾端,所以bootsect和setup是連在一起的?,F(xiàn)在,操作系統(tǒng)
11、已經(jīng)從軟盤(pán)中加載了5個(gè)扇區(qū)的代碼。等bootsect執(zhí)行完畢后,setup這個(gè)程序就要開(kāi)始工作了。1.2.3加載第三部分內(nèi)核代碼system模塊接下來(lái),bootsect程序要執(zhí)行第三批程序的載入工作,即將系統(tǒng)模塊載入內(nèi)存。bootsect借著B(niǎo)IOS中斷int 0x13,將240個(gè)扇區(qū)的system模塊加載進(jìn)內(nèi)存。加載工作主要是由bootsect調(diào)用read_it子程序完成的。到此為止,第三批程序已經(jīng)加載完畢,整個(gè)操作系統(tǒng)的代碼已全部加載至內(nèi)存。bootsect的主體工作已經(jīng)做完了。下面要通過(guò)執(zhí)行“jmpi 0, SETUPSEG”這行語(yǔ)句跳轉(zhuǎn)至0x90200處,就是前面講過(guò)的第二批程序set
12、up程序加載的位置。CS:IP指向setup程序的第一條指令,意味著由setup程序接著bootsect程序繼續(xù)執(zhí)行。setup程序現(xiàn)在開(kāi)始執(zhí)行。它做的第一件事情就是利用BIOS提供的中斷服務(wù)程序從設(shè)備上提取內(nèi)核運(yùn)行所需的機(jī)器系統(tǒng)數(shù)據(jù),其中包括光標(biāo)位置、顯示頁(yè)面等數(shù)據(jù),這些機(jī)器系統(tǒng)數(shù)據(jù)被加載到內(nèi)存的0x900000x901FC位置。圖1-15標(biāo)出了其內(nèi)容及準(zhǔn)確的位置。這些數(shù)據(jù)將在以后main函數(shù)執(zhí)行時(shí)發(fā)揮重要作用。到此為止,操作系統(tǒng)內(nèi)核程序的加載工作已經(jīng)完成。接下來(lái)的操作對(duì)Linux 0.11而言具有戰(zhàn)略意義。系統(tǒng)通過(guò)已經(jīng)加載到內(nèi)存中的代碼,將實(shí)現(xiàn)從實(shí)模式到保護(hù)模式的轉(zhuǎn)變,使Linux 0.1
13、1真正成為“現(xiàn)代”操作系統(tǒng)。1.3開(kāi)始向32位模式轉(zhuǎn)變,為main函數(shù)的調(diào)用做準(zhǔn)備接下來(lái),操作系統(tǒng)要使計(jì)算機(jī)在32位保護(hù)模式下工作。這期間要做大量的重建工作,并且持續(xù)工作到操作系統(tǒng)的main函數(shù)的執(zhí)行過(guò)程中。在本節(jié)中,操作系統(tǒng)執(zhí)行的操作包括打開(kāi)32位的尋址空間、打開(kāi)保護(hù)模式、建立保護(hù)模式下的中斷響應(yīng)機(jī)制等與保護(hù)模式配套的相關(guān)工作、建立內(nèi)存的分頁(yè)機(jī)制,最后做好調(diào)用main函數(shù)的準(zhǔn)備。1.3.1關(guān)中斷并將system移動(dòng)到內(nèi)存地址起始位置0x00000如圖所示,這個(gè)準(zhǔn)備工作先要關(guān)閉中斷,即將CPU的標(biāo)志寄存器(EFLAGS)中的中斷允許標(biāo)志(IF)置0。這意味著,程序在接下來(lái)的執(zhí)行過(guò)程中,無(wú)論是否
14、發(fā)生中斷,系統(tǒng)都不再對(duì)此中斷進(jìn)行響應(yīng),直到main函數(shù)中能夠適應(yīng)保護(hù)模式的中斷服務(wù)體系被重建完畢才會(huì)打開(kāi)中斷,而那時(shí)候響應(yīng)中斷的服務(wù)程序?qū)⒉辉偈荁IOS提供的中斷服務(wù)程序,取而代之的是由系統(tǒng)自身提供的中斷服務(wù)程序。下面,setup程序做了一個(gè)影響深遠(yuǎn)的動(dòng)作:將位于0x10000的內(nèi)核程序復(fù)制至內(nèi)存地址起始位置0x00000處!這樣做能取得“一箭三雕”的效果:1)廢除BIOS的中斷向量表,等同于廢除了BIOS提供的實(shí)模式下的中斷服務(wù)程序。2)收回剛剛結(jié)束使用壽命的程序所占內(nèi)存空間。3)讓內(nèi)核代碼占據(jù)內(nèi)存物理地址最開(kāi)始的、天然的、有利的位置。1.3.2設(shè)置中斷描述符表和全局描述符表setup程序繼
15、續(xù)為保護(hù)模式做準(zhǔn)備。此時(shí)要通過(guò)setup程序自身提供的數(shù)據(jù)信息對(duì)中斷描述符表寄存器(IDTR)和全局描述符表寄存器(GDTR)進(jìn)行初始化設(shè)置。GDT(Global Descriptor Table,全局描述符表),在系統(tǒng)中唯一的存放段寄存器內(nèi)容(段描述符)的數(shù)組,配合程序進(jìn)行保護(hù)模式下的段尋址。它在操作系統(tǒng)的進(jìn)程切換中具有重要意義,可理解為所有進(jìn)程的總目錄表,其中存放每一個(gè)任務(wù)(task)局部描述符表(LDT,Local Descriptor Table)地址和任務(wù)狀態(tài)段(TSS,TaskStructure Segment)地址,完成進(jìn)程中各段的尋址、現(xiàn)場(chǎng)保護(hù)與現(xiàn)場(chǎng)恢復(fù)。IDT(Interru
16、pt Descriptor Table,中斷描述符表),保存保護(hù)模式下所有中斷服務(wù)程序的入口地址,類(lèi)似于實(shí)模式下的中斷向量表。1.3.3打開(kāi)A20,實(shí)現(xiàn)32位尋址下面是標(biāo)志性的動(dòng)作打開(kāi)A20!打開(kāi)A20,意味著CPU可以進(jìn)行32位尋址,最大尋址空間為4 GB。打開(kāi)A20現(xiàn)在看來(lái),Linux 0.11還顯得有些稚嫩,最大只能支持16 MB的物理內(nèi)存,但是其線性尋址空間已經(jīng)是不折不扣的4 GB。1.3.4為保護(hù)模式下執(zhí)行head.s做準(zhǔn)備setup程序?qū)PU工作方式設(shè)為保護(hù)模式。將CR0寄存器第0位(PE)置1,即設(shè)定處理器工作方式為保護(hù)模式。1.3.5head.s開(kāi)始執(zhí)行head程序除了做一些
17、調(diào)用main的準(zhǔn)備工作之外,還做了一件對(duì)內(nèi)核程序在內(nèi)存中的布局及內(nèi)核程序的正常運(yùn)行有重大意義的事,就是用程序自身的代碼在程序自身所在的內(nèi)存空間創(chuàng)建了內(nèi)核分頁(yè)機(jī)制,即在0x的位置創(chuàng)建了頁(yè)目錄表、頁(yè)表、緩沖區(qū)、GDT、IDT,并將head程序已經(jīng)執(zhí)行過(guò)的代碼所占內(nèi)存空間覆蓋。這意味著head程序自己將自己廢棄,main函數(shù)即將開(kāi)始執(zhí)行。這些工作完成后,內(nèi)存中的布局如圖所示??梢钥闯?,只有184字節(jié)的剩余代碼。由此可見(jiàn),在設(shè)計(jì)head程序和system模塊時(shí),其計(jì)算是非常精確的,對(duì)head.s的代碼量的控制非常到位。開(kāi)機(jī)時(shí)的16位實(shí)模式與main函數(shù)執(zhí)行需要的32位保護(hù)模式之間有很大的差距,這個(gè)差距
18、誰(shuí)來(lái)填補(bǔ)? head.s做的就是這項(xiàng)工作。這期間,head程序打開(kāi)A20,打開(kāi)pe、pg,廢棄舊的、16位的中斷響應(yīng)機(jī)制,建立新的32位的IDT這些工作都做完了,計(jì)算機(jī)已經(jīng)處在32位的保護(hù)模式狀態(tài)了,調(diào)用32位main函數(shù)的一切條件已經(jīng)準(zhǔn)備完畢,這時(shí)順理成章地調(diào)用main函數(shù)。后面的操作就可以用32位編譯的main函數(shù)完成。至此,Linux 0.11內(nèi)核啟動(dòng)的一個(gè)重要階段已經(jīng)完成,接下來(lái)就要進(jìn)入main函數(shù)對(duì)應(yīng)的代碼了。特別需要提示的是,此時(shí)仍處在關(guān)閉中斷的狀態(tài)!2.從main到怠速系統(tǒng)達(dá)到怠速狀態(tài)前所做的一切準(zhǔn)備工作的核心目的就是讓用戶(hù)程序能夠以“進(jìn)程”的方式正常運(yùn)行。能夠?qū)崿F(xiàn)這一目的的標(biāo)準(zhǔn)
19、包括三方面的內(nèi)容:1)用戶(hù)程序能夠在主機(jī)上進(jìn)行運(yùn)算;2)能夠與外設(shè)進(jìn)行交互;3)能夠讓用戶(hù)以它為媒介進(jìn)行人機(jī)交互。2.1 設(shè)備環(huán)境初始化及激活進(jìn)程02.1.1 與建立人機(jī)交互界面相關(guān)的外設(shè)的中斷服務(wù)程序掛接Linus在操作系統(tǒng)源代碼中本來(lái)設(shè)計(jì)了chr_dev_init()函數(shù),明顯是要用這個(gè)函數(shù)初始化字符設(shè)備,但我們可以看到這是一個(gè)空函數(shù)。Linus又設(shè)計(jì)了tty_init()函數(shù),內(nèi)容就是初始化字符設(shè)備。有人解釋tty是teletype。字符設(shè)備的初始化為進(jìn)程與串行口(可以通信、連接鼠標(biāo))、顯示器以及鍵盤(pán)進(jìn)行I/O通信準(zhǔn)備工作環(huán)境,主要是對(duì)串行口、顯示器、鍵盤(pán)進(jìn)行初始化設(shè)置,以及與此相關(guān)的中
20、斷服務(wù)程序與IDT掛接。2.1.2初始化進(jìn)程0進(jìn)程0是Linux操作系統(tǒng)中運(yùn)行的第一個(gè)進(jìn)程,也是Linux操作系統(tǒng)父子進(jìn)程創(chuàng)建機(jī)制的第一個(gè)父進(jìn)程。下面講解的內(nèi)容對(duì)進(jìn)程0能夠在主機(jī)中正常運(yùn)算的影響最為重要和深遠(yuǎn),主要包含如下三方面的內(nèi)容。1)系統(tǒng)先初始化進(jìn)程0。進(jìn)程0管理結(jié)構(gòu)task_struct的母本(init_task = INIT_TASK,)已經(jīng)在代碼設(shè)計(jì)階段事先設(shè)計(jì)好了,但這并不代表進(jìn)程0已經(jīng)可用了,還要將進(jìn)程0的task_struct中的LDT、TSS與GDT相掛接,并對(duì)GDT、task64以及與進(jìn)程調(diào)度相關(guān)的寄存器進(jìn)行初始化設(shè)置。2)Linux 0.11作為一個(gè)現(xiàn)代操作系統(tǒng),其最重
21、要的標(biāo)志就是能夠支持多進(jìn)程輪流執(zhí)行,這要求進(jìn)程具備參與多進(jìn)程輪詢(xún)的能力。系統(tǒng)這里對(duì)時(shí)鐘中斷進(jìn)行設(shè)置,以便在進(jìn)程0運(yùn)行后,為進(jìn)程0以及后續(xù)由它直接、間接創(chuàng)建出來(lái)的進(jìn)程能夠參與輪轉(zhuǎn)奠定基礎(chǔ)。3)進(jìn)程0要具備處理系統(tǒng)調(diào)用的能力。每個(gè)進(jìn)程在運(yùn)算時(shí)都可能需要與內(nèi)核進(jìn)行交互,而交互的端口就是系統(tǒng)調(diào)用程序。系統(tǒng)通過(guò)函數(shù)set_system_gate將system_call與IDT相掛接,這樣進(jìn)程0就具備了處理系統(tǒng)調(diào)用的能力了。這個(gè)system_call就是系統(tǒng)調(diào)用的總?cè)肟?。進(jìn)程0只有具備了以上三種能力才能保證將來(lái)在主機(jī)中正常地運(yùn)行,并將這些能力遺傳給后續(xù)建立的進(jìn)程。2.1.3初始化硬盤(pán)硬盤(pán)的初始化為進(jìn)程與硬
22、盤(pán)這種塊設(shè)備進(jìn)行I/O通信建立了環(huán)境基礎(chǔ)。在hd_init()函數(shù)中,將硬盤(pán)請(qǐng)求項(xiàng)服務(wù)程序do_hd_request()與blk_dev控制結(jié)構(gòu)相掛接,硬盤(pán)與請(qǐng)求項(xiàng)的交互工作將由do_hd_request()函數(shù)來(lái)處理,然后將硬盤(pán)中斷服務(wù)程序hd_interrupt()與IDT相掛接,最后,復(fù)位主8259A int2 的屏蔽位,允許從片發(fā)出中斷請(qǐng)求信號(hào),復(fù)位硬盤(pán)的中斷請(qǐng)求屏蔽位(在從片上),允許硬盤(pán)控制器發(fā)送中斷請(qǐng)求信號(hào)。2.1.4開(kāi)啟中斷現(xiàn)在,系統(tǒng)中所有中斷服務(wù)程序都已經(jīng)和IDT正常掛接。這意味著中斷服務(wù)體系已經(jīng)構(gòu)建完畢,系統(tǒng)可以在32位保護(hù)模式下處理中斷,重要意義之一是可以使用系統(tǒng)調(diào)用??梢蚤_(kāi)啟中斷了!2.2 進(jìn)程1的創(chuàng)建及執(zhí)行現(xiàn)在,計(jì)算機(jī)中已經(jīng)有了一個(gè)名副其實(shí)的、3特權(quán)級(jí)的進(jìn)程進(jìn)程0。下面我們要詳細(xì)講解進(jìn)程0做的第一項(xiàng)工作創(chuàng)建進(jìn)程1。2.2.1 進(jìn)程0創(chuàng)建進(jìn)程1進(jìn)程0作為父進(jìn)程調(diào)用fork函數(shù)創(chuàng)建第一個(gè)子進(jìn)程進(jìn)程1。執(zhí)行sys_fork(),在task64中為進(jìn)程1申請(qǐng)一個(gè)空閑位置并獲取進(jìn)程號(hào)。進(jìn)程0將在copy_process()函數(shù)中做非常重要的、體現(xiàn)父子進(jìn)程機(jī)制的工作:(1)為進(jìn)程1創(chuàng)建tast_struct,將進(jìn)程0的tast_struct內(nèi)容復(fù)制給進(jìn)程1;(2)為進(jìn)程1的tast_struct、tss做個(gè)性化設(shè)置;(3)為進(jìn)程1創(chuàng)建第一個(gè)頁(yè)表,將進(jìn)程0的頁(yè)表內(nèi)容
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育心理學(xué)在團(tuán)隊(duì)建設(shè)中的作用
- 江西省上饒市“山江湖”協(xié)作體統(tǒng)招班2025屆物理高二第二學(xué)期期末預(yù)測(cè)試題含解析
- 醫(yī)療健康領(lǐng)域的政策變革與未來(lái)趨勢(shì)
- 2025年安徽省滁州市來(lái)安縣第三中學(xué)物理高一下期末統(tǒng)考試題含解析
- 企業(yè)利用技術(shù)在業(yè)務(wù)創(chuàng)新中的應(yīng)用分析
- 技術(shù)創(chuàng)新與教育改革的關(guān)系探討
- 文學(xué)概論考試題及答案
- 夏洛的網(wǎng)閱讀測(cè)試題及答案
- 2025屆寧夏銀川市興慶區(qū)銀川一中高一物理第二學(xué)期期末統(tǒng)考試題含解析
- 中職學(xué)校招生宣傳課件
- 2025年中國(guó)拉臂式車(chē)廂可卸式垃圾車(chē)市場(chǎng)調(diào)查研究報(bào)告
- 2025年春季學(xué)期班主任工作總結(jié)【課件】
- 2025年中國(guó)二手球鞋行業(yè)市場(chǎng)全景分析及前景機(jī)遇研判報(bào)告
- 2025年天津市中考語(yǔ)文試卷(含標(biāo)準(zhǔn)答案)
- 對(duì)海外公司法務(wù)管理制度
- 保險(xiǎn)品質(zhì)管理制度
- 2025年遼寧高考地理試卷真題答案詳解講評(píng)課件(黑龍江吉林內(nèi)蒙古適用)
- 質(zhì)檢隊(duì)伍考試題及答案
- 全國(guó)中小學(xué)教師職業(yè)道德知識(shí)競(jìng)賽80題及答案
- 運(yùn)沙船運(yùn)輸合同協(xié)議
- 2023CSCO食管癌診療指南
評(píng)論
0/150
提交評(píng)論