본문 바로가기

CS/O.S

(운영체제) 프로세스간 커뮤니케이션

직접적으로 커뮤니케이션하는 방법은 없다.
커뮤니케이션을 해야 할 경우가 있을 텐데 그때는 어떻게 해야 할까?

 

프로세스 간 직접적인 커뮤니케이션을 막아놓은 이유

프로세스들이 서로의 공간을 쉽게 접근할 수 있다면 프로세스 데이터 혹은 코드가 자유롭게 바뀌니 원하는 결과가 출력이 안될 가능성이

크다.

 

프로세스 간 통신이 필요한 이유

CPU 코어가 여러 개일 때 성능을 높이기 위해 여러 프로세스를 만들어서 동시 실행한다.

이때 프로세스 간 상태 확인 및 데이터 송수신이 필요한다.

 

fork() 시스템 콜    

해당 함수로 프로세스 자신을 복사해서 새로운 프로세스를 만들 수 있다.

예를 들어서 1부터 1만까지 더하는 함수가 있다면 

fork() 함수로 10개의 시스템을 나누어 각각의 더한 값을 합치는 것이 더 빠르게 동작할 수 있다.


프로세스간 공간은 완전히 분리되어 있다. 

IPC(InterProcess ) 기법

 

 

 

 

모든 프로세스는 4GB 의 공간을 가진다.

 

메모리가 16GB라고치면 4GB만을 갖는다고?
  • 가상 메모리이기 때문에 가능한 것이다. 
  • (3~4GB 까지는 운영체제가 사용하는 공간)

 

 

 

 

 

 

 

 

 

주소 공간을 다쓰는 것이 아니라 일부문 만을 사용한다.

 

10개의 프로세스를 띄운다고 치면 10개의 Kernal 스페이스가 동시에 띄운다고 생각하면 낭비가 얼마나 심한것인가?

-> 커널 공간은 물리 메모리에 들어갈때 동일한 공간을 공유할 수 있게끔 만들어졌다.

 

커널 공간은 공유가 가능하다.

 

 

 

다양한 IPC 기법

  1. 파일 사용 - 실시간성이 떨어지고 저장매체를 갔다오기때문에 시간도 많이 걸림
  2. 메세지 큐
  3. Shared Memory
  4. Pipe
  5. Signal
  6. 세마포어
  7. Socket 
  8. ...
  • 2~7 까지는 물리메모리에 커널 공간을 공유한다. 
  • 프로세스간 공유가 가능하다.

정리

  • 여러 프로세스를 동시에 실행함으로써 성능을 개선시킨다. 복잡한 프로그램을 위해 프로세스간 통신 필요
  • 프로세스간 공간이 완전히 분리되어있다.
  • 프로세스간 통신을 위해 특별한 기법 필요 - IPC
  • 대부분의 IPC 기법은 결국 커널 공간을 활용하는 것이다.