系统调用的原理与好处
2018-02-05 10:22
274 查看
我们调用一个C语言库中的API,这个API中有一个指令INT 0x80,这是一个由指令发出的系统中断,叫软中断。这个中断使系统由用户态陷入内核态,并跳转到内核中地址为sys_call的函数首部。sys_call是系统调用引导程序,会通过系统调用号查找系统调用表,取出表中记录的系统调用函数的地址并跳转执行。当中断指令INT 0x80执行的时候,先将系统调用号存入寄存器EAX,sys_call函数将其乘以4作为偏移量,再加上sys_call_table的初始地址得到系统调用服务函数的地址,最后跳转执行。
还有一点,有一些系统调用有参数,API需要将参数先存在寄存器中,然后在调用指令INT 0x80.然后在sys_call函数调用时,将这些寄存器中的值压入堆栈,真正的系统调用服务函数从堆栈中获取参数。
系统调用大的好处:提供了统一的接口,比如读取数据,API就不必理会数据存储的物理介质。保护了OS的稳定,因为系统调用、异常和中断是外界进入内核的仅有通道,这就保证了不同进程对内核空间的操作是可知并可控的,这为OS多任务调度和虚拟内存实现提供了基础。
还有一点,有一些系统调用有参数,API需要将参数先存在寄存器中,然后在调用指令INT 0x80.然后在sys_call函数调用时,将这些寄存器中的值压入堆栈,真正的系统调用服务函数从堆栈中获取参数。
系统调用大的好处:提供了统一的接口,比如读取数据,API就不必理会数据存储的物理介质。保护了OS的稳定,因为系统调用、异常和中断是外界进入内核的仅有通道,这就保证了不同进程对内核空间的操作是可知并可控的,这为OS多任务调度和虚拟内存实现提供了基础。
相关文章推荐
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- 程序员的自我修养: 系统调用的原理
- linux中mmap系统调用原理分析与实现
- ARM Linux系统调用的原理
- Linux中mmap系统调用原理分析与实现
- android-linux系统调用原理之整体系统框架实现原理之OPEN实现
- ARM Linux系统调用的原理
- 《ARM与Linux些许问题》第四章:ARM平台系统调用原理分析
- Linux系统调用原理
- linux中mmap系统调用原理分析与实现
- Linux系统调用(syscall)原理
- Linux 中open系统调用实现原理【转】
- Linux VFS中write系统调用实现原理【转】
- 系统调用的实现原理
- 系统调用的实现原理
- 系统调用的实现原理
- 系统调用原理
- GDB调试原理——ptrace系统调用
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)。
- 【一图流】_03_一张图看懂 Android系统_Binder原理 及其 调用流程: