커널 Document/mutex-desin.txt 질문입니다.
글쓴이: jai / 작성시간: 수, 2008/01/09 - 4:53오후
source: <커널코드2.6>/Documentation/mutex-design.txt mutex 장점 - smaller structure: on x86, mutex is 16 bytes, semaphore is 20 bytes. - tighter code: 25052 bytes of code saved - faster: 2.4 times - CONFIG_DEBUG_MUTEX 를 켜서 검사할 수있다. * - only one task can hold the mutex at a time * - only the owner can unlock the mutex * - multiple unlocks are not permitted * - recursive locking is not permitted * - a mutex object must be initialized via the API * - a mutex object must not be initialized via memset or copying * - task may not exit with mutex held * - memory areas where held locks reside must not be freed * - held mutexes must not be reinitialized * - mutexes may not be used in irq contexts mutex 단점 - interrupt context 에서 사용할 수 없다. (주석!세마포가 원래 그렇다. spinlock은 사용할 수 있다.) - acquired context 에서만 unlock 할 수 있다. (주석!세마포랑 다른점이다. 세마포는 상관없이 unlock.)
2.6에 새로 추가된 struct mutex 를 공부하는 데요.
헷갈리는 맥락을 물어볼려고 공부한 파일을 카피했습니다.
interrupt context 와 acquired context 에서 막혔습니다.
질문1. context 는 process의 state, TASK_RUNNING,INTERRUPTIBLE,UNINTERRUPTIBLE, ZOMBIE,STOPPED 인거죠?
interrupt context 에서 사용할 수 없다는 건,interrupt handler function 내부에서는 mutex를 사용할 수 없다.
질문2. mutex를 잡은 후에 interrupt 되는 건 괜찮은 거죠?
Forums:
os 에서 context라는
os 에서 context라는 말은 "스케줄링은 context가 교체되는 것이다"는 표현을 씁니다.
스케줄링의 대상이 되는 context을 말합니다.
그런데 저기 표현의 interrupt context와 acquried context에서 context는
약간 의미가 틀린거 같습니다. 후자가 제가 말한 context에 더 부합되는것
같구요.
말그대로 풀이하자면 '인터럽트 구문에서는 사용할 수 없다'가 맞지 않을까
생각됩니다. 아니면 제가 말한 후자의 의미로 'context 인터럽트에서는 사용할 수 없다'.
정도로 해석할 수 있겠네요.
acquired context 표현에 맞게 'context 인터럽트에서는 사용할 수 없다'에 한표.
이렇게 해석한다면 질문2에서는 mutex 사이에서는 사용할 수 없다일것 같습니다(mutex lock이
이루어진 다음에서도 interrupt는 걸린다는 표현이 맞을것 같습니다.)
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
전자는 interrupt service
전자는 interrupt service routine 안에서 사용할 수 없다는 뜻입니다.
semaphore 도 마찬가지입니다.
이미 lock이 걸린 놈에 대해 다시 lock을 시도할 경우 wait 를 위해 스케쥴링을 하도록 되어 있는데, 바로 이 스케쥴링이 금지되어 있기 때문입니다.
후자는 lock 을 수행한 context 에서만 unlock 을 수행할 수 있다는 뜻합니다.
이건 pthread_mutex 도 마찬가지 입니다. pthread 의 경우 어떤 쓰레드에서 lock 을 한 놈을 다른 쓰레드에서 unlock 하는 것이 불가능하지요. 커널의 mutex 도 마찬가지 입니다.
하지만 semaphore 는 다릅니다. down과 up이 같은 context 에 있을 필요가 없습니다.
OTL
댓글 달기