12系统调用与API
原创
©著作权归作者所有:来自51CTO博客作者lindo的原创作品,请联系作者获取转载授权,否则将追究法律责任
第十二章 系统调用与API
1 系统调用介绍
系统调用用来进行系统资源的访问,有些行为,应用程序不借助操作系统提供的系统调用无法或者不能有效的办到。
Linux使用0x80中断号作为系统调用的入口,而Windows采用0x2E。
Linux的系统调用都有对应的C语言形式,glibc提供了完整的封装。
系统调用的弊端:
(1) 使用不方便
(2) 各个系统之间的系统调用不兼容
解决方法:增加中间层,运行库
(1) 使用方便
(2) 形式统一
如C语言中的fread函数,在Windows下可能调用ReadFile这个API,而在linux下可能调研那个read这个系统调用来实现。但不管使用那个平台,都可以使用C语言的运行库fread来读文件,实现源码级的可移植性。
但是运行库只能是各个平台功能(即系统调用)的交集,一旦一个程序使用了CRT之外的借口,就不能保证平台之间的兼容性了。
2 系统调用原理
特权级与中断
中断有两个属性:中断号和中断处理程序
硬件中断和软件中断
系统调用使用0x80中断号
基于int的linux的经典实现
(1) 触发中断
(2) 堆栈切换
(3) 中断处理程序
Linux的新型系统调用
linux-gate.so.1虚拟动态共享库
sysenter和sysexit
3 Windows API
尽管Windows的内核提供了数百个系统调用,但是微软并没有公开这些系统调用,而是在系统调用的基础上,建立了一个API层。
CRT是建立在Windows API之上的。
SDK是Windows API DLL导出函数的声明头文件、导出库、相关文件和工具的集合。Windows在API之上建立了很多应用模块,如winine.dll。
之所以引入API,是为了隔离硬件结构的不同而导致的程序的兼容性问题。

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章