2 분 소요

1. 프로세스 모델의 한계

💡 면접 대비: 프로세스와 스레드의 차이점, 스레드의 필요성은 기술 면접의 단골 질문입니다.

1.1 협력 프로세스의 한계

  • 웹 서버와 같은 애플리케이션에서 동시 작업 처리를 위해 자신의 복사본 생성
  • 주소 공간과 자원을 공유하는 경우 프로세스 모델은 매우 비효율적

1.2 멀티프로세싱의 한계

  • 전통적인 프로세스는 한 번에 하나의 프로세서만 사용 가능
  • 프로세스 내 자동 병렬화 불가능
  • 명시적인 프로세스 생성과 분배 필요

2. 스레드 모델

2.1 프로세스 vs 스레드

  • 프로세스: 무거운(heavy-weight) 단위
    • 이미지와 문맥(프로그램, 커널) 포함
    • 생성 비용이 높음
    • IPC 비용이 높음
  • 스레드: 가벼운(light-weight) 단위
    • 프로그램 카운터(PC)
    • 지역 변수와 리턴 레지스터를 위한 스택
    • 프로세스의 명령어와 데이터 대부분 공유
    • OS 상태 대부분 공유

2.2 프로세스 관점의 변화

  1. 전통적 관점
    • 프로세스 = 프로세스 문맥 + (코드, 데이터, 스택) ConPr
  2. 현대적 관점
    • 프로세스 = 스레드 + (코드, 데이터) + 커널 문맥

Mopro

3. 프로세스와 스레드 비교

💡 면접 대비: 프로세스와 스레드의 주소 공간 공유 특성과 관계는 반드시 알아야 할 내용입니다.

3.1 주소 공간

  • 프로세스: 독립적인 주소 공간
  • 스레드: 같은 프로세스 내 주소 공간 공유

3.2 논리적 관점

  • 프로세스: 트리 계층 구조
  • 스레드: 동등한 관계의 풀(pool) 형성

3.3 유사점과 차이점

  • 유사점
    • 독립적인 제어 흐름
    • 개별적 스케줄링 가능
  • 차이점
    • 코드와 데이터 공유 여부
    • 생성, 전환, 종료 비용

4. 스레드의 이점

4.1 경제성

  • 생성이 저렴함
  • 문맥 전환이 빠름
  • 예: Solaris
    • 스레드 생성은 프로세스 생성보다 30배 빠름
    • 스레드 전환은 프로세스 전환보다 5배 빠름

4.2 향상된 통신

  • 메모리와 파일 공유로 인한 효율적 통신
  • 커널 호출 없이 통신 가능
  • 응답성 향상

4.3 멀티프로세서 활용

  • 각 스레드가 다른 프로세서에서 병렬 실행 가능

conmo

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 등에서 사용

Threads

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

댓글남기기