직접적으로 커뮤니케이션하는 방법은 없다.
커뮤니케이션을 해야 할 경우가 있을 텐데 그때는 어떻게 해야 할까?
프로세스 간 직접적인 커뮤니케이션을 막아놓은 이유
프로세스들이 서로의 공간을 쉽게 접근할 수 있다면 프로세스 데이터 혹은 코드가 자유롭게 바뀌니 원하는 결과가 출력이 안될 가능성이
크다.
프로세스 간 통신이 필요한 이유
CPU 코어가 여러 개일 때 성능을 높이기 위해 여러 프로세스를 만들어서 동시 실행한다.
이때 프로세스 간 상태 확인 및 데이터 송수신이 필요한다.
fork() 시스템 콜
해당 함수로 프로세스 자신을 복사해서 새로운 프로세스를 만들 수 있다.
예를 들어서 1부터 1만까지 더하는 함수가 있다면
fork() 함수로 10개의 시스템을 나누어 각각의 더한 값을 합치는 것이 더 빠르게 동작할 수 있다.
프로세스간 공간은 완전히 분리되어 있다.
IPC(InterProcess ) 기법
모든 프로세스는 4GB 의 공간을 가진다.
메모리가 16GB라고치면 4GB만을 갖는다고?
- 가상 메모리이기 때문에 가능한 것이다.
- (3~4GB 까지는 운영체제가 사용하는 공간)
주소 공간을 다쓰는 것이 아니라 일부문 만을 사용한다.
10개의 프로세스를 띄운다고 치면 10개의 Kernal 스페이스가 동시에 띄운다고 생각하면 낭비가 얼마나 심한것인가?
-> 커널 공간은 물리 메모리에 들어갈때 동일한 공간을 공유할 수 있게끔 만들어졌다.
커널 공간은 공유가 가능하다.
다양한 IPC 기법
- 파일 사용 - 실시간성이 떨어지고 저장매체를 갔다오기때문에 시간도 많이 걸림
- 메세지 큐
- Shared Memory
- Pipe
- Signal
- 세마포어
- Socket
- ...
- 2~7 까지는 물리메모리에 커널 공간을 공유한다.
- 프로세스간 공유가 가능하다.
정리
- 여러 프로세스를 동시에 실행함으로써 성능을 개선시킨다. 복잡한 프로그램을 위해 프로세스간 통신 필요
- 프로세스간 공간이 완전히 분리되어있다.
- 프로세스간 통신을 위해 특별한 기법 필요 - IPC
- 대부분의 IPC 기법은 결국 커널 공간을 활용하는 것이다.
'CS > O.S' 카테고리의 다른 글
(운영체제) Thread의 개념 (0) | 2020.04.05 |
---|---|
(운영체제) 다양한 IPC 기법 (파이프, 메세지큐) (0) | 2020.03.31 |
(운영체제) 프로세스와 컨텍스트 스위칭 (0) | 2020.03.17 |
(운영체제) 프로세스 구조와 힙 (0) | 2020.03.07 |
(운영체제) 운영체제의 개요 (0) | 2020.01.20 |