Linux & Windows TLS实现

本文介绍了Linux和Windows操作系统中实现线程局部存储(TLS)的方法。在Linux中,TLS通过内核和用户态程序配合,利用x86的fs或gs段选择器,以及内核的set_thread_area和prctl系统调用。Windows则使用类似的技术,32位系统中通过fs段实现。而在ARM架构下,Linux通过异常触发系统调用来获取TLS,但也有优化避免系统调用带来的性能损失。
摘要由CSDN通过智能技术生成

Linux的TLS(Thread Local Storage)实现由内核和用户两部分模块配合完成的。    内核对TLS需要做的事情是能够让用户态程序(通常是 nptl——一个pthread的实现)在某个时刻能够设置线程唯一的基址值到内核的线程信息结构内。系统调用set_thread_area(x86)和prctl(X86_64)用来完成这个任务。在x86家族中,这些系统调用能够设置fs(x86_64)或者gs(x86)段选择器对应的全局段描述符(gdt)的基址信息。这样线程想访问那些线程唯一的数据的时候,只需要访问fs或者gs段的内容即可,如fs:[0]。这样的好处是使得访问线程本地的数据时候,没有额外的系统调用的消耗,和访问其他用户态数据一样简单。关于段选择器,段描述器,可以参考Intel Software Developers' Manual。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值