[CS] Process, Thread

wrld_worthy·2023년 11월 23일
0

CS

목록 보기
5/12

Process

프로세스(Process)는 프로그램을 실행하면, 운영체제는 해당 프로글매의 실행 파일(ex:exe파일)을 메모리에 로드한다. 이때 프로세스를 생성하여 메모리를 할당한다.


Process 의미

  • 컴퓨터에서 실행중인 프로그램
  • 프로그램의 인스턴스로 독립적인 객체이며, 고유한 프로세스 식별자(PID)가 할당된다.
  • 운영체제로부터 자원을 할당받는 작업의 단위이다.

Process 특징

  • 프로그램의 코드, 데이터, 스택, 힙 영역 드을 포함한 메모리 공간을 할당 받음.
  • 자신만의 주소 공간을 가지고 있어, 프로세스 간 메모리 충돌을 방지한다.
  • 다른 프로세스의 메모리에 접근할 수 없다.
  • 기본적으로 프로세스당 1개 이상의 스레드를 생성할 수 있다.
  • 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신이 이루어져야한다.
    (프로세스 간의 통신:IPC, inter-process-communication)

실행

  • 프로세스는 운영 체제의 스케줄러에 의해 CPU 시간을 할당받고 실행된다.

Thread

스레드(Thread)는 프로세스 내에서 실행되는 가장 작은 실행 단위로, 프로그램 코드의 실행 흐름이다. 스레드는 프로세스의 자원과 메모리 공간(힙, 전역 변수 등)을 공유하며, 각각 독립적ㅇ니 실행 경로와 스택을 가진다.

Thread 의미

  • 프로세스 내에서 병렬로 실행되는 작업의 단위, 프로세스 내에서 실행되는 가장 작은 단위.
  • 프로세스의 자원(메모리, 파일 핸들 등)을 공유하지만, 각 스레드는 독립적인 스택과 프로그램 카운터를 가진다.
  • 멀티 스레딩을 통해 하나의 프로세스 내에서 여러 작업을 동시에 수행 할 수 있다.

Thread 특징

  • 프로세스 내 자원 공유, 스레드는 프로세스의 메모리(힙, 전역변수 등)와 자원을 공유하여 효율적인 자원 사용이 가능하다.
  • 독립적 실행 경로, 각 스레드는 독립적인 실행 으름을 가지며, 자신만의 스택을 통해 함수 호출과 로컬 변수를 관리한다.
  • 경량 프로세스, 스레드는 프로세스보다 생성 비용과 Context Switching비용이 낮다.
  • 동기화 필요, 공유 자원에 대한 접근을 관리하기 위한 동기화 메커니즘이 필요하다.(ex: 세마포어, 뮤텍스)

실행

  • 스레드는 프로세스 내에서 운영 체제의 스케줄러에 의해 독립적으로 CPU시간을 할당받아 실행된다.
  • 멀티 코어 프로세서에서는 여러 스레드가 동시에 다른 코어에서 실행될 수 있어 병렬 처리의 이점을 제공한다.

멀티 프로세스, 멀티 스레드

멀티 프로세스

멀티 프로세스는 여러 프로세스가 동시에 실행되는 방식으로, 각 프로세스가 독립적으로 메모리와 자원을 사용한다. 멀티 프로세스는 환경에서는 각 프로세스가 서로 다른 작업을 수행할 수 있다.
]

멀티 프로세스 성질

  • 독립적인 실행 환경, 각 프로세스는 독립적인 메모리 공간과 자원을 가진다.
  • 안정성, 한 프로세스의 실패가 다른 프로세스에 영향을 미치지 않아 시스템의 전체적인 안정성이 높음
  • 프로세스 간 통신(IPC)이 필요, 서로 다른 메모리 공간을 가지므로, 프로세스 간 통신에는 특별한 메커니즘을 필요로 한다.

