본문 바로가기
카테고리 없음

OS 스레드와 프로세스

by goblin- 2024. 7. 28.

1. 스레드와 프로세스의 기본 개념

질문:

스레드와 프로세스는 무엇이고, 어떻게 다릅니까?

답변:

  • 스레드: 프로세스 내에서 실행되는 단위입니다. 여러 스레드는 같은 프로세스 내에서 메모리와 자원을 공유합니다. CPU에서 실행할 수 있는 최소 단위입니다.
  • 프로세스: 실행 중인 프로그램의 인스턴스입니다. 각 프로세스는 독립적인 메모리 공간을 가지며, 하나 이상의 스레드를 가질 수 있습니다.

2. 인터럽트와 프로세스 상태 전이

질문:

인터럽트가 발생하고 처리되는 과정은 어떻게 됩니까? 프로세스 상태 전이도 설명해주세요.

답변:

  • 인터럽트 발생과 처리 과정:
    1. 하드웨어에서 인터럽트 발생: 키보드, 디스크 드라이브 등 입출력 장치가 작업을 완료하거나 사용자 입력을 받을 때 인터럽트를 발생시킵니다.
    2. CPU가 인터럽트 신호 수신: 인터럽트 요청(IRQ) 신호가 CPU에 전달됩니다. 인터럽트 컨트롤러가 어떤 장치에서 인터럽트가 발생했는지 확인합니다.
    3. 현재 작업 중단 및 인터럽트 핸들러 호출: CPU는 현재 작업의 상태를 저장하고, 인터럽트 벡터 테이블을 조회하여 인터럽트 핸들러를 실행합니다.
    4. 인터럽트 핸들러의 역할: 입출력 처리, 프로세스 상태 변경 등의 작업을 수행합니다.
    5. 프로세스 상태 복원 및 실행 재개: 인터럽트 핸들러가 작업을 마치면, CPU는 중단된 작업을 재개합니다.
  • 프로세스 상태 전이:
    • New: 프로세스가 생성된 상태.
    • Ready: 프로세스가 CPU에서 실행되기를 기다리는 상태.
    • Running: 프로세스가 CPU에서 실행 중인 상태.
    • Blocked (Waiting): 프로세스가 특정 이벤트(예: 입출력 완료)를 기다리는 상태.
    • Terminated: 프로세스 실행이 완료된 상태.

3. 싱글 스레드와 멀티 스레드

질문:

싱글 스레드와 멀티 스레드는 무엇이며, 어떻게 다릅니까?

답변:

  • 싱글 스레드:
    • 하나의 실행 흐름만을 가지는 프로세스입니다.
    • 모든 작업이 순차적으로 실행됩니다.
    • 예: 간단한 계산기 프로그램, 작은 유틸리티.
  • 멀티 스레드:
    • 여러 스레드를 가지는 프로세스입니다.
    • 여러 작업을 병렬로 처리할 수 있습니다.
    • 예: 웹 서버, 대규모 데이터 처리 애플리케이션, 게임.

4. 프로세서와 멀티스레드

질문:

하나의 코어에서 여러 스레드를 어떻게 처리합니까? 멀티스레드 사용 여부는 누가 결정합니까?

답변:

  • 하나의 코어에서 멀티스레드 처리:
    • 싱글 코어 CPU에서는 여러 스레드가 컨텍스트 스위칭을 통해 빠르게 전환되며 실행됩니다. 이는 마치 여러 스레드가 동시에 실행되는 것처럼 보이지만, 실제로는 매우 빠르게 전환되는 것입니다.
  • 멀티스레드 사용 결정:
    • 프로그래머: 프로그램이 싱글 스레드를 사용할지, 멀티 스레드를 사용할지는 프로그래머가 설계하고 구현합니다. 프로그램의 요구 사항과 성능 목표에 따라 스레드 수를 결정합니다.
    • 운영체제: 운영체제는 프로그래머가 설계한 멀티스레드 프로그램을 효율적으로 실행할 수 있도록 스레드 관리와 스케줄링을 수행합니다.

5. 현대 운영체제의 스레드 모델

질문:

현대 운영체제는 어떤 스레드 모델을 사용합니까?

답변:

  • 현대 운영체제는 주로 일대일(One-to-One) 스레드 모델을 사용합니다. 각 사용자 수준 스레드가 하나의 커널 수준 스레드에 매핑됩니다.
  • 장점:
    • 진정한 병렬 처리가 가능하여 멀티코어 시스템에서 효율적으로 동작합니다.
    • 하나의 스레드가 블록 상태에 빠져도 다른 스레드는 계속 실행될 수 있습니다.
    • 운영체제는 각 스레드를 독립적으로 관리하므로 안정성과 자원 관리가 우수합니다.

결론

  • 하드웨어 제조업체: 프로세서의 물리적 코어 수와 하드웨어 스레드 수를 결정합니다.
  • 운영체제: 스레드를 관리하고 스케줄링하며, 멀티스레드 프로그램이 효율적으로 실행되도록 지원합니다.
  • 소프트웨어 개발자: 프로그램이 싱글 스레드를 사용할지, 멀티 스레드를 사용할지를 결정합니다. 이를 통해 프로그램의 성능을 최적화합니다.

프로세서 코어 수와 하드웨어 스레드 수는 하드웨어 제조업체가 결정하지만, 프로그램이 멀티스레드를 사용할지는 프로그래머가 결정합니다. 운영체제는 이 결정을 바탕으로 프로그램을 효율적으로 실행하고 관리합니다.