📜  Linux系统调用详解

📅  最后修改于: 2022-05-13 01:56:11.414000             🧑  作者: Mango

Linux系统调用详解

系统调用是提供进程和操作系统之间接口的过程。它是计算机程序向操作系统内核请求服务的方式。

不同的操作系统执行不同的系统调用。

在 Linux 制作系统中,调用涉及将控制权从非特权用户模式转移到特权内核模式;这种转移的细节因架构而异。库负责收集系统调用参数,并在必要时以进行系统调用所需的特殊形式排列这些参数。

系统调用主要分为5类:

  • 过程控制
  • 文件管理
  • 设备管理
  • 信息维护
  • 沟通



过程控制 :

该系统调用执行进程创建、进程终止等任务。

在此之下的 Linux 系统调用是fork()exit()exec() 。

  • 叉子()
    • 新进程由 fork() 系统调用创建。
    • 可以使用 fork() 创建一个新进程,而无需运行新程序——新的子进程只是继续执行与第一个(父)进程正在运行的完全相同的程序。
    • 它是进程管理下使用最广泛的系统调用之一。
  • 出口()
    • 程序使用 exit() 系统调用来终止其执行。
    • 操作系统在 exit() 系统调用之后回收进程使用的资源。
  • 执行()
    • 调用 exec() 后,新程序将开始执行
    • 运行一个新程序不需要先创建一个新进程:任何进程都可以随时调用 exec() 。当前运行的程序立即终止,新程序开始在现有进程的上下文中执行。

文件管理 :

文件管理系统调用处理文件操作作业,如创建文件、读取和写入等。在此之下的 Linux 系统调用是open()、read()、write()、close()。

  • 打开():
    • 它是打开文件的系统调用。
    • 这个系统调用只是打开文件,为了执行读写等操作,我们需要执行不同的系统调用来执行这些操作。
  • 读():
    • 此系统调用以读取模式打开文件
    • 我们无法使用此系统调用编辑文件。
    • 多个进程可以同时对同一个文件执行 read() 系统调用。
  • 写():
    • 此系统调用以写入模式打开文件
    • 我们可以使用这个系统调用来编辑文件。
    • 多个进程不能同时对同一个文件执行 write() 系统调用。
  • 关闭():
    • 这个系统调用关闭打开的文件。

设备管理 :

设备管理执行设备操作的工作,例如从设备缓冲区读取、写入设备缓冲区等。在此之下的 Linux 系统调用是ioctl()。

  • ioctl():
    • ioctl() 被称为输入和输出控制。
    • ioctl 是针对特定于设备的输入/输出操作和其他常规系统调用无法表达的操作的系统调用。

信息维护:

它处理信息及其在操作系统和用户程序之间的传输。此外,操作系统保留有关其所有进程的信息,系统调用用于访问此信息。这下的系统调用是getpid()、alarm()、sleep()。

  • getpid():
    • getpid 代表获取进程 ID。
    • getpid()函数应返回调用进程的进程 ID。
    • getpid()函数应始终成功,并且不保留返回值以指示错误。
  • 警报():
    • 该系统调用设置了一个闹钟,以便在必须到达时传递信号。
    • 它安排将信号传递给调用进程。
  • 睡觉():
    • 此系统调用将当前正在运行的进程的执行暂停一段时间
    • 同时,在此间隔期间,另一个进程有机会执行

沟通 :

这些类型的系统调用专门用于进程间通信。

两种模型用于进程间通信

  1. 消息传递(进程相互交换消息)
  2. 共享内存(进程共享内存区域进行通信)

这下的系统调用是pipe() , shmget() , mmap() 。

  • 管道():
    • pipe() 系统调用用于在不同的 Linux 进程之间进行通信。
    • 它主要用于进程间通信。
    • pipe() 系统函数用于打开文件描述符。
  • shmget():
    • shmget 代表共享内存段。
    • 它主要用于共享内存通信。
    • 该系统调用用于访问共享内存并访问消息以便与进程通信。
  • 映射():
    • 此函数调用用于将文件或设备映射或取消映射到内存中。
    • mmap() 系统调用负责将文件内容映射到进程的虚拟内存空间。

这些是 LINUX 操作系统中涉及的各种系统调用。