본문 바로가기

2025 - 1학기/운영체제 (Operating System)

스레드 구조 및 구현 방식

728x90
728x90
Reporting Date: May. 07, 2025

스레드 구조 및 구현 방식에 대해 다루고자 한다.


목차

01 원도우 스레드
02 스레드의 주요 자료 구조
03 리눅스 스레드


 

 

 

01 윈도우 스레드

Windows Threads

WindowsMicrosoft에서 개발한 OS.

모든 Windows 기반 OS는 공통적으로
Windows API를 기반으로 응용 프로그램을 실행한다.

  • Windows 98
  • Windows NT
  • Windows 2000
  • Windows XP
  • Windows 7

여기서 실행되는 응용 프로그램은 프로세스 형태로 구동되며,
각 프로세스는 하나 이상의 스레드를 가질 수 있다.

 

스레드는 실행의 기본 단위로,
다음과 같은 주요 구성 요소를 갖는다:

구성요소 설명
스레드 ID, Thread ID 스레드를 유일하게 식별하기 위한 식별자
레지스터 집합, Register Set 스레드의 실행 상태를 나타내는 레지스터 값들의 집합
사용자 스택, User Stack 사용자 모드에서 사용되는 스택 메모리 영역
커널 스택, Kernel Stack 커널 모드에서 사용되는 스택 메모리 영역
개별 데이터 저장 영역, Private-local Storage 동적 라이브러리(DLL)나 실시간 라이브러리 등에서 사용하는 저장 공간

 

02 스레드의 주요 자료 구조

Windows OS에서 스레드는 여러 자료 구조에 의해 관리되며,
주요 구조체로는 
ETHREADKTHREADTEB가 있다.

 

 1 .  ETHREAD

실행 스레드 블록; Executive Thread Block

실행 스레드를 나타내는 커널 구조체로,
해당 스레드가 속한 프로세스에 대한 포인터,

스레드가 실행을 시작할 루틴의 주소,
그리고 KTHREAD 에 대한 포인터 등을 포함한다.

 

 2 .  KTHREAD

커널 스레드 블록; Kernel Thread Block

스레드의 커널 수준 정보를 저장하는 구조체로, 
스케줄링 및 동기화 정보, 커널 모드에서 사용할 커널 스택,
그리고 사용자 환경을 나타내는 TEB에 대한 포인터를 포함한다.

ETHREAD KTHREAD는 모두 커널 영역에 존재한다.

 

 3 .  TEB

스레드 환경 블록; Thread Environment Block

사용자 모드에서 접근 가능한 자료 구조.

스레드의 식별자, 사용자 모드 스택, 
스레드 로컬 저장소(Thread Local Storage, TLS) 등에 대한 정보를 담고 있다. 

종종 TIB(Thread Information Block) 라고도 불린다.

 


 

구분 이름 위치 주요 역할 및 정보
1 ETHREAD 커널 공간 스레드 시작 주소, 부모 프로세스 포인터 등 관리 정보
2 KTHREAD 커널 공간 스케줄링, 동기화, 커널 스택 등 실행 관련 정보
3 TEB 사용자 공간 사용자 스택, 스레드 식별자, TLS(Thread Local Storage) 등

 

03 리눅스 스레드

Linux Threads

리눅스는 커널 2.2 버전부터 스레드 개념을 도입하였다.

스레드는 clone() 시스템 호출을 통해 생성되며,
이는 fork()와는 다른 방식으로 작동합니다.

fork()는 호출한 프로세스의 전체 복사본을 생성하지만,
clone()은 부모 프로세스의 주소 공간을 공유하도록 새로운 프로세스를 생성한다.

이로 인해 clone()으로 생성된 태스크는 독립적인 스레드처럼 행동할 수 있다.

리눅스에서는 전통적인 의미의 프로세스와 스레드를 명확히 구분하지 않고,
이를 모두 프로그램 내에서의 제어 흐름 단위를 의미하는
태스크(Task)라는 용어로 통칭한다.

리눅스는 fork()를 통해 프로세스를 복제하는 기능과
clone()을 통해 스레드를 생성하는 기능을 모두 제공한다.

clone()은 전달된 플래그에 따라
부모의 자료 구조를 복사하지 않고 공유하게 된다.

주요 플래그는 다음과 같다:

  • CLONE_FS: 파일 시스템 정보를 공유
  • CLONE_VM: 메모리 공간을 공유
  • CLONE_SIGHAND: 신호 처리기를 공유
  • CLONE_FILES: 열린 파일 디스크립터 집합을 공유

결과적으로, fork()는 부모 프로세스의 자료 구조를 복사해 새 태스크를 생성하지만,
clone()은 설정된 플래그에 따라 일부 자료 구조만 공유함으로써,
보다 유연한 방식으로 스레드를 구현할 수 있다.


[교제] 운영체제 제 10


728x90
반응형

'2025 - 1학기 > 운영체제 (Operating System)' 카테고리의 다른 글

CPU 스케줄링  (2) 2025.05.12
스레드 문제  (0) 2025.05.12
스레드  (7) 2025.05.12
다중 코어 프로그래밍  (0) 2025.05.12
다중 스레드 프로그래밍  (7) 2025.04.19