线程是否占用其独立内核space?

Does thread occupies its independent kernel space?

这是我目前所了解的...

  1. 每个进程都有自己的内核堆栈(space)
  2. 线程有独立的堆栈内存并共享另一个(堆代码等...)
  3. 内核堆栈中的内容是其进程稍后上下文切换的一些正式信息

这是我感到困惑的部分....
如果Thread只有自己的栈内存,OS如何管理线程的上下文切换呢?如果进程A有10个线程,所有这些线程的信息都写在进程A的内核中space?当线程太多时,不会导致内核内存不足space吗?

请让我知道我在这里遗漏了什么。
谢谢

  1. Every process has its own kernel stack(space)

是的。

  1. Thread has independent stack memory and share the other (heap code etc...)

是的,大致如此。

  1. What are inside in the Kernel stack is some formal information for its process' later context switch

没有。与线程关联的内核堆栈在代表该线程执行的系统调用执行期间用作调用堆栈。据我所知,它不参与线程间的上下文切换,也不直接参与从用户态到内核态的切换。

If Thread only has its own stack memory, how does OS can manage thread's context switch?

与它管理进程间上下文切换的方式相同。内核维护这样做所需的信息(在每个线程的基础上并不是特别多),尽管据我所知不在线程的内核堆栈上。但这可能是术语上的分歧——您似乎已经将“内核堆栈”标识为“内核 space”,但内核维护的每线程数据不仅仅是内核堆栈。

If process A has 10 threads, all those threads' information is written in process A's kernel space? wouldn't be cause a lack of memory in kernel space when there are too many threads?

我不确定您对事物的看法是否正确,但是是的,可以同时活动的线程数受可用资源的限制。详细信息是内核和线程实现的 属性。可以同时存在每个进程和全局限制。

实际上,如果可用内存(物理和虚拟)足够,Linux 上的进程 运行 和使用本机线程可以有数千个线程。每个内核堆栈通常只有几 kB;这些通常不是限制因素。