Thinking Out Loud

[IT Infra 기초] 배타적 제어 본문

IT Infra

[IT Infra 기초] 배타적 제어

주롱주롱 2021. 10. 22. 14:55

# 배타적 제어

- 여러 사람이 한 물건을 공유하는 상황에서 발생

- 다른 것을 배제하는 제어 for 성능

- 여러 사람이 공유하는 물건일 경우, 누군가 그 물건을 사용하고 있으면 다른 사람은 사용 불가 (동시 사용 시 고장)

- ex) 회의실 사용중/공실 표기 → 다른 사람의 이용에 영향

 

# 배타적 제어가 필요한 경우 = 병렬 처리

- 병렬 처리에서 배타적 제어가 필요한 이유

   - 병렬 처리 → 공유 데이터 이용

   - 부분적으로 직렬 처리를 사용해야만 되는 경우 문제 발생 多

 

# 배타적 제어의 특징

- 복수의 처리가 공유 자원(CPU, 메모리, 디스크 등)에 동시에 액세스(주로 갱신) → 불일치 발생 가능성 보호

- 특정 처리가 공유 자원을 이용하고 있는 동안 다른 처리가 이용할 수 없게 함

-  ex) 3차선 도로 → 1차선 도로 : 병목 현상 발생 가능 ⇒ 배타적 제어 (한 대의 차가 통과중일 시 다른 차가 못들어오게 제어)

 

# 배타적 제어의 장단점

  배타적 제어 사용 O  배타적 제어 사용 X
장점 공유 데이터의 일관성 유지 가능 병렬빠른 처리 가능
단점 병렬 처리 불가 데이터 불일치가 발생할 가능성 有
(공유 데이터 동시 변경 등)

 

# 배타적 제어 사용되는 곳

1. DBMS

- 특정 프로세스가 공유 데이터를 변경중

   → 다른 프로세스가 해당 공유 데이터를 읽거나 공유 데이터를 동시에 변경하지 못하도록 배타적 제어

 

# DBMS 배타적 제어 종류

1) 래치(Latch) = 스핀락(Spin-lock)

    * 스핀(Spin) : 락을 획득할 때까지 해당 스레드가 빙빙 돌고있는 것 (Spinning)

    - 매우 짧은 시간 동안만 락(Lock) 유지

    - 대기중인 프로세스나 스레드가 CPU에서 의미없는 처리를 반복(루프)하며 대기, 락이 개방되길 기다리는 방식

    - 단시간의 락에서 사용

2) 슬립락 (Sleep-lock)

    - 비교적 장시간 락을 유지하도록 큐를 이용해서 관리

    - 슬립해서 기다리면 컨텍스트 스위치 발생

3) 어댑티브 락 (Adaptive-lock)

    - 상황에 따라 스핀/슬립할지 판단

    - ex) CPU에서 단순히 의미없는 처리를 계속 반복만 하는 것이 아니라 스핀해서 락을 확보하지 못하면 슬립

 

2. OS

# 빅 커널락(BKL)

    - 리눅스 커널은 하나의 스핀락으로 유지됨 (경합 처리) → BKL이 이용되는 부분은 처리가 직렬화됨

    ⇒ 동시에 하나의 CPU만 커널 코드 실행 가능 (← 병목지점)

    - 컴퓨터가 여러 CPU를 유용하게 활용해서 병렬 처리를 늘리기 위해 리눅스 커널에서는 BKL로 보호된 커널 코드를 수정함

 

3. 클러스터 DB

- Active-Active 클러스터 DB에서도 배타적 제어 가능

- 여러 대의 DB 서버를 조합해서 하나의 DB로 사용

- 각 서버에서 병럴 처리 → 처리 속도↑

- 서버간 배타적 제어 → 대기 처리↑ → 서버 많아도 병렬 처리 불가

⇒ 중요한 것

    1) 서버 간 데이터 교환을 줄이는 것

    2) 배타적 제어에 대한 대기상태를 줄이는 것

 

※ 멀티프로세서 시스템의 배타적 제어

- 여러 개의 CPU 코어를 탑재한 컴퓨터는 동시에 복수의 프로세스나 스레드로 실행할 수 있어 배타적 제어가 어려움

하드웨어를 이용한 배타적 제어

    - 멀티 코어 환경에서 사용

    1) CPU

        - 'test and set', 'Compare And Swap(CAS)' 라는 기능(명령) 존재

        - 여러 개의 CPU에서 확실하게 배타적 제어를 하기 위한 구조

    2) 리눅스 커널

        - 커널 전체는 하나의 스핀락(BKL)으로 보호

        - BKL이 사용되고 있는 커널 코드 수정 → 락 단위 세분화 ⇒ 병렬 성능 향상

 


참고 : 야마자키 야스시 외 3, 「그림으로 공부하는 IT 인프라 구조」, 제이펍