首页 > 其他 > 详细

系统调用与函数调用

时间:2016-03-26 23:51:46      阅读:325      评论:0      收藏:0      [点我收藏+]

函数调用

看这样一段代码:

int main()

{

  printf("Hello,world!");

  return 0;

}

  其中用到了printf函数,函数从标准C库中调用,实际上是进入到内核态调用write()函数。

系统调用

应用程序通过系统调用接口进入内核,首先通过中断向量表转移到系统调用表,每一个系统调用都有对应的编号,根据编号实现相应的操作并返回。

系统调用与函数调用的区别

系统调用:指令int和IRET 堆栈切换(内核和用户态使用不同堆栈),特权级的转换

函数调用:call和ret 常规调用没有堆栈切换

系统调用开销更大,因为有用户态到内核态的切换,具体为:

  切换的引导(硬件完成)

  内核堆栈建立

  参数有效性合法性验证

  内核态映射到用户态地址空间

系统调用与函数调用

原文:http://www.cnblogs.com/hzxscyq/p/5324236.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!