Linux 系统调用

前言:操作系统作为用户与硬件交互的中间接口,为用户提供了巨大的便利。那么,用户如何通过操作系统去操作底层硬件、文件呢?这里涉及到一个概念------系统调用。本文将对系统调用做一些介绍。

目录

一、什么是系统调用

二、系统调用的主要作用

三、Linux常用系统调用

四、系统调用工作流程

五、系统调用与一般函数调用的区别


一、什么是系统调用

简单来说,系统调用是操作系统为用户或应用程序提供访问内核的接口。

为便于理解,举个生活中的例子:订阅鲜牛奶

有一些家庭会每天订阅新鲜牛奶,每天早上都会有专门的人送鲜牛奶上门。但,家是比较私密/隐秘的空间,很多人不希望陌生人进入或打扰,以免泄露隐私或是担心破坏家里环境。所以门口都会设置一个上锁的小箱子,每天送牛奶的人不需要进入买家家里,直接将牛奶放在指定箱子中即可。买家再从箱子里取出。这个小箱子就可以理解为系统调用。

同理,操作系统也不希望用户直接进入内核做一些操作,容易破坏内核的稳定性与安全性。所以操作系统为用户或应用程序提供了一些接口,这样用户可以通过这些接口做一些操作,同时也维护了内核的安全与稳定。

二、系统调用的主要作用

  1. 隔离与保护

    系统调用将用户程序与内核隔离,防止用户程序直接操作敏感资源(如内存、硬件设备等),从而保障系统的稳定性和安全性。例如,用户程序无法直接写入磁盘,必须通过系统调用(如write())请求内核完成操作。

  2. 统一资源管理

    内核通过系统调用统一管理硬件资源,避免多进程竞争导致的冲突。例如,多个进程同时访问文件时,内核通过系统调用协调读写操作,确保数据一致性。

  3. 抽象硬件操作

    系统调用为硬件操作提供抽象层,简化应用程序。例如,不同磁盘类型(SSD、HDD)的文件读写操作通过统一的**read()/write()**系统调用实现,用户程序无需关心底层硬件差异。

三、Linux常用系统调用

  • 进程控制 :如fork()、exec()、wait()、kill()

  • 文件管理 :如open()、read()、write()、close()

  • 设备管理 :如ioctl()、mmap()

  • 网络操作 :如socket()、bind()、listen()、accept()、send()、recv()

  • 系统信息 :如getpid()、getuid()

四、系统调用工作流程

  1. 用户程序发起请求 :通过特定的指令(如软中断:x86的int 0x80 或arm的svc指令)发起系统调用请求。

  2. 状态切换:操作系统将CPU状态从用户态切换到内核态,以执行系统调用。

  3. 内核处理请求:操作系统内核接管CPU,处理系统调用请求并执行相应的操作。

  4. 返回用户态:完成系统调用后,操作系统将控制权返回给用户程序,继续执行。

五、系统调用与一般函数调用的区别

维度 系统调用 一般函数调用
执行权限 需内核态高权限 仅在用户态运行
执行成本 涉及上下文切换,耗时较长 仅栈操作,耗时短
资源管理 由操作系统直接控制硬件资源 无法直接操作底层资源
安全性 通过权限分层保护系统稳定性与安全性 无权限控制机制
调用对象 面向内核(如open() 面向用户应用程序(如自定义函数)
相关推荐
yz_aiks9 分钟前
Linux Jar包配置Systemd自启动实战:从排查到配置全流程
linux·python·jar·自启动·systemd
AI智图坊22 分钟前
多件装组合SKU图的批量生产效率分析:从PS手工到AI自动化的工作流改造
大数据·运维·人工智能·gpt·ai作画·自动化·aigc
Hello:CodeWorld1 小时前
C 风格变参 vs C++ 变参模板:核心区别与选型指南
c语言·c++·算法
bjzhang752 小时前
CentOS下安装MySQL详解
linux·mysql·centos
十月的皮皮3 小时前
C语言学习笔记20260606- 求月份天数三种写法
c语言·笔记·学习
Jason_chen3 小时前
Linux 6.2 音频机制深度解析:AI驱动的低延迟音频与零信任音频安全架构
linux
下午写HelloWorld3 小时前
Linux系统及Ubuntu常用指令
linux·ubuntu·操作系统
搬砖魁首3 小时前
基础能力系列 - 多线程2 - 条件变量
c++·rust·条件变量·原子类型·线程同步互斥
chase_my_dream4 小时前
C++ + SLAM 高频面试问题整理
开发语言·c++·面试
牛油果子哥q4 小时前
【C++ STL string 】C++ STL string 终极精讲:底层原理、内存机制、全套API、深浅拷贝、易错坑点与工程实战规范
数据库·c++