멀티 프로세스란?
- 두개 이상 다수의 프로세서가 협력적으로 하나 이상의 작업을 동시에 처리하는 것이다. (병렬처리)
- 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우 사용한다.
장점
- 독립된 구조라서 안정성이 높다
- 한 프로세스가 죽어도 다른 프로세스에 영향을 주지 않는다
단점
- context switching시 멀티 스레드에 비해 비용이 많이 든다.
프로세스 수행상태 변화
- 크게 시작, 준비, 실행, 봉쇄, 완료 단계로 나눌 수 있다.
new (시작)
- 프로세스가 생성 중인 상태
- 프로세스를 위한 각종 자료구조는 생성되었지만 메모리 획득을 하지 못한 상태
ready (준비)
- CPU만 보유하면 바로 명령을 실행할 수 있지만 CPU 할당을 받지 못한 상태
running (실행)
- 프로세스가 CPU를 보유하고 기계어 명령을 실행하고 있는 상태
- 단일 CPU에서 실행상태에 있는 프로세스는 하나
waiting (봉쇄)
- CPU를 할당받더라도 당장 명령을 실행할 수 없는 프로세스 상태
terminated (완료)
- 프로세스가 종료 중인 상태
- 작업은 끝났으나 자료구조를 완전히 정리 못한 상태
프로세스끼리 협력하는 방법
-
메시지 전달 방식
프로세스는 다른 프로세스에게 전달할 메시지를 운영체제에게 시스템 콜 방식으로 요청해 전달한다.
-
공유 메모리 방식
시스템 콜 방식을 통해 각 프로세스 간 공유하는 공간을 만들어, 프로세스 간 같은 공유 공간에 대해 읽고 쓸 수 있도록 한다.
fork() 명령어
유닉스에서 fork() 명령어는 새로운 프로세스를 생성하게 해주는 시스템 콜이다
fork() 시스템콜을 통해 부모 프로세스의 내용을 그대로 복제한 자식 프로세스를 생성할 수 있다
이때 부모 프로세스와 자식 프로세스의 주소 공간은 각각 따로 갖지만, 주소 공간 내에는 동일한 공간을 갖는다.