본 내용은 Operating System Concepts 8th Edition 번역본 책을 읽고 공부한 내용입니다.
목차
1. 협력적인 프로세스 모델
1) 공유메모리 시스템
2) 메세지 전달 시스템
2. CLIENT-SERVER 통신
1) 소켓
2) RPC(원격 프로시저 호출)
1. 협력적인 프로세스 모델
프로세스가 시스템에서 실행 중인 다른 프로세스들에게 영향을 주거나 받는다면 이는 협력적인 프로세스들이라고 말한다. 프로세스간 통신에는 기본적으로 공유 메모리 와 메시지 전달의 두 가지 모델이 있다. 이에 대해 알아보자!
1. 공유 메모리 시스템
일반적으로 운영체제는 한 프로세스가 다른 프로세스의 메모리에 접근하는 것을 금지한다는 것을 기억하자!
그런데도 메모리를 공유하고 싶다면, 프로세스 둘 모두 서로의 메모리에 접근하는 것에 동의해야 한다.
이 때, 협력하는 프로세스의 일반적인 패러다임인 생산자-소비자 문제에 대해 이야기해보자. (여기에서 동기화를 설명하려는 것이 아니라 통신에 대한 글임을 잊지 말자..!!) 생산자 프로세스는 정보를 생산하고, 소비자 프로세스는 정보를 소비한다. 일반적으로 우리는 서버를 생산자로, 클라이언트를 소비자로 생각한다. 생산자가 데이터를 생성하면 소비자는 그것을 소비하는 형태에서 발생하는 문제를 말한다.
이 생산자-소비자 문제의 해결책은(이후에 동기화 파트에서 더 자세히 다루지만) 통신 관점에서 이야기를 해보자면, 공유 메모리를 사용하는 것이다. 생산자와 소비자 프로세스들이 병행으로 실행되도록 하기 위해서는 생산자가 정보를 채워 넣고 소비자가 소모할 수 있는 항목들의 버퍼를 만들면 된다. 이 버퍼가 공유하는 메모리 영역에 존재하여 둘이 동기화되어 통신할 수 있도록 한다.
이 때 두 가지 유형의 버퍼가 사용될 수 있다.
- 무한 버퍼(unbounded buffer)
버퍼 사이즈가 무한대이다. 빼는 놈(소비자)이 안 빼도 넣고 싶은 놈은(생산자) 계속 넣을 수 있다. - 유한 버퍼(bounded buffer)
버퍼의 크기는 고정되어 있다. 버퍼가 비어있다면 소비자는 반드시 대기해야 하고, 모든 버퍼가 채워져 있다면 생산자는 대기해야 한다.
2. 메세지 전달 시스템
메세지 전달 방식은 위와는 달리, 동일한 주소 공간을 공유하지 않고도 프로세스들이 통신하는 기법을 제공한다. 네트워크를 사용한 분산 환경에서 특히 유용하다. 예를 들면 www에 사용되는 chating 프로그램!
연산은 크게 두가지로 나뉜다. send와 receive.
통신 연결은 물리적이 아닌 논리적인 형태의 방법을 사용한다.
직접 통신
통신하려는 상대 프로세스 이름을 명시적으로 나타내야 한다.
간접 통신
간접 통신에서 메시지들은 메일박스 또는 포트로 송신된다.
이 때 세 가지 유형의 버퍼가 사용될 수 있다.
- 무한 용량(unbounded capacity) - 위 개념과 동일
- 유한 용량(bounded capacity) - 위 개념과 동일
- 무용량(zero capacity)
큐의 최대 길이가 0이다. 즉 링크는 자체 안에 대기하는 메시지들을 가질 수 없다. 이 경우에 송신자는 수신자가 메시지를 수신할 때까지 기다려야 한다.
2. CLIENT-SERVER 통신
위에서 말했던 두 가지 방법(공유 메모리, 메시지 전달) 모두 이 클라이언트-서버 시스템의 통신에도 사용할 수 있다. 이번에는 그 외에 또 클라이언트-서버에서 사용할 수 있는 다른 통신 방법에 대해 알아보자!
1. 소켓
소켓은 통신의 endpoint를 의미한다. 두 프로세스가 서로 통신하기 위해서는 각각의 소켓이 필요하며, IP 주소와 port 번호 두 가지를 접합한 것이 소켓이다.
예를 들어 148.15.3.92:8080 주소를 client로 하고, 165.52.7.51:80 주소를 server로 하여 소통하는 것을 예로 들 수 있다.
TCP(연결기반) 소켓, UDP(비연결성) 소켓, MulticastSocket 등이 그 예이다.
2. 원격 프로시저 호출 RPC
RPC는 네트워크에 연결되어 있는 두 시스템 사이의 통신에 사용하기 위하여 프로시저 호출을 추상화하기 위한 방편으로 설계되었다. 메서드 호출 내부 간 내부 통신 세부 사항들을 stub 을 이용해 숨겨준다.
func(String str) --> 이 str에 대한 정보들을 숨겨준다고 이해하자.!
또한 우리가 정보들을 쭉 직렬화시켜 보내고 받을 수 있도록 marshall(정돈) 기능도 제공해준다.
RPC는 IPC의 한 종류일 뿐인데, 그래도 RPC를 다른 IPC와 구분해보자면,
RPC는 원격으로 호출하는 절차. 라고 생각하면 된다. 쉽게 예시를 들면, TV를 끌 때 직접 손으로 끄냐, 리모컨으로 전원 버튼을 누르는가의 차이라고 이해해도 좋다.
'CS > OS' 카테고리의 다른 글
[OS] 프로세스 동기화 (0) | 2023.04.13 |
---|---|
[OS] 다중 스레드 프로그래밍 (0) | 2023.04.12 |
[OS] UNIX로 알아보는 PROCESS (3) | 2023.04.11 |
[OS] 운영체제 개념 및 프로세스 (6) | 2023.04.11 |
[OS] OS 기초 1 (0) | 2023.03.24 |