实现一个系统调用来进行系统调用计数

基础知识:

中断:是为了设备与 CPU 之间通信,中段是异步的,它的发生与系统处在用户模式还是在内核

模式无关,只决定于 EFLAGS 寄存器的一个标志位。中断的产生与当前正在执行的进程无关。

异常:是由当前正在执行的进程产生的。异常包括很多方面,有 fault,有 trap,有

programmable exception。fault 和 trap 最重要的一点区别是他们发生时所保存的 EIP 不

同。Fault 保存的 EIP 指向触发异常的那条指令;陷入保存的 EIP 指向触发异常的那条指令的下

一条指令。

系统调用:是用户程序与内核的接口,通过系统调用进程可以由用户模式转入内核模式,在内

核模式下完成相应的服务之后再返回到用户模式。

系统调用的过程:

1.系统调用初始化:在traps.c中,系统在初始化程序trap_init()中,通过调用

set_system_gate(0x80,&system_call)函数,在中断描述符表(idt)里面填入系统调用的处

理函数system_call,这就是每次用户执行指令int 0x80的处理函数

2.系统调用执行:根据system_call传入的系统调用号,在system_call_table中查到相应的

内核处理函数,执行。

3.系统调用的返回:通过ret_from_sys_call返回。返回之前会检测一些变量,根据这些变量跳

转到相应的地方去处理。

简述堆栈变化

int 0x80 :

pushl 用户ss

pushl 用户esp

pushl EFLAGS

pushl cs

pushl eip

SAVE_ALL:

pushl %es

pushl %ds

pushl %eax

pushl %ebp

pushl %edi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值