!page.s包括頁異常處理程式,(中斷14),主要分兩種情況處理.一是由於缺頁引起的
!頁異常中斷,通過呼叫do_no_page(err_code,address)來處理,二是由頁寫保護引起
!的頁異常,此時通過呼叫頁寫保護處理函式do_wp_page(err_code,address)處理哦
!其中出錯碼(err_code)由cpu自動產生並壓入堆疊,出現異常時訪問的線性位址是從控制
!暫存器cr2獲得的
!.globl _page_fault
_page_fault:
xchgl %eax,(%esp) !取出錯碼
pushl %ecx !
pushl %edx !
push %ds !
push %es !
push %fs !
movl $0x10,%edx !置核心資料段選擇符
mov %dx,%ds !
mov %dx,%es !
mov %dx,%fs !
movl %cr2,%edx !取異常頁面異常的線性位址
pushl %edx !將該線性位址和出錯碼壓入堆疊,作為呼叫函式的引數
pushl %eax !
testl $1,%eax !測試標誌p,如果不是缺頁引起的異常則跳轉
jne 1f !
call _do_no_page !呼叫缺頁處理函式
jmp 2f !
1: call _do_wp_page !呼叫寫保護處理函式
2: addl $8,%esp !丟棄壓入堆疊的兩個引數
pop %fs !
pop %es !
pop %ds !
popl %edx !
popl %ecx !
popl %eax !
iret !
linux0 11之記憶體管理
其實我覺得作業系統的記憶體管理很神秘,且不說在寫應用程式時呼叫的malloc,在寫linux驅動時get free page,get free pages,kmalloc,就相當頭疼。看完linux0.11之後小有感觸,就此記下。先說核心使用的get free page吧,其實get free pa...
linux 0 11 之訊號管理
1 概述 在 unix 系統中,訊號是一種 軟體中斷 處理機制。有許多較為複雜的程式會使用到訊號。訊號機制提供了一種處理非同步事件的方法。在核心 中通常使用乙個無符號長整數 32位 中的位元位來表示各種不同的訊號,因此最多可表示 32個不同的訊號。2 程序對訊號的三種處理或操作方式 a 忽略該訊號。...
linux0 11 記憶體結構
linux0.11,記憶體最多支援16m,其中0 1m是核心區,核心模組大約為520k,即end位址,即實際核心使用是從0 到end,之後到640k是高速緩衝區,從640k開始的區域,分別是視訊記憶體,bios區域,高速緩衝區,高速緩衝區之後是是主記憶體區域。在記憶體核心區域當中,從0開始,首先存放...