쉽게 배우는 OS Chapter05 프로세스 동기화_IPC
5.0 프로세스 동기화
5.1 프로세스간 통신(IPC)
5.1.1 프로세스간 통신의 개념
프로세스는 시스템 내부에서 서로 데이터를 주고 받으며 협업하기도 한다. 이때 같은 컴퓨터의 프로세스들뿐만 아니라 네트워크로 연결된 다른 컴퓨터의 특정 프로세스와도 통신 가능하다.
- 프로세스 내부(스레드간)의 통신 : 스레드끼리 전역변수/파일을 이용
- 프로세스간 통신 : 공용파일/파이프 이용
- 네트워크를 이용한 통신 : 소켓을 이용. 이를 네트워킹이라고 한다. 원격 프로시저 호출도 여기에 속함.
5.1.2 프로세스간 통신의 종류
5.1.2.1 통신방향에 따른 종류
- 양방향 통신 : 데이터를 양쪽으로 전송하는 일반적인 통신구조. 소켓통신.
- 반양방향 통신 : 양방향 통신이 되지만 동시에는 되지 않는 통신 구조. 무전기같은거.
- 단방향 통신 : 받는쪽에선 받기만하고 보내는쪽에선 보내기만 하는 통신구조. 전역변수, 파이프.(양방향 하러면 두개를 만듦)
5.1.2.2 통신구현 방식에 따른 종류
- 바쁜 대기 : 반복문을 통해 수신 측에서 지속적으로 상태변화를 확인하는 것(BAD).
- 동기화 : 운영체제가 데이터가 전달/작업처리가 완료됨을 알려줌 -> 프로세스, 스레드가 동작하는 시점을 맞춰줌
동기와 여부에 따른 분류
- 대기가 있는 통신(동기화 통신) : 데이터 도착까지 대기상태에 머물러있음. 파이프, 소켓통신
- 대기가 없는 통신(비동기화 통신) : 바쁜대기를 통해 데이터 도착 여부를 직접 확인. 번역변수, 공용파일. -> 별로 안좋음.
5.1.3 프로세스간 통신의 종류
5.1.3.3 파이프를 이용한 통신.
단방향통신이며, 부모 자식 프로세스간의 통신방식이며 pipe후 fork하는 방식으로 사용한다. 특수한 공통 파일에 한쪽에서는 쓰고 한쪽에서는 읽는 방식으로 통신한다.
단순 파일을 이용하는 것과 차이점은 아래와 같다.
- 공통파일을 이용한 통신시 open 후 fork하면 fd까지 복사(상속)되어, 읽는쪽에서 커서를 처음으로 되돌려(lseek)주어야한다.
- 공동파일을 이용한 통신시 동기화 신호를 보낼 방법이 따로 없어서 wait해야 한다.
- pipe의 경우 fork하여도 read/write기술자가 부모자식별로 따로 존재하여 커서를 옮길 필요가 없다.
- 기술자를 공유하지 않으므로, EOF을 통해 wait없이 송신이 끝났음을 알 수 있다.->?
pipe를 사용할때 주의할점은 다음과 같다.
- pipe하면 read/write 둘 다 초기화 되지만, 두 기술자(descripter) 모두 공동의 파일을 기술한다. 따라서 양쪽 모두 write(pipe[1])하면 데이터가 혼재된다. -> 검증필요.
- 쓰는쪽 파이프를 닫아줘야 수신쪽에서 EOF이 읽힌다.
파이프 공부할때 정리했던 노션 등등 내용등
5.1.3.4 소켓를 이용한 통신.
참고 : 블로그 나중에 소켓 통신 공부할때 더 자세하게 정리하기.
클라이언트 측
- 소켓 생성
- connect()를 이용하여 서버와 접속 시도
- 서버와 접속 후 read/write를 이용하여 통신
- 통신 종료 후 소켓을 닫고 종료
서버 측
- 소켓(들을) 생성
- bine()를 통해 소켓(여러개)을 특정 포트에 등록
- listen()을 통해 클라이언트의 connect()를 대기
- accept()로 클라이언트와 통신 시작하고, 클라이언트측 소켓의 기술자가 생성->???
- 통신이 끝나면 소켓을 닫고 다시 listen()으로 connect()대기.
여러 컴퓨터간 통신하는것을 네트워킹이라고 한다. 네트워킹은 원격프로세저 호출이나 소켓을 이용한다.