📄 操作系统引导探究.htm
字号:
lang=EN>CPU</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将物理地址页</SPAN><SPAN
lang=EN>1</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的内容放到硬盘上的一个地方(虚拟内存),然后将线性地址中的页</SPAN><SPAN
lang=EN>5</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">载入物理内存页</SPAN><SPAN
lang=EN>1</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中。这里就当可以比较明显的区别什么是线性地址,什么是物理地址了。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然而,当不使用分页机制的时候,线性地址就会被</SPAN><SPAN
lang=EN>CPU</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当做物理地址来使用,线性地址会被直接放在</SPAN><SPAN
lang=EN>CPU</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的地址信号线上,而在编写应用程序的时候,我们通常使用却是另一种地址——逻辑地址,从逻辑地址到线性地址也存在着与上述机制类似的一种映射机制,不过这个机制常常称为<SPAN
style="COLOR: blue">“段模式”</SPAN>,它是由操作系统与</SPAN><SPAN lang=EN>CPU</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">硬件共同完成的。操作系统的任务就是分配映射表,而</SPAN><SPAN
lang=EN>CPU</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">硬件的任务就是按着映射表进行映射。而这样的映射表在操作系统编写中又称之为“描述符表”,有两种重要的描述符表,一种是<SPAN
style="COLOR: blue">“全局描述符表(</SPAN></SPAN><SPAN lang=EN
style="COLOR: blue">GDT</SPAN><SPAN
style="COLOR: blue; FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">)”</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,另一种是<SPAN
style="COLOR: blue">“局部描述符表(</SPAN></SPAN><SPAN lang=EN
style="COLOR: blue">LDT</SPAN><SPAN
style="COLOR: blue; FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">)”</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,这两种表的用途不同,但它们的用法却是近似的,下面我们就来描述一下全局描述符表。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">说到表,学过数据结构的人都知道,其实它就是一种数据结构,全局描述符表也是一种数据结构,当这种结构放在一块连续的内存这间中就称之为表了。表由表项组成,全局描述符表由它的表符全局描述符组成,其实单纯的术语就叫<SPAN
style="COLOR: blue">“描述符”</SPAN>,只因为它放在全局描述符表中就成了全局描述符了。这个描述符由</SPAN><SPAN
lang=EN>8</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个字节组成,下面我们就来看看它的结构:</SPAN></P>
<P class=MsoNormal><SPAN lang=EN></SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN lang=EN><IMG
alt="" src="操作系统引导探究_files/20044621285758.gif" onload=""><BR>(</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图六</SPAN><SPAN
lang=EN>)</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><SPAN
lang=EN>TYPE</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">:</SPAN>
<SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表明此段的类型,</SPAN><SPAN
lang=EN>4</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位中的最高位被置</SPAN><SPAN
lang=EN>1</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时候表是它是数据段,相应的于下的三位,从左到右依次为</SPAN><SPAN
lang=EN>E</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</SPAN><SPAN
lang=EN>W</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</SPAN><SPAN
lang=EN>A</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,即数据段的</SPAN><SPAN
lang=EN>TYPE</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为:</SPAN><SPAN
lang=EN>0EWA</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。其中</SPAN><SPAN
lang=EN>E</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示向下增长位,置</SPAN><SPAN
lang=EN>1</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时表示向下增长,</SPAN><SPAN
lang=EN>W</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示可写位,置</SPAN><SPAN
lang=EN>1</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表洋可定,</SPAN><SPAN
lang=EN>A</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示被访问位(如果</SPAN><SPAN
lang=EN>CPU</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">访问了它,此位将会被置</SPAN><SPAN
lang=EN>1</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">)。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN lang=EN>S</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">:为</SPAN><SPAN
lang=EN>1</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时表示其为代码或数据段,为</SPAN><SPAN
lang=EN>0</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时表示为系统段</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN lang=EN>DPL</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">:表示物权级,从</SPAN><SPAN
lang=EN>00~11</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,共</SPAN><SPAN
lang=EN>0</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,</SPAN><SPAN
lang=EN>1</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,</SPAN><SPAN
lang=EN>2</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,</SPAN><SPAN
lang=EN>3</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">四个特权级</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN lang=EN>P</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">:为</SPAN><SPAN
lang=EN>0</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是表示此描术符无效,不能被使用</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN lang=EN>AVL</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">:留给系统程序随便用的</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN lang=EN>D/B</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">:为</SPAN><SPAN
lang=EN>0</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时候表示它是一个</SPAN><SPAN
lang=EN>16</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位的段,为</SPAN><SPAN
lang=EN>1</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时表示它是一个</SPAN><SPAN
lang=EN>32</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位的段</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN lang=EN>G</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">:为</SPAN><SPAN
lang=EN>0</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时,表示段限的单位是</SPAN><SPAN
lang=EN>1</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字节,为</SPAN><SPAN
lang=EN>1</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时表示段限的单位是</SPAN><SPAN
lang=EN>4KB</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,并且段偏移量的最低</SPAN><SPAN
lang=EN>12</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位将不被检测是否在段限之中。(这一点现在可能不好理解,但我下面马上会解释)。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这里面有两个部份,比较有意思,一个就是<SPAN
style="COLOR: blue">“基址”</SPAN>,一个就是<SPAN
style="COLOR: blue">“段限”</SPAN>。基址应当比较好理解,它给出的是一个段在物理内存中的地址,对于“段限”,顾名思义,就是段大小的限制。不过它有点特别,对于一个段的最大可访问的地址</SPAN><SPAN
lang=EN>CPU</SPAN><SPAN
style="FONT-FAMILY: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是通过下面的公式计算得到的:</SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN lang=EN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -