# 멀티프로세싱

정의

여러개의 '프로세스', 즉 멀티 프로세스를 통해 동시에 두가지 이상의 일을 수행할 수 있는 것을 말합니다.

image

  • 즉, 다수의 프로세서가 서로 협력적으로 일을 처리하는 것을 의미합니다.
  • 하나 이상의 일을 병렬로 처리할 수 있습니다.
  • 특정 프로세스의 메모리, 프로세스 중 일부에 문제가 발생되더라도 다른 프로세스를 이용해서 치리할 수 있으므로 신뢰성이 높습니다.

# 웹 브라우저

웹 브라우저는 멀티 프로세스 구조를 가지고 있습니다.

  • 브라우저 프로세스
    • 주소 표시줄, 북마크 막대, 뒤로 가기 버튼, 앞으로 가기 버튼등을 담당하며 네트워크 요청이나 파일 접근 같은 권한을 담당합니다.
  • 랜더러 프로세스
    • 웹 사이트가 '보이는' 부분의 모든 것을 제어합니다.
  • 플러그인 프로세스
    • 웹 사이트에서 사용하는 플러그인을 제어합니다.
  • GPU 프로세스
    • GPU를 이용해서 화면을 그리는 부분을 제어합니다.

# IPC

정의

IPC (Inter Process Communication)프로세스끼리 데이터를 주고 받고, 공유 데이터를 관리하는 메커니즘을 뜻합니다.

  • 멀티프로세스는 IPC가 가능합니다.
  • 종류로는 공유 메모리, 파일, 소켓, 익명 파이프, 명명 파이프, 메시지 큐가 있습니다.
    • 메모리가 완전히 공유되는 스레드 보다는 속도가 느리다는 단점이 있습니다.

# 공유 메모리

정의

공유 메모리(Shared Memory)는 어려 프로세스에 동일한 메모리 블록에 대한 접근 권한이 부여되어 프로세스가 서로 통신할 수 있도록 공유 버퍼를 생성하는 것을 말합니다.

image

  • 각 프로세스의 메모리를 다른 프로세스가 접근할 수 없지만 공유 메모리를 통해 여러 프로세스가 하나의 메모리를 공유할 수 있습니다.
  • IPC 방식 중 어떠한 매개체를 통해 데이터를 주고 받는 것이 아닌 메모리 자체를 공유하기 때문에 불필요한 데이터 복사의 오버헤드가 발생하지 않아 가장 빠릅니다.
  • 같은 메모리 영역을 여러 프로세스가 공유하기 때문에 동기화가 필요합니다.
  • 공유 메모리는 CPU가 접근 할 수 있는 큰 랜덤 접근 메모리인 RAM을 가리키기도 합니다.

# 파일

정의

파일은 디스크에 저장된 데이터 또는 파일 서버에서 제공한 데이터를 말합니다.

  • 이를 기반으로 프로세스가 통신을 수행합니다.

# 소켓

정의

동일한 컴퓨터의 다른 프로세스나 네트워크의 다른 컴퓨터로 네트워크 인터페이스를 통해 전송하는 데이터를 의미합니다.

image

  • 같은 도메인 내에서 연결될 수 있고 프로세스들 사이의 통신을 가능하게 합니다.
    • 서버단에서는 bind, listen, accept를 진행해 소켓 연결을 위한 준비를 합니다.
    • 클라이언트 단에서는 connect를 통해 서버에 요청하고 연결이 수립된 후에는 socket에 send 함으로써 데이터를 주고 받습니다.
    • 연결이 끝난 후에는 반드시 Socket 을 close()해주어야 합니다.
  • 범용적인 IPC로써 양방향 통신이 가능하며 패킷 단위로 주고 받음으로 직관적으로 이해하기 쉬운 코드를 만들 수 있습니다.
  • 예시로 TCP/UDP 소켓이 있습니다.

# 익명 파이프

정의

익명 파이프(Unnamed Pipe)는 프로세스 간에 FIFO 방식으로 읽히는 임시 공간인 파이프를 기반으로 데이터를 주고 받으며, 단방향 방식의 읽기 전용, 쓰기 전용 파이프를 만들어서 작동하는 방식을 말합니다.

image

  • 부모, 자식 프로세스 간에만 사용할 수 있으며 다른 네트워크 상에서는 사용이 불가합니다.
  • 쌍방통신을 위해서는 Write용 PIPE하나 Read PIPE하나를 따로 만들어야 합니다.
  • read()와 write()가 기본적으로 block 모드로 작동하기 때문에 프로세스가 read가 대기중이라면 read가 끝나기 전에는 write를 할 수가 없게 됩니다.

# 명명된 파이프

정의

명명된 파이프(Named Pipe)는 파이프 서버와 하나 이상의 파이프 클라이언트 간의 통신을 위한 명명된 단방향 또는 이중 파이프를 말합니다.

image

  • 클라리언트/서버 통신을 위한 별도의 파이프를 제공하며, 여러 파이프를 동시에 사용할 수 있습니다.
  • 컴퓨터의 프로세스끼리 또는 다른 네트워크 상의 컴퓨터와도 통신을 할 수 있습니다.
  • 서버용 파이프와 크라이언트용 파이프로 구분해서 작동하며 하나의 인스턴스를 열거나 여러개의 인스턴스를 기반으로 통신합니다.

# 메시지 큐

정의

메시지를 큐 데이터 구조 형태로 관리하는 것을 의미합니다.

image

  • 입출력 방식으로는 익명 PIPE와 동일하지만, 커널에서 관리하며 메모리를 사용한 PIPE 입니다. 구조체 기반으로 통신을 합니다.
  • 커널의 전역변수 형태등 커널에서 전역적으로 관리되며 다른 IPC 방식에 비해서 사용 방법이 매우 직관적이고, 간단합니다.
  • 또한 다른 코드의 수정 없이 단지 몇 줄의 코드를 추가시켜 간단하게 매시지 큐에 접근할 수 있는 장점이 있습니다.
  • 공유 메모리를 통해 IPC를 구현할 때 쓰기 및 읽기 빈도가 높으면 동기화 때문에 기능을 구현하는 것이 매우 복잡해지는데 이때 대한으로 메시지큐를 사용하기도 합니다.

# Memory Map

정의

프로세스의 가상 메모리 주소 공간에 파일을 매핑한 뒤 가상 메모리 주소에 직접 접근하는 것으로 파일 읽기/쓰기를 대신합니다.

image

  • Memory Map도 Shared Memory 공간과 마찬가지로 메모리를 공유한다는 측면에 있어서는 서로 비슷한 측면이 있습니다.
  • 차이점은 Memory Map의 경우 열린파일을 메모리에 맵핑시켜서, 공유한다는 점입니다.
  • 운영체제에서 페이징 기법을 사용하여 파일의 내용을 관리하며 페이지 크기에 따라 적절히 파일의 내용을 읽고 쓸 수 있습니다.
  • 파일로 대용량 데이터를 공유할 때 사용되며, 대부분 운영 체제에서는 프로세스를 실행할 때 실행 파일의 각 세그먼트를 메모리에 사상하기 위해 메모리 맵 파일을 이용합니다.

# 요약

image

# 참고자료