안녕하세요? 궁금한 것이 있어서 문의드립니다.
device driver code 작성 시에,
sleep과 재진입가능 함수를 작성하는 방법에 대해서 잘 이해할 수가 없습니다.
일반적으로 sleep이 가능하다는 것은 선점형 커널에서 재진입 가능한 함수로 작성해 줘야한다고 알고 있습니다.
이러한 함수를 작성할 경우에 mutex와 spin-lock을 경우 차이점에 대해 알고 싶습니다.
single processor일 경우에 SMP일 경우 AMP일 경우를 나눠서 설명 부탁드리겠습니다.
감사합니다.
device driver code 작성 시에,
sleep과 재진입가능 함수를 작성하는 방법에 대해서 잘 이해할 수가 없습니다.
일반적으로 sleep이 가능하다는 것은 선점형 커널에서 재진입 가능한 함수로 작성해 줘야한다고 알고 있습니다.
이러한 함수를 작성할 경우에 mutex와 spin-lock을 경우 차이점에 대해 알고 싶습니다.
single processor일 경우에 SMP일 경우 AMP일 경우를 나눠서 설명 부탁드리겠습니다.
감사합니다.
.
선점형 커널이여야만 sleep을 임의로 할수 있겠지요.
mutex는 owner가 있다는것을 제외하면 binary semaphore와 거의 동일합니다.
즉, wait queue가 따로있고, 대기 사항이 발생할 경우 wait queue에 wait되죠. spin-lock은 wait queue 없이 대기 상황이 풀릴때까지 busy wait합니다.
mutex 내부에서 synchronization을 위해 spin-lock 또는 interrupt disable을 사용하죠. single core에서는 mutex 내 interrupt disable만 처리함으로써 synchronization이 가능하나 multi-core에서는 interrupt disable과 함께 spin-lock도 같이 처리해주어야 하죠.
single core에서는 SMP, AMP가 나뉘어 질수 없습니다. SMP, AMP는 multi-core 이상인 상황에서 메인 메모리와 core간의 관계를 정의한 것임으로 single core는 SMP, AMP에 대한 해당 사항이 아예 없죠.