版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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)過程分析學(xué) 院:信息工程專 業(yè):網(wǎng)絡(luò)工程姓 名:梁法成學(xué) 號(hào):2013240701282016.4.151 .從開機(jī)加電到執(zhí)行main函數(shù)之前的過程 21.1 啟動(dòng)bios,準(zhǔn)備實(shí)模式下的中斷向量表和中斷服務(wù)程序 21.1.1 bios的啟動(dòng)原理 21.1.2 bios在內(nèi)存中加載中斷向量表和中斷服務(wù)程序 21.2 加載操作系統(tǒng)內(nèi)核程序并為保護(hù)模式做準(zhǔn)備 31.2.1 加載第一部分內(nèi)核代碼一一引導(dǎo)程序( bootsect ) 31.2.2 加載第二部分內(nèi)核代碼一一setup 31.2.3 .加載第三部分內(nèi)核代碼一一system模塊51.3 開始向32位
2、模式轉(zhuǎn)變,為 main函數(shù)的調(diào)用做準(zhǔn)備 51.3.1 關(guān)中斷并將 system移動(dòng)到內(nèi)存地址起始位置 0x00000 61.3.2 設(shè)置中斷描述符表和全局描述符表 61.3.3 打開 a20,實(shí)現(xiàn)32位尋址71.3.4 為保護(hù)模式下執(zhí)行 head.s做準(zhǔn)備71.3.5 head.s 開始執(zhí)行72 .從 main 到怠速 92.1 設(shè)備環(huán)境初始化及激活進(jìn)程0 102.1.1 與建立人機(jī)交互界面相關(guān)的外設(shè)的中斷服務(wù)程序掛接 1 02.1.2 初始化進(jìn)程 0 102.1.3 初始化硬盤 112.1.4 開啟中斷112.2 進(jìn)程1的創(chuàng)建及執(zhí)行 122.2.1 進(jìn)程0創(chuàng)建進(jìn)程1 122.2.2 內(nèi)核第一
3、次做進(jìn)程調(diào)度 122.2.3 輪轉(zhuǎn)到進(jìn)程 1執(zhí)行 132.3 進(jìn)程2的創(chuàng)建及執(zhí)行132.3.1 打開終端設(shè)備文件及復(fù)制文件句柄 1 32.3.2 進(jìn)程1創(chuàng)建進(jìn)程2并切換到進(jìn)程2 132.3.3 加載 shell 程序132.3.4 實(shí)現(xiàn)系統(tǒng)怠速 14共15頁第1頁1 . 從開機(jī)加電到執(zhí)行main 函數(shù)之前的過程從開機(jī)到 main 函數(shù)的執(zhí)行分三步完成,目的是實(shí)現(xiàn)從啟動(dòng)盤加載操作系統(tǒng)程序,完成執(zhí)行 main 函數(shù)所需要的準(zhǔn)備工作。第一步,啟動(dòng)bios ,準(zhǔn)備實(shí)模式下的中斷向量表和中斷服務(wù)程序;第二步,從啟動(dòng)盤加載操作系統(tǒng)程序到內(nèi)存,加載操作系統(tǒng)程序的工作就是利用第一步中準(zhǔn)備的中斷服務(wù)程序?qū)崿F(xiàn)的;
4、第三步,為執(zhí)行32 位的 main函數(shù)做過渡工作。本章將詳細(xì)分析這三步在計(jì)算機(jī)中是如何完成的,以及每一步在內(nèi)存中都做了些什么。1.1 啟動(dòng)bios,準(zhǔn)備實(shí)模式下的中斷向量表和中斷服務(wù)程序問題:在 ram 中什么程序也沒有的時(shí)候,誰來完成加載軟盤中操作系統(tǒng)的任務(wù)呢?答案是: bios 。1.1.1 bios 的啟動(dòng)原理從硬件角度看, intel 80x86 系列的 cpu 可以分別在16 位實(shí)模式和32 位保護(hù)模式下運(yùn)行。為了兼容,也為了解決最開始的啟動(dòng)問題, intel 將所有 80x86 系列的 cpu ,包括最新型號(hào)的 cpu 的硬件都設(shè)計(jì)為加電即進(jìn)入16 位實(shí)模式狀態(tài)運(yùn)行。 同時(shí), 還有
5、一點(diǎn)非常關(guān)鍵的是, 將 cpu 硬件邏輯設(shè)計(jì)為加電瞬間強(qiáng)行將cs 的值置為 0xf000 、 ip 的值置為0xfff0,這樣cs:ip就指向0xffff0這個(gè)地址位置。1.1.2 bios在內(nèi)存中加載中斷向量表和中斷服務(wù)程序bios程序在內(nèi)存最開始的位置(0x00000 )用1 kb的內(nèi)存空間(0x000000x003ff )構(gòu)建中斷向量表,在緊挨著它的位置用 256 字節(jié)的內(nèi)存空間構(gòu)建bios 數(shù)據(jù)區(qū)(0x004000x004ff),并在大約57 kb以后的位置(0x0e05b )力口載了 8 kb左 右的與中斷向量表相應(yīng)的若干中斷服務(wù)程序。中斷向量表中有256 個(gè)中斷向量,每個(gè)中斷向量占
6、 4 字節(jié),其中兩個(gè)字節(jié)是cs 的值,兩個(gè)字節(jié)是ip 的值。每個(gè)中斷向量都指向一個(gè)具體的中斷服務(wù)程序。1.2 加載操作系統(tǒng)內(nèi)核程序并為保護(hù)模式做準(zhǔn)備從現(xiàn)在開始,就要執(zhí)行真正的 boot 操作了,即把軟盤中的操作系統(tǒng)程序加載至內(nèi)存。對(duì)于linux 0.11 操作系統(tǒng)而言,計(jì)算機(jī)將分三批逐次加載操作系統(tǒng)的內(nèi)核代碼。第一批由bios 中斷int0x19 把第一扇區(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)過執(zhí)行一系列 bios
7、代碼之后,計(jì)算機(jī)完成了自檢等操作(這些和我們講的啟動(dòng)操作系統(tǒng)沒有直接的關(guān)系,讀者不必關(guā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 中斷向量。接下來,中斷向量把 cpu 指向 0x0e6f2 ,這個(gè)位置就是int0x19 相對(duì)應(yīng)的中斷服務(wù)程序的入口地址。這個(gè)中斷服務(wù)程序的作用就是把軟盤第一扇區(qū)中的程序( 512 b )加載到內(nèi)存中的指定位置。這個(gè)中斷服務(wù)程序的功能是bios 事先設(shè)計(jì)好的,代碼是固定的,與linux 操作系統(tǒng)無關(guān)。無論lin
8、ux 0.11 的內(nèi)核是如何設(shè)計(jì)的,這段bios 程序所要做的就是“找到軟盤”并“加載第一扇區(qū)”,其余的它什么都不知道,也不必知道。按照這個(gè)簡(jiǎn)單、“生硬”的規(guī)則, int 0x19 中斷向量所指向的中斷服務(wù)程序,即啟動(dòng)加載服務(wù)程序,將軟驅(qū)0 號(hào)磁頭對(duì)應(yīng)盤面的 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)存了,現(xiàn)在它的作用就是把第二批和第三批程序陸續(xù)加載到內(nèi)存中。 為了把第二批和第三批程序加載到內(nèi)存中的適當(dāng)位置, bootsect 首先做的工作就是規(guī)劃內(nèi)存
9、。通常,我們是用高級(jí)語言編寫應(yīng)用程序的,這些程序是在操作系統(tǒng)的平臺(tái)上運(yùn)行的。我們只管寫高級(jí)語言的代碼、 數(shù)據(jù)。 至于這些代碼、 數(shù)據(jù)在運(yùn)行的時(shí)候放在內(nèi)存的什么地方, 是否會(huì)相互覆蓋,我們都不用操心,因?yàn)椴僮飨到y(tǒng)和高級(jí)語言的編譯器替我們做了大量的看護(hù)工作,確保不會(huì)出錯(cuò)?,F(xiàn)在我們討論的是,操作系統(tǒng)本身使用的是匯編語言,沒有高級(jí)語言編譯器替操作系統(tǒng)提供保障,只有靠操作系統(tǒng)的設(shè)計(jì)者把內(nèi)存的安排想清楚,確保無論操作系統(tǒng)如何運(yùn)行,都不會(huì)出現(xiàn)代碼與代碼、數(shù)據(jù)與數(shù)據(jù)、代碼與數(shù)據(jù)之間相互覆蓋的情況。為了更準(zhǔn)確地理解操作系統(tǒng)的運(yùn)行機(jī)制, 我們必須清楚操作系統(tǒng)的設(shè)計(jì)者是如何規(guī)劃內(nèi)存的。在實(shí)模式狀態(tài)下,尋址的最大范圍
10、是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ù)各在其位,互不覆蓋,并且各自有夠用的內(nèi)存空間。下面, bootsect 程序要執(zhí)行它的第二步工作:將setup 程序加載到內(nèi)存中。加載setup
11、 這個(gè)程序,要借助 bios 提供的 int 0x13 中斷向量所指向的中斷服務(wù)程序(也就是磁盤服務(wù)程序)來完成。執(zhí)行 int 0x13 指令,產(chǎn)生0x13 中斷,通過中斷向量表找到這個(gè)中斷服務(wù)程序,將軟盤第二扇區(qū)開始的 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 是連在一起的。 現(xiàn)在, 操作系統(tǒng)已經(jīng)從軟盤中加載了 5 個(gè)扇區(qū)的代碼。 等 boot
12、sect 執(zhí)行完畢后,setup 這個(gè)程序就要開始工作了。1.2.3 加載第三部分內(nèi)核代碼 system 模塊接下來, bootsect 程序要執(zhí)行第三批程序的載入工作,即將系統(tǒng)模塊載入內(nèi)存。bootsect 借著 bios 中斷 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)做完了。下面要通過執(zhí)行“ jmpi 0, setupseg ”這行語句跳轉(zhuǎn)至 0x90200 處,就是前面講過的第二批程
13、序一一setup程序加載白位置。cs:ip指向setup程序的第一條指令,意味著由 setup 程序接著 bootsect 程序繼續(xù)執(zhí)行。setup 程序現(xiàn)在開始執(zhí)行。它做的第一件事情就是利用 bios 提供的中斷服務(wù)程序從設(shè)備上提取內(nèi)核運(yùn)行所需的機(jī)器系統(tǒng)數(shù)據(jù),其中包括光標(biāo)位置、顯示頁面等數(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)完成。接下來的操作對(duì)linux 0.11 而言具有戰(zhàn)略意義。系統(tǒng)通過已經(jīng)加載到內(nèi)存中的代碼,將實(shí)現(xiàn)從實(shí)模式到保護(hù)
14、模式的轉(zhuǎn)變,使 linux 0.11 真正成為“現(xiàn)代”操作系統(tǒng)。1.3 開始向 32 位模式轉(zhuǎn)變,為 main 函數(shù)的調(diào)用做準(zhǔn)備接下來,操作系統(tǒng)要使計(jì)算機(jī)在32 位保護(hù)模式下工作。這期間要做大量的重建工作,并且持續(xù)工作到操作系統(tǒng)的 main 函數(shù)的執(zhí)行過程中。在本節(jié)中,操作系統(tǒng)執(zhí)行的共 15頁第6頁操作包括打開32位的尋址空間、打開保護(hù)模式、建立保護(hù)模式下的中斷響應(yīng)機(jī)制等與保護(hù)模式配套的相關(guān)工作、建立內(nèi)存的分頁機(jī)制,最后做好調(diào)用main函數(shù)的準(zhǔn)備c1.3.1 關(guān)中斷并將system移動(dòng)到內(nèi)存地址起始位置0x00000hfi.acjs如圖所示,這個(gè)準(zhǔn)備工作先要關(guān)閉中斷,即將 cpu的標(biāo)志寄存器(
15、eflags)中的中斷允許標(biāo)志(if)置0。這意味著,程序在接下來的執(zhí)行過程中,無論是否發(fā)生中斷,系統(tǒng)都不再對(duì)此中斷進(jìn)行響應(yīng),直到 main函數(shù)中能夠適應(yīng)保護(hù)模式的中斷服務(wù)體系被重建完畢才會(huì)打開中斷,而那時(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)存物
16、理地址最開始的、天然的、有利的位置。1.3.2 設(shè)置中斷描述符表和全局描述符表setup程序繼續(xù)為保護(hù)模式做準(zhǔn)備。此時(shí)要通過 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, t
17、askstructure segment )地址,完成進(jìn)程中各段的尋址、現(xiàn)場(chǎng)保護(hù)與現(xiàn)場(chǎng)恢復(fù)。idt (interrupt descriptor table ,中斷描述符表),保存保護(hù)模式下所有中斷服 務(wù)程序的入口地址,類似于實(shí)模式下的中斷向量表。1.3.3 打開a20,實(shí)現(xiàn)32位尋址下面是標(biāo)志性的動(dòng)作一一打開 a20 !打開a20 ,意味著cpu可以進(jìn)行32位尋址, 最大尋址空間為4 gb。打開a20現(xiàn)在看來,linux 0.11還顯得有些稚嫩,最大只能支 持16 mb的物理內(nèi)存,但是其線性尋址空間已經(jīng)是不折不扣的4 gb。1.3.4 為保護(hù)模式下執(zhí)行head.s做準(zhǔn)備setup程序?qū)pu工
18、作方式設(shè)為保護(hù)模式。將 cr0寄存器第0位(pe)置1,即 設(shè)定處理器工作方式為保護(hù)模式。1.3.5 head.s開始執(zhí)行head程序除了做一些調(diào)用 main的準(zhǔn)備工作之外,還做了一件對(duì)內(nèi)核程序在內(nèi)存中 的布局及內(nèi)核程序的正常運(yùn)行有重大意義的事,就是用程序自身的代碼在程序自身所在的內(nèi)存空間創(chuàng)建了內(nèi)核分頁機(jī)制,即在 0x000000的位置創(chuàng)建了頁目錄表、頁表、緩沖 區(qū)、gdt、idt,并將head程序已經(jīng)執(zhí)行過的代碼所占內(nèi)存空間覆蓋。這意味著 head 程序自己將自己廢棄,main函數(shù)即將開始執(zhí)行。這些工作完成后,內(nèi)存中的布局如圖所示。可以看出,只有 184字節(jié)的剩余代碼。 由此可見,在設(shè)計(jì)he
19、ad程序和system模塊時(shí),其計(jì)算是非常精確的,對(duì)head.s的代 碼量的控制非常到位。main 全局描述符較(2kb)中斷描述符衣(2kb)軟盤緩r1區(qū)述b):頁表34kb)頁表2(4 kb)頁表1(4kb)頁表0(4kb)頁目錄表(4kb)oxo64b8oxo5cbs0x054b8 0x054000x050000x040000x030000x020000x010000x00000開機(jī)時(shí)的16位實(shí)模式與main函數(shù)執(zhí)行需要的32位保護(hù)模式之間有很大的差距,這個(gè)差距誰來填補(bǔ)?head.s做的就是這項(xiàng)工作。這期間,head程序打開a20 ,打開pe、pg ,廢棄舊的、16位的中斷響應(yīng)機(jī)制,建立
20、新的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)完成,接下來就要進(jìn)入main函數(shù)對(duì)應(yīng)的代碼了。特別需要提示的是,此時(shí)仍處在關(guān)閉中斷的狀態(tài)!2 .從main到怠速系統(tǒng)達(dá)到怠速狀態(tài)前所做的一切準(zhǔn)備工作的核心目的就是讓用戶程序能夠以“進(jìn)程”的方式正常運(yùn)行。能夠?qū)崿F(xiàn)這一目的的標(biāo)準(zhǔn)包括三方面的內(nèi)容:1)用戶程序能夠在主機(jī)上進(jìn)行運(yùn)算;共15頁第10頁2)能夠與外設(shè)進(jìn)行交互;3)能夠讓用戶以它為媒介進(jìn)行
21、人機(jī)交互。2.1 設(shè)備環(huán)境初始化及激活進(jìn)程02.1.1 與建立人機(jī)交互界面相關(guān)的外設(shè)的中斷服務(wù)程序桂接linus在操作系統(tǒng)源代碼中本來設(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))、顯示器以及鍵盤進(jìn) 行i/o通信準(zhǔn)備工作環(huán)境,主要是對(duì)串行口、顯示器、鍵盤進(jìn)行初始化設(shè)置,以及與此 相關(guān)的中斷服務(wù)程序與idt掛接。2.1.2 初始化進(jìn)程0進(jìn)程0是linux操作系統(tǒng)中運(yùn)行的第一個(gè)進(jìn)程
22、,也是 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),其最重要的標(biāo)志就是能夠支持多進(jìn)程輪流執(zhí) 行,這要求進(jìn)程具備參與多進(jìn)程輪詢的能力。系統(tǒng)
23、這里對(duì)時(shí)鐘中斷進(jìn)行設(shè)置,以便在進(jìn) 程0運(yùn)行后,為進(jìn)程0以及后續(xù)由它直接、間接創(chuàng)建出來的進(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)通過函數(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只有具備了以上三種能力才能保證將來在主機(jī)中正常地運(yùn)行,并將這些能力 遺傳給后續(xù)建立的進(jìn)程。2.1.3 初始化硬盤硬盤的初始化為進(jìn)程與硬盤這種塊設(shè)備進(jìn)行i/o通信建立了環(huán)境基礎(chǔ)。在hd_init()
24、函數(shù)中,將硬盤請(qǐng)求項(xiàng)服務(wù)程序 do_hd_request()與blk_dev控制結(jié)構(gòu) 相掛接,硬盤與請(qǐng)求項(xiàng)的交互工作將由do_hd_request()函數(shù)來處理,然后將硬盤中斷服務(wù)程序hd_interrupt()與idt相掛接,最后,復(fù)位主8259a int2 的屏蔽位,允許從 片發(fā)出中斷請(qǐng)求信號(hào),復(fù)位硬盤的中斷請(qǐng)求屏蔽位(在從片上),允許硬盤控制器發(fā)送 中斷請(qǐng)求信號(hào)。2.1.4 開啟中斷現(xiàn)在,系統(tǒng)中所有中斷服務(wù)程序都已經(jīng)和idt正常掛接。這意味著中斷服務(wù)體系已經(jīng)構(gòu)建完畢,系統(tǒng)可以在32位保護(hù)模式下處理中斷,重要意義之一是可以使用系統(tǒng)調(diào) 用??梢蚤_啟中斷了!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_
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【2021屆備考】2020全國名?;瘜W(xué)試題分類解析匯編:H單元-水溶液中的離子平衡
- 四川省綿陽2024-2025學(xué)年高二上學(xué)期數(shù)學(xué)期末模擬試題(六)(含答案)
- 【同步課堂】2020年化學(xué)人教版選修5教案:2-2-芳香烴
- 2023年職工醫(yī)保門診報(bào)銷新規(guī)定
- 上冊(cè)《角的初步認(rèn)識(shí)》課件設(shè)計(jì)
- 【備考專題】高考語文專題精講與新題賞析-專題-語言基礎(chǔ)和運(yùn)用2020年新題賞析(下)-課后練習(xí)
- 【名師一號(hào)】2020-2021學(xué)年高中英語選修六-第五單元綜合測(cè)評(píng)
- 【全程復(fù)習(xí)方略】2020-2021學(xué)年高中數(shù)學(xué)(人教A版選修2-1)課時(shí)作業(yè)-2.1.1曲線與方程
- 【學(xué)練考】2021-2022新高考人民版歷史必修二-專題測(cè)評(píng)六-羅斯福新政與當(dāng)代資本主義
- 信管部報(bào)告:2023年數(shù)字化轉(zhuǎn)型之路
- 造價(jià)咨詢結(jié)算審核服務(wù)方案
- 中國人民財(cái)產(chǎn)保險(xiǎn)股份有限公司機(jī)動(dòng)車綜合商業(yè)保險(xiǎn)條款
- 八年級(jí)物理上冊(cè)計(jì)算題精選(50道)
- 燃?xì)夤こ瘫O(jiān)理實(shí)施細(xì)則(通用版)
- E車E拍行車記錄儀說明書 - 圖文-
- 人才梯隊(duì)-繼任計(jì)劃-建設(shè)方案(珍貴)
- 《健身氣功》(選修)教學(xué)大綱
- 王家?guī)r隧道工程地質(zhì)勘察報(bào)告(總結(jié))
- 《昆明的雨》優(yōu)質(zhì)課一等獎(jiǎng)(課堂PPT)
- 3-1、征信異議申請(qǐng)表
- EHS的組織架構(gòu)和職責(zé)說明(共2頁)
評(píng)論
0/150
提交評(píng)論