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


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

下图显示了系统调用的执行过程:

System Calls

从该图可以看出,进程在用户模式下正常执行,直到系统调用中断它。然后,系统调用在内核模式下优先执行。系统调用执行完毕后,控制权返回用户模式,可以恢复用户进程的执行。

一般来说,在以下情况下需要系统调用:

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

系统调用的类型

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

进程控制

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

文件管理

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

设备管理

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

信息维护

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

通信

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

下面列出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() 系统调用用于终止对文件系统的访问。使用此系统调用意味着程序不再需要该文件,因此缓冲区将被刷新,文件元数据将被更新,并且文件资源将被释放。

更新于:2023年11月1日

39K+ 浏览量

启动你的职业生涯

通过完成课程获得认证

开始学习
广告