-
728x90
1. 프로세스 간 통신
프로세스가 다른 프로세스와 데이터를 주고받는 것을 말한다. 프로세스가 데이터를 주고 받는 방식은 아래와 같이 3종류의 통신 방식이 있다.
- 프로세스 내부 데이터 통신 : 하나의 프로세스 내에 있는 2개 이상의 스레드 간 통신.
전역 변수
나파일
을 이용한다. - 프로세스 간 데이터 통신 : 같은 컴퓨터에 있는 여러 프로세스 간의 통신.
공용 파일
또는 운영체제가 제공하는파이프
를 이용한다. - 네트워크를 이용한 데이터 통신 : 다른 컴퓨터와 네트워크를 이용해서 이루어지는 통신.
소켓
을 통해 데이터를 주고 받으며 이런 방식을네트워킹
이라고 한다.
2. 프로세스 간 통신의 분류
2-1. 통신 방향에 따른 분류
통신은 데이터가 전송되는 방향에 따라 양방향, 반양방향, 단방향으로 나눌 수 있다.
- 양방향 통신 : 데이터를 동시에 양쪽 방향으로 전송할 수 있는 구조. 일반적인 통신은 모두 양방향 통신이며, 프로세스 간 통신에서는
소켓 통신
이 이에 해당한다. - 반양방향 통신 : 데이터를 양쪽 방향으로 전송할 수 있지만 동시에 하지는 못하는 구조. 대표적으로 무전기가 있다.
- 단방향 통신 : 모스 신호처럼 한쪽 방향으로만 데이터를 전송할 수 있는 구조. 프로세스 간 통신에서는
전역 변수
와파이프
가 이에 해당한다.
2-2. 통신 구현 방식에 따른 분류
데이터가 변화했는지 알 수 있는 방법은 2가지가 있다. 직접 알아보거나 데이터가 바뀔 때 누군가 알려주거나. 누군가 알려주는 것을
동기화
라고 하며 동기화를 지원하는지에 따라 2종류로 통신 방식을 나눌 수 있다.- 대기가 있는 통신 : 동기화를 지원한다. 데이터를 받는 쪽은 데이터가 도착할 때까지 자동으로 대기 상태에 머물러 있는다.
파이프
와소켓
이 이에 속한다. - 대기가 없는 통신 : 동기화를 지원하지 않는다. 데이터를 받는 쪽은 데이터가 도착했는지 수시로 확인하는
바쁜 대기
를 사용한다.전역 변수
와파일
이 이에 속한다.
3. 프로세스 간 통신의 종류
3-1. 전역 변수를 이용한 통신
공동으로 관리하는 메모리를 사용하여 통신한다. 주로 직접적으로 관련이 있는 프로세스 간에 사용한다. 부모 프로세스가 전역 변수를 선언하면 자식 프로세스에서 사용할 수 있는 것처럼.
이 방식은 단방향 통신이기 때문에 양방향 통신을 하려면 전역 변수를 2개 만들어야 한다. 그렇다고 해도
동기화 문제
가 발생한다. 전역 변수의 변화를 자동으로 감지하지 않기 때문에 데이터를 사용하는 쪽에서바쁜 대기
를 돌면서 전역 변수를 계속 주시해야 한다.3-2. 파일을 이용한 통신
통신 방식을 살펴보기 전에 먼저 파일 입출력 코드가 어떻게 이루어지는지 살펴보자. 파일 입출력 코드는 크게 3가지 부분으로 구성되어 있다. 파일을 열고(open), 읽거나 쓰고(read or write), 닫는다(close).
#include <stdio.h> #include <unistd.h> #include <fcntl.h> int main() { int fd; char buf[5]; fd = open("com.txt", O_RDWR); // O_RDWR : 읽기와 쓰기, O_RDONLY : 읽기만 write(fd, "Test", 5); read(fd, buf, 5); close(fd); exit(0); }
파일 열기
첫 부분인 open은 일종의 준비 단계이다. 사용하고자 하는 파일이 있는지, 파일에 대한 권한이 있는지 확인하고 사용할 수 있다면
fd(file descriptor)
를 반환한다. fd를 통해서만 파일에 접근이 가능하며 작업이 다 끝나면 돌려줘야 한다.읽기 또는 쓰기 연산
write(fd, "Test", 5)
: com.txt 파일에 Test라는 문자열을 쓰라는 뜻이다. 5는 문자열의 크기를 나타낸다.read(fd, buf, 5)
: com.txt 파일에서 5B를 읽어 변수 buf에 저장하라는 뜻이다.
파일 닫기
fd가 가리키는 파일을 닫는다.
프로세스 간 통신 with 파일 입출력
파일 입출력을 프로세스의 관점에서 본다면
파일 입출력을 요청하는 프로세스
와입출력 프로세스
간의 통신이라고 볼 수 있다. 파일 입출력 해줘라는 명령을 전달하는 통신이기 때문이다.파일을 이용한 통신은 주로
부모-자식 관계 프로세스
에서 많이 사용된다. 이 방식도동기화 문제
가 발생하는데 부모 프로세스가wait
함수를 이용하여 자식 프로세스가 끝날 때까지 기다리는 식으로 해결한다.3-3. 파이프를 이용한 통신
파이프는 운영체제가 제공하는
동기화 통신 방식
이다. 파일 방식과 마찬가지로 open 함수로 fd를 얻고 close로 마무리한다. 전역 변수 방식처럼단방향 통신
이기 때문에 양방향 통신을 하기 위해선 파이프 2개를 사용해야 한다.하나의 파이프에 대해 A라는 프로세스가 쓰기를 진행하고 있다. B라는 프로세스는 이 파이프에서 읽기 연산을 수행하고 싶다. 하지만 쓰기 작업이 아직 끝나지 않았기 때문에 B는
대기 상태
가 되고 A의 작업이 끝나면 자동으로 대기 상태가 풀려동기화
가 이루어진다. 바쁜 대기를 할 필요가 없는 것이다.파이프는 이름 없는 파이프(anonymous pipe)와 이름 있는 파이프(named pipe)로 나뉜다.
- 이름 없는 파이프 : 일반적인 파이프다. 서로 관련 있는 프로세스 간 통신에 사용된다.
- 이름 있는 파이프 :
FIFO
라 불리는 특수 파일을 이용하여 서로 관련 없는 프로세스 간 통신에 사용된다.
소켓을 이용한 통신
지금까지 살펴본 통신 방식은 모두 한 컴퓨터 내의 프로세스 간 통신 방식이었다. 소켓을 이용한 통신은 여러 컴퓨터에 있는 프로세스 간의 통신(네트워킹)에 사용된다.
네트워킹 상황에서의 통신은
원격 프로시저 호출
이나소켓
을 이용한다. 프로시저 호출이 한 컴퓨터에 있는 함수를 호출하는 것이라면 원격 프로시저 호출은 다른 컴퓨터에 있는 함수를 호출하는 것이다. 일반적으로 원격 프로시저 호출은 소켓을 이용하여 구현한다.소켓 통신은 양방향 통신이며 동기화를 지원한다.
728x90'운영체제' 카테고리의 다른 글
17. 임계구역 해결 방법 (0) 2021.09.22 16. 공유 자원과 임계구역 (0) 2021.09.22 14. 인터럽트 처리 (0) 2021.09.22 13. 스케줄링 알고리즘 (0) 2021.09.22 12. 다중 큐 (0) 2021.09.22 댓글
- 프로세스 내부 데이터 통신 : 하나의 프로세스 내에 있는 2개 이상의 스레드 간 통신.