[운영체제/OS] 3. 스레드(Threads)
1. 프로세스 모델의 한계
💡 면접 대비: 프로세스와 스레드의 차이점, 스레드의 필요성은 기술 면접의 단골 질문입니다.
1.1 협력 프로세스의 한계
- 웹 서버와 같은 애플리케이션에서 동시 작업 처리를 위해 자신의 복사본 생성
- 주소 공간과 자원을 공유하는 경우 프로세스 모델은 매우 비효율적
1.2 멀티프로세싱의 한계
- 전통적인 프로세스는 한 번에 하나의 프로세서만 사용 가능
- 프로세스 내 자동 병렬화 불가능
- 명시적인 프로세스 생성과 분배 필요
2. 스레드 모델
2.1 프로세스 vs 스레드
- 프로세스: 무거운(heavy-weight) 단위
- 이미지와 문맥(프로그램, 커널) 포함
- 생성 비용이 높음
- IPC 비용이 높음
- 스레드: 가벼운(light-weight) 단위
- 프로그램 카운터(PC)
- 지역 변수와 리턴 레지스터를 위한 스택
- 프로세스의 명령어와 데이터 대부분 공유
- OS 상태 대부분 공유
2.2 프로세스 관점의 변화
- 전통적 관점
- 프로세스 = 프로세스 문맥 + (코드, 데이터, 스택)
- 프로세스 = 프로세스 문맥 + (코드, 데이터, 스택)
- 현대적 관점
- 프로세스 = 스레드 + (코드, 데이터) + 커널 문맥
3. 프로세스와 스레드 비교
💡 면접 대비: 프로세스와 스레드의 주소 공간 공유 특성과 관계는 반드시 알아야 할 내용입니다.
3.1 주소 공간
- 프로세스: 독립적인 주소 공간
- 스레드: 같은 프로세스 내 주소 공간 공유
3.2 논리적 관점
- 프로세스: 트리 계층 구조
- 스레드: 동등한 관계의 풀(pool) 형성
3.3 유사점과 차이점
- 유사점
- 독립적인 제어 흐름
- 개별적 스케줄링 가능
- 차이점
- 코드와 데이터 공유 여부
- 생성, 전환, 종료 비용
4. 스레드의 이점
4.1 경제성
- 생성이 저렴함
- 문맥 전환이 빠름
- 예: Solaris
- 스레드 생성은 프로세스 생성보다 30배 빠름
- 스레드 전환은 프로세스 전환보다 5배 빠름
4.2 향상된 통신
- 메모리와 파일 공유로 인한 효율적 통신
- 커널 호출 없이 통신 가능
- 응답성 향상
4.3 멀티프로세서 활용
- 각 스레드가 다른 프로세서에서 병렬 실행 가능
5. 스레드 구현
💡 면접 대비: 사용자 수준 스레드와 커널 수준 스레드의 차이점은 면접에서 자주 다루어지는 주제입니다.
5.1 사용자 수준 스레드
- 특징
- 사용자 수준 라이브러리가 관리
- 커널은 스레드 존재를 모름
- “many-to-one” 모델
- 장점
- 매우 가벼움
- 생성, 스케줄링, 동기화가 100% 사용자 공간에서 수행
- 단점
- I/O 스레드가 프로세스 전체를 블록
- 멀티프로세서에서 성능 향상 없음
5.2 커널 수준 스레드
- 특징
- 커널이 직접 지원
- “one-to-one” 모델
- Windows, Linux 등에서 사용
- 장점
- 여러 CPU에서 동시 실행 가능
- 한 스레드가 블록되어도 다른 스레드 실행 가능
- 단점
- 시스템 콜 필요로 인한 오버헤드
5.3 다대다 모델 (Many-to-Many)
- 여러 사용자 수준 스레드를 여러 커널 스레드에 매핑
- Solaris 2, HP-UX, Irix 등에서 사용
6. Linux의 스레드 지원
6.1 Linux 스레드 특징
- clone() 시스템 콜을 통한 경량 프로세스 구현
- 프로세스와 스레드를 구분하지 않음
- task라는 용어 사용
6.2 POSIX 스레드 (Pthreads)
- NPTL (Native POSIX Threading Library)
- RedHat 개발
- One-to-One 모델
- clone() 시스템 콜 사용
- glibc 2.3.2 이후 버전에서 사용
참고 자료
- Programming with POSIX Threads (D. Butenhof)
- Advanced Programming in the UNIX Environment (3rd edition)
- man pthreads
댓글남기기