!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内存管理之page.s文件
最新推荐文章于 2023-04-13 16:08:37 发布