[Operating System] Thread Local Storage (TLS)

dandb3·2023년 3월 9일
0

Operating system

목록 보기
12/31

Thread-Local Storage

  • 메모리 할당은 process 단위로 이루어지기 때문에 thread는 동일한 메모리 주소를 공유하게 된다. -> Data 영역도 공유 -> 전역변수를 모든 스레드가 공유.

  • Process와 마찬가지로 스레드의 경우에도 각자의 고유한 전역변수가 필요한 경우가 존재한다.

  • Thread별로 Data영역처럼 고유의 영역을 제공하는데, 이를 Thread Local Storage (TLS)라고 한다.

  • linux의 경우 __thread와 같은 키워드를 통해 TLS 변수를 선언 가능.

    • ex) __thread int x;
  • TLS : 컴파일러 및 링커가 복잡한 처리를 도맡아 준다.

  • ELF형식은 TLS를 지원하기 위해 많은 변경이 이루어졌다. (ELF????)

    • TLS 변수를 저장하기 위해 .data/.bss에 대응하는 .tdata/.tbss 섹션이 추가되고, 이후 링크 과정에서 PT_TLS 타입의 데이터 세그먼트로 합쳐진다.
    • 이 데이터 세그먼트는 initialization image라고 하고, 사용되지는 않고 스레드 생성 시 TLS 영역을 초기화하는 데에만 사용된다. -> 모든 스레드들의 TLS 변수들의 초기값은 동일.
  • 찾아보는데 너무 어려워서 나중에 다시 봐야지

참고 자료

profile
공부 내용 저장소

0개의 댓글