[혼공컴운] 5주차 - 프로세스 동기화 (chapter 12)

회색몽구스·2023년 2월 11일
0

chapter 12 프로세스 동기화

12-1 동기화란

동기화의 의미

프로세스 동기화란 프로세스들 사이의 수행 시기를 맞추는 것을 의미합니다.

실행 순서 제어: 프로세스를 올바른 순서대로 실행하기

상호 배제: 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기

  • 프로세스뿐만 아니라 스레드도 동기화 대상입니다.

Example) 계좌 잔액 문제

생산자와 소비자 문제

Example) 생산자와 소비자 문제

동시에 접근해서는 안 되는 자원에 동시에 접근했기에 발생한 문제의 예

공유 자원과 임계 구역

공유 자원은 전역 변수가 될 수도 있고, 파일, 입출력장치, 보조기억장치 등이 될 수 있습니다.

동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역을 임계 구역이라고 합니다.

여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제가 발생하는 경우를 레이스 컨디션 (race condition)이라고 합니다.

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

  1. 상호 배제
  2. 진행: 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.
  3. 유한 대기: 한 프로세스가 임계 구역에 진입하고 싶다면 언젠가는 임계 구역에 들어올 수 있어야 한다. (임계 구역에 들어오기 위해 무한정 대기해서는 안 된다.)

12-2 동기화 기법

뮤텍스 락

acquire 함수 - 프로세스가 임계 구역에 진입하기 전에 호출하는 함수,

만일 임계 구역이 잠겨 있다면 임계 구역이 열릴 때까지 임계 구역을 반복적으로 확인하고 (lock이 false가 될 때까지),

임계 구역이 열려 있다면 임계 구역을 잠그는 함수 (lock을 true로 바꾸는)

release 함수 - 임계 구역에서의 작업이 끝나고 호출하는 함수 (lock을 false로 바꾸는)

하지만, 잠겨 있는지 쉴 새 없이 반복하며 확인해 보는 것과 같아 바쁜 대기라고 합니다.

세마포 (semaphore)

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

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

다른 프로세스가 임계 구역에서의 작업이 끝나고 signal 함수를 호출하면 대기 중인 프로세스를 대기 큐에서 제거하고, 프로세스 상태를 준비 상태로 변경한 뒤 준비 큐로 옮겨 줍니다.

모니터

모니터를 통해 공유 자원에 접근하고자 하는 프로세스를 큐에 삽입하고, 큐에 삽입된 순서대로 하나씩 공유 자원을 이용하도록 합니다.

조건 변수로 wait와 signal 연산을 수행할 수 있습니다. 모니터에 진입하기 위해 삽입되는 큐와 wait가 호출되어 실행이 중단된 프로세스들이 삽입되는 큐는 다릅니다.

전자는 모니터에 한 번에 하나의 프로세스만 진입하도록 만들어진 큐,

후자는 모니터에 이미 진입한 프로세스의 실행 조건이 만족될 때까지 잠시 실행이 중단되어 기다리기 위해 만들어진 큐

  1. 특정 프로세스가 아직 실행될 조건이 되지 않았을 때에는 wait를 통해 실행을 중단한다.
  2. 특정 프로세스가 실행될 조건이 충족되었을 때에는 signal을 통해 실행을 재개한다.

profile
끄아아아아 할 수 있다

0개의 댓글