프로세스 동기화

동기화란

동시다발적으로 실행되는 프로세스들은 서로 협력하며 작업을 수행한다.

이 과정에서 자원의 일관성을 보장해야 한다.

동기화의 의미

동기화는 프로세스들이 서로 협력하여 작업을 수행하는 것을 의미한다.

동기화에는 실행 순서 제어를 위한 동기화와 상호 배제를 위한 동기화가 있다.

  • 실행 순서 제어를 위한 동기화: reader writer 문제

Writer: 파일에 값을 저장하는 프로세스 Reader: 파일에서 값을 읽어오는 프로세스

둘은 실행의 순서가 있다. Reader 프로세스는 Writer 프로세스가 파일에 값을 저장할 때까지 기다려야 한다.

  • 상호 배제를 위한 동기화: Bank Account 문제, Producer Consumer 문제

공유가 불가능한 자원의 동시 사용을 막는 것이다.

공유 자원과 임계 구역

공유 자원: 여러 프로세스 혹은 스레드가 공유하고 있는 자원

전역 변수, 파일, 입출력장치, 메모리 등이 있다.

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

진입한 프로세스가 임계 구역을 빠져나가기 전까지 다른 프로세스는 임계 구역에 진입할 수 없다.

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

상호 배제를 위한 동기화를 위한 세 가지 원칙

  • 상호 배제: 임계 구역에 진입한 프로세스는 다른 프로세스가 진입할 수 없다.

  • 진행: 임계 구역에 어떤 프로세스도 진입하지 않았다면, 임계 구역에 진입하고자 하는 프로세스는 진입할 수 있어야 한다.

  • 유한 대기: 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가는 임계 구역에 진입할 수 있어야 한다.

12.2 동기화 기법

뮤텍스 락, 세마포, 모니터를 학습한다.

뮤텍스 락

상호 배제를 위한 동기화 기법이다.

뮤텍스 락은 전역 변수 하나와 함수 두 개로 구성된다.

  • lock: 프로세스들이 공유하는 전역 변수

  • acquire: 임계 구역을 잠그는 역할

  • release: 임계 구역의 잠금을 해제하는 역할

뮤텍스 락은 임계 구역에 진입하기 전에 acquire 함수를 호출하여 잠금을 걸고, 임계 구역을 빠져나올 때 release 함수를 호출하여 잠금을 해제한다.

세마포

세마포는 뮤텍스 락과 비슷하지만, 조금 더 일반화 된 방식의 동기화 도구이다.

공유 자원이 여러 개인 경우에도 사용할 수 있다.

세마포는 전역 변수 하나와 함수 두 개로 구성된다.

  • semaphore: 임계 구역에 진입할 수 있는 프로세스의 개수를 나타내는 전역 변수

  • wait: 임계구역에 들어가도 좋은지 기다려야 할지를 알려주는 역할

  • signal: 임계구역에 들어가도 좋다는 신호를 보내는 역할

wait 함수는 사용할 수 있는 자원이 없을 경우 해당 프로세스를 대기 상태로 만들고, 해당 프로세스의 PCB를 세마로를 위한 대기 큐에 넣는다.

세마포는 실행 순서 동기화에도 사용이 가능하다.

세마포 변수 S를 0으로 두고, 먼저 실행할 프로세스 뒤에 signal 함수를 호출하고, 나중에 실행할 프로세스 뒤에 wait 함수를 호출한다.

모니터

자바가 이용하는 동기화 기법이다.

모니터는 공유 자원과 공유 자원에 접근하기 위한 인터페이스를 묶어서 관리한다. 공유 자원에 접근하기 위해서는 반드시 인터페이스를 통해 접근해야 한다.

상호 배제를 위한 동기화는 인터페이스를 위한 큐를 이용한다.

실행 순서 제어를 위한 동기화는 조건 변수를 이용한다. 조건 변수에 대한 큐를 이용한다.

Last updated