linux 实验五,Linux内核分析:实验五

ENTRY(system_call) //进入系统调用,执行int0x80后就跳到这里接着执行

SAVE_ALL     //宏,作用是保存现场

syscall_call:

call *sys_call_table(,%eax,4) //访问系统调用表,eax传递过来的就是系统调用号,

//之前的例子里就是调用sys_getpid,然后执行调用对应的处理函数

movl %eax,PT_EAX(%esp) //将寄存器eax中保存的返回值存储

syscall_exit: //开始退出系统调用

testl $_TIF_ALLWPRK_MASK,%ecx //会检测要不要执行syscall_exit_work,正常情况会有一些需要处理的工作

// 比如当前进程有一些信号要处理,系统需要进行调度

jne syscall_exit_work //不需要就直接恢复现场返回

restore_all: //恢复现场

RESTORE_INT_REGS

irq_return: //退出系统调用,实际就是iret,系统调用到这里结束。

INTERRUPT_RETURN

ENDPROC(system_call)

syscall_exit_work:

testl $_TIF_WORK_SYSCALL_EXIT,%ecx

jz work_pending //跳转到work_pending

END(syscall_exit_work)

work_pending:

testb $_TIF_NEED_RESCHED,%cl

jz work_notifysing //处理信号

work_resched:

call schedule //重新调度,就调用schedule

jz restore_all //调度完了返回restore_all

work_notifysing:

...

END(work_pending)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值