实现系统调用
一次系统调用的完整执行过程如下:
- 通过特定指令发出系统调用(int $80、sysenter、syscall)
- CPU从用户态切换到内核态,进行一些寄存器和环境设置
- 调用system_call内核函数,通过系统调用号获取对应的服务例程
- 调用系统调用处理例程
浮点运算
浮点运算通过应用程序实现,Linux 中的浮点运算是利用数学库函数实现的,库函数能够被应用程序链接后调用,不能被内核链接调用。这些运算是在应用程序中运行的,然后再把结果反馈给系统。 Linux 内核如果一定要进行浮点运算,需要在建立内核时选上 math-emu,使用软件模拟计算浮点运算,据说这样做的代价有两个:用户在安装驱动时需要重建内核,可能会影响到其他的应用程序,使得这些应用程序在做浮点运算的时候也使用 math-emu,大大的降低了效率。