Operation/OS

OS - 프로세스와 스레드 차이

JaeHoney 2022. 7. 5. 08:09

프로세스

프로세스를 알기 전에 프로그램을 알아야 한다. 프로그램(Program)어떤 작업을 위해 실행할 수 있는 파일을 말한다.

 

프로세스의 사전적 정의는 다음과 같다.

  • 컴퓨터에서 연속적으로 실행하고 있는 컴퓨터 프로그램
  • 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)
  • 운영체제로부터 시스템 자원을 할당받는 자원의 단위
  • 정리하면 프로그램의 실행된 부분을 의미한다.

프로세스는 다음의 특징을 갖는다.

  • 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당받는다.
    • 코드 영역(code area): 프로그래머가 작성한 프로그램이 저장되는 영역
    • 데이터 영역(data area): 코드가 실행되면서 사용한 환경이나 파일들의 각종 데이터들이 모여있다.
    • 스택 영역(stack area): 호출한 함수가 종료되면 되돌아올 메모리의 주소나 지역 변수 등이 저장된다.
    • 힙 영역(heap area): 동적으로 할당되는 데이터를 위해 존재한다.
  • 최소 1개 이상의 스레드(메인 스레드)를 가지고 있다.
  • 각 프로세스는 별도의 주소 공간에서 실행되며 기본적으로 다른 프로세스의 자원에 접근할 수 없다.
  • 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간 통신(IPC)를 사용해야 한다.
    • ex. 파이프, 파일, 소켓 등을 이용한 통신 방법

 

* 그림에서 여러 프로세스가 동시에 실행되고 관리 되는 것 처럼 보인다. 하지만 CPU는 한 번에 한 가지 명령밖에 처리할 수 없다. 즉, 동시가 아니라 빠르게 프로세스들을 번갈아가면서 실행하고 관리하고 있는 것이다.

 

스레드

스레드의 사전적 정의는 다음과 같다.

  • 프로새스 내에서 실행되는 여러 흐름의 단위
  • 프로세스의 특정한 수행 경로
  • 프로세스가 할당받은 자원을 이용하는 최소 실행 단위

스레드는 다음의 특징을 갖는다.

  • 프로세스 내에서 각 필요한 Stack만 할당받고 Code, Data, Heap 영역은 공유해서 각 스레드가 공유한다.
  • 같은 프로세스 내 스레드끼리 자원(Heap 등)을 공유하며 실행된다.
  • 즉, 스레드는 공유하는 자원인 Heap 영역에 있는 변수를 수정할 수 있다.

Process vs Thread

프로세스와 스레드의 가장 큰 차이점은 프로세스는 자원을 공유하지 않지만 스레드는 자원을 공유한다는 점이다.

 

멀티 프로세스

멀티 프로세싱이란 하나의 프로그램을 여러 개의 프로세스가 구성하여 각 프로세스가 작업(Task)를 처리하도록 하는 기법이다.

 

특징

  • 여러개의 자식 프로세스 중 하나에 문제가 발생해도 다른 자식 프로세스는 영향을 받지 않는다.
  • Context Switching 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되면서 오버헤드가 발생한다.
  • 프로세스 간 통신을 하기 위해서는 IPC를 통해야 한다.
  • 프로세스 간 공유하는 메모리가 없어서 Context Switching이 발생하면 데이터를 처음부터 불러와야 한다.

참고

  • 문맥 교환(Context Switching)은 CPU 코어를 여러 프로세스가 돌아가면서 사용해서 작업을 처리하는 방식을 말한다.
  • 해당 프로세스의 상태(Context)를 자신의 PCB에 저장하고 대기하고 있던 다음 순서의 프로세스가 이전의 프로세스 상태를 복구하는 작업이다.

멀티 스레드

멀티스레딩이란 하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는 것이다.

 

윈도우나 리눅스 등 많은 OS에서 멀티 프로세싱도 지원하지만 멀티 스레딩을 기본으로 하고 있다.

 

특징

  • 시스템 자원 소모 감소 (자원의 효율성)
    • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어서 자원을 효율적으로 관리할 수 있다.
  • 시스템 처리량 감소 (처리 비용)
    • 스레드 간 데이터를 주고 받는 것이 간단해지면서 시스템 자원 소모가 줄어든다.
    • 스레드 사이의 작업량이 작아 스레드 간 Context Switching이 활발하게 일어난다.

단점

  • Thread-Safety에 문제가 없는 지 확실한 설계가 필요하다.
  • 디버깅이 까다롭다.
  • 동기화나 교착 상태가 발생할 수 있다.
  • 프로세스 밖에서는 해당 스레드를 제어할 수 없다.
  • 하나의 스레드가 문제가 발생하면 프로세스 전체가 영향을 받는다.

 


Reference