system call——系统调用

1. 系统调用

系统调用是操作系统提供的有效服务界面,一般使用高级语言编写,如c和c++,对于特定的较为底层的任务,则使用汇编语言指令。

2. API和系统调用
API,应用程序接口,提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力。
使用API而不直接调用系统调用的原因主要由以下两点:1)由于API隐藏了绝大多数细节,所以程序员无需理解内部工作机制的细节,更加的user-friendly。2)因为API跟内核没有必然的联系,所以具有很好的可移植性。

有三种常用的API:Windows系统的Win32 API,适用于POSIX系统的POSIX API以及JAVA API。

3. 系统调用的实现
系统调用接口,由程序设计语言的运行时支持系统提供。系统调用接口截取API的函数调用,然后调用操作系统中的相关系统调用。

一般而言,每个系统调用有一个与其相关的数字,多个数字构成了向量表。系统调用接口维护这个列表索引,并通过其来调用所需要操作系统内核中的的系统调用。

4. 系统调用的参数传递

系统调用根据使用的计算机而异,通常需要提供比系统调用识别符更多的信息。传参方法有三种:1)通过寄存器直接传递传参 2)参数存在内存的块和表上,块的地址通过寄存器来传递 3)参数也可以通过程序压入堆栈中,并通过操作系统弹出。

5. 系统调用的类型
进程控制(Process control)
终止&运行程序,如end(), abort();

装入&执行进行– load(), execute();

创建&中止进程-create_process(), terminate_process();

获得&设置进程属性– create_process(), terminate_process();
等待时间wait_time();
等待&唤醒事件– wait_event(), signal_event();

分配和释放内存acquire_lock(), release_lock();

除了进程控制,还有文件管理(File manipulation),设备文件(Device manipulation),信息维护(Information maintenance),通信(Communication),保护(Protection)。

其中通信模型有两种:1)消息传递模型,通信进程彼此之间交换消息来交换信息,直接或间接的通过一个共同的邮箱 2)共享内存模型:进程通过shared memory create 和shared memory attach系统调用来获得其他进行所拥有的内存的访问权。

参考资料:
[1] Abraham Silberschatz. 操作系统概念. 高等教育出版社, 2007.3.

原文地址:https://www.cnblogs.com/JK-Z/p/12262059.html