일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 리눅스자동로그인
- 리눅스도움말명령어
- IT인프라구조
- IT인프라기초
- 운영체제
- linuxmaster
- 센토스
- 리눅스사용자파일
- centos자동로그인
- 리눅스vi
- 리눅스사용자관리
- DB서버
- 서버
- root막기
- it인프라
- OS
- 인프라구조
- 센트
- linux
- 병렬처리
- 인프라
- it
- 리눅스재부팅
- 웹서버
- 물리서버
- 리눅스명령어
- 리눅스마스터
- 리눅스
- 리눅스사용자생성
- CentOS
- Today
- Total
Thinking Out Loud
[IT Infra 기초] 배타적 제어 본문
# 배타적 제어
- 여러 사람이 한 물건을 공유하는 상황에서 발생
- 다른 것을 배제하는 제어 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 인프라 구조」, 제이펍
'IT Infra' 카테고리의 다른 글
[IT Infra 기초] 고정 길이 / 가변 길이 (0) | 2021.10.22 |
---|---|
[IT Infra 기초] 상태 저장/상태 비저장 (Stateful/Stateless) (0) | 2021.10.22 |
[IT Infra 기초] 큐(Queue) (0) | 2021.10.19 |
[IT Infra 기초] 동기/비동기 (0) | 2021.10.19 |
[IT Infra 기초] 직렬/병렬 (0) | 2021.10.18 |