📌 스레드
프로세스를 구성하는 실행의 흐름 단위다.
하나의 프로세스는 여러 개의 스레드를 생성하여 병렬 또는 동시 실행을 수행 할 수 있다.
1️⃣ 스레드의 개념
스레드는 운영체제에서 최소 실행 단위로 간주되고, '프로세스'내에서 실행되는 서브 작업( Subtask )이다.
모든 쓰레드는 동일한 메모리 공간(= 주소공간)을 공유한다.
2️⃣ 스레드의 유형
- 커널 스레드( Kernel Thread )
- 운영 체제가 직접 관리하는 스레드
- 커널이 스케줄링을 담당하며, 시스템 호출을 통해 생성 및 관리한다.
- 커널 모드에서 실행되므로 성능 오버헤드가 발생할 수 있다.
- 사용자 스레드( User Thread )
- 사용자 수준에서 관리되는 스레드
- 커널의 개입 없이 사용자 프로그램이 직접 스레드를 생성 및 관리한다.
- 커널이 관여하지 않아서 문맥 전환 비용이 낮다
- 하지만 커널이 단일 스레드로 인식해서 한 스레드가 블록되면 전체 프로그램이 멈출 수 있다.
3️⃣ 스레드의 장점과 단점
✅ 장점
- 프로세스보다 가볍고, 프로세스 문맥 전환에 비해 스레드 문맥 전환이 비용이 적다.
- 동일한 프로세스 내에서 메모리 및 자원을 공유하여 효율적인 데이터 교환이 가능하다.
❌ 단점
- 여러 스레드가 동일한 자원에 접근하면 데이터 충돌이 발생할 수 있다.
- 과도한 스레드 생성 시 문맥 전환 비용이 증가하여 성능이 저하 될 수 있다.
📌스레드 자원
1️⃣ 스레드가 공유하는 자원
앞서 언급한대로 스레드는 같은 프로세스에 속하기 때문에 메모리 공간과 일부 시스템 자원을 공유한다.
- 코드( Code ) 영역
- 데이터( Data ) 영역
- 힙( Heap ) 영역
- 파일 디스크립터
위 4가지를 프로세스 내에서 스레드들이 모두 공유한다.
2️⃣ 스레드가 독립적으로 가지는 자원
- 레지스터
- 스택
정리
자원 | 공유 여부 | 설명 |
코드 영역 | ✅ 공유 | 모든 스레드가 같은 명령어 실행 가능 |
데이터 영역 | ✅ 공유 | 전역 변수, static 변수 |
힙 영역 | ✅ 공유 | malloc(), new 로 할당한 동적 메모리 |
파일 디스크립터 | ✅ 공유 | 파일, 소켓, 파이프 공유 |
레지스터 | ❌ 독립 | 프로그램 카운터, 스택 포인터 등 |
스택 | ❌ 독립 | 지역 변수, 함수 호출 정보 |
'CS > 혼공컴운' 카테고리의 다른 글
[CS] 동기화 (0) | 2025.02.12 |
---|---|
[CS] CPU 스케줄링 (0) | 2025.02.11 |
[CS] 프로세스 계층 구조 (0) | 2025.02.11 |
[CS] 프로세스 상태 (0) | 2025.02.11 |
[CS] 프로세스의 메모리 영역 (0) | 2025.02.10 |