📄 interrupt-vectors_2.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0062)http://www.huihoo.com/gnu_linux/own_os/interrupt-vectors_2.htm -->
<HTML><HEAD><TITLE></TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
<BODY>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT
face="Times New Roman" size=6><SPAN style="mso-tab-count: 1"><STRONG>2.2 Vectors
& IDT</STRONG></SPAN></FONT></SPAN></P><SPAN lang=EN-US><FONT
face="Times New Roman" size=5><SPAN style="mso-tab-count: 1">
<P>
<P><FONT size=3>[</FONT><A
href="index.htm"
tppabs="http://pagoda-ooos.51.net/os_book/index.htm"><FONT
size=3>Home</FONT></A><FONT size=3>] [</FONT><A
href="interrupt_and_exception.htm"
tppabs="http://pagoda-ooos.51.net/os_book/interrupt_and_exception.htm"><FONT
size=3>Top</FONT></A><FONT size=3>] [</FONT><A
href="interrupt-sources_1.htm"
tppabs="http://pagoda-ooos.51.net/os_book/interrupt/interrupt-sources_1.htm"><FONT
size=3>Previous</FONT></A><FONT size=3>] [</FONT><FONT size=3><A
href="interrupt-priority_3.htm"
tppabs="http://pagoda-ooos.51.net/os_book/interrupt/interrupt-priority_3.htm">Next</A>]</FONT></P>
<P><STRONG>
<HR width="100%" SIZE=2>
</STRONG>
<P></P>
<P></P></SPAN></FONT></SPAN><SPAN lang=EN-US><FONT face="Times New Roman"
size=5><SPAN style="mso-tab-count: 1">
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"><FONT
face="Times New Roman TUR" size=5><STRONG>2.2.1 Overview</STRONG></FONT></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"> </P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"><FONT
face=宋体 size=3>为了区分不同的<FONT face="Times New Roman TUR">Interrupts</FONT>和<FONT
face="Times New Roman TUR">Exceptions</FONT>,处理器要求必须为每一个<FONT
face="Times New Roman TUR">Interrupt</FONT>和<FONT
face="Times New Roman TUR">Exception</FONT>指定一个唯一的<FONT
face="Times New Roman TUR">ID</FONT>。在<FONT face="Times New Roman TUR">Intel
x86</FONT>体系下,这个<FONT face="Times New Roman TUR">ID</FONT>被规定为<FONT
face="Times New Roman TUR">[0, 255]</FONT>范围内的数字,这个数字<FONT
face="Times New Roman TUR">ID</FONT>就被称作<FONT
face="Times New Roman TUR">Interrupt/Exception Vector</FONT>。</FONT></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"><FONT
size=3></FONT> </P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"><FONT
size=3>每一个Interrupt/Exception都可能会存在一个Service Routine<FONT
face=宋体>(为了保证简洁性,我们统称</FONT><FONT face="Times New Roman TUR">ISR</FONT><FONT
face=宋体>),这些<FONT
face="Times New Roman TUR">ISR</FONT>可以被无规则的放置在内存中,但它们的入口地址,却会被按照固定的格式,按照对应的<FONT
face="Times New Roman TUR">Vector</FONT> <FONT
face="Times New Roman TUR">Number</FONT>,整齐的存放在一张放置于内存中的一张表中,这张表在<FONT
face="Times New Roman TUR">Real Mode</FONT>下,被叫做<FONT
face="Times New Roman TUR">IVT</FONT>(<FONT face="Times New Roman TUR">Interrupt
Vector Table</FONT>),在<FONT face="Times New Roman TUR">Protected
Mode</FONT>下,被叫做<FONT face="Times New Roman TUR">IDT</FONT>(<FONT
face="Times New Roman TUR">Interrupt Descriptor
Table</FONT>),它们的格式并不相同,另外,IVT被放置在固定的位置[<FONT face="Times New Roman TUR">0H,
3FFH</FONT>],而<FONT
face="Times New Roman TUR">IVT</FONT>却可以放在一个任意的位置,但这个位置的地址必须汇报给一个叫做<FONT
face="Times New Roman TUR">IDTR</FONT>的寄存器。</FONT></FONT></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"><FONT
face=宋体 size=3></FONT> </P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"><FONT
size=3><FONT face=宋体><FONT
face="Times New Roman TUR">IDT/IVT</FONT>都是一种数组结构。按照这种结构,当一个<FONT
face="Times New Roman TUR">Interrupt/Exception</FONT>发生时,<FONT
face="Times New Roman TUR">CPU</FONT>只需要以此<FONT
face="Times New Roman TUR">Interrupt/Exception</FONT>的<FONT
face="Times New Roman TUR">Vector Number</FONT>为索引,到<FONT
face="Times New Roman TUR">IDT/IVT</FONT>中查到相应的<FONT
face="Times New Roman TUR">ISR</FONT>入口地址并执行它就可以了。</FONT></FONT></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"><FONT
face=宋体 size=3></FONT> </P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"><FONT
size=3><FONT face=宋体>下图表现的是在<FONT face="Times New Roman TUR">Real
Mode</FONT>下的<FONT face="Times New Roman TUR">IVT</FONT>布局,<FONT
face="Times New Roman TUR">IVT</FONT>中的每一项占用<FONT face="Times New Roman TUR">4
bytes</FONT>,用来保存指向当前<FONT
face="Times New Roman TUR">Interrupt/Exception</FONT>的<FONT
face="Times New Roman TUR">ISR</FONT>的入口地址的指针。格式为<FONT
face="Times New Roman TUR">16-it segment:16-bit offset</FONT>。整个<FONT
face="Times New Roman TUR">IVT</FONT>共有<FONT
face="Times New Roman TUR">256</FONT>个这样的实体,占用<FONT
face="Times New Roman TUR">256*4 bytes = 1024 bytes</FONT>。被放置于内存固定位置<FONT
face="Times New Roman TUR">[0H,3FFH]</FONT></FONT><FONT
face=宋体>。</FONT></FONT></P>
<DIV class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"><FONT
face=宋体 size=3><STRONG></STRONG> </DIV>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"
align=center><IMG src="interrupt-vectors_2.files/ivt.gif"
tppabs="http://pagoda-ooos.51.net/os_book/interrupt/vectors/ivt.gif"></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"
align=left><STRONG><FONT
face="Times New Roman TUR"></FONT></STRONG> </P><FONT
face="Times New Roman TUR"><STRONG>
<HR width="100%" SIZE=2>
</STRONG>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"
align=left></FONT> </P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"><FONT
face="Times New Roman TUR" size=5></FONT><STRONG> <FONT
face="Times New Roman TUR" size=5>2.2.2 Vectors in Protected
Mode</FONT></STRONG></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"> </P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"><FONT
face="Times New Roman TUR"><FONT face=宋体>在<FONT
face="Times New Roman TUR">Protected Mode</FONT>下,</FONT></FONT><FONT
face="Times New Roman TUR">最多会存在256个Interrupt/Exception Vectors。</FONT></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"><FONT
face="Times New Roman TUR"></FONT> </P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"><FONT
face="Times New Roman TUR">范围[0<FONT
face=宋体>,</FONT>31]内的32个向量被Exception和NMI使用,但当前并非所有这32个向量都已经被使用,有几个当前没有被使用的,你也不要擅自使用它们,它们被保留,以备将来可能增加新的Exception。</FONT></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"> </P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3">范围<FONT
face="Times New Roman TUR">[32<FONT
face=宋体>,</FONT>255]</FONT>内的向量被保留给用户定义的<FONT
face="Times New Roman TUR">Interrupts</FONT>。<FONT
face="Times New Roman TUR">Intel</FONT>没有定义,也没有保留这些<FONT
face="Times New Roman TUR">Interrupts</FONT>。用户可以将它们用作外部<FONT
face="Times New Roman TUR">I/O</FONT>设备中断(<FONT face="Times New Roman TUR">8259A
IRQ</FONT>),或者<FONT face="Times New Roman TUR">System Call <FONT
face=宋体>(</FONT>Software Interrupts</FONT><FONT face=宋体>)等。 </FONT></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"> </P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3">下表中定义了<FONT
face="Times New Roman TUR">i386</FONT>芯片<FONT
face="Times New Roman TUR">Protected Mode</FONT>下的<FONT
face="Times New Roman TUR">Interrupt/Exception </FONT>向量表。</P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"
align=center><IMG src="interrupt-vectors_2.files/ie_table.jpg"
tppabs="http://pagoda-ooos.51.net/os_book/interrupt/vectors/ie_table.jpg"></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"
align=center><FONT face="Times New Roman TUR"></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"><BR></P><STRONG>
<HR width="100%" SIZE=2>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"></STRONG> </P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"
align=left> <FONT size=5><STRONG>2.2.3 IDT</STRONG></FONT></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"> </P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"><FONT
face="Times New Roman TUR"><FONT face=宋体>在<FONT
face="Times New Roman TUR">Protected Mode</FONT>下,你需要建立一张<FONT
face="Times New Roman TUR">IDT</FONT>(<FONT face="Times New Roman TUR">Interrupt
Descriptor Table</FONT>)以响应<FONT
face="Times New Roman TUR">Interrupts/Exceptions</FONT>。</FONT></FONT></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"><FONT
face=宋体><FONT face="Times New Roman TUR"></FONT></FONT> </P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3"><FONT
face=宋体><FONT face="Times New Roman TUR">IDT</FONT>是一个由<FONT
face="Times New Roman TUR">Gate Descriptors</FONT>组成的<FONT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -