了解系统调用执行
当用户程序调用系统调用时,会执行系统调用指令,这会导致处理器在内核保护域中开始执行系统调用处理程序。
此系统调用处理程序执行以下操作:
- 设置ut_error乌线程 结构中的字段设置为 0
- 切换到与调用线程关联的内核堆栈
- 调用实现所请求的系统调用的函数。
系统装入器会维护用于每个系统调用的函数的表。
系统调用在调用线程中运行,但具有更多特权,因为系统调用在内核保护域中运行。 在实现系统调用的函数已执行所请求的操作后,控制权将返回给系统调用处理程序。 如果 uthread 结构中的 ut_error 字段具有非零值,那么该值将复制到应用程序的特定于线程的 errno 变量。 如果信号处于暂挂状态,那么将进行信号处理,这可能会导致调用应用程序的信号处理程序。 如果没有任何信号处于暂挂状态,那么系统调用处理程序将恢复在用户保护域中恢复的调用线程的状态。 有关保护域的更多信息,请参阅 了解保护域。