不同类型的系统调用
进程与操作系统之间的接口是通过系统调用提供的。通常,系统调用是作为汇编语言指令提供的。它们也包含在汇编级程序员使用的手册中。
当用户模式下的进程需要访问资源时,通常会发起系统调用来请求内核提供资源。
系统调用的类型
系统调用主要有五种类型。详细解释如下:
以下是系统调用的类型:
进程控制
这些系统调用处理进程的创建、终止等操作。
文件管理
这些系统调用负责文件的操作,如创建文件、读取文件、写入文件等。
设备管理
这些系统调用负责设备的操作,如从设备缓冲区读取、向设备缓冲区写入等。
信息维护
这些系统调用处理操作系统与用户程序之间的信息和传输。
通信
这些系统调用对 进程间通信 很有用。它们还处理创建和删除通信连接。
下面是Windows和Unix中所有上述类型系统调用的一些示例。
系统调用类型 | Windows | Linux |
---|---|---|
进程控制 | 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() |
上述显示了许多不同的系统调用。以下是其中一些系统调用的详细信息 −
wait()
在某些系统中,一个进程可能会等待另一个进程完成执行。这发生在父进程创建子进程并且父进程的执行被暂停直到子进程执行时。父进程的暂停发生在wait()系统调用之后。当子进程完成执行时,控制权返回给父进程。
exec()
此系统调用在已经运行的进程上下文中运行可执行文件。它替换先前的可执行文件。这称为覆盖。由于没有创建新进程,所以原始进程标识符保持不变,但是进程的数据、堆、栈等被新进程替换。
fork()
进程使用fork()系统调用创建自身的副本进程。这是操作系统中进程创建的主要方法之一。当父进程创建子进程时,父进程的执行被挂起,直到子进程执行。当子进程完成执行时,控制权返回给父进程。
exit()
exit()系统调用由程序用于终止其执行。在多线程环境中,这意味着线程的执行已完成。在exit()系统调用之后,操作系统会回收进程使用的资源。
kill()
kill()系统调用由操作系统用于向进程发送终止信号,促使进程退出。但是,kill系统调用并不一定意味着终止进程,并且可以有各种含义。