OS中的系统调用:类型和示例

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

系统调用是提供一种方法和操作系统之间的接口的机制。它是一种编程方法,其中计算机程序向OS的内核请求服务。

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

操作系统中的系统调用

系统调用示例

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

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

  • 第一个电话是在屏幕上写提示信息
  • 其次,从键盘读取定义两个文件的字符。

系统调用如何工作?

以下是系统调用的步骤:

系统调用的架构

如上图所示。

步骤1)在用户模式下执行的过程,直到系统调用将其中断为止。

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

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

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

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

以下是需要在OS中进行系统调用的情况:

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

系统调用的类型

这是OS中使用的五种系统调用:

  • 过程控制
  • 文件管理
  • 设备管理
  • 信息维护
  • 通讯技术
img

过程控制

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

功能:

  • 终止并中止
  • 加载并执行
  • 创建流程并终止流程
  • 等待并签名活动
  • 分配和释放内存

文件管理

文件管理系统调用处理文件操作作业,例如创建文件,读取和写入等。

功能:

  • 建立档案
  • 删除文件
  • 打开和关闭文件
  • 读取,写入和重新定位
  • 获取和设置文件属性

设备管理

设备管理完成设备操作的工作,例如从设备缓冲区读取,写入设备缓冲区等。

功能

  • 请求和释放设备
  • 逻辑上连接/分离设备
  • 获取和设置设备属性

信息维护

它处理信息及其在OS和用户程序之间的传输。

功能:

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

通讯:

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

功能:

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

传递系统调用参数的规则

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

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

OS中使用的重要系统调用

wait()

在某些系统中,一个进程需要等待另一个进程完成其执行。当父进程创建子进程时,会发生这种情况,并且父进程的执行将保持挂起状态,直到其子进程执行为止。

父进程的挂起自动通过wait()系统调用发生。当子进程结束执行时,控件将移回到父进程。

fork()

流程使用此系统调用创建作为其自身副本的流程。在此系统的帮助下,“调用”父进程将创建一个子进程,并且该父进程的执行将被暂停,直到该子进程执行为止。

exec()

当已运行进程的上下文中的可执行文件替换较旧的可执行文件时,将运行此系统调用。但是,原始过程标识符保留下来,因为未构建新过程,而是将堆栈,数据,头,数据等替换为新过程。

kill()

OS使用kill()系统调用将终止信号发送到促使该进程退出的进程。但是,kill系统调用并不一定意味着终止进程,并且可能具有多种含义。

exit()

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

CategoriesWindowsUnix
Process controlCreateProcess() ExitProcess() WaitForSingleObject()fork() exit() wait()
Device manipulationSetConsoleMode() ReadConsole() WriteConsole()loctl() read() write()
File manipulationCreateFile() ReadFile() WriteFile() CloseHandle()Open() Read() write() close!)
Information maintanenceGetCurrentProcessID() SetTimer() Sleep()getpid() alarm() sleep()
CommunicationCreatePipe() CreateFileMapping() MapViewOfFile()Pipe() shm_open() mmap()
ProtectionSetFileSecurity() InitlializeSecurityDescriptor() SetSecurityDescriptorGroup ()Chmod() Umask() Chown()

觉得文章有用?

点个广告表达一下你的爱意吧 !😁