동시다발적으로 실행되는 프로세스들은 서로 협력하며 영향을 주고받는데 이 과정에서 자원의 일관성을 보장하기 위해서 동기화(synchronization)되어야 한다.  즉, 올바른 실행을 위해서는 동기화가 필수이다. 

 

프로세스 동기화는 프로세스들의 수행 시기를 맞추는 것이라고 할 수 있다. 프로세스 동기화는 크게 두 개로 나눌 수 있다.

  • 실행 순서 제어: 프로세스를 올바른 순서대로 실행하기
  • 상호 배제: 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기

1. 실행 순서 제어를 위한 동기화 : Reader/Writer problem

Writer : txt 파일에 값을 저장하는 프로세스

Reader: txt 파일에 저장된 값을 읽어들이는 프로세스

 

*Reader 프로세스는 "txt 파일 안에 값이 존재한다"는 특정 조건이 만족되어야 실행이 가능하다. 

이런 식으로 동시에 실행되는 프로세스를 올바른 순서대로 실행하는 것이 첫 번째 프로세스 동기화이다.


2. 상호 배제를 위한 동기화 

상호 배제(mutual exclusion)는 공유가 불가능한 자원의 동시 사용을 피하기 위한 동기화

즉, 한 번에 하나의 프로세스만 접근해야 하는 자원에 동시 접근을 피하기 위한 동기화라고 할 수 있다. 

 

공유 자원과 임계 구역

공유 자원(shared resource) : 여러 프로세스 혹은 스레드가 공유하는 자원

-전역 변수 , 파일, 입출력 장치, 보조기억장치 etc.. 

 

임계 구역: 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역

임계 구역에 동시에 접근하면 자원의 일관성이 깨질 수 있는데 이를 레이스 컨디션이라고 한다. 

 

운영체제가 임계구역 문제를 해결하는 세 가지 원칙(상호 배제를 위한 동기화를 위한)

1. 상호 배제 (mutual exclusion) : 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 들어올 수 없다.

2. 진행 (progress): 임계 구역에 어떤 프로세스도 진입하지 않았다면 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.

3. 유한 대기 (bounded waiting):한 프로세스가 임계 구역에 진입하고 싶다면 언젠가는 임계 구역에 들어올 수 있어야 한다.

 


동기화 기법

1.뮤텍스 락

상호 배제를 위한 동기화 도구 

뮤텍스 락은 전역 변수 하나와 두 개의 함수로 구현할 수 있다.

프로세스들이 공유하는 전역 변수, 임계 구역을 잠그는 역할/ 임계 구역 잠금을 해제하는 역할의 함수가 필요하다.

 

2. 세마포 

세마포(semaphore)는 뮤텍스 락과 비슷하지만, 좀 더 일바화 된 방식의 동기화 도구이다. 

뮤텍스 락이 하나의 공유 자원에 접근하는 프로세스를 상정한 방식이라면 세마포는 공유 자원이 여러 개 있는 상황에서도 적용이 가능한 도구이다.

 

3. 모니터

모니터는 세마포에 비해 사용자가 사용하기 편리한 동기화 도구로 조건 변수를 사용한다.

'CS. > OPERATING SYSTEM' 카테고리의 다른 글

가상 메모리  (0) 2023.04.24
교착 상태  (0) 2023.04.24
CPU 스케줄링 알고리즘  (0) 2023.04.11
CPU 스케줄링  (0) 2023.04.11
스레드 (Thread)  (0) 2023.04.07

+ Recent posts