关于mm_struct和内核线程,在Linux kernel Development ( Robert Love)一书中提到的一些要点是:
内核线程没有进程地址空间,因此没有相关的内存描述符。因此,内核线程的进程描述符的mm字段为NULL。
“由于内核线程在用户空间中没有任何页面,它们实际上不值得拥有自己的内存描述符和页表(页表将在本章后面讨论)。尽管如此,内核线程仍需要一些数据,例如页表,甚至需要访问内核内存。”
内核线程没有地址空间,并且mm为NULL。因此,当调度内核线程时,内核会注意到mm为NULL,并保持前一个进程的地址空间已加载。然后,内核会更新内核线程的进程描述符中的active
我正在开发一个涉及kthread的内核应用程序。我创建了一个结构数组,并在用户空间中使用malloc分配内存。然后,我调用一个系统调用(我实现了这个调用)并将数组的地址传递给内核空间。在system-call的处理程序中,我创建了2个kthread,它将监视数组。kthread可以改变一些值,用户空间线程也可以改变一些值。其想法是将数组用作共享内存。但有些时候,当我访问内核空间中的内存时(使用copy_from_user),数据会以某种方式发生变化。我可以验证地址在分配时和在内核中是相同的。但是当使用copy_from_user时,它会给出各种值,比如垃圾值。
另外,下面的语句是否正确?
in