프로세스들이 서로의 공간을 쉽게 접근할 수 있다면 프로세스 데이터/코드가 변경될 수 있기 때문에 아주 위험한 상황이 초래될 수 있다. 따라서 프로세스는 다른 프로세스의 공간을 접근할 수 없도록 설계되었다.
하지만 프로세스 간 커뮤니케이션의 필요성이 존재했기에 프로세스 간 통신 방법을 제공하며 이를 IPC(InterProcess Communication)이라고 한다.
IPC의 필요성은 다음과 같은 이유로 요약된다.
fork() 시스템 콜을 통해 프로세스 자신을 복사하여 새로운 프로세스로 생성이 가능
1~10000까지 더하는 작업이 있을 때 fork() 함수로 10개의 프로세스를 생성하여 각각 1000단위씩 잘라 1~1000, 1001~2000, ... 이런 범위로 더하고 결과들을 합하면 더 빠르게 동작가능
웹 서버는 요청이 오면 HTML 파일을 클라이언트에 제공하는 프로그램이며 새로운 사용자 요청이 올 때마다 fork() 함수로 새로운 프로세스를 만들고 각 사용자 요청에 즉시 대응
CPU 병렬 처리가 가능하다면 더 빠른 대응이 가능
IPC 중 한 가지 방법인 file을 통한 커뮤니케이션은 다른 프로세스에 전달할 내용을 파일에 쓰고 다른 프로세스가 해당 파일을 읽으면 된다.
하지만 실시간으로 데이터 전달을 하는데에는 한계가 있으며 해당 파일이 쓰였는지 아닌지 알 방법이 없어 주기적으로 확인하는 것도 낭비이다.
따라서 IPC에는 다양한 기법이 존재
프로세스 간 공간은 완전히 분리되어 있다. 특히 각 프로세스마다 4GB 정도의 메모리 공간을 할당 받는데 이는 실제 주소를 받는 것이 아닌 가상 메모리 공간을 매칭하는 것이다. (따라서 실제 물리 메모리보다 더 많은 가상 메모리 공간을 활용할 수 있음)
하지만 커널 공간은 공유하기 때문에 이를 통해 IPC가 이루어 질 수 있다.
첫 번째 방법인 File을 제외하고는 모두 커널 공간을 활용한다.