为什么`kernal_thread()`没有列为Linux的系统调用?

时间:2018-09-18 21:56:08

标签: linux linux-kernel system-calls

我想知道为什么http://man7.org/linux/man-pages/man2/syscalls.2.html中没有将kernal_thread()列为系统调用?

Linux应用程序程序员永远不需要创建内核线程吗?

Linux应用程序程序员可以访问该功能吗?

谢谢。

2 个答案:

答案 0 :(得分:3)

应用程序员经常需要使用该列表中的clone系统调用来创建“内核调度线程”,aka(即“ OS线程”或“本地线程”)。

“内核线程”不过是内核出于内部目的而运行内核代码所使用的线程。它们仅由内核上下文代码创建和使用。每个软件都负责创建和管理自己的线程以完成自己的工作,包括用户空间应用程序和内核本身。

kernel_threadkernel/fork.c中定义的内核函数,未公开给用户空间。它是内部内核API的一部分,而不是syscall。

答案 1 :(得分:1)

众所周知,它们是一个用户和内核这两个地址空间,正常功能将在用户空间中运行,但是当您使用内核空间中实现的某些函数调用时,您将无法直接使用它们来访问它们我们需要系统调用。

所以现在您的问题是,为什么系统调用中未列出kernal_thread()。

(由“另一个人”回答) kernal_thread()函数由内核程序员或通常在设备驱动程序中用于在内核空间中创建线程。因此,它们的实现在内核空间中,并且仅由内核开发人员或程序员使用。 (注意:-如果为用户空间的某些功能提供了一个接口,该接口将被归结为系统调用,因为该函数没有为用户提供接口,因此它们在手册页中均未提供该文档)

如果您想阅读有关内核空间功能的文档,请下载内核源代码并检查“ Documentation”文件夹或检查相应功能的源代码,他们的评论很少。