[리눅스 커널] 128번을 제외한 외부 인터럽트 핸들러를 do_IRQ()로 통일한 이유?

익명 사용자의 이미지

리눅스 커널 내부구조라는 책을 보며 공부하고있는 학생입니다.
128번 인터럽트(system call)을 제외한 나머지 인터럽트의 핸들러를 do_IRQ()로 통일시키고, irq_table을 따로 만들어서 처리를 하던데, 굳이 irq_table을 따로 만들 필요가 있나요?

인터럽트 핸들러는 등록할 수 있는 갯수가 정해져있어서 아무거나 등록하면 안되고, 동적으로 할당 및 해제할 수 있다고는 하는데 이게 irq_table을 따로 만들어야 할 이유가 되는지는 모르겠습니다.
IDT_table은 수정이 안되나요?

익명 사용자의 이미지

빼먹은게 있는데, 트랩을 제외한 외부 인터럽트를 말하는 겁니다

AustinKim의 이미지

do_IRQ() 함수는 15년전에 32비트 인텔 아키텍처에서 인터럽트를 처리하는 용로도 사용된 함수입니다.

https://elixir.bootlin.com/linux/2.0.40/source/arch/i386/kernel/irq.c#L344
asmlinkage void do_IRQ(int irq, struct pt_regs * regs)
{
	struct irqaction * action = *(irq + irq_action);
	int do_random = 0;
	int c,intm,mask;
#ifdef IRQ_DEBUG
	static int count;
	if (smp_processor_id() != 0 && count++ < 1000)
	  printk("IRQ %d: done by CPU %d\n",irq,smp_processor_id());
#endif	  
	if (irq  >= 8) {

소스 링크를 보니 2.0.40 버전이네요.

지금은 2022년 3월인데요. IT 업계에서는 v5.15 버전(LTS 기준)의 리눅스 커널 버전으로 제품을 개발 중이니, 최소 v5.4 버전 이상의 커널 소스를 분석하시는게 더 좋지 않을까 생각이 듭니다.

참고로 최근 리눅스 커널의 소스가 너무 복잡해져서 종종 예전 버전의 코드를 분석하면서 개념을 잡기도 합니다.

(개인블로그)
http://rousalome.egloos.com

익명 사용자의 이미지

15년 전 구조를 보고있었다니 충격이네요..

예전 버전의 코드를 보는 것은 개념을 잡기위한 목적이라 왜 do_IRQ로 통일을 했는지 따지기보단 크게 보라는 말씀인가요?

AustinKim의 이미지

최근 소스는 예외 처리 루틴이 많아 코드의 복잡도가 늘어나 분석하기 어려운 경우가 많아요. 그런데 이전 버전의 코드는 비교적 예외 처리 루틴이 적은 경우가 많아 함수의 코드가 심플하거든요. 그래서 예전 버전의 코드를 보면 함수의 기본 동작을 조금 더 쉽게 이해할 수 있습니다.

(개인블로그)
http://rousalome.egloos.com

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.