두개의 인터럽트 핸들러 사이에서의 mutex 사용...
글쓴이: jaeswith / 작성시간: 월, 2004/02/23 - 10:55오후
제가 이해하기로는 BH를 실행할때, 다른 인터럽트가 발생하는 경우에는
BH에서 수행하는 task 가 끝날때까지 인터럽트 핸들러가 수행되지 않는다고 알고 있습니다.
즉, BH의 수행이 premptive 되지 않는다는...
(물론 non-premptive 커널에서)
제가 이해한 것이 맞습니까?
그렇다면, 두개의 인터럽트 핸들러 사이에서 mutex 를 사용해서 공유 변수를
보호할 필요가 없는거겠죠?
즉, 하나는 NIC로 부터 오는 인터럽트이고, 하나는 BH에 의해서 생기는 흐름이거든요.
Forums:
BH는 Multi process 환경에서도 오직 한번에 한개의 BH만 수
BH는 Multi process 환경에서도 오직 한번에 한개의 BH만 수행됩니다.
그래서 BH 사이의 메모리 공유에서는 별다른 동기화가 필요없습니다.
아마도 이해하신 부분이 이 부분일 겁니다.
하지만 말씀하신 글을 읽어보니까 하나는 NIC에서 오는 interrupt라고
하셨습니다. 그럼 하드웨어 인터럽트니까 BH와 다르게 process context
가 아닌 interrupt context code 입니다. 이 둘 사이에 메모리를 공유하고
있다고 한다면 BH 수행중에 하드웨어 인터럽트 컨텍스트는 실행될 수
있으므로 특별한 동기화가 필요합니다. 제 생각에는 BH 코드 내에 Disable
interrupt 함수를 추가해주는것이 데드락을 피할 수 있을 것입니다.
참고가 되셨길 바랍니다. :-)
ps. 참고로 BH는 커널 2.5부터 성능상 제외되었습니다.
Re: 두개의 인터럽트 핸들러 사이에서의 mutex 사용...
아닙니다.
인터럽트 핸들러가 블럭된다면 performance 에 심각한 문제가 생깁니다.
bottom half가 고안된 원인은 인터럽트 핸들러에서는 최대한 빨리 일을 처리하
고 좀 걸리는 일은 bottom half에서 처리하고자함입니다.
인터럽트 핸들러 사이에 공유할 때는 인터럽트를 disable 시키고 lock이 필요
합니다. Semaphore는 sleep할 수 있기 때문에 여기서는 쓰면 않됩니다.
Bottom half 는 구현된 방식이 조금씩 다르기 때문에 걸맞게 사용해야
합니다.
[quote="errai"]하지만 말씀하신 글을 읽어보니까 하나는 N
bottom half 가 process context 인 경우는 2.6에서 소개된 Work queue입
니다.
...
기초적인 질문같아 죄송합니다만, context의 종류는 무엇인지, 그 분류는 linux에 국한된 것인지, 각 context에서의 제약은 무엇인지, 어디에 그런 내용이 나와있는지 궁금합니다 ^^
Re: ...
어려운 질문이네요. 제가 감히 대답한다는 것이 좀 그렇지만 토를
달아봅니다...:)
커널에서는 processor의 state를 context라고 합니다.
IA-32 Intel
댓글 달기