프로세스 내부 통신: 스레드끼리. 전역 변수, 파일
프로세스 간 통신: 프로세스끼리. 공용 파일, 파이프
네트워크를 이용한 통신: 네트워크로 컴퓨터끼리. 소켓
통신 방향에 따른 분류
기본적으로 일방통행
양방향, 반양방향, 단방향
전역변수 = 단방향 통신
데이터가 덮어써져서 어느 데이터가 어디로 가야하는지 알 수 없음
공유 자원
여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등
누가 언제 데이터를 읽거나 쓰느냐에 따라 그 결과가 달라질 수 있음
경쟁 조건
2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황
경쟁 조건 발생 -> 공유 자원 접근 순서에 따라 실행 결과가 달라질 수 있음
공유자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역
동시에 접근 불가
임계구역은 짧고 공평하게!
전역 변수로 잠금 구현(lock): 잠궜다고 생각했는데 안잠기는 경우 있어서 전역으로 구현 어려움
상호배제 조건을 충족(lock1, lock2): 서로가 서로를 잠궈 무한 루프에 빠짐
상호배제 + 한정 대기 조건 충족:
임계구역 문제의 하드웨어적인 해결방법
검사와 지정 코드: while(lock==true);
와 lock=true;
를 한번에 실행
명령어 실행 중간에 타임아웃이 걸려 임계구역을 보호하지 못하는 문제 X
임계구역이 사용중임을 알림
Semaphore(n): 전역변수 RS를 n으로 초기화, RS에는 현재 사용 가능한 자원 수 저장
P(): 잠금 수행 코드. RS>0 이면 1 감소 후 임계구역 진입, RS<0이면 0보다 커질 때까지 대기
V(): 잠금 해제 + 동기화. RS를 1 증가. 세마포어에서 기다리는 프로세스에게 임계구역에 진입해도 좋다는 wake_up 신호 보냄
세마포어를 사용하지 않고 바로 임계구역에 들어간 경우, 입계구역 보호X
공유자원 여러 개일 때
공유 자원에 접근하기 위한 인터페이스만 제공 -> 자원 보호, 프로세스 간에 동기화
(은행; 대기표 보고 창구 가기)
프로세스가 직접 P(), V()를 사용하지 않고 모니터에 작업 요청
모니터 큐에 작업 저장후 순서대로 처리, 결과만 프로세스에 알려줌
파일
1. 순차 파일: 파일 내의 데이터는 개념적으로 한 줄
2. 파일 기술자: open -> 포인터 (커서)
3. 파일을 이용한 통신: read() write()
파이프
1. 파이프를 이용한 통신: 파이프; fd[2](2개 원소를 가진 배열. 읽기용, 쓰기용)
네트워킹
1. 소켓을 이용한 네트워킹: 클라이언트/서버의 통신절차