系统调用的目的是什么?


进程与操作系统的接口由系统调用提供。通常,系统调用以汇编语言指令的形式提供。它们也包含在汇编级程序员使用的手册中。当用户模式下的进程需要访问资源时,通常会进行系统调用。然后,它请求内核通过系统调用提供资源。

通常,在以下情况下需要系统调用:

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

系统调用的类型

系统调用主要有五种类型。详细解释如下:

进程控制

这些系统调用处理诸如进程创建、进程终止等进程。

文件管理

这些系统调用负责文件操作,例如创建文件、读取文件、写入文件等。

设备管理

这些系统调用负责设备操作,例如从设备缓冲区读取、写入设备缓冲区等。

信息维护

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

通信

这些系统调用对于进程间通信很有用。它们还处理创建和删除通信连接。

以下是 Windows 和 Unix 中所有上述类型系统调用的示例:

系统调用的类型WindowsLinux
进程控制CreateProcess()
ExitProcess()
WaitForSingleObject()
fork()
exit()
wait()

文件管理CreateFile()
ReadFile()
WriteFile()
CloseHandle()
open()
read()
write()
close()
设备管理SetConsoleMode()
ReadConsole()
WriteConsole()
ioctl()
read()
write()
信息维护GetCurrentProcessID()
SetTimer()
Sleep()
getpid()
alarm()
sleep()
通信CreatePipe()
CreateFileMapping()
MapViewOfFile()
pipe()
shmget()
mmap()

系统调用的目的

如上所示,有许多不同的系统调用。其中一些系统调用的目的是:

open()

open() 系统调用用于提供对文件系统中文件的访问权限。此系统调用为文件分配资源,并提供一个句柄,进程使用该句柄来引用该文件。多个进程可以同时打开一个文件,也可以限制为一个进程。这完全取决于文件组织和文件系统。

read()

read() 系统调用用于访问存储在文件系统中的文件中的数据。要读取的文件可以通过其文件描述符来识别,并且在读取之前应使用 open() 打开它。通常,read() 系统调用接受三个参数,即文件描述符、存储读取数据的缓冲区以及要从文件中读取的字节数。

write()

write() 系统调用将数据从用户缓冲区写入设备(例如文件)。此系统调用是程序输出数据的方法之一。通常,write() 系统调用接受三个参数,即文件描述符、存储数据的缓冲区的指针以及要从缓冲区写入的字节数。

close()

close() 系统调用用于终止对文件系统的访问。使用此系统调用意味着程序不再需要该文件,因此缓冲区被刷新,文件元数据被更新,并且文件资源被释放。

wait()

在某些系统中,进程可能会等待另一个进程完成其执行。当父进程创建子进程并且父进程的执行被挂起直到子进程执行时,就会发生这种情况。父进程的挂起是通过 wait() 系统调用发生的。当子进程完成执行时,控制权将返回给父进程。

此系统调用在已运行进程的上下文中运行可执行文件。它替换先前的可执行文件。这称为覆盖。原始进程标识符保持不变,因为没有创建新进程,但进程的数据、堆、栈等被新进程替换。

fork()

进程使用 fork() 系统调用来创建其自身的副本进程。这是操作系统中主要的进程创建方法之一。当父进程创建子进程并且父进程的执行被挂起直到子进程执行时。当子进程完成执行时,控制权将返回给父进程。

exit()

exit() 系统调用由程序用于终止其执行。在多线程环境中,这意味着线程执行已完成。exit() 系统调用后,操作系统会回收进程使用的资源。

kill()

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

更新于:2020-06-22

10K+ 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告