linux中syscall系统调用

来源:互联网 发布:js类数组和数组的区别 编辑:程序博客网 时间:2024/05/22 20:28
linux中syscall系统调用

     在Linux的用户空间,我们经常会调用系统调用,下面我们跟踪一下read系统调用,使用的Linux内核版本为Linux2.6.37。不同的Linux版本其中的实现略有不同。
     在一些应用中我们可以看到下面的一些定义:

#define real_read(fd, buf, count ) (syscall(SYS_read, (fd), (buf), (count)))

     其实真正调用的还是系统函数syscall(SYS_read),也就是sys_read()函数中,在Linux2.6.37中的利用几个宏定义实现。

    Linux 系统调用(SCI,system call interface)的实现机制实际上是一个多路汇聚以及分解的过程,该汇聚点就是 0x80 中断这个入口点(X86 系统结构)。也就是说,所有系统调用都从用户空间中汇聚到 0x80 中断点,同时保存具体的系统调用号。当 0x80 中断处理程序运行时,将根据系统调用号对不同的系统调用分别处理(调用不同的内核函数处理)。

    引起系统调用的两种途径:

    (1)int $0×80 , 老式linux内核版本中引起系统调用的唯一方式

    (2)sysenter汇编指令

原创粉丝点击