操作系统中的系统调用是什么?
甲系统调用是提供一种方法和操作系统之间的接口的机制。它是一种编程方法,其中计算机程序向OS的内核请求服务。
系统调用通过API(应用程序编程接口)向用户程序提供操作系统的服务。系统调用是内核系统的唯一入口点。
操作系统中的系统调用
系统调用示例
例如,如果我们需要编写程序代码以从一个文件中读取数据,则将该数据复制到另一个文件中。程序需要的第一个信息是两个文件的名称,即输入文件和输出文件。
在交互式系统中,此类程序执行需要OS进行一些系统调用。
- 第一个电话是在屏幕上写提示信息
- 其次,从键盘读取定义两个文件的字符。
系统调用如何工作?
以下是系统调用的步骤:
系统调用的架构
如上图所示。
步骤1)在用户模式下执行的过程,直到系统调用将其中断为止。
步骤2)之后,系统调用将优先以内核模式执行。
步骤3)系统调用执行结束后,控制权返回到用户模式。
步骤4)以内核模式恢复用户进程的执行。
为什么在OS中需要系统调用?
以下是需要在OS中进行系统调用的情况:
- 从文件读取和写入需要系统调用。
- 如果文件系统要创建或删除文件,则需要系统调用。
- 系统调用用于创建和管理新流程。
- 网络连接需要系统调用来发送和接收数据包。
- 访问诸如扫描仪,打印机之类的硬件设备需要系统调用。
系统调用的类型
这是OS中使用的五种系统调用:
- 过程控制
- 文件管理
- 设备管理
- 信息维护
- 通讯技术
过程控制
该系统调用执行流程创建,流程终止等任务。
功能:
- 终止并中止
- 加载并执行
- 创建流程并终止流程
- 等待并签名活动
- 分配和释放内存
文件管理
文件管理系统调用处理文件操作作业,例如创建文件,读取和写入等。
功能:
- 建立档案
- 删除文件
- 打开和关闭文件
- 读取,写入和重新定位
- 获取和设置文件属性
设备管理
设备管理完成设备操作的工作,例如从设备缓冲区读取,写入设备缓冲区等。
功能
- 请求和释放设备
- 逻辑上连接/分离设备
- 获取和设置设备属性
信息维护
它处理信息及其在OS和用户程序之间的传输。
功能:
- 获取或设置时间和日期
- 获取过程和设备属性
通讯:
这些类型的系统调用专门用于进程间通信。
功能:
- 创建,删除通讯连接
- 发送,接收消息
- 帮助操作系统传输状态信息
- 连接或分离远程设备
传递系统调用参数的规则
以下是将参数传递给系统调用的一般通用规则:
- 操作系统应将参数压入或弹出堆栈。
- 参数可以在寄存器中传递。
- 当参数多于寄存器时,应将其存储在一个块中,并将块地址作为参数传递给寄存器。
OS中使用的重要系统调用
wait()
在某些系统中,一个进程需要等待另一个进程完成其执行。当父进程创建子进程时,会发生这种情况,并且父进程的执行将保持挂起状态,直到其子进程执行为止。
父进程的挂起自动通过wait()系统调用发生。当子进程结束执行时,控件将移回到父进程。
fork()
流程使用此系统调用创建作为其自身副本的流程。在此系统的帮助下,“调用”父进程将创建一个子进程,并且该父进程的执行将被暂停,直到该子进程执行为止。
exec()
当已运行进程的上下文中的可执行文件替换较旧的可执行文件时,将运行此系统调用。但是,原始过程标识符保留下来,因为未构建新过程,而是将堆栈,数据,头,数据等替换为新过程。
kill()
OS使用kill()系统调用将终止信号发送到促使该进程退出的进程。但是,kill系统调用并不一定意味着终止进程,并且可能具有多种含义。
exit()
exit()系统调用用于终止程序执行。特别是在多线程环境中,此调用定义线程执行已完成。在使用exit()系统调用之后,操作系统将回收该进程使用的资源。
Categories | Windows | Unix |
---|---|---|
Process control | CreateProcess() ExitProcess() WaitForSingleObject() | fork() exit() wait() |
Device manipulation | SetConsoleMode() ReadConsole() WriteConsole() | loctl() read() write() |
File manipulation | CreateFile() ReadFile() WriteFile() CloseHandle() | Open() Read() write() close!) |
Information maintanence | GetCurrentProcessID() SetTimer() Sleep() | getpid() alarm() sleep() |
Communication | CreatePipe() CreateFileMapping() MapViewOfFile() | Pipe() shm_open() mmap() |
Protection | SetFileSecurity() InitlializeSecurityDescriptor() SetSecurityDescriptorGroup () | Chmod() Umask() Chown() |