멀티 프로세싱
하나의 프로그램을 여러 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것.
이를 통해 특정 프로세스의 메모리, 프로세스 중 일부에 문제가 발생되어도, 다른 프로세스를 이용해서 처리할 수 있는 장점이 있다.(신뢰성 ↑)
그러나 프로세스 마다 독립된 메모리 영역을 가지고 있어, 작업량이 많을 수록 오버헤드가 발생하며, Context Switching으로 인한 성능 저하가 발생할 수 있다.

* 오버헤드: 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 등을 말한다. 예를 들어 A라는 처리를 단순하게 실행한다면 10초 걸리는데, 안전성을 고려하고 부가적인 B라는 처리를 추가한 결과 처리시간이 15초 걸렸다면, 오버헤드는 5초가 된다. 또한 이 처리 B를 개선해 B'라는 처리를 한 결과, 처리시간이 12초가 되었다면, 이 경우 오버헤드가 3초 단축되었다고 말한다
IPC(Inter Process Communication)
프로세스 간 데이터를 주고 받고 공유데이터를 관리하는 메커니즘
프로세스와 스레드


코드, 데이터, 힙을 서로 공유하는 스레드와는 다르게 프로세스는 코드, 데이터, 스택, 힙을 독립적으로 가진다.
운영체제는 보안 및 안정성 위해 한 프로세스에서 다른 프로세스의 메모리에 직접 접근이 불가능하도록 독립된 가상 메모리 공간을 할당하는 것이다.
따라서 기본적으로 프로세스의 메모리를 다른 프로세스가 접근할 수 없지만, IPC를 통해 프로세스간 데이터 공유가 가능하다.
공유 메모리(Shared Memory)

여러 프로세스가 동일한 메모리 공간을 공유할 수 있도록 한다. 같은 메모리 영역을 여러 프로세스가 공유하기 때문에 동기화 작업이 필요하다.(세마포어, 뮤텍스 등의 동기화 작업 필요)
과도한 복사를 피할 수 있어 속도가 빠르다는 장점이 있다.
파일
파일 시스템을 활용하여 프로세스간 데이터를 공유하는 방법이다. 단순하고 구현이 쉽지만 동기화 문제가 발생할 수 있음.
소켓
네트워크 인터페이스를 통해 다른 프로세스나 다른 컴퓨터로 전송하는 데이터를 의미.
클라이언트 서버가 소켓을 통해 통신하는 구조로 원격에서 프로세스 간 데이터를 공유할 때 주로 사용한다.
양방향 통신이 가능하다.
다음 이미지는 소켓을 사용한 로컬 컴퓨터간의 통신 과정을 설명한 것이다. 아래 계층을 내려가면서 송신을 하고, 아래 계층부터 위로 올라가면서 대상 프로세스가 수신을 하는 방식이다.

파이프
운영체제가 제공하는 버퍼를 사용하여 데이터를 전송하는 IPC기법이다. 버퍼의 크기가 제한되어 있기 때문에 일정 크기 이상의 데이터를 전송하기 위해선 여러 번 나누어 보내야 하는 단점이 있다.
익명 파이프(Unnamed Pipe)
FIFO방식의 단방향 통신이며, 부모 - 자식 프로세스 간에만 사용가능한 파이프이다.

명명된 파이프(named pipe)
파이프 서버와 파이프 클라이언트로 구성. 프로세스 간 통신은 물론 네트워크상에서 서버와 클라이언트가 통신할 때 사용한다.
익명 파이프, 명명 파이프는 모두 단방향 통신을 지원하며 프로세스 상호간의 양방향 통신을 구현하기 위해선 쓰기, 읽기 파이프를 하나씩 두어 구현할 수 있다.

익명 파이프는 이름이 없기 때문에 외부에서 사용할 수 없고 명명된 파이프는 이름이 존재하기 때문에 외부에서 호출 가능하다고 생각하면 이해가 쉽다.
메시지 큐
메시지를 큐(queue) 자료구조 형태로 관리하는 것. 커널에서 전역적으로 관리되며 동기화 처리를 해줘야 하는 다른 방식과는 달리 코드 몇 줄의 추가 만으로 접근할 수 있다는 장점이 있다. 그리고 데이터의 크기가 제한되지 않는다는 장점 역시 가지고 있다.
메시지 큐 시스템 콜을 이용해서 생성하고 조작 가능하다. POSIX 표준에 의하면 'msgget', 'msgsnd', 'msgrcv'함수를 사용하여 메시지 큐를 생성하고 메시지를 보내고 받을 수 있다고 한다.

예상 질문
IPC란 무엇이고 어떤 기법들이 있는지 설명하시오.
각 프로세는 독립된 메모리 영역을 갖기 때문에 한 프로세스에서 다른 프로세스의 메모리에 직접 접근이 불가능합니다. 따라서 프로세스 간의 통신이 가능하도록 운영체제 커널에서 IPC를 지원합니다. IPC기법으로는 공유 메모리, 파이프, 메시지 큐 등이 있습니다.
'Computer Science > 운영체제' 카테고리의 다른 글
| [운영체제] 멀티 스레딩 (0) | 2023.05.11 |
|---|---|
| [운영체제] 메모리 계층과 캐시 (0) | 2023.04.24 |