zoukankan      html  css  js  c++  java
  • 系统调用与库函数的区别

    理解库函数的区别和系统调用,首先要里理解Unix的kernel mode和user mode。考虑下面的函数段:

    int main()

    {

        int fd = create("filename",0666);

        exit(0);
    }

    在执行main函数时,是在user mode下执行,当遇到create函数时,继续在user mode下执行。然后系统将两个参数"filenam"和"0666"压入栈中或者某个寄存器,接着执行库函数create。在库函数create执行开始,系统仍然处在user mode下,接着系统将create系统调用的unique number压入寄存器(比如说r0),然后执行指令trap(operating system trap)使系统进入kernel mode,并且处理系统调用。这时,系统意识到要进行系统调用的invoke,于是从寄存器r0中取出create系统调用的unique number,从系统调用表中查找得知要invoke的系统调用是create,然后执行。执行完毕后返回库函数create的调用,库函数负责检查系统调用的执行情况(检查某些寄存器的值),然后库函数create根据检查的结果返回相应的值。

    在这里,trap指令类似于一个系统中断,而系统调用create是一个特殊的中断处理函数(inerrupt handler)。

    操作系统的主要功能是为应用程序的运行创建良好的环境,为了达到这个目的,内核提供一系列具备预定功能的多内核函数,这一组函数就被统称为系统调用。系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理

    库函数一般是指编译器提供的可在c源程序中调用的函数。可分为两类,一类是c语言标准规定的库函数,一类是编译器特定的库函数。通过一些库函数可以间接的进行系统调用,完成相应功能。

    更多嵌入式linux及编程学习交流的文章,请访问我的个人网站”恩享网” :http://www.enxiang.icoc.cc,期待与您共同进步。

  • 相关阅读:
    三维坐标变换习题
    1 Introduction and Roadmap
    快讯:2019 OOW 文档已提供下载
    过了35岁,90%以上DBA都在迷茫:未来要何去何从?
    深度学习入门笔记(五):神经网络的编程基础
    《算法图解》学习笔记(十):K 最近邻算法(附代码)
    LNMP环境搭建之php安装
    LNMP环境搭建之php安装
    LNMP环境搭建之php安装
    (PSO-BP)结合粒子群的神经网络算法以及matlab实现
  • 原文地址:https://www.cnblogs.com/LJTbozai/p/3033187.html
Copyright © 2011-2022 走看看