프로세스
-
운영체제로부터 시스템 자원을 할당받는 작업의 단위
-
각각 독립된 메모리 영역(Code, Data, Stack, Heap 구조)을 할당받는다.
-
기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.
-
각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
-
한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC)을 사용해야 한다. (Ex. 파이프, 파일, 소켓 등을 이용한 통신 방법 이용)
쓰레드
-
프로세스 내에서 실행되는 여러 흐름의 단위
-
쓰레드는 프로세스 내에서 Stack을 따로 할당받고 Code, Data, Heap 영역은 공유한다.
-
쓰레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내의 주소 공간이나 자원들(힙 공간 등)을 같은 프로세스 내에 쓰레드끼리 공유하면서 실행된다
-
각각의 쓰레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.
-
한 쓰레드가 프로세스 자원을 변경하면, 다른 이웃 쓰레드도 그 변경 결과를 즉시 볼 수 있다.
-
쓰레드 간의 자원 공유는 전역 변수(데이터 세그먼트)를 이용하므로 함께 사용할 때 충돌이 발생할 수 있다.
멀티 프로세싱
멀티 프로세싱은 2개 이상의 CPU가 병렬적으로 작업하는 다중처리기 시스템에서 사용할 수 있는 방법으로, 여러 개의 CPU가 하나의 주기억장치를 공유하여 각각의 작업을 동시에 수행하게 된다.
멀티 쓰레딩
컴퓨터는 여러 개의 쓰레드를 효과적으로 실행할 수 있는 하드웨어 지원을 갖추고 있다. 그러므로 멀티쓰레딩은 프로그램 안에서 병렬 처리의 이점을 맛볼 수 있다.
멀티 쓰레딩의 장점
- 응답성: 대화형 프로그램을 멀티쓰레드화하면, 프로그램의 일부분(쓰레드)이 중단되거나 긴 작업을 수행하더라도 프로그램의 수행이 계속되어, 사용자에 대한 응답성이 증가된다. 예를 들어, 멀티 쓰레드가 적용된 웹 브라우저 프로그램에서 하나의 쓰레드가 이미지 파일을 로드하고 있는 동안, 다른 쓰레드에 사용자와의 상호 작용이 가능하다.
- 자원 공유: 쓰레드는 자동적으로 그들이 속한 프로세스의 자원들과 메모리를 공유한다. 코드 공유의 이점은, 한 응용 프로그램이 같은 주소 공간 내에 여러 개의 다른 활동성 쓰레드를 가질 수 있다는 점이다.
- 경제성: 프로세스 생성에 메모리와 자원을 할당하는 것은 비용이 많이 든다. 쓰레드는 자신이 속한 프로세스의 자원들을 공유하기 때문에, 쓰레드를 생성하고 문맥교환을 하는 편이 보다 경제적이다.
- 멀티프로세서 활용: 멀티 프로세서 구조에서는 각각의 쓰레드가 다른 프로세서에서 병렬로 수행될 수 있다. 단일 쓰레드 프로세스는 CPU가 많아도 CPU 한개에서만 실행된다. 즉, 다중 쓰레드화를 하면 다중 CPU에서 병렬성이 증가된다.
멀티 쓰레딩의 단점
- 다중 쓰레드는 캐시나 변환 색인 버퍼와 같은 하드웨어 리소스를 공유할 때 서로를 간섭할 수 있다.
- 하나의 쓰레드만 실행 중인 경우 싱글 쓰레드의 실행 시간이 개선되지 않고 오히려 지연될 수 있다.
- 멀티쓰레딩의 하드웨어 지원을 위해 응용 프로그램과 운영 체제 둘 다 충분한 변화가 필요하다.
- 쓰레드 스케줄링은 멀티쓰레딩의 주요 문제이기도 하다.
멀티쓰레드 모델
- 다-대-일(Many-to-One)
- 일-대-일(One-to-One)
- 다-대-다(Many-to-Many)
멀티 프로세싱과 멀티 쓰레딩 차이
-
멀티 쓰레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 문맥 전환이 빠르다는 장점이 있지만, 오류로 인해 하나의 쓰레드가 종료되면 전체 쓰레드가 종료될 수 있다는 점과 동기화 문제를 안고 있다.
-
멀티 프로세스 방식은 하나의 프로세스가 죽더라도 다른 프로세스에는 영향을 끼치지 않고 정상적으로 수행된다는 장점이 있지만, 멀티 쓰레드보다 많은 메모리 공간과 CPU 시간을 차지한다는 단점이 존재한다.
-
멀티 프로세스로 실행되는 작업을 멀티 쓰레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 효율적으로 관리할 수 있다. 또한, 프로세스 간의 통신보다 쓰레드 간의 통신 비용이 적으므로 부담이 줄어들게 되므로 쓰레드로 나눠가면서 사용한다.
'CS > 운영체제' 카테고리의 다른 글
[메모리 관리] 주소 바인딩 (0) | 2021.04.11 |
---|---|
[메모리관리] 연속할당 방식 - 고정 분할 방식과 가변 분할 방식 (0) | 2021.04.11 |
운영체제 개요 (0) | 2020.10.09 |