Linux内核
一、Linux结构和工作方式
1.1 系统的级别和结构
1.2 操作系统工作方式
1.把操作系统从用户态切换到内核态(用户程序到内核流程)
2.操作系统的系统调用(服务层)
3.用系统提供的底层函数,实现功能
4.内核态回到用户态
二、 内核中断
内容:
1.硬件中断响应:内核驱动中的中断
2.系统调用的函数响应(sys_call):系统调用
3.自定义中断:软中断模式
4.信号中断(kill signalnum):信号的使用,创建
5.系统异常和错误:异常的获取,异常的作用
2.1 Linux中断机制
2.1.1 分类:
硬中断:中断控制芯片发出的中断
软中断:异常: 1)cpu自行中断
2.1.2 代码结构
汇编代码 | c代码 |
---|---|
ams.c | trap.c |
system_call.s | fork.c 、 signal.c、 exit.c、 sys.c、 |
2.2 中断的工作流程
2.2.1.一般的中断
1.CPU工作模式转换
2.进行寄存器的拷贝和压栈
3.设置中断异常向量表
4.保存正常的运行的函数返回值
5.跳转到对应的中断服务函数的运行
6.模式复原以及寄存器复原
7.跳转回正常工作函数地址继续运行
2.Linux的中断流程
中断之前的保存过程
1.将所有的寄存器的值入栈
2.异常码入栈(中断号)
3.将当前的函数返回值日站(为了中断执行完成之后能复原)
中断的执行过程
4.调用对应的中断服务函数
中断恢复过程
5.出栈函数返回值
6.返回所有的入栈寄存器值
代码分析:
代码 | 对应的功能 | |
---|---|---|
硬件中断的处理过程 | asm.s | 中断之前的处理过程和中断之后的回复过程 |
软件以及系统调用的处理过程 | system_call.s | 中断的执行过程 |
具体代码实现 asm.s
_divide_error: #出错对应的中断
pushl $_do_divide_error #调用c语言函数,在trap.c
no_error_code: #无错误码
xchgl