관리 메뉴

나만을 위한 블로그

[혼공컴운] 12. 프로세스 동기화 본문

책/혼자 공부하는 컴퓨터 구조 + 운영체제

[혼공컴운] 12. 프로세스 동기화

참깨빵위에참깨빵 2023. 12. 29. 21:07
728x90
반응형
동기화의 의미

 

동기화 : 특정 자원에 접근할 때 1개의 프로세스만 접근하게 하거나 프로세스를 올바른 순서대로 실행하게 하는 것

프로세스 동기화 : 프로세스 사이의 수행 시기를 맞추는 것. 크게 2가지를 말함

 

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

 

상호 배제는 공유 불가능한 자원의 동시 사용을 피하기 위해 사용되는 알고리즘을 말하기도 한다

 

생산자와 소비자 문제

 

상호 배제를 위한 동기화와 관련된 고전적이고 유명한 문제

물건을 계속 생산하는 프로세스인 생산자, 소비하는 프로세스인 소비자가 있고, 둘이 "총합"이란 데이터를 공유할 때 생산자는 버퍼에 물건을 넣고 총합에 해당하는 변수를 1 증가시키고, 소비자는 버퍼에서 물건을 빼고 총합 변수를 1 감소시킨다.

이 때 생산자와 소비자를 각각 10만 번 실행하면 내가 예상한 결과를 얻지 못할 수도 있다. 동시 접근해선 안 되는 자원에 동시에 접근하는 경우가 발생했기 때문이다

 

공유 자원과 임계 구역

 

공유 자원 : 전역 변수, 파일, 입출력장치, 보조기억장치 등이 될 수 있음

임계 구역 : 동시 실행하면 문제가 발생하는 자원에 접근하는 코드 영역. 둘 이상의 프로세스가 동시 실행되면 안 되는 영역이지만 잘못 실행되서 여러 프로세스가 동시다발적으로 임계 구역의 코드를 실행해서 문제가 발생할 수 있음(=레이스 컨디션)

 

상호 배제를 위한 동기화를 위해 3가지 원칙이 지켜져야 함

 

  • 상호 배제 : 한 프로세스가 임계 구역에 진입하면 다른 프로세스는 임계 구역에 들어오면 안됨
  • 진행 : 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하려는 프로세스가 들어갈 수 있어야 함
  • 유한 대기 : 한 프로세스가 임계 구역에 진입하고 싶다면, 그 프로세스는 언젠가 임계 구역에 들어올 수 있어야 함. 임계 구역에 들어오기 위해 무한정 대기해선 안 됨

 

동기화 기법

 

뮤텍스 락

 

동시 접근해선 안 되는 자원에 동시 접근하지 않게 만드는 도구. 상호 배제를 위한 동기화 도구

단순하게 전역 변수 1개, 함수 2개로 구현 가능

 

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

 

acquire() : 프로세스가 임계 구역 진입 전에 호출하는 함수. 임계 구역이 잠겨 있다면 열릴 때까지 반복 확인하고, 열려 있다면 잠가서 lock을 true로 바꿈

release() : 임계 구역에서의 작업이 끝나고 호출하는 함수. 현재 잠긴 임계 구역을 열어서 lock을 false로 바꾸는 함수

 

세마포어

 

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

뮤텍스 락은 하나의 공유 자원에 접근하는 프로세스를 상정한 방식이고 세마포어는 공유 자원이 여럿 존재하는 상황에서도 적용 가능한 동기화 도구

뮤텍스 락과 같이 전역 변수 1개, 함수 2개로 구현 가능

 

  • 전역 변수 S : 임계 구역에 진입 가능한 프로세스 개수
  • wait() : 임계 구역에 들어갈 수 있는지 여부를 알려주는 함수
  • signal() : 임계 구역 앞에서 기다리는 프로세스한테 가도 된다고 신호를 주는 함수

 

모니터

 

세마포어보다 사용자가 쓰기 편리한 도구. 공유 자원을 다루는 인터페이스에 접근하기 위한 큐(모니터 진입을 위한 큐)를 만들고 모니터 안에 항상 하나의 프로세스만 들어오게 해서 상호 배제를 위한 동기화를 제공

 

반응형
Comments