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 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元