컴퓨터 인터럽트 테이블 관련 구조에 대하여..

googlejoa의 이미지

외부 디바이스 등에서 인터럽트 신호가 걸리면 cpu 는 자체내의 레지스터 내용을 먼저 확인한다는 것을 알게 되었습니다.
따라서 부팅할때 해당 레지스터에 인터럽트벡터 테이블이 있는 곳을 등록해 주면 각각의 인터럽트에 해당하는 서브함수가 실행이 될 수 있답니다.

그런데 제가 궁금한 것은 과연 바이오스인터럽트는 어디에서 결정해 주냐는 거죠.

os 에서 부팅시에 레지스터 내용을 변경시킬때 바이오스함수의 주소는 보존하는 것일까요?

바이오스와 os 에서 지원해주는 인터럽트 벡터 테이블까지 가는 과정에 대해서 자세히 아시는 분 안 계신가요? 부탁드립니다.

Necromancer의 이미지

IRQ와 INT 매핑을 말씀하시는거군요...
하드웨어에서 발생하는 인터럽트는 IRQ라고 부르죠...

IRQ의 INT 매핑은 8259a칩 담당이죠.(옛날 PC 기준으로) 8259a 칩의 레지스터를
조작해서 IRQ의 INT 매핑을 변경할 수 있습니다. 이거 소스코드가 기억이
안나는군요... 8259a 조작하는 코드들은 짜보시면 아시겠지만 짜기가 X같습니다.
코드가 좀만 잘못되도 시스템 다운이고 원인 알기도 매우 어렵거든요 :evil:

PC의 IRQ매핑 초기값은 IRQ0-7은 INT8-INT0xf로 되어 있고,
IRQ8-15는 INT0x70-77로 매핑된걸로 압니다. (0x70-0x77인지 0x78-0x7f인지 헷갈림)
기값은 BIOS에 의해서 세팅됩니다. DOS의 경우 이것을 그대로 사용했지만
윈도우나 리눅스/x86 유닉스같은 32비트운영체제들은 이값을 자기맘대로
바꿔버리죠. 요새는 APIC라고 해서 8259a를 대신하는 것이 또 있는데
이건 내부를 안 뒤져봐서 잘 모르겠습니다. (요새 딴거에 정신없어서... 본래취미가 os짜는건데)

어쨌든 하드웨어로부터 IRQ가 걸리게 되면 8259a(PIC)나 APIC 등을
거쳐서 INT번호로 전환된다음 CPU에게 통보됩니다. 그러면 CPU는
하던일을 중단하고 INT번호에 지정된 인터럽트 핸들러를 실행시키게 되죠.
인터럽트 핸들러 찾는거는 아시겠죠...

Written By the Black Knight of Destruction

댓글 달기

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