汇编指令的区别:
系统调用:使用INT和IRET指令
函数调用:使用CALL和RET指令
安全性的区别:
系统调用有堆栈和特权级的转换过程,函数调用没有这样的过程,系统调用相对更为安全
性能的区别:
时间角度:
系统调用比函数调用要做更多和特权级切换的工作,所以需要更多的时间开销。系统调用需要的额外开销有:引导机制,建立内核栈,验证参数,更新页面映射权限,设置内核态独立地址空间(如TLB等)等
空间角度:
在一些情况下,如果函数调用采用静态编译,往往需要大量的空间开销,此时系统调用更具有优势
系统调用和函数调用之间的界限并不是泾渭分明的:
在Dos系统中可以直接使用Call指令来调用外部中断
在X86中也可以直接通过系统调用来控制一个门,但是手册上并不建议这样做