Linux内核学习笔记——2.内核中断体系结构

目的:

        1.硬件的中断响应——>内核驱动中的中断

        2.系统调用的函数响应(sys_call)——>系统调用

        3.自定义中断——>软件的软中断模式

        4.信号中断(kill -signalnum)——>对了解信号的使用、创建等

        5.系统的异常和错误——>系统的异常获取、了解系统异常的作用

1.Linux的中断机制

        1.1 分类:硬件中断、软件中断

                        硬中断: 由电脑主机的8255A类似的硬件中断控制芯片发出的中断

                                        ARM中断控制器发出的中断

                        软中断: 异常:CPU自行保留的异常、系统调用异常

        1.2 代码结构:

asm.strap.c
system_call.sfork.c、signal.c、exit.c、sys.c

2.中断的工作流程

        2.1 回忆:

                (1)做CPU工作模式的转化

                (2)进行寄存器的拷贝与压栈

                (3)设置中断异常向量表

                (4)保存正常运行的函数返回值

                (5)跳转到对应的中断服务函数上去运行

                (6)进行模式的复原及寄存器的复原

                (7)跳转回正常工作的函数地址继续运行

        2.2 Linux中中断的工作流程:

                (1)将所有的寄存器值入栈

                (2)将异常码入栈(中断号)

                (3)将当前的函数返回值进行入栈(为了复原)

————————————————————————————————中断前的处理过程

                (4)调用对应的中断服务函数                                                   

————————————————————————————————中断的执行过程

                (5)出栈函数返回值

                (6)返回所有入栈的寄存器值

————————————————————————————————中断的恢复过程

                如图所示:

                        栈的内存分布图:

SS地址
ESP的值
EFLAGS
CS
EIP
有出错进行压栈,无出错码就不做

EIP(函数的返回值寄存器)【<——esp0】

中断处理函数的调用C函数入口地址(EAX)【<——esp1】
EBX

ECX

EDX
EDI
ESI
EBP
DS
ES
FS
ERROR CODE
EIP  ESP(中断的返回地址)
中断前的处理过程,中断后的恢复过程中断的执行过程
硬件中断的处理过程asm.strap.c
软件及系统调用的处理过程system_call.sfork.c,signal.c,exit.c,sys.c

3.中断的代码实现过程

中断前的处理过程,中断后的恢复过程中断的执行过程
硬件中断的处理过程asm.strap.c

        3.1 trap_init

                set_trap_gate        设置的权限较高,只能由用户程序调用

                set_system_gate   设置的权限较低,能由用户和系统所有的进程调用

        3.2 system_call

                所有的系统调用C函数放到了一个统一的sys_call_table

                系统调用的操作码

                sys_call_table[]:如下链接

(7条消息) Linux系统调用表(system call table)_moots_的博客-CSDN博客https://blog.csdn.net/shuzishij/article/details/87005219

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值