본문 바로가기

CS/운영체제

멀티 프로세스

프로그램

- 하드디스크에 저장된 실행 파일

- 실행하지 않는 이상 하드디스크에 계속 남아 있으며, 같은 경로에 같은 이름으로 동시에 존재할 수는 없다.

 

프로세스

- 실행 중인 프로그램에 대한 인스턴스

- 프로세스는 운영체제로부터 각각 독립된 자원(code, data, stack, heap, PC register )을 할당받는다.

- 각 프로세스는 최소 1개 이상의 쓰레드를 가지고 있다.

- 다른 프로세스의 자원에 접근하려면, 프로세스 간 통신(IPC : 세마포어, , 공유메모리)을 이용해야 한다.

- 유닉스 계열에서 ps 명령어로 현재 수행되고 있는 프로세스를 확인할 수 있다.

 

멀티프로세스

단일 코어 CPU에서 여러 개의 실행 흐름이 동시에 필요하다고 가정하면, 실행 흐름사이에서 데이터를 공유해야 한다. 실행 흐름은 결국 CPU를 점유하고 인스트럭션을 실행하는 것을 말하므로 여러 실행 흐름을 구현하려면 멀티프로세스나 멀티스레드로 구현해야 한다.

멀티프로세스로 구현한다고 가정하면, 프로세스는 서로 독립적인 메모리 공간을 가지므로 기본적으로 데이터를 공유할 수 없다. 멀티프로세스에서는 모든 프로세스가 서로 다른 메로리 공간을 가지므로 데이터를 공유하려면 특별한 기법을 사용해야 한다.

멀티 스레드가 멀티 프로세스보다 나은점

1. 컨텍스트 스위칭(Context Switching) 시에 공유 메모리 만큼의 시간(자원) 손실이 줄어든다.

- 프로세스 간의 컨텍스트 스위칭시 단순히 CPU 레지스터 교체 뿐만이 아니라 RAMCPU사이의 캐쉬메모리에 대한 데이터까지 초기화 되므로 상당한 부담이 발생한다.

 

2. Stack을 제외한 모든 메모리를 공유하기 때문에 global(전역), static(정적) 변수 그리고 new, malloc에 의한 모든 자료를 공유할 수가 있다.

- 이는 프로세스간 통신(ex.pipe)과 같이 복잡한 과정을 거치지 않고 보다 효율적인 일처리가 가능하다는 것을 뜻한다.

 

멀티 프로세스가 멀티 스레드보다 나은점

멀티 프로세스의 방식의 프로그램에서 하나의 프로세스가 자신의 데이터 공간을 망가뜨린다면 그것은 해당 프로세스의 중단을 낳게 될 것이다. 하지만 멀티 스레드 방식의 프로그램에서는 하나의 스레드가 자신이 사용하던 데이터 공간을 망가뜨린다면 그 결과는 하나의 데이터 공간을 공유하는 모든 스레드를 작동불능 상태로 만들어 버릴 것이다.

 

'CS > 운영체제' 카테고리의 다른 글

가상화란? (VM, 컨테이너, 도커, 쿠버네티스)  (0) 2021.03.24
교착상태(Deadlock)  (0) 2021.03.03
동기화  (0) 2021.03.03
캐시(Cache)  (0) 2021.02.27