免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: rawa9999
打印 上一主题 下一主题

没见过这么垃圾的人,还当版主mik! [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-09-21 18:08 |只看该作者
原帖由 rawa9999 于 2009-9-21 10:47 发表
虚拟地址空间由GDT 映射的全局地址空间和由LDT映射的局部地址空间组成。
选择符的索引部分由13 个比特位表示,加上区分GDT 和LDT 的1 个比特位;
因此Intel 80X86 CPU 共可以索引16384 个选择符。若每个段的长 ...


感谢LZ,听你这样一说,我也清楚多了,14个比特位,2^14*4G=64T,不错,不错。

PS:这是技术论坛,本来就是大家自由讨论技术的地方,观点不同,可以各抒已见啊。个人认为,像mik版主这样,武断地认为帖子没意义,自己却又Balabala说一大通错错对对,然后咣当一声锁贴,实在是有损版主风范。

论坛徽章:
0
22 [报告]
发表于 2009-09-21 20:49 |只看该作者
rawa9999  你有没有大脑的? 你会不会思考的?

我锁贴的时间是:2009-9-20 23:25   回复你的时间是:2009-9-20 23:45  

锁贴的原因是:这样的贴子根本没必要再讨论下去。 锁了之后,看了你的回复不对才回复的。


像你这个贴子里的发言,不值一批!

就光1楼里:

>> “LDTR是多少位寄存器?16位。386就是一个32位16位的混合处理器,不然怎样运行当时的16位程序”
就笑死我了。




跟你这样的人多说一句就是浪费时间!

我倒不如写多几行代码!

论坛徽章:
0
23 [报告]
发表于 2009-09-21 22:11 |只看该作者
说的什么啊,我怎么不明白啊

论坛徽章:
0
24 [报告]
发表于 2009-09-22 09:43 |只看该作者
386CPU是一个16位和32位混合的处理器,这个不是我说的。

虚拟地址空间由GDT 映射的全局地址空间和由LDT映射的局部地址空间组成。
选择符的索引部分由13 个比特位表示,加上区分GDT 和LDT 的1 个比特位;
因此Intel 80X86 CPU 共可以索引16384 个选择符。
———————————————————————————
这个也不是我说的。GDT只有一个表,所以无法得出16384,必须分析GDTR处理地址的过程,mik列不出这些汇编指令所以他也不是高手,给出一段处理一个虚拟地址的源码就清楚了。
几乎所有的386CPU都有64T虚拟内存这个承诺。

mik你认为不对,为什么不反驳我呢?我知道你很忙在写代码,那就列出些源码吧。分析GDTR处理地址的过程。64T,16、32位混合CPU这不是我说的,你站错位置了。

论坛徽章:
0
25 [报告]
发表于 2009-09-22 10:29 |只看该作者
真是服了,这麽个没含氧量的问题值得争来争去。
谁先定义一下“虚拟内存大小”怎么计算?一个进程所能寻址的地址空间大小?所有进程能寻址的地址空间大小之和?虚拟地址段相加怎么算?是直接把大小求和还是做集合合并?intel在手册上说,线性地址是32位,那虚拟地址算出和超过32位怎么办,只取32位?还是无视32位限制只定义概念?明明都是些似是而非的概念,一定要翻来覆去的辩。谁能在现在的x86手册找出CPU的“虚拟内存大小”的准确定义或者大小也可以直接砸出来,免的没个了解。

BTW. 从旁观的角度,我觉得版主确实应该适当的注意一下措词,bbs上的交流毕竟只限于文字,容易产生误会。

论坛徽章:
18
巳蛇
日期:2014-12-03 08:27:5115-16赛季CBA联赛之吉林
日期:2016-04-18 15:24:24qiaoba
日期:2016-06-17 17:41:1615-16赛季CBA联赛之八一
日期:2016-06-20 15:13:1415-16赛季CBA联赛之广夏
日期:2016-06-29 10:38:28极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之吉林
日期:2017-03-06 13:47:55
26 [报告]
发表于 2009-09-22 14:39 |只看该作者

论坛徽章:
0
27 [报告]
发表于 2009-09-22 17:48 |只看该作者
都是高手,我是来膜拜兼围观的。

论坛徽章:
0
28 [报告]
发表于 2009-09-23 03:45 |只看该作者
恩,关于表限我说错了。实际上我所说的LDT索引存放在LDTR寄存器中,不是GDTR的低16位,GDTR存放是表长度,这部分程序不可见,所以存放在哪用户也看不到这个过程:

LDTR寄存器 LDTR高速缓存
   15 0              47 16               15 0
选择符(16位) LDT表基址(32位)表限(16位表长度)

LDTR寄存器中的16位
Bit15~Bit3:选择子
Bit12:0表示GDT 1表示 LDT
Bit0~Bit1:处理器当前运行的级别--CPL,四个等级0、1、2、3

LDTR寄存器本质上是一个16位段寄存器,386段寄存器的最大可用选择是2^14而不是2^16
所以LDTR寄存器最大可选虚拟内存是2^14*4G=64T,这个跟GDT和LDT根本没关系。至于段
寄存器的剩余两位则表示CPL(CPU运行权限或级别)。终于把这个问题搞清楚了。欢迎不同观点。

---------------------------------------------
给出一个定位内存和虚拟内存的源码

call 1a:804304c (call cs:eip即cs = 1a, eip = 804304c)
target_cs = 1a;
target_eip = 0x0804304c;
CPL = CS.RPL;            /* 当前执行的代码段的权限级别就是CPL */
RPL = target_cs.RPL;     /* 目标段 selector 的低3位是RPL */
target_si = target_cs.SI;    /* 目标段 selector 的索引是Bit15~Bit3 */
target_ti = target_cs.TI;    /* 目标段selector的描述符表索引是Bit2 */
CODESEG_DESCRIPTOR target_descriptor;

if (target_ti == 0) { /* target_cs.TI为0 就是参考到 GDT(全局描述符表) */
/* 以GDTR寄存器的base 为基地址加上selector的索引乘以8即得出目标
       段描述符,目标描述符的DPL就是目标段所需的访问权限 */
    target_descriptor = GDTR.base + target_si * 8

} else {               /* 否则就是参考 LDT (局部描述符表)*/
    /* 以 LDTR寄存器的base 为基地址得出目标段描述符 */

target_descriptor = LDTR.base + target_si * 8;
}
DPL = target_descriptor.DPL;     /* 获取DPL */
if (target_descriptor.type & 0x06) { /* conforming */
if (CPL >= DPL) {   /* 允许执行高权限代码 */
     /* go ahead */
    } else {
     /* 引发 #GP 异常 */
    goto DO_GP_EXCEPTION;
}

} else {                  /* nonconforming */
    if (CPL == DPL && RPL <= CPL) {  
        /* go ahead */
    } else {
        /* 引发 #GP 异常 */
       goto DO_GP_EXCEPTION;
    }
  
}
/****** go ahead … …******/
CS = target_cs;           /* 加载目标段CS 进入 CS 寄存器 */
EIP = target_eip;        /* 加载目标指令EIP 进入 EIP 寄存器 */
                 /* 当前执行权限 CPL 不改变 */

goto target_descriptor.base + target_eip; /* 跳转到目标地址执行 */

DO_GP_EXCEPTION:     /* 执行 #GP异常点 */
           … …

论坛徽章:
0
29 [报告]
发表于 2009-09-23 03:55 |只看该作者
关键是解决问题,讽刺、漫骂不能解决问题,我说话也有点过,抱歉。

论坛徽章:
0
30 [报告]
发表于 2009-09-23 07:54 |只看该作者
原帖由 rawa9999 于 2009-9-23 03:45 发表
恩,关于表限我说错了。实际上我所说的LDT索引存放在LDTR寄存器中,不是GDTR的低16位,GDTR存放是表长度,这部分程序不可见,所以存放在哪用户也看不到这个过程:
LDTR寄存器 LDTR高速缓存
   15 0         ...

没见过你这样无耻的人

不知从哪抄了我2年前写的东西,还在我面前乱喷

真无耻呀,拿了别人东西﹑还不尊重作者

http://blog.chinaunix.net/u/11773/showart_368316.html

下次引用资料看清楚了,傻b
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP