linux的x86架構(gòu)初始化_第1頁
linux的x86架構(gòu)初始化_第2頁
linux的x86架構(gòu)初始化_第3頁
linux的x86架構(gòu)初始化_第4頁
linux的x86架構(gòu)初始化_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

linux的x86架構(gòu)初始化

——分頁機(jī)制的初始化問題1:標(biāo)志寄存器有哪些常用的標(biāo)志位?CF、PF、ZF、SF、OF、DF進(jìn)位、奇偶、零、符號(hào)、溢出、方向DF(方向標(biāo)志位)控制每次操作后si、di的增減1、X86架構(gòu)下的從開機(jī)到Start_kernel啟動(dòng)的總體過程

這個(gè)過程簡(jiǎn)要概述為:開機(jī)——>BIOS——>GRUB/LILO——>Linux

Kernel其運(yùn)行的流程圖和重要函數(shù)如下圖所示:GRUB(GRand

Unified

Bootloader)是當(dāng)前l(fā)inux諸多發(fā)行版本默認(rèn)的引導(dǎo)程序。1..boot/header.S:start_of_setup2..boot/main.c:main()->pm.c:go_to_protected_mode()3..boot/pmjump.S:protected_mode_jump4..boot/compressed/head_32.S:startup_32()->decompress_kernel()5..kernel/head_32.S:startup_32()->head32.c:i386_start_kernel()boot/compressed/head_32.S:startup_32()內(nèi)核被解壓至RAM后再調(diào)用/arch/i386/kernel/head.S文件中的startup_32例程,這個(gè)新的startup_32例程會(huì)初始化頁表,啟用內(nèi)存分頁機(jī)制。(4)設(shè)置管理內(nèi)存的分頁處理機(jī)制

setup_paging:

movl$1024*5,%ecx

//對(duì)5頁內(nèi)存(1頁目錄,4頁頁表)清零

xorl%eax,%eax

//eax內(nèi)容清空

xorl%edi,%edi

//頁目錄從0x0000開始

cld;rep;stosl

//eax內(nèi)容存到es:edi所指的內(nèi)存處,且edi增4

//以下四項(xiàng)為設(shè)置頁目錄表中的項(xiàng),_pg_dir地址為0x0000,即頁目錄地址

movl$pg0+7,_pg_dir

//pg0在前邊被指定為0x1000,所以第一個(gè)頁表項(xiàng)設(shè)定為0x00001007

movl$pg1+7,_pg_dir+4

//設(shè)置頁目錄中的第二個(gè)頁表項(xiàng)

movl$pg2+7,_pg_dir+8

//設(shè)置頁目錄中的第三個(gè)頁表項(xiàng)

movl$pg3+7,_pg_dir+12

//設(shè)置頁目錄中的第四個(gè)頁表項(xiàng)

//填寫4個(gè)頁表中的頁內(nèi)容

movl$pg3+4092,%edi

//edi設(shè)定為最后一頁頁表的最后一項(xiàng)

movl$0xfff007,%eax

//最后一項(xiàng)對(duì)應(yīng)的物理內(nèi)存是0x0xfff000,屬性標(biāo)志為0x07,表示頁存在、用戶可讀寫

std

//方向位置位

1:stosl

//eax內(nèi)容存到es:edi所指的內(nèi)存處,且edi增4

subl$0x1000,%eax

//物理地址減4K,處理下一頁。因?yàn)轫摫碇械拿恳豁?xiàng)都是代表一頁的。

jge1b

//若小于0表示都已填寫頁表ok

xorl%eax,%eax

//頁目錄地址在0x0000,所以這里對(duì)eax寄存器清空

movl%eax,%cr3

//將頁目錄表地址存入CR3中

movl%cr0,%eax

//

orl$ox80000000,%eax

//開啟PG標(biāo)志

movl%eax,%cr0

//表示啟動(dòng)使用分頁處理

ret

//謝謝!問題2:Jge指令是什么?怎么實(shí)現(xiàn)的?Jge是大于等于則跳轉(zhuǎn)(jumpifgreaterthanorequalto)指令該指令通過判斷SF異或OF是否=0來判斷是否大于等于.SF=0時(shí):大于等于。SF=1時(shí):小于。OF=0時(shí):未溢出。OF=1時(shí):溢出。其中在Intel官方文檔《Volume2AInstructionSetReference(A-M)》中提到cld指令

CLD:CLD:

Description

ClearstheDFflagintheEFLAGSregister.WhentheDFflagissetto0,stringoperations

incrementtheindexregisters(ESIand/orEDI).Operationisthesameinall

non-64-bitmodesand64-bitmo

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論