본문 바로가기
CS/운영체제

프로세스와 스레드의 차이

by minkang 2021. 7. 19.

프로그램이란??

- 사전적 의미 : 어떤 작업을 위해 실행할 수 있는 파일

- 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가지 않은 정적인 상태

모든 프로그램은 운영체제가 실행되기 위한 메모리 공간을 할당해줘야 실행될 수 있습니다.

 

프로세스란??

- 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램

- 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)

- 운영체제로부터 시스템 자원을 할당받는 작업의 단위

특징으로는 각각 독립된 메모리 영역을 할당받습니다.

독립된 메모리 영역이기 때문에 다른 프로세스의 자원에 접근하려면 IPC기법을 사용해야 합니다.

 

스레드란??

- 프로세스 내에서 실행되는 여러 흐름의 단위

- 프로세스의 특정한 수행 경로

- 프로세스가 할당받은 자원을 이용하는 실행의 단위

프로세스 내에서 StackPC Register값만 따로 할당받고 Code, Date, Heap영역은 공유합니다.

 

스택을 스레드마다 독립적으로 할당하는 이유

스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이므로 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고 이는 독립적인 실행 흐름이 추가되는 것입니다. 따라서 스레드의 정의에 따라 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당합니다.

 

PC Register 를 스레드마다 독립적으로 할당하는 이유

PC 값은 스레드가 명령어의 어디까지 수행하였는지를 나타나게 된다. 스레드는 CPU 를 할당받았다가 스케줄러에 의해 다시 선점당합니다. 그렇기 때문에 명령어가 연속적으로 수행되지 못하고 어느 부분까지 수행했는지 기억할 필요가 있습니다. 따라서 PC 레지스터를 독립적으로 할당합니다.

 

프로세스와 스레드의 차이점

프로세스는 독립된 메모리 영역을 할당해 주기 때문에 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC)을 사용해야 합니다. 또한, 한 프로세스가 실행 도중 오류가나서 강제로 종료된다해도 다른 프로세스에게는 영향을 끼치지않습니다.

이와는 다르게 스레드는 스택을 제외한 메모리 영역을 공유하여 별도의 통신 기법없이 다른 스레드의 자원에 접근할 수 있습니다. 그리고 어떠한 스레드에서 오류가 발생한다면 같은 프로세스 내에서 다른 스레드들이 같이 강제로 종료될 수 있는 위험이 있습니다.

 

멀티 프로세스

  • 멀티 프로세싱이란?
    • 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
  • 장점
    • 여러 개의 자식 프로세스 중 하나가 문제가 발생해도 다른 프로세스에 영향을 미치지 않습니다.
  • 단점
    •  Context Swtiching에서의 오버헤드
      • Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생합니다.
      •  프로세스는 각각의 독립된 영역을 할당받기 때문에 공유하는 자원이 없어 Context Switching시에 캐시에 있는 모든 데이터를 리셋하도 다시 캐시 정보를 불러와야 합니다. 그렇기 때문에 오버헤드가 발생합니다.
    • 프로세스는 각각 독립된 메모리 영역을 할당받았기 때문에 다른 프로세스의 자원에 직접 접근할 수 없고 IPC기법을 사용해야 합니다.

Context Switching이란??? 현재 진행하고 있는 작업(Process, Thread)의 상태를 저장하고 다음 진행할 작업의 상태 값을 읽어 적용하는 과정을 말합니다.

 

멀티 스레드 

  • 멀티 스레딩이란?
    • 하나의 프로그램을 여러 개의 스레드로 구성하고, 하나의 작업을 같이 처리하는 것
    •  웹 서버는 대표적인 멀티 스레드 응용 프로그램입니다.
  • 장점
    • 프로그램의 응답시간을 단축합니다.
    • Context Switching이 일어나도 적은 오버헤드를 가집니다. ( 스택영역을 제외한 영역을 공유하기에 캐시를 전부 리셋하지 않아도 됩니다.)
    • 자원의 공유로 메모리 낭비를 줄일 수 있습니다.
  • 단점
    • 공유 메모리에 대한 접근으로 동기화 문제가 발생합니다. (Critical Section기법을 통해 대비)
    • 하나의 쓰레드에 문제가 발생하면 모든 쓰레드에 영향을 줄 수 있습니다.

멀티 스레드는 멀티 프로세스에 비해 상당한 이점을 가집니다.

1. Context Switching시 공유 메모리 만큼의 오버헤드가 줄어듭니다.

2. Stack 영역을 제외한 Heap, Data, Code 영역을 공유함으로써 메모리 낭비를 줄일 수 있습니다.

 

 

 

출처

'CS > 운영체제' 카테고리의 다른 글

교착상태 (DeadLock)  (0) 2021.07.27
CPU 스케줄링의 종류  (0) 2021.07.27
스케줄러  (0) 2021.07.24
PCB & Context Switching  (0) 2021.07.20
프로세스 간 통신 (Inter Process Communication)  (0) 2021.07.20