Linux线程ID与内核LWP的关系

在Linux系统中,线程ID是一个映射到进程地址空间的pthread库内的地址,用于标识线程。每个线程都有一个与内核轻量级进程(LWP)对应的控制块。线程ID作为用户层标识,通过它可访问线程的用户级数据,包括私有栈和线程局部存储。线程与LWP之间是一一对应的关系,如同FILE文件与其文件描述符的对应。
摘要由CSDN通过智能技术生成

先给出图,然后我将根据图来讲解二者的关系:

线程ID

在这里插入图片描述
在使用线程前,我们需要链接线程的pthread第三方库,在Linux中,第三方库被加载到PCB进程中的虚拟地址空间中的栈区与堆区之间的共享区。
我们所创建线程的控制块即维护线程的内容都存在pthread第三方库中,当我们创建线程时候大致的流程如下:
1.磁盘将pthread库加载到物理内存中
2.通过页表映射(不是拷贝!!!)到进程地址空间中的共享区,因为是映射,所以每个进程共用一份pthread库。
3.pthread库中存在很多线程的控制块struct pthread,每个块中都保存了维护这个线程内容,比如线程的私有栈(main函数即主进程用的栈不是这里的,而是地址空间中的主进程栈,就是我们平时说的栈区)
4.我们主进程创建了新线程,通过什么来找到我们唯一的线程呢?答:通过线程ID!!而线程ID存在哪里呢?答:存在pthread库中!!
我们用户所看到的线程ID号其实是物理内存中pthread库通过页表映射到地址空间当中的虚拟地址!!
总结,线程ID是一个被映射进当前进程地址空间的,pthread库当中的内部的一个地址数据,用它来充当线程ID。在用户层上这个线程内部包含了线程的私有栈,线程局部各种存储(包括描述线程的各种结构都在这里保存)因此,我们只要拿到了线程ID就可以拿到该线程的所有用户级数据!!

线程ID与内核LWP的关系

在这里插入图片描述
总结:在Linux中,每个线程与内核中的LWP是1:1对应关系,每个线程控制块中都存在一个与之相对应的存在于内核中的LWP!
就好比FILE文件中一定存了他的文件描述符

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值