1 CPU에서는 _SPIN_COUNT 값이 1 인 이유

CPU 가 하나인 시스템에서는 SPIN 을 수행하지 않는다. 왜일까? OWI 서적에서는 "스핀을 수행하는 도중에 래치를 해지해줄 프로세스가 존재할 수 없기 때문이다." 라고 나와있었다. 이를 풀어서그림으로 해석해 보자.


이미지 범례



1 CPU 에서 spin 수행

시나리오
만약 CPU가 1 개인 시스템에서 아래와 같이 SPIN 을 수행한다고 가정해보자.

1. LV 1의 레치를 얻는다.

2-1. A process 는 래치를 보유한 체 CPU 자원을 C process 에게 넘긴다. (CPU를 할당받지 못해서 일을 진행 못함) 
2-2. C process 는 lv1 래치를 획득하기 위해 spin 을 수행한다.

3-1. A process 는 래치를 보유중이다(CPU를 할당받지 못해서 일을 진행 못함)
3-2. B process 가 lv1 래치를 획득하기 위해 CPU 를 점유하여 spin을 수행한다.
3-3. C process 는 spin 과정에서 래치를 획득하지 못해서  sleep 상태가 된다.

이하 생략


주) 일정한 크기로 프로세스의 CPU 자원 사용을 표시하였지만 동일한 시간동안 사용하는게 아니고 설명을 위해 나누었다.

문제점
1 CPU에서 SPIN을 수행하게 되면 spin 수행하는동안, 정작 기존의 래치를 잡고 작업을 진행해야할 프로세스는 cpu를 할당받지 못해 일을 수행하지 못하게 된다. 

여기서   "스핀을 수행하는 도중에 래치를 해지해줄 프로세스가 존재할 수 없기 때문이다."  이 말의 뜻을 다시 생각해보자. 
 래치를 해지 할 프로세스가 존재하지 않는다는 말은 2-1과 3-1 같은 현상으로 A프로세스의 작업이 진행되지 못하고 CPU는 Spin 작업에 할당되어 있기 때문에 A proces가 작업 진행을 못하여 A Process의 래치가 해지되지 않는다는 의미이다.






1 CPU 에서 spin 미 수행 
시나리오
만약 CPU가 1 개인 시스템에서 아래와 같이 SPIN 을 수행한다고 가정해보자.

1. LV 1의 레치를 얻고 작업을 수행한다.
1-2. B, C process 는 lv1 래치를 획득하지 못해서 바로 sleep 상태로 변한다.

2. A process 는 계속해서 작업을 수행하고 일을 작업을 종료한다.
2-2. B, C process 는 sleep 상태이다.

3-1. A process 는 lv2 를 획득하고 cpu 자원을 할당받기 위해 대기한다.
3-2. C process 는 lv1 래치를 획득하고 작업을수행한다.


이하 생략



상태
CPU가 하나인 시스템에서는 한번에 하나의 프로세스만 CPU를 선점하여 사용할 수 있다. 그래서 동시에 작업처리를 할 수 없으므로 아에 스핀과정을 생략하므로써 CPU 자원을 래치를 획득한 프로세스들이 더욱 작업처리에 집중하도록 한다.
즉, CPU 자원을 소모하는 spin 작업을 생략하므로써, 래치를 획득한 프로세스가 좀 더 작업을 빨리 끝낼 수 있다.


'Oracle > OWI' 카테고리의 다른 글

래치 관련 대기 이벤트  (0) 2012.03.21
LATCH(래치) 와 LOCK(락) 1  (0) 2012.03.20
OWI ( Oracle Wait Interface )  (0) 2012.03.19