본문 바로가기
공부이야기/CS공부

[OS] Process vs Thread

by coderoom 2021. 5. 2.

 

 

프로세스 (Process)란?

컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램. 실제 실행 중인 프로그램을 일컫기 때문에 동적이라고 표현하기도 한다.

 

프로세스는 커널에 의해 직접 관리되는데 커널 메모리 안에는 각 프로세스마다 관리하고 있는 프로세스에 대한 데이터들이 있다.

이 정보는 Process Control Block(PCB)이라고 하는 자료구조 안에 있는 커널 스케줄러가 프로세스를 제어하는데 필요한 정보들이 담겨 있다.

 

운영체제는 각각의 프로세스를 독립적으로 관리하기 때문에 서로 다른 프로세스가 겹칠 일이 없고, 또 사용 자원 영역 등이 겹치는 일이 발생해서도 안 된다. (예외적으로 같은 프로그램의 프로세스들은 Code 영역은 공유한다.) 프로세스 간 통신은 필요할 경우 최소한의 인터페이스를 제공해 Inter Process Communication(IPC)이라는 소통을 한다. 다른 컴퓨터에 위치한 프로세스 간 통신을 위해 익히 들은 Protocol이 필요해 진다.

 

 

 

Context Switching

현재 진행하고 있는 Task의 상태(Context)를 저장하고 대기하고 있던 다음 순서의 Task가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업.

 

Task의 대부분 정보는 Register에 저장되고 PCB로 관리된다. 현재 실행하고 있는 Task의 PCB 정보를 저장하게 된며 다음 실행할 Task의 PCB정보를 읽어 Register에 적재하고 CPU가 이전에 진행했던 과정을 연속적으로 수행할 수 있다.

 

 

 

 


 

 

스레드(Thread)란?

프로세스 내에서 실행되는 여러 흐름의 단위. 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.

 

 

 

 


 

 

멀티 프로세스 v.s. 멀티 스레드

 

 

멀티 프로세스

 

멀티 프로세싱

하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것

 

 

장점

  • 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않는다.

 

단점

  • Context Switching에서의 오버헤드: Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생하게 된다. 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 프로세스 사이에서 공유하는 메모리가 없어, Context Switching이 발생하면 캐시에 있는 모든 데이터를 모두 리셋하고 다시 캐시 정보를 불러와야 한다.
  • 프로세스 사이의 어렵고 복잡한 통신 기법 (IPC): 하나의 프로그램에 속하는 프로세스들 사이의 변수를 공유할 수 없다.

 

 

멀티 스레드

 

멀티 스레딩

하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것.

 

 

장점

  • 시스템 자원 소모 감소(자원의 효율성 증대): 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어듦.
  • 시스템 처리량 증가(처리 비용 감소): 스레드 간 데이터 공유가 간단해 지고 시스템 자원 소모가 줄어듦. Context Switching이 빠르다.
  • 간단한 통신 방법: Stack 영역을 제외한 메모리 공유

 

단점

  • 주의 깊은 설계 필요
  • 까다로운 디버깅
  • 자원 공유의 문제 발생 가능 (동기화 문제)
  • 하나의 스레드에서 문제가 발생하면 전체 프로세스가 영향을 받는다.

 

 

 

Why 멀티 스레드?

프로그램을 여러 개 켜는 것 보다 하나의 프로그램 안에서 여러 작업을 해결하는 것!

  • 자원의 효율성 증대
  • 처리 비용 감소 및 응답 시간 단축

 

 

 

 

참고 링크

 

 

 

 

 


 

댓글