본문 바로가기

OS(운영체제)/프로세스

[운영체제] 프로세스 - 프로세스와 스레드의 차이점은?

프로세스란

프로세스란 위에서 말했듯이 프로그램을 메모리에 적재시켜 실행 중인 것을 말한다. 이때 실행단위는 스레드가 된다.

여기서 프로그램과 프로세스의 차이를 알고 넘어가야 한다.

프로그램은 컴퓨터 하드디스크에 저장돼있는 코드덩어리를 말한다. 즉 정적인 상태라고 볼 수 있다.

그런 프로그램을 메모리에 적재시키게 되면 정적인 코드덩어리가 메모리상에서 실행되고 동적인 상태가 되면 프로세스가 되는 것이다.

 

 

프로세스의 특징

프로세스는 운영체제의 의해 각자 독립된 메모리 영역과 주소공간을 할당 받는다.

이때 프로세스의 메모리 구조는 크게 Code, Heap, Stack, Data 영역으로 구성되며 저마다의 역할이 있다.

Code : 코드를 구성하는 메모리 영역으로 프로그램 명령을 저장.

Heap : 동적으로 메모리를 할당 시 사용하는 영역.

Stack : 지역변수, 매개변수같은 임시데이터를 저장.

Data : 전역변수, 정적 데이터, 배열 같은 초기화된 데이터를 저장.

 

 

정리

프로세스는 실행중인 프로그램이다.

프로세스는 독립된 메모리 영역과 주소공간을 할당 받기 때문에 다른 프로세스에 접근 할 수 없다.

프로세스간 통신을 위해선 별도의 IPC를 사용해야한다.

→ IPC(Inter-Process Communication, 프로세스 간 통신)이란 프로세스들 사이에 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로를 뜻한다.

프로세스는 최소 1개의 스레드를 갖는다.


스레드란

스레드는 프로세스 내에서 실행되는 가장 작은 실행흐름 단위이다.

 

 

스레드 특징

가장 기본적으로 하나의 프로세스가 있으면 거기엔 최소 하나 이상의 스레드가 존재한다.

이때 최초에 있는 스레드를 메인 스레드라고 하며 추가적인 스레드가 없다면 모든 코드는 메인스레드에서 실행된다.

그림에서 보이는 것처럼 스레드의 경우 프로세스와 다르게 한 프로세스 내에서 Code, Data, Heap 영역의 자원을 공유한다. 그렇기 때문에 스레드 하나가 자원을 변경한다면 같은 프로세스 내에 있는 다른 스레드들도 변경 결과를 알 수 있다. 하지만 Stack영역은 독립적으로 갖고 있는것을 볼 수 있다.

 

 

정리

스레드는 프로세스 내에서 실행되는 가장 작은 실행흐름 단위이다.

프로세스 내에는 최소 하나 이상의 스레드가 존재한다.

스레드들 간에는 Code, Data, Heap 영역의 자원을 공유한다.

스레드는 독립된 Stack영역을 갖고 있다.

공유자원 변경시 스레드는 변경 결과를 알 수 있다.

 

Q) 스택을 독립적인 영역으로 갖는 이유

Stack은 지역변수, 매개변수, 리턴값 같은 임시데이터를 저장하는 영역이다.

Stack의 메모리 공간이 독립적이라는 말은 독립적인 함수 호출을 할 수 있다는 말이다.

때문에 독립적인 실행흐름을 갖을 수 있게되고 스레드를 추가 할 수 있기 때문에 Stack은 독립적인 영역으로 갖는다.

 


 

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

▶멀티 프로세스란

멀티 프로세스는 하나의 프로그램을 실행 할때 여러개의 프로세서가 협력하여 작업을 병렬 처리하는 것을 말한다.

각 프로세스간 독립된 메모리, 주소 공간을 필요로 할떄 사용된다.

 

장점

  • 독립된 공간을 갖고 있기때문에 안정성이 높다.
  • 프로그램 실행시 여러개의 프로세스가 처리하기 때문에 하나의 프로세스에 문제가 생겨도 작업처리에 문제가 발생하지 않는다. (다만 작업처리 속도는 느려질수가 있음).

단점

  • 작업량이 많을 수록 오버헤드 발생. 성능 저하.
  • Context Switching 과정에서 캐시 메모리 초기화 같은 다소 무거운 작업 진행을 하면서 오버헤드 발생. 성능 저하.

 

 

▶멀티 스레드란

멀티 스레드란 하나의 프로세스 내의 자원을 공유해서 여러개의 스레드가 작업을 분할 처리하는 것을 말한다.

 

장점

  • 간단한 통신 방법으로 응답시간 단축
  • 프로세스간 통신보다 스레드간 통신의 비용이 적음.
  • 작업량이 작아서 Context Switching이 빠름.
  • 작업량이 작기 때문에 시스템 처리율이 향상.
  • 프로세스 생성해서 시스템이 콜하는 비용이 줄어들어 자원소모 감소.

 

단점

  • 프로세스 내의 자원을 공유하기 때문에 동기화 문제가 발생 할수도 있다.
  • 그렇기 때문에 디버깅이 어려움.(스레들이 공유하는 자원을 고려해야하기 때문)
  • 스레드 하나가 문제가 발생하면 프로세스 자체에 영향을 미침.
  • 단일 프로세스에선 효과가 별로 없음.

 


마치며

프로세스와 스레드의 차이를 정리해보면

프로세스는 독립된 공간을 할당 받아 스레드보다 많은 메모리 비용을 필요로한다.

프로세스간 통신은 별도의 IPC를 사용해야 하는 반면, 스레드는 공유자원을 사용해서 스레드간 통신 비용이 더 적다.

프로세스는 스레드보다 Context Switching속도가 느리다.

프로세스는 스레드보다 안정적이다.

 

이정도로 정리 할수 있을 것 같다.

그리고 Context Switching과 IPC에 대해서도 포팅할 예정이다.