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

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题