ddhddy 2016-04-04 06:22 采纳率: 100%
浏览 2368
已采纳

系统调用和C语言库函数

最近学习操作系统,有些东西不是很明白。c语言的库函数有些是利用系统调用实现的,有些不是.我就想问下不是利用系统调用的那部分,在执行时硬件是怎么知道的呢?最后语言代码被编译成二进制,执行时仍然是由寄存器硬件什么执行的吧,既然没利用系统调用,alu这些东西是怎么懂这些库函数要求的操作是干嘛的啊?不是说系统调用是软硬件的接口吗?还有系统调用和驱动程序的关系是什么?

  • 写回答

4条回答

  • lm_whales 2016-04-04 10:52
    关注

    调用系统调用,代码跳入内核态,可以执行任何指令,包括 受保护的指令
    在用户态,很多指令是受保护的,不能直接执行,或者执行会出错。
    例如 286 以上的X86 系列及兼容CPU
    IO指令,就是受保护的。
    实际上,硬件之间是通过总线相连的,并通过,IO读写指令,内存读写指令,DMA 方式,等等相互通讯。
    程序代码,被CPU取到,然后逐一执行
    你写的代码,加载到内存后,操作系统用一个跳转指令(call,jump,ret,iret 等等,都属于跳转类指令)
    转到你的代码中执行的

    除非受到保护的指令,都是可以在用户态执行的,例如加法指令
    数学库
    math.h,的函数
    string.h
    就大部分代码都属于,非保护指令

    而 IO库中的许多函数
    例如
    stdio.h
    io.h
    中的很多函数,都会调用系统调用的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?