Linux内核中断/异常的注册(重要中断函数的查找方法,Linux 2.6.11)
来源:互联网 发布:注册送免费空间和域名 编辑:程序博客网 时间:2024/04/29 01:25
Linux内核中断/异常的注册(重要中断函数的查找方法,Linux 2.6.11)
按照下面列出的方式,在trap_init()函数中,可以查找到重点的中断的处理函数有哪些
1. 缺页中断
start_kernel
-> trap_init //注册各种中断和异常
-> set_intr_gate(14,&page_fault); //注册缺页中断入口
-> ENTRY(page_fault) entry.S
-> pushl $do_page_fault //压栈,处理函数为do_page_fault
-> jmp error_code
-> call *%edi
-> do_page_fault
另:vma有VM_GROWSDOWN标志,表示它是一个堆栈区
2. Machine Check(i386)
start_kernel
-> trap_init //注册各种中断和异常
-> set_trap_gate(18,&machine_check); //注册MCE中断入口
-> ENTRY(machine_check) //entry.S
-> pushl machine_check_vector //压栈,处理函数为machine_check_vector指向的函数
-> jmp error_code
-> call *%edi
-> intel_machine_check或pentium_machine_check或k7_machine_check
-> intel_machine_check//记录错误信息后panic
3. Machine Check(x86_64)
start_kernel
-> trap_init //注册各种中断和异常
-> set_intr_gate_ist(18,&machine_check, MCE_STACK); //注册MCE中断入口
-> ENTRY(machine_check) //entry.S
-> paranoidentry do_machine_check
-> do_machine_check //进入MCE的处理流程
另外,通过force_sig_info(SIGBUS, &info, tsk);可以像指定的任务发送指定的信号
Exception table 异常表地址:
/* Exception table */
从 __start___ex_table 到 __stop___ex_table ;search_extable(EIP)会使用查找一个EIP是否是一个系统调用
按照下面列出的方式,在trap_init()函数中,可以查找到重点的中断的处理函数有哪些
1. 缺页中断
start_kernel
-> trap_init //注册各种中断和异常
-> set_intr_gate(14,&page_fault); //注册缺页中断入口
-> ENTRY(page_fault) entry.S
-> pushl $do_page_fault //压栈,处理函数为do_page_fault
-> jmp error_code
-> call *%edi
-> do_page_fault
另:vma有VM_GROWSDOWN标志,表示它是一个堆栈区
2. Machine Check(i386)
start_kernel
-> trap_init //注册各种中断和异常
-> set_trap_gate(18,&machine_check); //注册MCE中断入口
-> ENTRY(machine_check) //entry.S
-> pushl machine_check_vector //压栈,处理函数为machine_check_vector指向的函数
-> jmp error_code
-> call *%edi
-> intel_machine_check或pentium_machine_check或k7_machine_check
-> intel_machine_check//记录错误信息后panic
3. Machine Check(x86_64)
start_kernel
-> trap_init //注册各种中断和异常
-> set_intr_gate_ist(18,&machine_check, MCE_STACK); //注册MCE中断入口
-> ENTRY(machine_check) //entry.S
-> paranoidentry do_machine_check
-> do_machine_check //进入MCE的处理流程
另外,通过force_sig_info(SIGBUS, &info, tsk);可以像指定的任务发送指定的信号
Exception table 异常表地址:
/* Exception table */
从 __start___ex_table 到 __stop___ex_table ;search_extable(EIP)会使用查找一个EIP是否是一个系统调用
0 0
- Linux内核中断/异常的注册(重要中断函数的查找方法,Linux 2.6.11)
- Linux中断实现方法(一):中断注册方法及异常向量表的建立
- Linux内核--异常和中断的区别
- Linux内核--异常和中断的区别
- ARM Linux对中断的处理--中断注册方法
- linux内核中断、异常
- linux中断子系统 - 中断控制器的注册
- Linux内核中断机制(一):中断注册方法
- Linux 2.6内核笔记【中断、异常、抢占内核】(转)
- linux中断重要函数介绍
- linux内核的中断开关
- Linux内核的中断机制
- Linux内核的时钟中断
- Linux内核的中断子系统
- Linux内核的中断机制
- linux内核-中断和异常
- Linux内核的时钟中断(1)
- Linux内核的时钟中断(2)
- 权限和特征的对应
- ViewTreeObserver的使用
- React Native 代码规范
- JavaMail API Tutorial
- java.lang.IllegalStateException: Cannot forward after response has been committed
- Linux内核中断/异常的注册(重要中断函数的查找方法,Linux 2.6.11)
- Cuda dll封装
- Android手机客户端与Web服务器的通信
- 树状数组
- Doxygen规范及工具的简单应用
- 自己理解的回调函数。
- Java数据类型和MySql数据类型对应表
- Java并发编程:线程池的使用
- HTML 5 服务器发送事件