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条)

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R