Multi process vs. Multi thread, 왜 질문할까?

Jit Hoon·2023년 7월 24일
1

OS

목록 보기
2/4
post-thumbnail

들어가기전, OS의 어느 부분을 배우고 있는지 확인하기.

process와 thread의 세부적인 개념을 공부하기 전, OS가 어떤 서비스를 우리에게 제공하는지 전체적인 그림을 보고 가면 좋을 것 같아서 아래 콜 아웃 페이지를 만들게 되었다.


💡 OS가 제공하는 핵심 서비스 3
  1. 프로세스 관리

    프로세스와 스레드, 프로세스 동기화, 교착 상태 해결

  2. 자원 접근 및 할당

    CPU 스케줄링, 메모리 페이징, 스와핑, 입출력장치 인터럽트 서비스 루틴

  3. 파일 시스템 관리

    관련 정보를 묶어 파일 단위와 파일을 묶어 폴더(디렉터리) 단위로 저장 장치에 보관


이번 포스팅에서는 OS가 제공하는 핵심 서비스인 프로세스 관리에서 프로세스와 스레드에 대한 개념을 공부해 보았다.

왜 process와 thread를 함께 질문할까?

두 개념을 같이 공부하는 이유는 개념적으로 유사하고 딱 잘라서 구분하기에는 모호한 부분이 있어 헷갈리기 때문인 것 같다. 그런 이유에서 인지, 제대로 공부하지 않으면 헷갈릴 수 있는 두 단어의 차이점을 묻는 질문이 주요 면접 질문이다. (예를들면, 멀티 프로세스와 멀티 스레드의 차이점은?)

공부한 후 이 질문을 다시 보았을 때 나라도 면접에서 이 두 개념을 동시에 물을 것 같아, 이 질문에 대한 답을 제대로 공부하는 것을 목표로 해당 주제를 포스팅하였다.

미리 결론 : process와 thread 구분법

두 개념을 쉽게 구분하는 생각은 바로 CPU 자원을 공유하느냐 하지않느냐이다.

아래 그림을 보면 이해가 쉬워진다.

그림에서와 같이 프로세스는 각자의 메모리 자원을 가지고 독립적으로 동작하는 반면, 스레드는 같은 메모리 자원을 공유하며 동작한다. (정확히 말하면 Multi process와 Multi thread의 차이.)

process와 thread 비교하기

그럼 두 개념의 이론적인 내용을 살펴보자.

process의 개념

실행 중인 프로그램

thread의 개념

실행 중인 프로그램(process)를 구성하는 실행 흐름의 단위 (프로세스의 자원을 공유하면서 실행됨)

먼저, thread는 procee를 구성하는 단위임을 기억하면 앞으로의 내용을 이해하기가 편하다.

prcess와 thread는 무엇을 어떻게 메모리에 저장할까?

메모리는 커널 영역과 사용자 영역으로 나누어 진다.

프로세스는 이 두 영역을 모두 사용하는데, 커널 영역에는 PCB(프로세스 제어 블록, 프로세스 자료 구조)를 저장하고 사용자 영역에는 코드(텍스트) 영역, 데이터 영역, 힙 영역, 스택 영역들을 저장한다.

스레드는 프로세스 실행에 필요한 최소한의 정보를 수택 영역이나 코드 영역 등에 저장한다. (process를 구성하는 실행 흐름의 단위이니 당연히 프로세스와 같은 영역에 정보를 저장하게 된다.)

process 더 알아보기

