프로세스간 통신(IPC)
프로세스가 동시에 실행될 때 프로세스 간 서로 데이터를 공유하지 않고 독립적으로 작동하면 별 문제가 없겠지만 데이터를 공유한다면 문제가 생길 것이다. 이렇게 프로세스 간 통신하는 방법을 IPC(Inter-Process Communication)이라고 한다. IPC를 통해 협력 프로세스는 서로 데이터를 주고 받을 수 있다.
Shared-Memory
IPC 모델은 Shared-Memory와 Message-Passing으로 나눌 수 있다.
잠깐 Shared-Memory를 살펴보기 전에 알아두어야 할 개념이 있는데, 이러한 협조 프로세스에는 항상 생산자-소비자 문제가 따라온다. 단어에서 볼 수 있듯이 데이터를 생산하는 생산자와 그 데이터를 소비하는 소비자가 있다는 개념인데, 웹서버가 HTML 파일을 생성하면(생성자) 웹 브라우저가 그것을 렌더링하여 화면에 띄우는(소비자) 관계와 같다고 보면 된다.
Shared-Memory는 생산자와 소비자가 동시에 실행될 수 있는데 여기에는 버퍼를 이용한다. 버퍼는 다른 말로 큐이다. 큐에서 FIFO 원칙대로 데이터가 출입하는 구조라고 생각하면 된다. 생산자가 버퍼를 채우면 소비자가 그 버퍼를 소비하는 것이다. Shared-Memory가 그 버퍼이다. OS는 공동의 메모리를 만들어 각 프로세스의 Privacy는 지키고 데이터의 동기화는 보장할 수 있도록 관리를 해주어야 한다.
Message-Passing
Message-Passing는 근본 개념은 Shared-Memory와 같지만 권한을 OS에게 모두 넘겨주어서 프로그래머는 메시지만 던지고 나머지는 신경쓰지 않도록 하는 개념이다. 직접 버퍼 자료구조를 작성하지 않고 send(message), receive(message)와 같은 명령으로 메시지를 수신, 발신할 수 있다. send 코드만 살짝 살펴보면 아주 아주 간단해진 것을 볼 수 있다.
Message-Passing은 프로세스 간에 링크가 생긴다고 할 수도 있는데 이러한 이 링크는 또 여러가지 방법을 가지고 있다. 크게 direct or indirect communication, blocking or non-blocking(synchronous or asynchronous communication)으로 나눌 수 있다.
먼저 direct communication은 수신자와 발신자가 정확히 명시되어 있는 것으로 두 프로세스 사이의 링크가 명확하게 자동으로 설립된다. indirect communication에서는 메일박스(포트) 개념이 나오게 된다. 여기서는 발신자가 포트에 메시지를 넣으면 수신자가 그 포트에서 메시지를 수신한다. 따라서 두 프로세스는 하나의 포트를 공유하고 링크가 두 프로세스보다 더 많을 수 있다.
blocking or non-blocking은 동기와 비동기 개념을 생각하면 된다. blocking send를 한다면 발신자는 수신자가 메시지를 다 받을 때까지 다른 일을 하지 않고 기다린다. 만약 영화 2G를 전송한다면 2G를 모두 전송할 때까지 프로세스는 다른 일을 하지 않고 계속 실행된다. Non-blocking receive을 한다고 하면 수신자는 메시지가 다 오지 않았더라도 기다리지 않고 다른 일을 하고 있다가 다시 왔을 때 메시지가 있다면 다시 실행되는 것이다.
클라이언트-서버 시스템에서의 소통
최근의 컴퓨터들은 모두 "인터넷"으로 연결되어 있다. 그렇다면 다른 컴퓨터와 연결될 수 있는 것일까? 여기서 사용되는 것이 바로 소켓이다. 소켓은 두 컴퓨터 간의 소통을 이어줄 수 있는 양종단을 의미한다. 쉽게 이야기하면 IP 주소와 서로를 연결할 수 있는 파이프인 포트를 하나로 묶어 둘을 연결하는 것이 바로 소켓인 것이다.
RPC
하지만 소켓은 소통하는 컴퓨터끼리 bit가 다르면 소켓을 일일이 지정해주어야 한다는 단점이 있다. RPC는 이러한 문제를 보완하는 방법인데, 쉽게 말해 클라이언트에서 서버의 프로시저(함수)를 호출하는 기능을 제공하는 것이다. 이렇게 하면 원격에 있는 프로그램을 로컬에 있는 것처럼 사용할 수 있게 된다. RPC는 분산 시스템 환경에서 많이 사용되는 시스템이다.
'CS 지식 > 운영체제' 카테고리의 다른 글
운영체제 Ch6 - 프로세서 동기화(1) (0) | 2021.12.12 |
---|---|
운영체제 Ch5 - CPU 스케줄링 (0) | 2021.12.08 |
운영체제 Ch4 - 스레드 (0) | 2021.12.08 |
운영체제 Ch3 - 프로세스(1) (0) | 2021.12.02 |
운영체제 Ch1, 2 - Introduction & OS Structures (0) | 2021.12.01 |