系统调用过程
2017-07-20 14:31
316 查看
系统调用:
每个系统调用都通过lib库体现。每一个系统调用在lib库中一般是一个宏syscallX(),X是具体某个调用的数字参数。
有的系统调用更复杂,因为它们有可变 的参数列表,但它们仍用一样的入口指针。
当syscall()被调用后,并没有任何的系统代码被执行,直到syscall()调用了int 0x80 ,中断0x80 把调用
(控制)传给核心入口地址中的_system_call(),这个入口地址对任何系统调用都是一样的。 _System_call()
负责保护所有的寄存器,并检查系统调用是否合法,如果合法那么根据从_sys_call_table中
找出的偏移量,把控制权转给真正的系统。
system_call函数详细过程:
(当用户调用INT 0x80而进入system_call函数后,首先检查用来存放系统调用编号的eax的值是否超出IDT表的
项数NR_syscalls(NR_syscalls是在“/include/linux/sys.h”文件中定义的宏,其值为256,表示80x86微机上
最多可容纳的系统调用个数)。如没有超出的话,就根据eax的值从系统调用表(sys_call_table)中得到对
应的系统调用入口,并通过call 指令转入各个具体函数(sys_*)的处理过程。)
系统调用完成后,_system_call() 还要负责调用_ret_from_sys_call()来断后。_Ret_from_sys_call()检
查是否有必要重新调度,如果有的话,调用他。
每个系统调用都通过lib库体现。每一个系统调用在lib库中一般是一个宏syscallX(),X是具体某个调用的数字参数。
有的系统调用更复杂,因为它们有可变 的参数列表,但它们仍用一样的入口指针。
当syscall()被调用后,并没有任何的系统代码被执行,直到syscall()调用了int 0x80 ,中断0x80 把调用
(控制)传给核心入口地址中的_system_call(),这个入口地址对任何系统调用都是一样的。 _System_call()
负责保护所有的寄存器,并检查系统调用是否合法,如果合法那么根据从_sys_call_table中
找出的偏移量,把控制权转给真正的系统。
system_call函数详细过程:
(当用户调用INT 0x80而进入system_call函数后,首先检查用来存放系统调用编号的eax的值是否超出IDT表的
项数NR_syscalls(NR_syscalls是在“/include/linux/sys.h”文件中定义的宏,其值为256,表示80x86微机上
最多可容纳的系统调用个数)。如没有超出的话,就根据eax的值从系统调用表(sys_call_table)中得到对
应的系统调用入口,并通过call 指令转入各个具体函数(sys_*)的处理过程。)
系统调用完成后,_system_call() 还要负责调用_ret_from_sys_call()来断后。_Ret_from_sys_call()检
查是否有必要重新调度,如果有的话,调用他。
相关文章推荐
- Linux系统调用过程研究
- 调用SERVER的系统过程xp_cmdshell发生错误:xpsql.cpp:错误来自GetProxyAccount
- 系统调用的过程
- 跟踪sys_mkdir的系统调用过程
- 调用MSSQLSERVER的系统过程xp_cmdshell发生错误:xpsql.cpp: 错误 来自 GetProxyAccount
- 系统调用全过程分析
- Android Touch系统简介(二):实例详解onInterceptTouchEvent与onTouchEvent的调用过程
- 记录一次系统调用慢的 分析过程
- 分析fork函数对应的系统调用处理过程
- linux0.11系统调用的执行过程是怎样的?
- 系统调用sys_write的过程
- TCP/IP - 函数到系统调用的过程
- NFS系统read调用过程(三)
- 系统调用过程的理解
- 系统调用及参数传递过程!
- 汇编语言系统调用过程
- linux下C程序运行过程中的系统调用
- Linux内核分析:实验五--使用GDB跟踪系统调用执行过程
- WINDOWS系统调用 和 SYSENTER系统服务调用过程
- linux系统调用mount全过程分析