系统调用与API
系统调用与API
系统调用介绍
-
什么是系统调用
-
Linux系统调用
-
系统调用的弊端
-
使用不便:操作系统提供的系统调用接口往往过于原始,程序员需要了解很多与操作系统相关的细节。如果没有进行很好的包装,使用起来不方便。
-
各个操作系统之间系统调用不兼容。
-
运行库就是用来解决以上弊端的。
-
系统调用原理
-
特权级与中断
-
两种特权级:用户模式和内核模式
-
高特权级降低为低特权级是允许的,但反过来则需要使用一种较为受控和安全的形式
-
系统调用是运行在内核态的,而应用程序基本都是运行在用户态的
-
操作系统一般是通过中断来从用户态切换到内核态。中断是请求CPU暂停当前的工作转手去处理更加重要的事情。
-
轮询(Poll)与中断不同,效率过低。
-
中断一般有两个属性:中断号和中断处理程序,一一对应,形成中断向量表
-
中断有两种类型:硬件中断和软件中断
-
系统调用与中断类似:系统调用号和系统调用一一对应,形成系统调用表
-
-
基于int的Linux的经典系统调用实现
-
触发中断
-
切换堆栈
-
中断处理程序
-
-
Linux的新型系统调用机制
Windows API
-
Windows API概览
-
Windows API是以DLL导出函数的形式暴露给应用程序开发者的。微软把这些Windows API DLL导出函数的声明的头文件、导出库、相关文件和工具一起打包成Software Development Kit(SDK)。只要包含Windows.h文件就可以使用Windows API的核心部分。
-
Windows API表
-
Windows API的接口还是相对比较原始的,直接用API进行程序开发效率较低。Windows系统在API之上建立了很多应用模块,是对Windows API的功能的扩展。
-
-
为什么要使用Windows API
-
要解决问题就加层的万能法则:尽可能地确保做到向后兼容
-
系统调用实际上是非常依赖于硬件结构的一种接口,虽然硬件结构发生改变较为少见,但是一旦发生改变,代价是惊人的。
-
-
API与子系统
- 除了兼容自家的系统,Windows还考虑到兼容其他系统,于是有了子系统的概念。子系统实际上是Windows架设在API和应用程序之间的另一个中间层。不过,由于一家独大的垄断地位,子系统实际上已经被抛弃了。