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

📄 全局描述表.htm

📁 386的各种保护措施的一个重要组成部分是 全局描述表(Global Descriptor Table)
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0068)http://rammaker.cosoft.org.cn/store/bkerndev_zh_CN_beta/Docs/gdt.htm -->
<HTML><HEAD><TITLE>Bran的内核开发指南:全局描述表(GDT)</TITLE>
<META http-equiv=Content-Type content="text/html; charset=GB2312">
<STYLE>TD {
	FONT-FAMILY: arial
}
TD {
	FONT-SIZE: 9pt; LINE-HEIGHT: 18px
}
.f {
	PADDING-LEFT: 15px; FONT-SIZE: 100%; WIDTH: 32em; WORD-BREAK: break-all; LINE-HEIGHT: 120%; WORD-WRAP: break-word
}
BODY {
	BACKGROUND-COLOR: #f0f0f0
}
</STYLE>

<META content="MSHTML 6.00.2900.3199" name=GENERATOR></HEAD>
<BODY style="BACKGROUND-COLOR: #ffffff">
<DIV class=Section1>
<H2><FONT face=Tahoma>全局描述表(GDT)</FONT></H2>
<P><FONT face=Tahoma>386的各种保护措施的一个重要组成部分是 全局描述表(Global Descriptor Table),也就是 
GDT。GDT为内存的特定部份定义基本访问权限。我们能使用GDT的一个入口来建立一种程序段异常处理机制:让内核能终止一个正在执行非法操作的程序。大部分 
现代操作系统使用叫做“内存分页”的内存管理模式来实现这一点:这可以更灵活而且弹性更高。GDT同时还能定义内存中的某个区域是可被执行的,还是数据。GDT也能 
定义任务状态分段(TSSes)。TSS被用在基于硬件的多任务处理系统[<FONT size=2>译者注:如SMP,对称多处理器系统</FONT>]中,我们 
就不在这里讨论了。但请记住,TSS并不是实现多任务处理的唯一方法。 </FONT></P>
<P><FONT face=Tahoma>你会发现GRUB已经为你安装了一个GDT,但是如果我们覆盖了GRUB使用的那部分内存,GDT将会失效, 
并且会产生被称为“三键错误”[<FONT size=2>译者注:triple fault,三键即热启动的那个三个键</FONT>]。简而言之, 
发生错误后,计算机会重启。解决这个问题的方法是在一段我们知道 地址并且可以访问的内存上建立我们自己的GDT。这包括构造 新的GDT, 
告诉处理器它在内存中的地址,最后用我们 新的入口数据加载CPU的CS、DS、ES、FS 和GS寄存器。CS寄存器就是代码段。它将 
告诉CPU进入GDT的偏移量。这将获得执行当前代码的权限。DS寄存器是相似的功能,但它不是针对代码,而是针对数据段,它定义的是当前数据的权限。ES、FS、和GS寄存器只不过是DS寄存器 
的替代品,对我们并不重要。</FONT></P>
<P><FONT 
face=Tahoma>GDT本身就是一连串的64字长的入口。这些入口定义了允许操作的内存区域从哪里开始,哪里结束,同时定义了每个入口的权限。一个通常的规则是GDT的第一个入口,入口0,就是我们知道的NULL描述符。任何寄存器都不能被设置为0,否则将发生一般性保护错误(General 
Protection fault),这是CPU的一项保护特征。一般性保护错误和其它的一些异常将在下一章<A 
href="http://rammaker.cosoft.org.cn/store/bkerndev_zh_CN_beta/Docs/isrs.htm">中断服务例程(ISR)</A>中进行详细说明。</FONT></P>
<P><FONT face=Tahoma>每一个GDT入口同时也定义处理器正在运行的当前片段是系统程序在占用(Ring 0)还是应用程序在占用(Ring 
3)。当然还有其他类型,但是那些并不重要。当今主要的操作系统只使用Ring 0和Ring 3。有一条基本规则:任何试图访问系统或Ring 
0数据的应用程序都将会引起异常。这种保护措施用于保护内核免遭应用程序的破坏 
。在GDT作用范围内,Ring等级告诉CPU它是否被允许执行特定的指令。某些指令的权限很高,意味着它只能在较高的Ring等级上运行。这样的例子有cli和sti指令。它们分别禁用和启用中断。如果一个应用程序被允许使用汇编指令cli或sti,那么它就可以 
有效地使内核停止运行。你将在后面的章节学到更多的中断。 </FONT></P>
<P><FONT face=Tahoma>每个GDT入口的通道和粒度可以这样被定义:</FONT></P>
<TABLE class=MsoNormalTable id=table1 cols=25 cellPadding=0 border=0>
  <TBODY>
  <TR>
    <TD 
    style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt" 
    vAlign=top>
      <TABLE class=MsoNormalTable id=table2 cellPadding=0 border=0>
        <TBODY>
        <TR>
          <TD 
          style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
            <TABLE class=MsoNormalTable id=table3 cellPadding=0 border=0>
              <TBODY>
              <TR>
                <TD 
                style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; WIDTH: 18.75pt; PADDING-TOP: 0.75pt" 
                width=25>
                  <P style="TEXT-ALIGN: center" align=center><FONT 
                  face=Tahoma>7</FONT></P></TD>
                <TD 
                style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; WIDTH: 18.75pt; PADDING-TOP: 0.75pt" 
                width=25>
                  <P><FONT face=Tahoma>6</FONT></P></TD>
                <TD 
                style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; WIDTH: 18.75pt; PADDING-TOP: 0.75pt" 
                width=25>
                  <P style="TEXT-ALIGN: right" align=right><FONT 
                  face=Tahoma>5</FONT></P></TD>
                <TD 
                style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; WIDTH: 18.75pt; PADDING-TOP: 0.75pt" 
                width=25>
                  <P style="TEXT-ALIGN: center" align=center><FONT 
                  face=Tahoma>4</FONT></P></TD>
                <TD 
                style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; WIDTH: 37.5pt; PADDING-TOP: 0.75pt" 
                width=50>
                  <P><FONT face=Tahoma>3</FONT></P></TD>
                <TD 
                style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; WIDTH: 37.5pt; PADDING-TOP: 0.75pt" 
                width=50>
                  <P style="TEXT-ALIGN: right" align=right><FONT 
                  face=Tahoma>0</FONT></P></TD></TR></TBODY></TABLE>
            <P> </P></TD></TR>
        <TR>
          <TD 
          style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
            <TABLE class=MsoNormalTable id=table4 
            style="BORDER-RIGHT: gray 1pt outset; BORDER-TOP: gray 1pt outset; BORDER-LEFT: gray 1pt outset; BORDER-BOTTOM: gray 1pt outset" 
            cols=25 cellPadding=0 border=1>
              <TBODY>
              <TR>
                <TD 
                style="BORDER-RIGHT: gray 1pt inset; PADDING-RIGHT: 0.75pt; BORDER-TOP: gray 1pt inset; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: gray 1pt inset; WIDTH: 18.75pt; PADDING-TOP: 0.75pt; BORDER-BOTTOM: gray 1pt inset" 
                width=25>
                  <P><FONT face=Tahoma>P </FONT></P></TD>
                <TD 
                style="BORDER-RIGHT: gray 1pt inset; PADDING-RIGHT: 0.75pt; BORDER-TOP: gray 1pt inset; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: gray 1pt inset; WIDTH: 37.5pt; PADDING-TOP: 0.75pt; BORDER-BOTTOM: gray 1pt inset" 
                width=50>
                  <P><FONT face=Tahoma>DPL </FONT></P></TD>
                <TD 
                style="BORDER-RIGHT: gray 1pt inset; PADDING-RIGHT: 0.75pt; BORDER-TOP: gray 1pt inset; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: gray 1pt inset; WIDTH: 18.75pt; PADDING-TOP: 0.75pt; BORDER-BOTTOM: gray 1pt inset" 
                width=25>
                  <P><FONT face=Tahoma>DT </FONT></P></TD>
                <TD 
                style="BORDER-RIGHT: gray 1pt inset; PADDING-RIGHT: 0.75pt; BORDER-TOP: gray 1pt inset; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: gray 1pt inset; WIDTH: 75pt; PADDING-TOP: 0.75pt; BORDER-BOTTOM: gray 1pt inset" 
                width=100>
                  <P><FONT face=Tahoma>Type </FONT></P></TD></TR></TBODY></TABLE>
            <P> </P></TD></TR>
        <TR>
          <TD 
          style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
            <P><FONT face=Tahoma>P - 这是当前的段吗?(1 = Yes)<BR>DPL - 哪个Ring等级(0 to 
            3<SPAN class=GramE>)<BR>DT - 描述符类型<BR>Type - 
          什么类型?</FONT></SPAN></P></TD></TR></TBODY></TABLE>
      <P> </P></TD>
    <TD 
    style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt" 
    vAlign=top>
      <TABLE class=MsoNormalTable id=table5 cols=20 cellPadding=0 border=0>
        <TBODY>
        <TR>
          <TD 
          style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; WIDTH: 15pt; PADDING-TOP: 0.75pt" 
          width=20>
            <P> </P></TD></TR></TBODY></TABLE>
      <P> </P></TD>
    <TD 
    style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt" 
    vAlign=top>
      <TABLE class=MsoNormalTable id=table6 cols=25 cellPadding=0 border=0>
        <TBODY>
        <TR>
          <TD 
          style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
            <TABLE class=MsoNormalTable id=table7 cellPadding=0 border=0>
              <TBODY>
              <TR>
                <TD 
                style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; WIDTH: 18.75pt; PADDING-TOP: 0.75pt" 
                width=25>
                  <P style="TEXT-ALIGN: center" align=center><FONT 
                  face=Tahoma>7</FONT></P></TD>
                <TD 
                style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; WIDTH: 18.75pt; PADDING-TOP: 0.75pt" 
                width=25>
                  <P style="TEXT-ALIGN: center" align=center><FONT 
                  face=Tahoma>6</FONT></P></TD>
                <TD 
                style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; WIDTH: 18.75pt; PADDING-TOP: 0.75pt" 
                width=25>
                  <P style="TEXT-ALIGN: center" align=center><FONT 
                  face=Tahoma>5</FONT></P></TD>
                <TD 
                style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; WIDTH: 26.25pt; PADDING-TOP: 0.75pt" 
                width=35>
                  <P style="TEXT-ALIGN: center" align=center><FONT 
                  face=Tahoma>4</FONT></P></TD>
                <TD 
                style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; WIDTH: 37.5pt; PADDING-TOP: 0.75pt" 
                width=50>
                  <P><FONT face=Tahoma>3</FONT></P></TD>
                <TD 
                style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; WIDTH: 37.5pt; PADDING-TOP: 0.75pt" 
                width=50>
                  <P style="TEXT-ALIGN: right" align=right><FONT 
                  face=Tahoma>0</FONT></P></TD></TR></TBODY></TABLE>
            <P> </P></TD></TR>
        <TR>
          <TD 
          style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt">
            <TABLE class=MsoNormalTable id=table8 
            style="BORDER-RIGHT: gray 1pt outset; BORDER-TOP: gray 1pt outset; BORDER-LEFT: gray 1pt outset; BORDER-BOTTOM: gray 1pt outset" 
            cols=25 cellPadding=0 border=1>
              <TBODY>
              <TR>
                <TD 
                style="BORDER-RIGHT: gray 1pt inset; PADDING-RIGHT: 0.75pt; BORDER-TOP: gray 1pt inset; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: gray 1pt inset; WIDTH: 18.75pt; PADDING-TOP: 0.75pt; BORDER-BOTTOM: gray 1pt inset" 
                width=25>
                  <P><FONT face=Tahoma>G </FONT></P></TD>
                <TD 
                style="BORDER-RIGHT: gray 1pt inset; PADDING-RIGHT: 0.75pt; BORDER-TOP: gray 1pt inset; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: gray 1pt inset; WIDTH: 18.75pt; PADDING-TOP: 0.75pt; BORDER-BOTTOM: gray 1pt inset" 
                width=25>
                  <P><FONT face=Tahoma>D </FONT></P></TD>
                <TD 
                style="BORDER-RIGHT: gray 1pt inset; PADDING-RIGHT: 0.75pt; BORDER-TOP: gray 1pt inset; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: gray 1pt inset; WIDTH: 18.75pt; PADDING-TOP: 0.75pt; BORDER-BOTTOM: gray 1pt inset" 
                width=25>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -