Post

Chapter.12 - 프로세스 동기화

모든 이미지의 저작권은 [혼자 공부하는 컴퓨터 구조 + 운영체제] 도서의 저자 강민철님에게 있습니다.

동기화

동기화가 의미하는 것은 크게 두 가지이다.

  1. 프로세스를 올바른 순서대로 실행하도록 하는 것 (실행 순서 제어)
  2. 하나의 자원에 여러 프로세스가 동시에 접근하지 못하도록 하는 것 (상호 배제)

상호 배제를 위한 동기화

12-1.png

공유 자원 : 동시에 접근해서는 안되는 자원. 전역 변수, 파일, 입출력장치 등 여러가지가 될 수 있다.

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

레이스 컨디션 : 여러 프로세스가 임계 구역의 코드를 실행하여 문제가 발생하는 경우. 동시성 이슈를 뜻한다.

동기화를 위한 대표적인 도구

* 뮤텍스 락

동시에 접근하면 안되는 자원에 여러 프로세스가 접근하지 못하도록 하는 상호 배제를 위한 동기화 도구

임계 구역에 프로세스가 있는지 주기적으로 확인하고 프로세스가 없다면 임계 구역에 진입하는 원리

쉽게 말해서 쉴 새 없이 반복하며 임계 구역의 프로세스를 확인하는 건데 이런 대기 방식을 바쁜 대기라고 한다.

  • 자물쇠 역할 : 프로세스 들이 공유하는 전역 변수 lock
  • 임계 구역의 잠금을 확인하고 잠그는 역할 : acquire 함수
  • 임계 구역의 잠금을 해제하는 역할 : release 함수

* 세마포

뮤텍스 락과 비슷하지만 조금 더 일반화 된 방식의 동기화 도구

뮤텍스 락은 하나의 공유 자원에 접근하는 경우를 가정하고 만든 동기화 도구지만 세마포는 여러 공유 자원에 접근하는 경우를 가정하고 만든 동기화 도구

  • 임계 구역에 진입할 수 있는 프로세스의 개수를 나타내는 전역 변수 : S
  • 임계 구역에 들어가도 좋은지, 기다려야 할지를 알려주는 함수 : wait
  • 임계 구역 앞에서 기다리는 프로세스에 진입 신호를 주는 함수 : signal

한 가지 문제점은 사용할 수 있는 공유 자원이 없는 경우 프로세스는 무한히 반복하여 S를 확인하는 것이다.

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

12-2.png

* 모니터

공유 자원과 공유 자원에 접근하기 위한 인터페이스를 묶어 관리하는 방식의 동기화 도구

This post is licensed under CC BY 4.0 by the author.