1 프로세스 간 통신의 개념
프로세스가 다른 프로세스와 데이터를 주고받는 프로세스 간 통신(IPC)는 같은 컴퓨터 내에 있는 프로세스뿐만 아니라 다른 컴퓨터에 있는 프로세스와의 통신도 포함된다.
프로세스 내부 데이터 통신 : 하나의 프로세스 내에 2개 이상의 스레드가 존재하여, 전역 변수나 파일을 이용해 데이터를 주고 받는다.
프로세스 간 데이터 통신 : 같은 컴퓨터에 있는 여러 프로세스끼리 통신하는 경우로, 공용 파일 또는 운영체제가 제공하는 파이프를 사용하여 통신한다.
네트워크를 이용한 데이터 통신 : 여러 컴퓨터가 네트워크로 연결되어 있을 때의 통신 방식으로, 소켓을 이용해 통신한다. 이를 네트워킹이라고 한다. 원격 프로시져 콜도 이에 해당한다.
2 프로세스 간 통신의 분류
프로세스 간 통신은 동시에 실행되는 프로세스끼리 데이터를 주고받는 작업을 의미한다.
통신 방향에 따른 분류
양방향 통신 : 데이터를 동시에 양쪽 방향으로 전송할 수 있는 구조. 소켓 통신이 이에 해당한다.
반양방향 통신 : 양쪽 방향 모두에 전송할 수 있지만, 동시 전송은 불가능한 경우. 무전기가 이에 해당한다.
단방향 통신 : 한쪽 방향으로만 데이터를 전송할 수 있는 구조. 전역 변수나 파이프가 이에 해당한다.
통신 구현 방식에 따른 분류
전역 변수를 이용한 통신의 문제는 언제 데이터를 보낼 지 받는 쪽에서 모르는 것이다. 따라서 상태 변화를 살펴보기 위해 반복문을 무한 실행하며 기다리는 것을 busy waiting이라고 한다. 이 문제를 해결하기 위해서 데이터가 도착했음을 알리는 동기화를 사용한다. 동기화 기능이 있는지 없는지에 따라 대기가 있는 통신(blocking communication)과 대기가 없는 통신(non-blocking c-)으로 구분 된다. 대기가 있는 통신은 동기화 통신(synchronous c-), 없는 통신은 비동기화 통신(asynchronous c-)라고도 한다.
대기가 있는 통신 : 동기화를 지원하는 통신 방식. 데이터를 받는 쪽은 데이터가 도착할 때까지 자동으로 대기 상태에 모무른다.
대기가 없는 통신 : 동기화를 지원하지 않는다. 데이터를 받는 쪽은 busy waiting를 사용해 데이터 도착 여부를 직접 확인한다.
3 프로세스 간 통신의 종류
전역 변수를 이용한 통신
공동으로 관리하는 메모리를 사용하여 데이터를 주고받는 것이다. 이 통신 방식은 주로 직접적으로 관련이 있는 프로세스 간에 사용한다. 예를 들면 부모-자식 프로세스 간의 통신이 있다. 이 방식은 busy waiting를 통해 계속 전역 변수의 값을 확인해야하므로 비효율적이다.
파일을 이용한 통신
파일을 읽고 쓰는 방식으로 크게 세 부분으로 나뉜다. 1) 파일 열기, 2) 쓰기 또는 읽기 3) 파일 닫기
1) 파일 열기 : open()을 통해 사용하려는 파일이 있는지, 권한을 어떻게 줄 것인지를 정한다. 이 함수는 fd를 반환하는데 fd는 file descriptor로 해당 파일에 접근할 수 있는 권한을 의미한다. 이후에는 fd를 통해서만 파일에 접근할 수 있다.
2) 읽기 또는 쓰기 : fd를 이용해 write(fd, "string", size), read(fd, str, size) 함수를 사용한다.
3) 파일 닫기 : close(fd)를 통해 파일을 닫는다.
파일 입출력 코드를 프로세스 입장에서 살펴보면, 프로세스가 입출력 관리 프로세스에 읽기/쓰기를 요구하면 데이터가 하드디스크에 출력/저장된다. 따라서 파일 입출력 또한 프로세스와 입출력 프로세스 간의 통신이라고 할 수 있다.
파이프를 이용한 통신
파이프는 운영체제가 제공하는 동기화 통신 방식으로 open() 함수로 기술자를 얻고 작업을 한 후 close() 함수로 마무리한다. 전역 변수 통신과 마찬가지로 단방향 통신이고 따라서 파이프를 2개를 사용해야 한다.
파이프는 anonymouse pipe와 named pipe로 나뉜다.
anonymouse pipe : 일반적인 파이프, 부모와 자식, 혹은 형제 프로세스같이 서로 관련 있는 프로세스 간 통신에 사용
named pipe : FIFO라 불리는 특수 파일을 이용해 서로 관련 없는 프로세스 간 통신에 사용한다.
소켓을 이용한 통신
여러 컴퓨터에 있는 프로세스 간 통신을 네트워킹이라 한다. 네트워킹에서의 통신은 원격 프로시져 콜이나 소켓을 이용한다. 원격 프로시져 콜은 다른 컴퓨터에 있는 함수를 호출하는 것이다. 일반적으로 원격 프로시져 콜은 소켓을 이용해 구현한다. 소켓을 매개로 한 쪽의 프로세스와 다른쪽의 프로세스를 연결하는 작업을 바인딩이라고 한다.
소켓은 한개만 사용해도 양방향 통신이 가능하다.
'프로그래밍 이론 & 책 > 운영체제' 카테고리의 다른 글
[운영체제] 5.3 임계구역 해결 방법 (0) | 2020.05.26 |
---|---|
[운영체제] 5.2 공유 자원과 임계구역 (0) | 2020.05.26 |
[운영체제] 4.4 스케줄링 알고리즘 (0) | 2020.05.25 |
[운영체제] 4.3 다중 큐 (0) | 2020.05.25 |
[운영체제] 4.2 스케줄링 시 고려사항 (0) | 2020.05.25 |