系统调用与库函数

定义

        系统调用——应用程序与操作系统内核之间的接口

        库函数——将不同操作系统的系统调用包装为统一的固定接口,使得同样的代码,在不同的操作系统

下都可以直接编译,并产生一致的效果。

系统调用原理——特权级与中断

 

特权级

        1、CPU可以在不同特权级别下执行指令,现代操作系统有两种特权指令——用户模式(User Mode)【用户态】

和内核模式(Kernel Mode)【内核态】

         2、系统调用是运行在内核态,应用程序运行在用户态。

          问题:用户态的程序如何运行内核态代码?

          答:操作系统一般通过中断(Interrupt)来从用户态切换到内核态。

中断

       1、中断一般具有两个属性,一个称为中断号(Linux使用0x80作为系统调用入口),一个称为中断处理程序,

中断号与中断处理程序一一对应

       2、中断向量表,在内核中的一个数组,包含了中断处理程序的指针

 

image

                                                                          Linux系统中断流程

 

注:

       1、Linux使用int 0x80触发所有系统调用

       2、系统调用都有一个系统调用号,系统调用号通常就是系统调用在系统调用表中的位置,

系统调用号由eax传入,用户将系统调用号放入eax中,然后使用int 0x80调用中断,中断服务程序

就可以从eax中取得系统调用号,例如sys_fork系统调用号为2

具体实例

    1、系统调用,open、read、write…

     2、库函数,fopen、fread、fwrite

posted @ 2014-04-24 11:33  罗松超  阅读(598)  评论(0编辑  收藏  举报