⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interrupt-vectors_2.htm

📁 编写自己的操作系统
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<!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 
&amp; 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>]&nbsp; [</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>]&nbsp; [</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>]&nbsp; [</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">&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;<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">&nbsp;</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>&nbsp;</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">&nbsp;</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=宋体>)等。&nbsp;</FONT></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l5 level1 lfo3">&nbsp;</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>&nbsp;</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>&nbsp;<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">&nbsp;</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>&nbsp;</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 + -