바로 tls에 대한 내용임.


tls가 어떻게 구현되어있을까 너무 궁금했었음.


동적 tls의 경우에는 뭐 시스템콜을 써서 스레드별 pcb같은데에라도 접근해서 정보를 가져온다고 치자.



그러면 정적 tls는 어떻게 할건데?


정적 tls에서


__thread int hi;


라고 되어있으면


*hi = ?

read hi


둘다 모든 쓰레드가 같은 코드로 이루어져있어야할텐데

그러면 모두 뭐 시스템콜을 사용하도록 조정되려나?


애초에 그런 시스템콜이 존재하긴 하나?



그래서 내가 또 어셈블리로 어케 번역되나 까봤지.



그랫더니 fs 세그먼트 레지스터를 사용한다는거야!!!


현대 리눅스는 fs 세그먼트를 tls를 위해서 할당하는거였어.





그렇다면 지금 딱봐도 유저스페이스 메모리공간에다가, tls영역 만들어놓고 세그먼트 레지스터 지정해놓고

각 스레드가 자기 사물함에만 들락날락 거린다는거잖아??




아 또 해볼 실험이 있지




일단 각 쓰레드별로 tls의 주소를 찍는다.

이게 어떻게 찍힐지 모르겠어. 다른 세그먼트에 있는 데이터인데 주소가 어떻게 찍힐라나....


일단 이거를 실험해보고,


만약 주소가 기본 세그먼트 (뭔진모름) 기준으로 번역되어서 출력되어서 나온다면,


다른 tls의 영역에다가 직접 주소지정해서 접근가능한지,


이 보안이 막혀있는지 안막혀있는지


실험해볼 생각임


우후훗