系统调用与函数调用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统调用与函数调用相关的知识,希望对你有一定的参考价值。
函数调用
看这样一段代码:
int main() { printf("Hello,world!"); return 0; }
其中用到了printf函数,函数从标准C库中调用,实际上是进入到内核态调用write()函数。
系统调用
应用程序通过系统调用接口进入内核,首先通过中断向量表转移到系统调用表,每一个系统调用都有对应的编号,根据编号实现相应的操作并返回。
系统调用与函数调用的区别
系统调用:指令int和IRET 堆栈切换(内核和用户态使用不同堆栈),特权级的转换
函数调用:call和ret 常规调用没有堆栈切换
系统调用开销更大,因为有用户态到内核态的切换,具体为:
切换的引导(硬件完成)
内核堆栈建立
参数有效性合法性验证
内核态映射到用户态地址空间
以上是关于系统调用与函数调用的主要内容,如果未能解决你的问题,请参考以下文章