오늘은 프로세스와 스레드에 대해 알아보자
Process란?
간단히 말해서 실행되는 프로그램이다.
일반적으로 CPU에 할당되는 단위라고 하는데 이는 매우 위험하다.
그 이유는 최근 리눅스에서는 스레드 단위로 CPU에 할당하는 방식으로 사용하기 있기 때문이다.
따라서 조심하자!!
Thread란?
이것도 간단히 말해 프로세스 내부에서의 작업단위 혹은 실행단위라고 말할 수 있다.
정의에 대해서는 간단하게 살펴보고 차이점을 알아보자
Process vs Thread
가장 큰 차이점은 메모리 공유에 있다.
프로세스들은 각각이 독립적인 존재로 서로 메모리를 공유하지 않는다.
하지만 스레드는 서로 메모리영역을 공유한다.
여기서 알아두어야 할게 있다.
스레드는 모든 메모리 영역을 공유하는 것이 아니고 Heap/Data/Code영역의 메모리만 공유한다.
그렇다면 스레드라도 따로 할당되는것은 어떤것일까?
Stack은 스레드마다 따로 할당되어진다.
추가로 따로 할당되는 것은 아니지만 스레드마다 다른 값들이 있다.
ProgramCounter와 Register가 이경우인데 이는 아무리 메모리를 공유하는 스레드라고 해도 실행되는 부분이 다르기 때문에 바뀔수 밖에 없게 된다.
그림으로 보면 둘의 차이가 간단히 이해가 된다!!
자연스럽게 멀티 프로세스와 멀티 스레드의 차이에 대해 알아보자
멀티 프로세스
프로세스들은 메모리를 공유하지 않는다. 메모리를 공유하지 않으면 어떻게 될까?
당연히 각 프로세스들이 독립적으로 여기지므로 하나의 프로세스가 다운되도 다른 프로세스에게 영향을 미치지 않게된다.(메모리를 공유하지 않기 때문에 메모리 침범 문제가 발생하지 않는다.)
당연히 좋은 점만 있을수는 없다.
멀티 프로세스는 메모리를 공유하지 않기 때문에 *Context Switching시 오버헤드가 발생해 성능이 떨어진다는 단점을 가지고 있다.
* A프로세스의 작업이 끝나고 B프로세스로 CPU권한이 넘어갈때를 말한다.
이번엔 멀티 스레드에 대해 알아보자
멀티 스레드는 기본적으로 메모리를 공유하기 때문에 장단점이 멀티프로세스와 반대라고 볼 수 있다.
일단 메모리 공유기반이므로 통신 비용이 적어 Context Switiching 오버헤드가 줄어든다. 이는 성능의 향상으로 돌아오게 된다.
하지만 하나의 스레드에 문제가 생기면 (같은 프로세스 내의) 다른 스레드에 영향을 미치게 된다.(Because of 메모리 공유) 따라서 공유 자원을 사용할때 주의가 필요하고 구현하기가 어렵다는 특징을 가지고 있다.
이상으로 프로세스와 스레드에 대해 알아보았습니다.
끝!
'Computer Science > 운영체제' 카테고리의 다른 글
[운영체제] CPU 스케쥴링(Scheduling) (2) | 2021.12.16 |
---|---|
[운영체제] 인터럽트(Interrupt)와 컨텍스트 스위칭(Context Switching) (0) | 2021.12.13 |