进程和操作系统之间的接口由系统调用提供。通常,系统调用可用作汇编语言说明。它们也包含在汇编级程序员使用的手册中。通常在用户模式下的进程需要访问资源时进行系统调用。然后,它请求内核通过系统调用提供资源。
通常,在以下情况下需要系统调用-
如果文件系统需要创建或删除文件。从文件读取和写入也需要系统调用。
创建和管理新流程。
网络连接也需要系统调用。这包括发送和接收数据包。
访问硬件设备(例如打印机,扫描仪等)需要系统调用。
主要有五种类型的系统调用。这些详细解释如下-
这些系统调用处理诸如流程创建,流程终止等流程。
这些系统调用负责文件操作,例如创建文件,读取文件,写入文件等。
这些系统调用负责设备操作,例如从设备缓冲区读取,写入设备缓冲区等。
这些系统调用处理信息及其在操作系统和用户程序之间的传输。
这些系统调用对于进程间通信很有用。它们还处理创建和删除通信连接。
Windows和Unix中上述所有类型的系统调用的一些示例如下:
系统调用的类型 | 视窗 | 的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() 警报() sleep() |
通讯 | CreatePipe() CreateFileMapping() MapViewOfFile() | pipe() shmget() mmap() |
如上所示,有许多不同的系统调用。其中一些系统调用的目的如下:
该open()
系统调用是用来提供访问文件的文件系统。此系统调用将资源分配给该文件,并提供该过程用来引用该文件的句柄。一个文件可以由多个进程同时打开,也可以限制为一个进程。这完全取决于文件组织和文件系统。
该read()
系统呼叫从被存储在文件系统中的文件来访问数据。可以通过其文件描述符标识要读取的文件,并且应open()
在读取之前使用打开该文件。通常,read()
系统调用采用三个参数,即文件描述符,存储读取数据的缓冲区和要从文件读取的字节数。
该write()
系统呼叫从用户缓冲器成装置,例如一个文件中写入的数据。该系统调用是从程序输出数据的方法之一。通常,write()
系统调用采用三个参数,即文件描述符,指向存储数据的缓冲区的指针以及要从缓冲区写入的字节数。
该close()
系统调用用于终止访问文件系统。使用此系统调用意味着程序不再需要该文件,因此将刷新缓冲区,更新文件元数据,并取消分配文件资源。
在某些系统中,一个进程可能会等待另一个进程完成其执行。当父进程创建一个子进程并且该父进程的执行被挂起直到该子进程执行时,就会发生这种情况。父进程的挂起通过wait()
系统调用发生。当子进程完成执行时,控件将返回到父进程。
该系统调用在已经运行的进程的上下文中运行可执行文件。它替换了以前的可执行文件。这称为覆盖。由于未创建新进程,但是该进程的数据,堆,堆栈等被新进程替换,因此保留了原始进程标识符。
进程使用fork()
系统调用来创建作为其自身副本的进程。这是操作系统中创建进程的主要方法之一。当父进程创建子进程并且父进程的执行被挂起直到子进程执行。当子进程完成执行时,控件将返回到父进程。
该exit()
系统调用所使用的程序终止其执行。在多线程环境中,这意味着线程执行已完成。操作系统在exit()
系统调用后回收该进程使用的资源。
的kill()
系统调用用于由操作系统到一个终止信号发送到该施力的过程中退出的处理。但是,kill()
系统调用并不一定意味着要终止进程,而是可以具有多种含义。