1. 멀티 프로세스(multi process)
멀티 프로세스란 2개 이상의 프로세스가 동시에 실행되는 것을 말한다.
동시에 라는 말은 동시성과 병렬성 두 가지를 의미한다.
동시성은 CPU core가 1개일 때, 여러 process를 짧은 시간동안 번갈아 가면서 연산을 하게 되는 시분할 시스템으로 실행되는 것이다.
병렬성은 CPU core가 여러개일 때, 각각의 core가 각각의 process를 연산함으로써 process가 동시에 실행되는 것이다.
동시성(Concurrency) VS 병렬성(Parallelism)
동시성 | 병렬성 |
Single core | Multi core |
동시에 실행되는 것 같아 보인다 | 실제로 동시에 여러 작업이 처리된다. |
밑의 내용은 Single core의 동시성에 초점을 맞춘다.
멀티 프로세스란 2개 이상의 프로세스가 동시에 실행되는 것을 말한다. 이때 프로세스들은 CPU와 메모리를 공유하게 된다.
메모리의 경우 여러 프로세서들이 각자의 메모리영역을 차지하여 동시에 적재된다.
반면 하나의 CPU는 매 순간 하나의 프로세스만 연산할 수 있다. 하지만 CPU 처리 속도가 워낙 빨라서 수 ms 이내의 짧은 시간동안 여러 프로세스들이 CPU에서 번갈아 실행되기 때문에 사용자 입장에서는 여러 프로그램이 동시에 실행되는 것처럼 보인다.
이처럼 CPU의 작업시간을 여러 프로세스들이 조금씩 나누어 쓰는 시스템을 시분할 시스템이라고 부른다.
메모리 관리
- 여러 프로세서가 동시에 메모리에 적재된 경우, 서로 다른 프로세서의 영역을 침범하지 않도록 각 프로세서가 자신의 메모리 영역에만 접근하도록 운영체제가 관리해준다.
Context switch
- Context switch란 한 프로세스에서 다른 프로세스로 CPU 제어권을 넘겨주는 것을 말한다.
이 때 이전의 프로세스의 상태를 PCB에 저장하여 보관하고 새로운 프로세스의 PCB를 읽어서 보관된 상태를 복구하는 작업이 이루어진다.
Q 프로세스의 context는 무엇인가요?
- context란 process가 현재 어떤 상태로 수행되고 있는지에 대한 정보입니다. 해당 정보는 PCB에 저장한다.
Q PCB에 저장되는 것들은 무엇이 있나요?
- PCB는 운영체제가 process에 대해 필요한 정보를 모아놓은 자료구조입니다. PCB에는 일반적으로 다음과 같은 정보가 포함된다.
1. process number
2. process state
3. program Counter(PC), 레지스터
4. CPU 스케쥴링 정보, 우선순위
5. 메모리 정보(해당 process의 주소 공간 등)
Q 프로세스의 state에는 어떤 것들이 있나요?
- 프로세스는 실행(runnig), 준비(ready), 봉쇄(wait, sleep, blocked) 세 가지 상태로 구분된다.
실행 | 프로세스가 CPU를 점유하고 명령을 수행중인 상태 |
준비 | CPU만 할당받으면 즉시 명령을 수행할 수 있도록 준비된 상태 |
봉쇄 | CPU를 할당받아도 명령을 실행할 수 없는 상태 - ex. I/O 작업을 기다리는 경우 등 |
2. 멀티 스레드(multi thread)
- 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것
여러 개의 프로세스 : 병렬성(Parallelism)을 높일 수 있다. 즉, 여러 작업이 동시에 수행될 수 있다.
이는 프로세스의 스레드들이 각각 다른 프로세서에서 병렬적으로 수행될 수 있기 때문이다.
하나의 프로세스 : 동시성(Concurrency)을 높일 수 있다. 실제로는 각각의 시간에 한 작업만 수행되지만, 병렬적으로 수행되는 것처럼 보이는 것이다. 만약 한 스레드가 blocked(waiting) 되더라도 커널이 다른 스레드로 switch 시켜 실행할 수 있어서,
하나의 프로세서임에도 불구하고 빠른 처리가 가능하고 계산 속도가 증가한다.
스레드 풀 : 풀 안에 스레드를 미리 만들어 놓고, 요청 시 스레드를 할당해 처리하는 방법
-> 톰캣은 기본으로 200개의 스레드 풀이 생성된다.
장점
- 동시 요청을 처리할 수 있다.
- 생성 가능한 쓰레드의 최대치가 있으므로 너무 많은 요청이 들어와도 기존 요청은 안전하게 처리 할 수 있다.
멀티 쓰레드에 대한 부분은 WAS가 처리해주기 때문에 개발자가 멀티 쓰레드 관련 코드를 신경 쓰지 않아도 된다.
3. 멀티프로세스와 멀티스레드 비교설명
- multi thread는 multi process보다 적은 메모리 공간을 차지하고 Context Switching이 빠르다.
- multi process는 multi thread보다 많은 메모리 공간과 CPU 시간을 차지한다.
- multi thread는 동기화 문제와 하나의 thread 장애로 전체 thread가 종료될 위험이 있다.
- multi process는 하나의 thread가 죽더라도 다른 process에 영향을 주지 않아 안정성이 높다.
Q 멀티프로세스와 멀티스레드 중 어떤 것을 사용해야할까?
두 방법은 동시에 여러 작업을 수행한다는 측면에서 유사한 면이 있다.
적용할 시스템에 따라 두 방법의 장단점을 고려하여 적합한 방식을 선택해야 한다.
메모리 구분이 필요할 때는 multi process가 유리하고,
Context switching이 자주 일어나고 데이터 공유가 빈번한 경우, 그리고 자원을 효율적으로 사용해야 되는 경우에는 multi thread를 사용하는 것이 유리하다.
multi process 대신 multi thread로 구현할 경우, 메모리 공간과 시스템 자원 소모가 줄어들게 된다.
하지만 multi thread를 사용할 때는 thread간 자원을 공유하기 때문에 동기화 문제가 발생할 수 있기 때문에 이를 고려한 프로그램 설계가 필요하다.
또한 process간의 통신보다 thread간의 통신 비용이 적기 때문에 통신으로 인한 오버헤드가 적다.
메모리 사용 / CPU 시간 | Context switching | 안전성 | |
multi process | 많은 메모리 공간 / CPU 시간 차지 | 느림 | 높음 |
multi thread | 적은 메모리 공간 / CPU 시간 차지 | 빠름 | 낮음 |
Q multi thread가 multi process보다 좋은 점은 무엇인가요?
- multi process를 이용하던 작업을 multi thread로 구현할 경우, 메모리 공간과 시스템 자원 소모가 줄어들게 된다.
또한 process를 생성하고 자원을 할당하는 등의 system call을 생략할 수 있기 때문에 자원을 효율적으로 관리할 수 있다.
뿐만 아니라 Context switching 시 캐시 메모리를 초기화할 필요가 없어서 속도가 빠르다.
- 데이터를 주고 받을 때를 비교해보면, process간의 통신보다 multi thread 간의 통신 비용이 적기 때문에
통신으로 인한 오버헤드가 적다.
Q multi thread가 multi process보다 안 좋은 점은 무엇인가요?
- thread 간의 자원 공유 시 동기화 문제가 발생할 수 있어서 프로그램 설계 시 주위가 필요하고,
하나의 thread에 문제가 생기면 process내의 다른 thread에도 문제가 생길 수 있다.
'Programming > Operating System' 카테고리의 다른 글
[CS] URL을 주소창에 입력했을 때 화면이 나오기까지의 과정 (3) | 2022.10.13 |
---|---|
[OS] 프로그램(Program) / 프로세스(Process) / 스레드(Thread) (0) | 2022.10.08 |