위에서 언급한 내용만 잘 알고 있으면 아래 부가적인 내용들은 쉽게 이해할 수 있다.


  • 프로세스 종류
    1. 포그라운드 프로세스

      사용자가 볼 수 있는 공간에서 실행

    2. 백그라운드 프로세스

      사용자가 볼 수 없는 공간에서 실행

      1. 사용자와 직접 상호작용하는 프로세스
      2. 사용자와 상호작용하지 않는 프로세스 (demon, 서비스)

  • 커널 영역 속 PCB가 담고있는 대표적인 정보
    1. 프로세스 ID (PID)

      특정 프로세스 식별 고유 번호

    2. 레지스터 값

      프로세스가 CPU를 다시 할당받을 때 필요한 작업 정보 보관 장소

    3. 프로세스 상태 (state)

      프로세스 상태 다이어그램

      • 생성 상태 : PCB를 할당 받은 상태
      • 준비 상태 : 자신의 차례를 기다리는 상태
      • 실행 상태 : CPU를 할당 받아 실행 중인 상태
      • 대기 상태 : 프로세스가 입출력장치를 사용하는 상태
      • 종료 상태 : 프로세스가 종료된 상태
    4. CPU 스케줄링 정보

      프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보

    5. 메모리 정보

      프로세스가 어느 메모리 주소에 저장되어 있는지에 대한 정보 (페이지 테이블 정보)

    6. 사용 중인 파일과 입출력장치 정보


  • 프로세스의 사용자 영역 (코드(텍스트) 영역, 데이터 영역, 힙 영역, 스택 영역 저장)
    • 코드(텍스트) 영역 기계어로 이루어진 명렁어를 read-only 형태로 저장하는 영역
    • 데이터 영역 프로그램이 실행되는 동안 유지할 데이터 저장 (ex. 전역 변수)
    • 힙 영역 (동적 할당 영역) 개발자가 직접 할당할 수 있는 저장공간
    • 스택 영역 (동적 할당 영역)
      데이터가 일시적으로 저장되는 공간 (ex. 매개 변수, 지역 변수)

  • 문맥 교환 (context switch)
    • context 다음 차례가 왔을 때 프로세스 실행을 재개하기 위한 정보
    • context switch context를 백업하고 복구하는 과정을 통해 여러 프로세스가 끊임없이 빠르게 번갈아 가며 실행되는 원리

  • 프로세스 계층구조
    다중 프로세스 시스템에서, 하나의 프로세스가 자신과 같은 구조를 가진 프로세스를 생성함으로써 만들어지는 계층 구조.
    • 부모 프로세스
      새 프로세스를 생성한 프로세스
      → fork 시스템 호출로 자신의 복사본을 자식 프로세스로 생성 (부모 프로세스의 자원 상속)

    • 자식 프로세스
      부모 프로세스에 의해 생성된 프로세스
      → exec 시스템 호출로 자신의 메모리 공간을 새로운 프로그램으로 덮어쓰기

주요 면접 질문

이제 아래 질문에 대한 답변을 직접 해보자. (수정하며 공부하기)

멀티 프로세스와 멀티 스레드의 차이점을 설명하시오.

= 단일 스레드 프로세스를 여러 개 실행하는 것 vs. 하나의 프로세스를 여러 스레드로 실행하는 것

→ 멀티 프로세스의 경우 같은 프로세스의 자원을 공유하지 않고 독립적으로 실행되지만, 멀티 스레드의 경우 같은 프로세스의 자원을 공유하며 동시에 혹은 독립적으로 실행됩니다.
(이때 스레드가 공유하는 자원은 커널 메모리 부분의 PCB입니다. 서로 공유하지 않는 자원은 사용자 메모리 부분(pc 및 레지스터, 스택, 힙 등)입니다.)

→ 이러한 멀티 스레드의 특징은 Context switching이 자주 일어고 데이터 공유가 빈번한 경우, 그리고 적은 메모리를 사용해야 되는 경우에 유리합니다. 하지만 multi thread는 동기화 문제와 하나의 thread 장애로 전체 thread가 종료될 위험이 있습니다. 이에 반해 multi process는 하나의 process가 죽더라도 다른 process에 영향을 주지 않아 안정성이 높습니다.

사진 출처 : 혼자 공부하는 컴퓨터 구조와 운영 체제

profile
최지훈_FE_최최최최종.log

0개의 댓글