배타적제어(2) - DBMS, OS
1. DBMS
- 특정 프로세스가 공유 데이터를 변경하고 있는 도중에 다른 프로세스가 해당 공유 데이터를 읽거나 공유 데이터를 동시에 변경하지 못하도록 배타적 제어를 한다
1) 래치(latch)(스핀락- spin-lock)
- 짧은 시간동안 락을 하는 방식
- CPU에서 의미없는 처리를 하면서 대기하는 방식
- 극히 단시간 락에서 사용
2) 슬립락(sleep-lock)
- 비교적 장시간 락을 유지
- 큐를 이용
3) 어댑티브락(adaptive-lock)
- 단순히 계속반복만하는 것이 아니라 스핀해서 락을 확보못하면 슬립으로 전환
- 상황에 따라 스핀할지 슬립할지 판단
2. OS
- 여러 프로세스나 스레드에서 빅 커널락을 이용해서 경합하면 CPU 코어가 여러개라도 병렬처리가 안되고 선행 처리가 끝날 때까지 기다려야한다
1) 빅 커널락(Big Kernel Lock)
- 리눅스 커널에서 사용
- 하나의 스핀락으로 유지된다
- 처리가 직렬화돼서 동시에 하나의 CPU만 커널 코드를 실행
- 이 부분은 병목지점이 되기 쉽다
'IT_Infra > Architecture' 카테고리의 다른 글
[IT_Infra] 상태 저장(stateful)/ 상태 비저장(stateless) (1) | 2016.11.03 |
---|---|
[IT_Infra] 배타적제어(3) - 멀티프로세서 시스템 (0) | 2016.10.25 |
[IT_Infra] 배타적제어(1) - 정의 (0) | 2016.10.25 |
[IT_Infra] 큐(queue) (1) | 2016.10.18 |
[IT_Infra] C10K 문제 (0) | 2016.10.12 |