系统调用与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和应用程序之间的另一个中间层。不过,由于一家独大的垄断地位,子系统实际上已经被抛弃了。

本章小结

原文地址:https://www.cnblogs.com/fr-ruiyang/p/14527928.html