一、系统调用概念
系统调用是操作系统提供给应用程序使用的接口,可理解为一种可供应用程序调用的特殊函数。应用程序可以通过系统调用来获取操作系统内核的服务。
二、系统调用和库函数调用的区别
库函数是高级语言编写的,调用库函数时库函数同时也要进行系统调用。
系统调用比库函数调用更加底层。
补充:计算机的层次
最上层:普通应用程序。可进行系统调用,也可以进行库函数调用。
中层:编程语言。向上给应用程序提供库函数,也可以将系统调用封装成库函数,隐藏系统调用的一些细节,方便程序员使用。
下层:操作系统。向上提供系统调用,使得上层应用程序可以获得操作系统内核的服务。
最下层:裸机。
三、系统调用的必要性
假设同时使用应用程序WPS和Word打印两篇论文,两个程序都要使用打印机资源,如果任由这两个应用程序并发运行,共享打印机资源,那么两篇论文将会混杂地打印在一起。
如何解决?
应用程序想要使用打印机资源,必须通过系统调用向操作系统内核发出请求,由操作系统内核对各个请求进行协调处理。(操作系统内核是系统资源的统一管理者,向上层提供系统调用接口)
四、系统调用的过程
应用程序上CPU运行,CPU处于用户态。应用程序向CPU传参,这些参数指明了将要进行的系统调用的类型。传参完成,应用程序向CPU发出陷入指令,陷入指令引发中断信号,CPU转为内核态,相应的中断信号处理程序(内核程序)来处理该中断信号,即系统调用入口程序来处理该中断信号。系统调用入口程序检查应用程序传给CPU的参数,通过参数确定不同类型的系通过调用服务。系统调用完成后,CPU转换为用户态,应用程序继续上CPU运行,执行其他指令。
五、需要进行系统调用的功能
系统中的各种资源都由操作系统内核统一管理,所以凡是需要使用共享资源的操作(存储分配、I/O操作、文件管理等),都必须进行系统调用。
通过系统调用的方式向操作系统内核获取服务,由操作系统内核程序代为完成相关操作,可以保证系统的安全性与稳定性。