반응형
2022. 6. 23. 16 : 21 복습을 위한 리팩토링 시작!
프로세스 간 통신
- 프로세스 간 통신을 IPC, Inter Process Communication이라 한다.
프로세스 간 통신 3가지
- 프로세스 내부 데이터 통신
- 프로세스 간 데이터 통신
- 네트워크를 이용한 원격 데이터 통신:
네트워크(예를 들어 인터넷) 간의 프로세스 간 데이터 전송, 소켓 RPC과 같은 네트워크 프로토콜 이용
프로세스 내부 데이터 통신
- 2개 이상의 스레드 간 데이터 통신 (메모리 변수 이용), 전역 변수와 파일공유를 통한 데이터 전달한다.
- 프로세스 내부에서 스레드는 같은 전역 변수를 공유한다. 따라서 이를 이용해 통신방식을 진행한다.
프로세스 간 데이터 통신
- 동일 컴퓨터 내 프로세스 간 통신. 즉 Shared Memory, Pipe 등 이용한다.
- 프로세스 간 데이터 통신에서는 파일공유를 이용해 통신을 한다. 즉 파일을 열고, 쓰고, 읽기 연산을 한 후, 파일을 닫는다.
- 동일 컴퓨터에서는 공유 메모리를 사용하거나 메시지를 이용해서 프로세스 간 통신을 진행할 수 있다.
- 프로세스 간 파이프를 이용한 통신 방법이 존재한다.
FIFO라 불리는 특수 파일을 이용하며 프로세스 간 통신에 사용한다.
파이프에 쓰기를 하면 데이터가 송신되고, 읽기를 하면 데이터를 수신한다. - 파이프로 양방향 통신을 하려면 파이프가 2개 필요하다. 파이프는 단방향이기 때문이다.
네트워크를 이용한 원격 데이터 통신
- 원격으로 소켓을 이용한 프로세스 간 통신 방법이다. 여러 컴퓨터에 있는 프로세스끼리 통신하는 방법이다.
- 통신하고자 하는 프로세스는 자신의 소켓과 상대의 소켓을 연결한다.
- 시스템에 있는 프로세스가 소켓을 바인딩한 후 소켓을 쓰기 연산을 하면 데이터가 전송되고, 읽기 연산을 하면 데이터를 받게 된다.
- 프로세스 간 원격 통신 과정에서 예외 사항이 존재한다.
- 소켓은 네트워크로 송수신하므로 여러 상황과 예외 조건을 고려하고 처리해야 한다.
- 프로세스 종료
- 메시지 상실
- 훼손 메시지
3가지 문제에 대한 해결법은 타이머 설정이다. 오류가 뜨면 데이터가 성공적으로 전달되지 않는다.
그럴 경우에 3초 타이머를 설정해 응답이 없으면 3초 후에 다시 데이터를 보내도록 설정한다. (소켓 연결은 tcp이기 때문이다)
사례
- 병행 프로세스에서 전역 변수를 이용하면 정상적으로 진행되지 않는다.
전역 변수는 프로세스끼리 공유가 불가하다. 스레드 범위에서만 공유할 수 있다. 즉 같은 데이터를 공유한 게 아니다. - 2개의 프로세스가 파이프를 이용해 데이터를 주고 받는다. 시스템 콜을 이용해 파이프를 만든다.
파이프는 방향성이란 특징을 가지고 있다. consumer는 read 를 수신하고 버퍼에 값을 넣는다.
producer는 송신을 위해 write을 통해 데이터를 적는다. - 세마포어를 이용한 방식이 있다. 각자 loop를 돌면서 sharedResource를 증가시킨다.
세마포어를 변수로 이용해 lock을 걸어준다.
그러나 lock을 했는데 실수로 unlock를 안하면 옆에 프로세스가 진행을 못해 시작을 못할 수 있다.
lock, unlock를 체크하는 것이 매우 중요하다.
참고 자료
쉽게 배우는 운영체제 (저자 : 조성호)
https://www.kyobobook.co.kr/product/detailViewKor.laf?barcode=9791156644071
반응형
댓글