[OS] 멀티 프로세스, 멀티 스레드

emz·2022년 8월 6일
0

프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고,
스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.


혼용되는 키워드

실행 단위 : CPU CORE에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념이다. 실행 단위는 프로세스일 수도, 스레드일 수도 있다.

프로세스 : 하나의 스레드만 가지고 있는 단일 스레드 프로세스이다.

동시성 : 한순간에 여러 가지 일이 아니라, 짧은 전환으로 여러 가지 일을 동시에 처리하는 것처럼 보이는 것이다.



프로세스(Process)

프로세스는 코드로 작성된 프로그램이 메모리에 적재되어 사용할 수 있는 상태가 된 것이다. 프로그램은 보조 기억장치에 존재하며, 실행되기를 기다리는 명령어(코드)와 정적인 데이터의 묶음이다. 즉, 프로세스는 실행 중인 프로그램이다.

스레드(Thread)

스레드란 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다. 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행하고, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 부른다.



멀티 프로세스(Multi Process)

개념

  • 두 개 이상 다수의 프로세서(CPU)가 협력적으로 하나 이상의 작업(Task)을 동시에 처리하는 것이다. (병렬처리)
  • 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우 사용한다.

장점

  • 독립된 구조로 안전성이 높은 장점이 있다.
  • 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않아, 작업속도가 느려지는 손해 정도는 생기지만 정지되거나 하는 문제는 발생하지 않는다.
  • 여러 개의 프로세스가 처리 되어야 할 때 동일한 데이터를 사용하고, 이러한 데이터를 하나의 디스크에 두고 모든 프로세서가 이를 공유하면 비용적으로 저렴하다.

문제점

  • 독립된 메모리 영역이기 때문에 작업량이 많을 수록(Context Switching이 자주 일어나서 주소 공간의 공유가 잦을 경우) 오버헤드가 발생하여 성능저하가 발생할 수 있다.
  • Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 시간이 소모되는 등 오버헤드가 발생한다.

Context Switching

  • CPU는 한 번에 하나의 프로세스만 실행 가능하다.
  • CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 데 이 과정을 Context Switching이라고 한다.
  • 구체적으로, 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.


멀티 프세드(Multi Thread)

개념

  • 하나의 프로세스에 여러 스레드로 자원을 공유하며 작업을 나누어 수행하는 것이다.

장점

  • 시스템 자원소모 감소(자원의 효율성 증대)
    -> 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 관리할 수 있다.
  • 시스템 처리율 향상(처리비용 감소)
    -> 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어든다.
    -> 스레드 사이 작업량이 작아 Context Switching이 빠르다. (캐시 메모리를 비울 필요가 없다.)
  • 간단한 통신 방법으로 프로그램 응답시간 단축
    -> 스레드는 프로세스 내 스택 영역을 제외한 메모리 영역을 공유하기에 통신 비용이 적다.
    -> 힙 영역을 공유하므로 데이터를 주고 받을 수 있다.

문제점

  • 자원을 공유하기에 동기화 문제가 발생할 수 있다. (병목현상, 데드락 등)
  • 주의 깊은 설계가 필요하고 디버깅이 어렵다. (불필요 부분까지 동기화하면 대기시간으로 인해 성능저하 발생)
  • 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는다.
  • 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다.






References

profile
끄적끄적

0개의 댓글