협력하는 프로세스 사이에서 실행 순서 규칙을 정하여 공유 자원의 일관성을 보장하는 것
컴퓨터 메모리 내에는 여러 프로세스들이 존재하며, 이러한 프로세스들이 하나의 공유 메모리나 또다른 프로세스에 접근할 때는 매우 신중할 필요가 있다.
컴퓨터 환경에는 서로 영향을 미치지 않는 독립적인 프로세스 (independent process) 보다 Cooperating process가 훨씬 많이 존재하며, 이들이 서로 영향을 미치기 때문에 동기화가 매우 중요하다.
동기화는 여러 프로세스 및 스레드가 공유하는 자원의 일관성
을 유지하는 것입니다.
프로세스 내부 데이터 통신
하나의 프로세스 내에 존재하는 스레드간의 통신
전역 변수나 파일을 이용하여 데이터를 주고 받음
프로세스 간 데이터 통신
같은 컴퓨터 내에 존재하는 여러 프로세스간의 통신
공용 파일 또는 운영체제가 제공하는 파이프를 사용하여 통신
네트워크를 이용한 데이터 통신
네트워크로 연결된 다른 컴퓨터에 있는 프로세스와의 통신
소켓을 이용하여 데이터를 주고 받음
어떤 통신 방식을 이용할까?
👉 오버헤드를 고려해야 한다
ex) 같은 컴퓨터에 있는 프로세스끼리도 소켓을 이용하여 통신이 가능하지만, 소켓을 사용하려면 많은 전처리를 해야하므로 느리다. 따라서 같은 컴퓨터 내의 프로세스 간 통신에는 소켓을 사용하지 않는다.
통신 방향에 따른 분류
양방향 통신 (duplex communication)
반양방향 통신 (half-duplex communication)
단방향 통신 (simplex communication)
통신 구현 방식에 따른 분류
대기가 있는 통신 (blocking communication)
동기화 통신(synchronous communication)과 동일
수신측은 데이터가 도착할 때까지 자동으로 대기 상태에 머무름
ex) 파이프, 소켓
대기가 없는 통신 (non-blocking communication)
비동기화 통신(asynchronous communication)과 동일
수신측은 바쁜 대기(busy waiting)을 사용하여 도착 여부를 직접 확인
ex) 전역 변수, 파일
전역 변수, 파일, 파이프, 소켓을 통한 통신에서 데이터를 주고받는 과정을 추후에 코드로 나타내어 포스팅하도록 하겠습니다
공유 자원 : 여러 프로세스가 공동으로 사용하는 변수, 메모리, 파일 등
공유 자원은 공동으로 이용되므로 접근 순서를 정해서 예상치 못한 문제가 발생하지 않도록 해야한다!
임계구역 (critical section) : 공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역
아무리 공유 자원이라도 프로세스 실행 상황에서는 다른 프로세스와 이를 공유할 수 없다!
생산자가 물건 하나를 buffer에 저장했고 아직 sum++
를 실행하기 전
이때, 소비자도 물건 하나를 사용하였고 아직 sum--
를 실행하기 전
이 상태에서 생산자와 소비자가 동시에 sum++
와 sum--
를 실행하게 되면, sum이 4개가 아니라, 3개 또는 5개가 되어버린다
상호 배제 (mutual exclusion)
한정 대기 (bounded waiting)
무한 대기(infinite postpone)하는 프로세스가 없어야 한다
즉, 특정 프로세스가 임계구역에 진입하지 못하면 안됨
진행의 융통성 (progress flexibility)
한 프로세스가 다른 프로세스의 진행을 방해하면 안된다
프로세스 A가 임계구역을 사용한 후 프로세스 B에 사용 권한을 넘겨주었지만, 프로세스 B가 임계구역을 사용할 필요가 없으면 A가 사용할 수 있어야 한다
아래의 임계구역 해결 방법들은 추가 포스팅하도록 하겠습니다
1. 피터슨 알고리즘
2. 데커 알고리즘
3. 세마포어
4. 뮤텍스
5. 모니터
쉽게 배우는 운영체제 - 한빛 아카데미
KOCW 운영체제 강의 - 양희재 교수 (경성대)