• 技术文章 >运维 >linux运维

    linux中什么是系统调用

    长期闲置长期闲置2022-03-21 14:15:30原创458

    在linux中,系统调用是指操作系统提供给用户程序调用的一组特殊接口,用户程序可以根据这组接口获得操作系统内核的服务;系统调用规定了用户进程陷入内核的具体位置,或者说规划了用户访问内核的路径,只能从固定位置进入内核。

    本教程操作环境:linux7.3系统、Dell G3电脑。

    linux中什么是系统调用

    1.什么是系统调用

    系统调用,指的是操作系统提供给用户程序调用的一组特殊接口,用户程序可以根据这组接口获得操作系统内核的服务。它规定了用户进程陷入内核的具体位置,或者说规划了用户访问内核的路径,只能从固定位置进入内核。

    2.linux的系统调用

    对于现代操作系统来说,系统调用是用户空间和内核通讯的普遍手段,linux也不例外。按照功能区域,linux系统调用大致分为进程控制,文件访问,系统控制,存储管理,网络管理,进程通讯等,详细说明可以通过man 2 syscalls命令查看manpage说明。

    系统调用,仅仅通过软中断机制向内核提交请求,进入系统调用对应服务。linux提供的用户编程接口遵循了POSIX标准,这套标准除了定义一些标准的C函数外,提供了一套封装例程将系统调用封装供用户编程使用。不过封装并非必须的,如果你愿意直接调用,linux内核也提供了一个syscall()函数来实现调用。通过下面一个例子了解C库调用和直接调用的区别。

    /*
    **  file: demo.c
    **  author: eric.xu
    **  date:   2016-02-25
    */
    #include <syscall.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <stdio.h>
    int main(void)
    {
        long id1, id2;
        
        /* system call no 20, __NR_getpid equal to SYS_getpid  */
        id1 = syscall(__NR_getpid);
        printf("sys_call getpid %ldn", id1);
        /* libc getpid */
        id2 = getpid();
        printf("libc getpid %ldn", id2);
        return 0;
    }

    编译运行,可以看到两者结果一致。

    sys_call getpid 2899
    libc getpid 2899

    3.linux系统调用实现

    当用户态的进程调用一个系统调用时,CPU切换到内核态并开始执行内核函数。因为内核中每个系统调用都有唯一的标号,所以用户态调用必须传递一个系统调用号的参数来确定具体的系统调用函数。所有的系统调用函数都是整数,在内核中,整数和0表示系统调用成功结束,负数则表示出错条件,而这个错误值会存放在errno变量中作为出错码返回给应用程序。

    linux系统调用使用软中断实现,在x86架构中调用int $0x80汇编指令,这条指令会产生向量为128的异常。而在arm架构中通过SWI指令进入内核空间,下面看下这条指令的格式:

    SWI {cond} immed24;其中immed24表示24位立即数

    SWI异常中断处理程序需要通过读取引起软件中断的SWI指令,取得24位立即数。基本步骤是在SWI异常产生后,访问SPSR寄存器判断该指令是ARM指令还是Thumb指令,然后通过访问LR寄存器得到整条指令地址,紧接着拿到该条指令,获取最低24位立即数。

    相关推荐:《Linux视频教程

    以上就是linux中什么是系统调用的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    广告:Linux视频教程零基础入门到精通

    专题推荐:linux
    上一篇:linux可以改变文件夹权限吗 下一篇:linux系统的字体目录在哪
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• linux的默认编码是什么• linux内核和发行版有什么区别• Linux高频面试问题:查找大文件并安全清除• linux中boot是什么• linux的版本分为哪两类
    1/1

    PHP中文网