Linux内核线程没有地址空间

时间:2011-06-04 09:25:17

标签: multithreading memory linux-kernel

为什么Linux内核线程没有地址空间。对于任何要执行的任务,它应该有一个内存区域吗?内核线程的文本和数据在哪里?

2 个答案:

答案 0 :(得分:5)

内核线程确实有一个地址空间。只是他们都共享同一个。这并不妨碍他们每个人都有不同的堆栈。

文本和数据在内核地址空间(所有线程共享的地址空间)中布局,具体取决于分配的方式和时间以及它的用途。

Linux MM网站有很多关于Linux这方面的文档。去那边。

答案 1 :(得分:1)

我不知道确切的答案,因为我不是Linux架构师。

但一般来说,所谓的内核线程 do 都有一个地址空间:它是包含内核的地址空间。可能不需要为每个内核线程显式表示它,因为它在许多线程之间共享。

我希望任何真正的线程实现都有一个包含寄存器值(和堆栈指针等)的机器上下文块,以及一个指向该线程应该运行的地址空间的指针。然后,启动就绪线程的调度程序可以轻松确定是否设置了内存管理单元以允许访问地址空间(如果没有,则设置它)以使线程能够在其所需空间中运行。