우선 프로세스와 스레드에 대해 간단하게 설명하고 넘어가겠습니다.
프로세스는 메모리 상에서 실행중인 프로그램을 말하며, 스레드는 이 프로세스 안에서 실행되는 흐름 단위를 말합니다.
프로세스마다 최소 하나의 스레드를 보유하고 있으며, 각각 별도의 주소공간을 독립적으로 할당받습니다.
(메모리 영역을 나누면 code, data, heap, stack 영역으로 구성됩니다.)
스레드는 이중에 stack만 따로 할당받고 나머지 영역은 스레드끼리 서로 공유합니다.
멀티 프로세스
멀티 프로세스는 하나의 응용 프로그램을 여러 개의 프로세스로 실행할 수 있게 하는 기술입니다.
하나의 프로세스가 여러개의 자식 프로세스로 쪼개져 실행됩니다.
그림과 같이 하나의 응용 프로그램인데도 불구하고 여러개의 프로세스로 나눠져 있는 것을 알수 있습니다.
예를 들어서 로딩이 오래걸리는 페이지 한개와 바로 접속이 가능한 페이지가 있다고 했을 때, 오래 걸리는 페이지를 먼저 시작했음에도 불구하고, 로딩 과정에서 다른 페이지를 접속하면 접속이 되는 것과 같은 원리입니다.
장점
1. 프로그램의 안정성이 높아집니다.
2. 여러개의 CPU 코어를 이용해서 병렬적으로 실행해 성능을 향상시킬 수 있습니다.
3. 각 프로세스는 독립적이므로 시스템 확장성이 뛰어납니다.
단점
1. 컨텍스트 스위칭 비용이 높습니다.
2. 프로세스는 독립적인 메모리 공간을 가져서 자원 공유가 어렵습니다.
3. 메모리의 주소를 중심으로 캐시를 가지는데 컨텍스트 스위칭을 하게되면 캐시미스로 이어질 수 있습니다.
멀티 스레드
멀티 스레드는 멀티 프로세스의 단점을 극복하기 위해 나온 방법입니다.
기존의 멀티 프로세스는 메모리를 공유하지 않기 때문에 모든 주소 값들을 MMU가 인식할 수 있도록 컨텍스트 스위칭을 해줘야합니다.
장점
1. 프로세스보다 가볍게 때문에 실행환경을 설정하기 간단하며 생성과 종료가 빠릅니다.
2. 하나의 프로세스 내에서 여러 개의 스레드를 생성하고, 자원 공유가 가능하기 때문에 자원의 효율성이 뛰어납니다.
3. 프로세스보다 CS비용이 적습니다.
단점
하지만 이러한 멀티 스레드도 단점을 가지고 있습니다.
자원이 공유되는 만큼 하나에 문제가 생기면 다른 것에도 이상이 생길 우려가 있습니다.
1. 멀티 프로세스는 각 프로세스가 독립적이므로 문제가 발생해도 다른 프로세스들은 영향을 받지 않지만, 스레드는 다른 스레드에 영향을 미친다.
2. 여러 개의 스레드가 공유자원에 접근할 수 있기에 동기화 문제가 발생할 수 있습니다.
(임계 영역은 뮤텍스, 세마포어 등을 이용해서 해결할 수 있습니다.)
3. 동기화 과정에서 사용되는 Lock으로 인해 데드락이 발생할 우려가 있습니다.
결론
멀티 프로세스, 멀티 스레드 모두 각자의 장단점이 있으므로 해당 장단점에 따라 기능별로 다르게 구현할 필요가 있습니다.
'CS > 운영체제' 카테고리의 다른 글
[3강] 프로세스 관리 (1) | 2024.03.03 |
---|---|
운영체제 스케줄링(정처기) (0) | 2023.07.05 |
운영체제 개념(정처기) (0) | 2023.07.03 |
객체지향이란? (0) | 2023.06.25 |