• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

싱글 코어에서의 interrupt disable

21.09.19 22:10 작성 조회수 297

0

안녕하세요 교수님, 질문 사항이 있어서 글을 남깁니다.

피터슨 알고리즘이 등장하기 전 interrupt disable 을 통해 mutual exclusion을 보장받는 방식에 대한 설명을 해주셨는데요.

싱글 코어인 상황에서 이와 같이 interrupt disable을 사용하게 된다면.. 이는 결국 non-preemptive 방식과 똑같아지는 것 아닌가? 하는 생각이 듭니다.

제가 맞게 생각한걸까요? 아니면 non-preemptive와는 다른 어떤 차이점이 존재하나요?

명절 잘 보내시고 시간 나실 때 답변 주시면 매우 감사하겠습니다!

답변 1

답변을 작성해보세요.

0

안녕하세요?

모든 프로세스가 CPU 획득시에 interrupt disable 을 항상 켜도록 한다면

non-preemtive kerner과 동일하게 동작하는 게 맞겠습니다.

하지만,

interrupt는 필요할 때만 disable 시킨다면 preemptive kernel도 사용할 수 있고

interrupt는 꼭 context switching의 용도로만 사용하는 게 아니므로

interrupt disable 기능과 preemptive .vs. non-preemptive 커널과는

무관하다고 볼 수 있겠죠.

 

임현강님의 프로필

임현강

질문자

2021.09.24

답변 감사합니다 교수님. 

그렇다면 강의에서 말씀하신 interrupt disable은 "필요한 경우에만" disable 하는 방식을 말씀하신 건가요?

그렇다면, 여러가지 경우에서 어떻게 필요한 경우에만 disable을 가능하게 할 수 있는지 설명을 부탁드려도 될까요?

너무 지엽적인 질문이라면 그냥 그렇게만 알고 넘어가겠습니다!

Karatus님의 프로필

Karatus

2021.11.10

안녕하세요. 좀 늦게 다는 사족이라 보실진 모르겠지만 일단 질문에 대한 답을 드리고자 합니다.

결론부터 말씀드리면 교수님 말씀대로 interrupt disable 기능과 kernel의 선점, 비선점은 관련이 없습니다. interrupt disable은 영어에서 알 수 있듯이 cpu 라인의 interrupt를 비활성화하는 것입니다. 

interrupt disable의 의의를 이해하려면 먼저 preemptive kernel에서 interrupt 또한 다른 interrupt request에 의해 preemption 될 수 있다는 걸 알아야 합니다(interrupts에도 priority가 존재합니다. 예를 들어 시스템이 호출하는 interrupt는 더 높은 priority를 가지고 있는거죠.).

그런데 디바이스 드라이버를 개발하다 보면 이 interrupt의 타이밍이 중요할 때가 있습니다(여러 경우 중 하나의 예). interrupt도 어떻게 보면 하드웨어로의 시그널이니까요. 이 타이밍을 정확히 주기 위해서는 해당 타이밍을 전달하는 시그널을 발생시키는 interrupt context 도중에는 다른 interrupt의 시그널이 방해가 되는 경우가 있습니다. 이럴 때는 다른 interrupt를 막기 위해 interrupt를 disable할 수 있는 함수를 linux kernel에서 제공합니다. 참고로 해당 인터페이스 함수는 local_irq_disable() 입니다(다시 돌려주는 함수는 local_irq_enable() 입니다). 

 

다시 질문자 님이 처음에 주신 질문으로 돌아가서 살펴보면 결국 mutual exclusion이 보장하기 위해서는 interrupt disable에 초점을 맞출 것이 아니라 hardware에서 지원하는 atomic operation이나 잘 설계된 알고리즘이 중점이 될 거라 생각합니다.