멀티 프로세스 특징

  • 자원의 독립성: 프로세스는 독립적인 메모리, 자원을 가짐
  • 오버헤드: 프로세스 간 컨텍스트 스위칭과 자원 관리에 더 많은 시스템 오버헤드 발생할 수 있다.
  • 데이터 고융와 통신 복잡성: 프로세스 간 데이터 공유와 통신이 복잡하고 오버헤드가 크다.

멀티 스레드

멀티 스레드는 하나의 프로세스 내에서 여러 스레드가 동시에 실행되는 방식이다. 스레드들은 프로세스의 자원과 메모리를 공유하면서 작업을 수행한다.

멀티 스레드 성질

  • 자원 공동일한 프로세스 내의 스레드들은 메모리와 자원을 공유한다.
  • 효율적인 자원 사용, 자원을 공유하기 때문에 멀티 프로세스보다 효율적인 자원 사용이 가능하다.
  • 반응성 향상: 하난의 스레드가 대기 상태일 때 다른 스레드가 작업을 계속 수행할 수 있어, 응용 프로그램의 반응성이 좋아진다.

멀티 스레드 특징

  • 경량 프로세스, 스레드는 프로세스보다 가볍고 빠르며, 컨텍스트 스위칭 비용이 낮다.
  • 동기화 문제, 공유 자원에 대한 접근을 관리하기 위한 동기화가 필요하다.
  • 스레드 간의 자원 공유는 전역 변수(데이터 세그먼트)를 이용하므로 충돌이 발생할 수 있다.
  • 오류와 예외 처리의 복잡성, 한 스레드의 실패가 전체 프로세스의 영향을 줄 수 있다.

멀티 프로세스와 멀티 스레드의 차이

  • 자원의 공유: 멀티 프로세스는 각각 독립된 메모리 공간을 가지지만, 멀티 스레드는 프로세스의 자원을 공유한다.
  • 오버헤드와 효율성: 멀티 프로세스는 간 컨테긋트 스위칭으로 인한 오버헤드가 크지만, 멀티 스레드는 더 효율적인 자원 사용과 빠른 컨텍스트 스위칭이 가능하다.
  • 안정성과 격리성: 멀티 프로세스는 프로세스 간 격리로 인해 안전성이 높지만, 멀티 스레드는 하나의 스레드에 문제가 생기면 전체 프로세스에 영향을 줄 수 있다.
  • 통신과 데이터 공유: 멀티 프로세스는 IPC를 통해 데이터를 교환하지만 복잡하고 오버헤드가 크며, 멀티 스레드는 프로세스 내에서 자원을 공유하기 때문에 통신이 더 간단하고 효율적이다.

멀티 프로세스 보다 멀티 스레드를 사용한다.

멀티 프로세스가 먼저 개발되어 초기에 적용이 되었고, 후에 멀티 프로세스의 단점을 극복하기 위해서 멀티 스레드를 채택하여 적용됐다.

단점

  • 고비용의 컨텍스트 스위칭
  • 자원 사용의 비효율성

멀티 프로세스로 할 수 있는 작업들을 하나의 프로세스에서 멀티 스레드로 작업하는 이유

  1. 자원의 효율성 증대
  • 멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
    -> 프로세스 간의 Context Switching시 단순히 CPU 레지스터 교체 뿐만 아니라 RAM과 CPU 사이의 캐쉬 메모리에 대한 데이터까지 초기화되므로 오버헤드가 크기 때문

  • 스레드는 프로세스 내의 메모리를 공유하기 때문에 독립적인 프로세스와 달리 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어들게 된다.

  1. 처리 비용 감소 및 응답 시간 단축
  • 프로세스 간의 통신(IPC)보다 스레드 간의 통신의 비용이 적으므로 작업들 간의 통신의 부담이 줄어든다.
    –> 스레드는 Stack 영역을 제외한 모든 메모리를 공유하기 때문

  • 프로세스 간의 전환 속도보다 스레드 간의 전환 속도가 빠르다.
    –> Context Switching시 스레드는 Stack 영역만 처리하기 때문

0개의 댓글