인터럽트 처리 중에 동일한 인터럽트가 또 발생하면?

gurugio의 이미지


리눅스 커널에서 x86계열의 인터럽트 처리 관련 코드를 보다보니
인터럽트 핸들러를 호출하기 전에 irq_enter() 함수에서 커널 선점을 막고
스케줄링만 안되게 하고는 인터럽트를 막지 않더라구요.

단지 같은 인터럽트가 또 발생하면 IRQ_PENDING 비트를 설정해주어서
인터럽트 핸들러가 끝난 후에 또 다시 핸들러가 실행할 수 있도록 하는 것을 보았습니다.

(인터럽트 우선 순위 등의 하드웨어 적인 설정에 상관없이 프로세서가 받아들이는 관점에서만 봤을 때)
인터럽트 처리를 하고 있는 중간에 다른 인터럽트가 발생하면 다른 인터럽트의 핸들러가 실행되나요?
그리고 동일한 인터럽트가 발생하면 핸들러가 호출되는 코드 전까지는 실행되구요?

송지석의 이미지

제 기억엔 ISR로 들어갈 때는 하드웨어적으로 인터럽트가 disable되는 걸로 압니다만..
CPU 데이타쉬트를 찾아보시는 게 좋을 것 같습니다.
보통 챕터에 한 섹션으로 (Programmer's model의 Exception handling 정도)에 자세히 설명되어있죠.

예를 들어 오래된 ARM CPU의 경우
인터럽트 소스(Reset이냐 FIQ냐 IRQ나 Abort냐) 에 따라 자기이하의 우선순위 소스는 disable됩니다.

rommance.net

poplinux의 이미지

인터럽트가 발생하면 일단 그 인터럽트 라인은 disable 시킵니다. 그리고 인터럽트 처리가 완료된후 enable 시키도록 되어 있습니다.

가장 쉽게 볼 수 있는 형태가 디바이스 드라이버쪽 코드인데 request_irq() 에 등록되어 있는 인터럽트 처리 루틴을 보시면 될 겁니다.

========================
조직 : E.L.D(Embedded Linux Developer/Designer)
블로그 : poplinux@tistory.com
카페 : cafe.naver.com/poplinux

임베디드 리눅스 관련 프리렌서 지향

bushi의 이미지

handle_level_irq(), handle_edge_irq() 가 제공됩니다.
전자는 서비스루틴 호출 전에 irqchip.mask() 콜백을 먼저 호출하고, 서비스루틴 종료 후 irqchip.unmask() 콜백을 호출합니다.
후자는 mask,unmask 없이 서비스루틴을 호출합니다.

level 인터럽트와 edge 인터럽트에 대해 이해하고 계신다면 저 두 함수의 동작특성도 이해가 가실겁니다.

OTL

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.