프로세스가 다른 프로세스와 데이터를 주고받음
프로세스 내부 데이터 통신
하나의 프로세스 내에 2개 이상의 스레드가 존재하는 경우, 스레드가 전역 변수나 파일을 이용하여 데이터를 주고받는 통신이다.
프로세스 간 데이터 통신
같은 컴퓨터에 있는 여러 프로세스끼리 통신하는 경우로, 공용 파일이나 파이프를 사용하여 통신한다.
네트워크를 이용한 데이터 통신
여러 컴퓨터가 네트워크로 연결되어 있을 때 소켓을 이용하여 데이터를 주고받는다.
양방향 통신
데이터를 동시에 양쪽 방향으로 전송할 수 있는 구조
ex) 소켓 통신
반양방향 통신
데이터를 양쪽 방향으로 전송할 수 있지만 동시 전송은 불가능하고 특정 시점에 한쪽 방향으로만 전송할 수 있는 구조
ex) 무전기
단방향 통신
모스 신호처럼 한쪽 방향으로만 데이터를 전송할 수 있는 구조
ex) 전역 변수와 파이프
대기가 있는 통신
동기화를 지원하는 통신 방식으로, 데이터를 받는 쪽은 데이터가 도착할 때까지 자동적으로 대기 상태에 머물러 있다.
ex) 파이프, 소켓
대기가 없는 통신
동기화를 지원하지 않는 통신 방식으로, 데이터를 받는 쪽은 바쁜 대기를 사용하여 데이터 도착 여부를 직접 확인한다.
ex) 전역 변수, 파일
전역 변수를 이용한 통신
파일을 이용한 통신
파이프를 이용한 통신
소켓을 이용한 통신
공유 자원은 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말한다. 공동으로 이용되기 때문에 누가 언제 데이터를 읽거나 쓰느냐에 따라 그 결과가 달라질 수 있다.
2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓸 때 경쟁 조건이 발생할 수 있는데, 이 때 공유 자원 접근 순서에 따라 실행 결과가 달라질 수 있다.
공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램 영역으로 임계구역에서는 프로세스들이 동시에 작업하면 안된다.
어떤 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역 밖에서 기다려야 하며 임계구역의 프로세스가 나와야 들어갈 수 있다.
생산자 프로세스와 소비자 프로세스가 서로 독립적으로 작업을 하는데 전역 변수에 접근하는 타이밍을 서로 맞추지 않을 경우 문제가 발생한다.
상호 배제
한 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역에 들어갈 수 없다.
한정 대기
어떤 프로세스도 무한 대기하지 않고 임계구역에 진입해야 한다.
진행의 융통성
한 프로세스가 다른 프로세스의 진행을 방해해서는 안된다.
임계구역 문제를 해결하는 단순한 방법은 잠금을 이용하여 잠금 해제 시 동기화 신호를 보내는 것이다.
상호 배제 문제
만약, 잠금을 걸기 전에 프로세스 p1이 타임아웃되어 프로세스 p2가 실행 상태로 바뀐다면 상호 배제 조건을 충족하지 못한다.
1. 프로세스 p1이 잠금을 걸기 전이기 때문에 프로세스 p2가 임계구역에 진입한다.
2. 프로세스 p1이 lock=true;문을 실행하여 임계구역에 잠금을 걸고 진입한다.
3. 프로세스 p2도 lock=true;문을 실행하여 임계구역에 잠금을 걸고 진입하면 동시에 임계구역에 진입하게 된다.