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

📄 jiurl玩玩win2k内存篇 分页机制 (四).htm

📁 关于win2000核心编程的文章
💻 HTM
📖 第 1 页 / 共 3 页
字号:
      Reserved 00008003 000063C0 0 NP<BR>03C0 Reserved 00008003 000063C8 0 
      NP<BR>03C8 Reserved 00008003 000063D0 0 NP<BR>03D0 Reserved 00008003 
      000063D8 0 NP<BR>03D8 Reserved 00008003 000063E0 0 NP<BR>03E0 Reserved 
      00008003 000063E8 0 NP<BR>03E8 Reserved 00008003 000063F0 0 NP<BR>03F0 
      Reserved 00008003 000063F8 0 NP<BR>03F8 Reserved 00000000 00000000 0 
      NP<BR><BR>:dd 80036000 l 400<BR>0010:80036000 00000000 00000000 0000FFFF 
      00CF9B00 ................<BR>0010:80036010 0000FFFF 00CF9300 0000FFFF 
      00CFFB00 ................<BR>0010:80036020 0000FFFF 00CFF300 400020AB 
      80008B1F ......... .@....<BR>0010:80036030 F0000001 FFC093DF 00000FFF 
      0040F300 ..............@.<BR>0010:80036040 0400FFFF 0000F200 00000000 
      00000000 ................<BR>0010:80036050 00400068 80008947 00A80068 
      80008947 h.@.G...h...G...<BR>0010:80036060 2AB0FFFF 00009302 80003FFF 
      0000920B ...*.....?......<BR>0010:80036070 700003FF FF0092FF 0000FFFF 
      80009A40 ...p........@...<BR>0010:80036080 0000FFFF 80009240 00000000 
      00009200 ....@...........<BR>0010:80036090 00000000 00000000 00000000 
      00000000 ................<BR>0010:800360A0 A3480068 81008941 00000000 
      00000000 h.H.A...........<BR>0010:800360B0 00000000 00000000 00000000 
      00000000 ................<BR>0010:800360C0 00000000 00000000 00000000 
      00000000 ................<BR>0010:800360D0 00000000 00000000 00000000 
      00000000 ................<BR>0010:800360E0 0000FFFF F0009F45 0000FFFF 
      00009200 ....E...........<BR>0010:800360F0 DCE803B7 80009842 0000FFFF 
      00009200 ....B...........<BR>0010:80036100 0000FFFF F0409346 0000FFFF 
      F0409346 ....F.@.....F.@.<BR>0010:80036110 0000FFFF F0409346 80036120 
      00000000 ....F.@. a......<BR>0010:80036120 80036128 00000000 80036130 
      00000000 (a......0a......<BR>0010:80036130 80036138 00000000 80036140 
      00000000 8a......@a......<BR>0010:80036140 80036148 00000000 80036150 
      00000000 Ha......Pa......<BR>0010:80036150 80036158 00000000 80036160 
      00000000 Xa......`a......<BR>0010:80036160 80036168 00000000 80036170 
      00000000 ha......pa......<BR>0010:80036170 80036178 00000000 80036180 
      00000000 xa.......a......<BR>0010:80036180 80036188 00000000 80036190 
      00000000 .a.......a......<BR>0010:80036190 80036198 00000000 800361A0 
      00000000 .a.......a......<BR>0010:800361A0 800361A8 00000000 800361B0 
      00000000 .a.......a......<BR>0010:800361B0 800361B8 00000000 800361C0 
      00000000 .a.......a......<BR>0010:800361C0 800361C8 00000000 800361D0 
      00000000 .a.......a......<BR>0010:800361D0 800361D8 00000000 800361E0 
      00000000 .a.......a......<BR>0010:800361E0 800361E8 00000000 800361F0 
      00000000 .a.......a......<BR>0010:800361F0 800361F8 00000000 80036200 
      00000000 .a.......b......<BR>0010:80036200 80036208 00000000 80036210 
      00000000 .b.......b......<BR>0010:80036210 80036218 00000000 80036220 
      00000000 .b...... b......<BR>0010:80036220 80036228 00000000 80036230 
      00000000 (b......0b......<BR>0010:80036230 80036238 00000000 80036240 
      00000000 8b......@b......<BR>0010:80036240 80036248 00000000 80036250 
      00000000 Hb......Pb......<BR>0010:80036250 80036258 00000000 80036260 
      00000000 Xb......`b......<BR>0010:80036260 80036268 00000000 80036270 
      00000000 hb......pb......<BR>0010:80036270 80036278 00000000 80036280 
      00000000 xb.......b......<BR>0010:80036280 80036288 00000000 80036290 
      00000000 .b.......b......<BR>0010:80036290 80036298 00000000 800362A0 
      00000000 .b.......b......<BR>0010:800362A0 800362A8 00000000 800362B0 
      00000000 .b.......b......<BR>0010:800362B0 800362B8 00000000 800362C0 
      00000000 .b.......b......<BR>0010:800362C0 800362C8 00000000 800362D0 
      00000000 .b.......b......<BR>0010:800362D0 800362D8 00000000 800362E0 
      00000000 .b.......b......<BR>0010:800362E0 800362E8 00000000 800362F0 
      00000000 .b.......b......<BR>0010:800362F0 800362F8 00000000 80036300 
      00000000 .b.......c......<BR>0010:80036300 80036308 00000000 80036310 
      00000000 .c.......c......<BR>0010:80036310 80036318 00000000 80036320 
      00000000 .c...... c......<BR>0010:80036320 80036328 00000000 80036330 
      00000000 (c......0c......<BR>0010:80036330 80036338 00000000 80036340 
      00000000 8c......@c......<BR>0010:80036340 80036348 00000000 80036350 
      00000000 Hc......Pc......<BR>0010:80036350 80036358 00000000 80036360 
      00000000 Xc......`c......<BR>0010:80036360 80036368 00000000 80036370 
      00000000 hc......pc......<BR>0010:80036370 80036378 00000000 80036380 
      00000000 xc.......c......<BR>0010:80036380 80036388 00000000 80036390 
      00000000 .c.......c......<BR>0010:80036390 80036398 00000000 800363A0 
      00000000 .c.......c......<BR>0010:800363A0 800363A8 00000000 800363B0 
      00000000 .c.......c......<BR>0010:800363B0 800363B8 00000000 800363C0 
      00000000 .c.......c......<BR>0010:800363C0 800363C8 00000000 800363D0 
      00000000 .c.......c......<BR>0010:800363D0 800363D8 00000000 800363E0 
      00000000 .c.......c......<BR>0010:800363E0 800363E8 00000000 800363F0 
      00000000 .c.......c......<BR>0010:800363F0 800363F8 00000000 00000000 
      00000000 .c..............<BR><BR>我们来分析一下:<BR><BR>对于ring3,CS=001B DS=0023 
      ES=0023 SS=0023 FS=0038 GS=0000,<BR>DS,ES,SS,指向同一个段。<BR>001B=0000000000011 
      0 11<BR>0023=0000000000100 0 11<BR>所以根据前面段选择符的定义,表示 CS,DS,ES,SS 
      都是在全局描述符表中进行选择。<BR>选择符的特权级都是3(ring3)。对于CS,索引为3,由于每个描述符为8个字节,描述符相对于GDT开始处的地址为0x3*0x8=0x18。对于,DS,ES,SS,索引为4,描述符相对于GDT开始处的地址为0x4*0x8=0x20。<BR><BR>根据前面段描述符的定义,分析 
      80036018 开始的8个字节,和 80036020 开始的8个字节。<BR>0010:80036010 0000FFFF 00CF9300 
      0000FFFF 00CFFB00 ................<BR>0010:80036020 0000FFFF 00CFF300 
      400020AB 80008B1F ......... .@....<BR>可以得出<BR>Sel. Type Base Limit DPL 
      Attributes<BR>001B Code32 00000000 FFFFFFFF 3 P RE<BR>0023 Data32 00000000 
      FFFFFFFF 3 P RW<BR>可以看到,CS 
      对应的全局描述符表中的段描述符,是一个代码段,段基址为0,段界限为4G,DPL为3(ring3)。DS,ES,SS 
      对应的全局描述符表中的段描述符,是一个数据段,段基址为0,段界限为4G,DPL为3(ring3)。<BR><BR>对于ring0, cs=0008 
      ss=0010 ds=0023 es=0023 fs=0030 gs=0000,<BR>0008=0000000000001 0 
      00<BR>0010=0000000000010 0 00<BR>0023=0000000000100 0 11<BR>Sel. Type Base 
      Limit DPL Attributes<BR>0008 Code32 00000000 FFFFFFFF 0 P RE<BR>0010 
      Data32 00000000 FFFFFFFF 0 P RW<BR>0023 Data32 00000000 FFFFFFFF 3 P 
      RW<BR>可以看到,代码段和堆栈段的DPL为0(ring0)。三个描述符的段基址都为0,段界限都为4G。<BR><BR>CS,DS,ES,SS,这些段都完全重叠了,而且都是当前的4G地址空间。和段的另外一种使用方法(不同的段在不同的一块地址空间)相比,现在的使用方法,整个地址空间是连续的,平坦的,所以叫做平坦模式(Flat 
      Model)。<BR><BR>关于段寄存器(CS,DS,SS,ES,FS,GS),不可能每次参考一个段的时候CPU都去从内存中取出段描述符然后再做相应的处理,每个段寄存器还有看不到的部分,他们中存储着相应的段描述符中的信息。<BR><BR>全局描述表中的第一项不被使用,设为了"null 
      descriptor" 。<BR>0010:80036000 00000000 
      00000000<BR>用来初始化没有被使用的段寄存器,以防止如果被不小心使用一个没有被使用的段寄存器,对系统造成不良影响。Win2k中,段寄存器GS就没有被使用,值都设为了0。<BR><BR>前面分析了 
      CS,DS,ES,SS 。对于 GS 来说,我们可以看到它的值总是为0,Win2k 并没有使用它。而对于 FS 来说,对于使用平坦模式的 Win2k 
      来说,它是一个例外,在其他地方会对 FS 做更多的介绍。<BR><BR>在 ntddk.h 
      中的以下内容,也说明了上面的一些分析。<BR>#define KGDT_NULL 0<BR>#define KGDT_R0_CODE 
      8<BR>#define KGDT_R0_DATA 16<BR>#define KGDT_R3_CODE 24<BR>#define 
      KGDT_R3_DATA 32<BR>#define KGDT_TSS 40<BR>#define KGDT_R0_PCR 
      48<BR>#define KGDT_R3_TEB 56<BR>#define KGDT_VDM_TILE 64<BR>#define 
      KGDT_LDT 72<BR>#define KGDT_DF_TSS 80<BR>#define KGDT_NMI_TSS 
      88<BR><BR>线性地址(linear 
      address),把32bit可寻址的4G地址空间看做连续的线性地址空间,线性地址空间中的地址叫线性地址。逻辑地址(logical 
      address),逻辑地址由一个段选择符(16位)和一个段内偏移(32位)组成。也经常被叫做远程指针(far pointer)。x86 CPU 
      总是使用分段机制的(即使是使用了最少的分段机制的平坦模型),因此 x86 CPU 
      指令中的地址也总是逻辑地址,是相对于某一个段而言的地址。在保护模式下,x86 CPU 
      首先把逻辑地址转换成线性地址,然后再把线性地址转换成物理地址。<BR><BR>对于Win2k来说,由于使用了平坦模型,虚拟地址XXXXXXXX 
      和线性地址XXXXXXXX 指的是同一个地方。而平坦模型下,CS,DS,SS 
      这几个段的段基址为0,段界限为4G,就是整个地址空间,所以逻辑地址中的段内偏移的值就等于该逻辑地址转换成线性地址以后的值。<BR><BR>保护模式下的 
      x86 CPU 
      有4个特权级,从0到3。被叫做ring0,ring1,ring2,ring3。ring0权限最大,ring3权限最小。对于Win2k来说,只使用了ring0,ring3两个特权级。用户应用程序运行在ring3,系统内核运行在ring0。<BR>&nbsp;&nbsp;&nbsp; 
      Win2k中进程的地址空间,被分为用户地址空间和系统地址空间。用户模式下的程序将不能访问系统地址空间,这就是通过保护机制实现的。页目录项和页表项的 
      bit2 
      ,Owner标志位表明了访问所需的特权级,为0表示访问需要ring0的特权级,为1表示ring3的特权级就可以访问。在发生内存访问时,CPU会把虚拟地址转换成物理地址。转换过程中,在从页目录项和页表项中获得物理地址的同时,会检查页目录项和页表项中的Owner标志位和当前的特权级,如果没有足够的特权级将会产生一个 
      page-fault 异常。注意权限的检测和地址的转换是同时由硬件进行的,不会为此损失额外的性能。当前特权级(CPL,Current 
      privilege level),当前执行程序的特权级,由CS,SS段寄存器中的最低2位指明。</FONT></P>
      <P><FONT face=宋体>保护模式下的 x86 CPU 提供了很多的保护机制,这也就是为什么叫保护模式,更多内容可以参考 
      Intel手册。<BR><BR><B>未来</B></FONT> 
      <P>&nbsp;&nbsp;&nbsp; 
      呃,从某种意义上来说,我认为未来是可以预知的。就像天气预报所作的,在今天就知道明天或者后天将要发生的事情。当然,实际上我认为对于人类来说未来是不可预知的,人类所能知道的事情太有限了。呃,如果要估计我们现在讨论的分页机制还能在内存中活几年,就得估计CPU的发展,可能的新的需求的出现,人们的创造力。挺费事,又没有预测以后一些人痛斥学校的愚昧的情景那么过瘾,所以我要说的未来不是关于分页的。我认为不久的将来人工智能和机器人将非常重要。当然,实际上我认为当有真正的人工智能出现的时候,人类很有可能也就完了。 

      <P>欢迎交流,欢迎交朋友,<BR>欢迎访问 <A 
      href="http://jiurl.yeah.net/">http://jiurl.yeah.net/</A> <A 
      href="http://jiurl.cosoft.org.cn/forum">http://jiurl.cosoft.org.cn/forum</A> 

      <P>  
      <P>  
      <P>  </P></TD></TR></TBODY></TABLE></DIV></BODY></HTML>

⌨️ 快捷键说明

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