• 函数库调用和系统调用的区别


    函数库调用是语言或应用程序的一部分,而系统调用是操作系统的一部分,不管是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类似于一个中断处理函数所有的系统调用都与上边的情况类似,靠中断机制切换到内核模式实现。
     
    系统调用通常比库函数要慢,因为要把上下文环境切换到内核模式。
  • 相关阅读:
    非常适合新手的一个Python爬虫项目: 打造一个英文词汇量测试脚本!
    代码遇到异常怎么办?不要慌,来看看这个!
    老司机要开车了!用Selenium+PhantomJS来抓取煎蛋网妹子图
    Python基础之格式化输出函数format()功能详解
    Python基础之常用格式化输出字符详解
    新手学python,如何才能更快升职加薪,迎娶白富美,走上人生巅峰
    ASP.NET MVC学习笔记 第二天
    ASP.NET MVC学习笔记 第一天
    ActiveMQ相关:
    WPF中使用定时器 DispatcherTimer 做TCP连接中的心跳 HeartBeat
  • 原文地址:https://www.cnblogs.com/qianye/p/2786352.html
Copyright © 2020-2023  润新知