操作系统中的系统调用:是什么、类型和示例

什么是操作系统中的系统调用?

系统调用是一种机制,它提供了进程与操作系统之间的接口。它是一种编程方法,计算机程序通过该方法请求操作系统内核的服务。

系统调用通过 API(应用程序编程接口)为用户程序提供操作系统服务。系统调用是内核系统的唯一入口点。

System Calls in Operating System
操作系统中的系统调用

系统调用示例

例如,如果我们想编写一个程序代码,从一个文件读取数据,然后将该数据复制到另一个文件中。程序首先需要的信息是两个文件的名称,即输入文件和输出文件。

在交互式系统中,此类程序执行需要操作系统的一些系统调用。

  • 第一个调用是在屏幕上显示提示消息
  • 第二个是读取键盘输入的定义两个文件的字符。

系统调用如何工作?

以下是操作系统中系统调用的步骤

System Call Works

Architecture of the System Call

系统调用的体系结构

如上图所示的系统调用示例图。

步骤 1) 进程在用户模式下执行,直到系统调用中断它。

步骤 2) 之后,系统调用以优先顺序在内核模式下执行。

步骤 3) 系统调用执行完成后,控制权返回到用户模式。

步骤 4) 用户进程在内核模式下恢复执行。

为什么在操作系统中需要系统调用?

以下是操作系统中需要系统调用的情况

  • 文件读写需要系统调用。
  • 如果文件系统要创建或删除文件,则需要系统调用。
  • 系统调用用于创建和管理新进程。
  • 网络连接需要系统调用来发送和接收数据包。
  • 访问硬件设备(如扫描仪、打印机)需要系统调用。

系统调用类型

以下是操作系统中的五种系统调用类型

  • 进程控制
  • 文件管理
  • 设备管理
  • 信息维护
  • 通信
Types of System calls

操作系统中系统调用的类型

进程控制

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

函数

  • 结束和中止
  • 加载和执行
  • 创建进程和终止进程
  • 等待和信号事件
  • 分配和释放内存

文件管理

文件管理系统调用处理文件操作,如创建文件、读写等。

函数

  • 创建文件
  • 删除文件
  • 打开和关闭文件
  • 读、写和定位
  • 获取和设置文件属性

设备管理

设备管理负责设备操作,如从设备缓冲区读取、写入设备缓冲区等。

函数

  • 请求和释放设备
  • 逻辑附加/分离设备
  • 获取和设置设备属性

信息维护

它处理操作系统和用户程序之间的信息及其传输。

函数

  • 获取或设置时间和日期
  • 获取进程和设备属性

沟通

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

函数

  • 创建、删除通信连接
  • 发送、接收消息
  • 帮助操作系统传输状态信息
  • 附加或分离远程设备

系统调用传递参数的规则

以下是将参数传递给系统调用的通用规则

  • 参数应由操作系统推入或弹出堆栈。
  • 参数可以通过寄存器传递。
  • 当参数多于寄存器时,应将其存储在一个块中,并将块地址作为参数传递给寄存器。

操作系统中使用的重要系统调用

wait()

在某些系统中,进程需要等待另一个进程完成其执行。这种情况发生在父进程创建子进程时,父进程的执行将一直暂停,直到子进程执行完毕。

父进程的暂停会通过 wait() 系统调用自动发生。当子进程结束执行时,控制权会移回到父进程。

fork()

进程使用此系统调用来创建与其自身的副本相同的进程。借助此系统调用,父进程创建子进程,并且父进程的执行将暂停,直到子进程执行。

exec()

此系统调用在已运行进程的上下文中运行一个可执行文件,该文件替换了旧的可执行文件。但是,由于没有构建新进程,原始进程标识符保持不变,但堆栈、数据、头部、数据等被新进程替换。

kill()

kill() 系统调用由操作系统用于向进程发送终止信号,该信号促使进程退出。但是,kill 系统调用不一定意味着终止进程,它可以有多种含义。

exit()

exit() 系统调用用于终止程序执行。特别是在多线程环境中,此调用定义了线程执行的完成。在使用 exit() 系统调用后,操作系统会收回进程使用的资源。

摘要

类别 车窗 Unix
进程控制 CreateProcess()
ExitProcess()
WaitForSingleObject()
fork()
exit()
wait()
设备操作 SetConsoleMode()
ReadConsole()
WriteConsole()
loctl()
read()
write()
文件操作 CreateFile()
ReadFile()
WriteFile()
CloseHandle()
Open()
Read()
write()
close!)
信息维护 GetCurrentProcessID()
SetTimer()
Sleep()
getpid()
alarm()
sleep()
沟通 CreatePipe()
CreateFileMapping()
MapViewOfFile()
Pipe()
shm_open()
mmap()
保护 SetFileSecurity()
InitlializeSecurityDescriptor()
SetSecurityDescriptorGroup ()
Chmod()
Umask()
Chown()