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

    函数库调用是语言或应用程序的一部分,而系统调用是操作系统的一部分,不管是java还是python的I/O最后都是通过read和write这样的系统调用来完成的
     
    系统调用是用户程序和内核交互的接口
    | 函数库调用                                  | 系统调用                                     |
    |---------------------------------------------+----------------------------------------------|
    | 在所有的ansi c编译器版本中,c库函数是相同的 | 各个操作系统的系统调用时不同的               |
    | 它调用函数库中的一个程序                    | 它调用系统内核的服务                         |
    | 与用户程序相联系           important        | 是操作系统的一个入口点                       |
    | 在用户地址空间执行         important        | 在内核地址空间执行                           |
    | 它的运行时间属于用户时间    important       | 它的运行时间属于系统时间                     |
    | 属于过程调用,开销较小      important       | 需要切换到内核上下文环境然后再切换回来开销大 |
    | 在C函数库libc中有大约300个程序              | 在unix中有大约90个系统调用(MS-DOS)中少一些   |
     
    自己总结
    | 函数库调用             | 系统调用             |
    |------------------------+----------------------|
    | 通常提供比较复杂的功能 | 通常提供一种最小界面 |
     
    system是一个库函数 strlen并不调用任何系统调用
     
    int main()
    {
        int fd = create("filename",0666);
        exit(0);
    }
     
    在执行main函数时,是在user mode下执行,当遇到create函数时,继续在user mode下执行,然后将filename和0666两个参数压入栈中寄存器,接着调用库函数create,系统仍然处于user mode。这里的库函数create实际上调用了内核的系统调用create,执行到这里后,系统将create系统调用的unique number压入寄存器,然后执行指令trap使系统进入kernel mode(执行int $0x80产生中断)。这时系统意识到要进行系统调用的invoke,于是从刚才的寄存器中取出create系统调用的unique number,从系统调用表中得知要invoke的系统调用是create,然后执行。执行完毕返回库函数create的调用,库函数负责检查系统调用的执行情况(检查某些寄存器的值),然后库函数create根据检查的结果返回响应的值。
     
    这里trap指令类似于一个系统中断并且是软中断,而系统调用create类似于一个中断处理函数所有的系统调用都与上边的情况类似,靠中断机制切换到内核模式实现。
     
    系统调用通常比库函数要慢,因为要把上下文环境切换到内核模式。
  • 相关阅读:
    【kd-tree】bzoj2648 SJY摆棋子
    【kd-tree】bzoj3053 The Closest M Points
    【堆】【kd-tree】bzoj2626 JZPFAR
    【kd-tree】bzoj1941 [Sdoi2010]Hide and Seek
    【kd-tree】bzoj2850 巧克力王国
    【kd-tree】bzoj3489 A simple rmq problem
    【kd-tree】bzoj4066 简单题
    【二维莫队】【二维分块】bzoj2639 矩形计算
    【kd-tree】bzoj1176 [Balkan2007]Mokia
    【kd-tree】bzoj3290 Theresa与数据结构
  • 原文地址:https://www.cnblogs.com/qianye/p/2786352.html
Copyright © 2011-2022 走看看