线程是不是占用其独立的内核空间?

Posted

技术标签:

【中文标题】线程是不是占用其独立的内核空间?【英文标题】:Does thread occupies its independent kernel space?线程是否占用其独立的内核空间? 【发布时间】:2022-01-14 23:48:18 【问题描述】:

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

    每个进程都有自己的内核栈(空间) 线程拥有独立的栈内存并共享其他(堆代码等...) 内核堆栈内部是一些正式信息,供其进程稍后进行上下文切换

这是我感到困惑的部分...... 如果线程只有自己的栈内存,操作系统如何管理线程的上下文切换?如果进程 A 有 10 个线程,那么所有这些线程的信息都写入进程 A 的内核空间吗?线程太多会不会导致内核空间内存不足?

请让我知道我在这里缺少什么。 谢谢。

【问题讨论】:

【参考方案1】:
    每个进程都有自己的内核栈(空间)

是的。

    线程拥有独立的栈内存并共享另一个(堆代码等...)

是的,大概。

    内核堆栈内部是一些正式信息,供其进程稍后进行上下文切换

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

如果Thread只有自己的栈内存,OS如何管理 线程的上下文切换?

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

如果进程 A 有 10 个线程,所有这些 线程的信息写入进程A的内核空间?不会 当内核空间过多时,会导致内核空间内存不足 线程?

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

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

【讨论】:

所以基本上kernel spacekernel stack 是不同的,对吧?因为kernel stackkernel space 的子集 是的,@co_lin,没错。

以上是关于线程是不是占用其独立的内核空间?的主要内容,如果未能解决你的问题,请参考以下文章

Linux内核线程

内核空间进程和线程等概念

内核空间进程和线程等概念

进程和线程内核空间等概念

内核空间进程和线程等概念

Linux进程内存如何管理?