主题:[讨论]关于PC的内存和启动
kxzyf
[专家分:0] 发布于 2006-05-22 07:40:00
众所周知,RAM 和 ROM 是混合编址的,基本内存储 + 上位内存,ROM BIOS 就没有空间了,这显然不行。那么就有两种情况:
1. 基本内存储 + ROM BIOS,而把上位内存暂时移到别处去,待启动后再把 ROM 复制到 RAM 中,然后再把 ROM 移到别处去,但在启动时必须是实模式,只有 20 条地址线,移到 1M 以外任何一处都访问不到。
2. 让ROM BIOS 和上位内存共同享有 A0000H ~ FFFFFH 这段空间,显然要分时享用,不然要发生冲突,是怎样一种切换机制?还有,ROM BIOS 从最初的 64KB 经历 128KB、256KB,问题都不大,目前 512KB 超出了 384KB 又怎样编址?另外不同尺寸的ROM BIOS 是在低端与A0000H 处对齐还是高端与 FFFFFH 对齐呢?
在下聆听各位高见
回复列表 (共15个回复)
11 楼
我是大喊三 [专家分:3010] 发布于 2008-03-07 01:07:00
以前的386机,如果打开BIOS SETUP所谓的“影子内存”(里面主要有F000H开始的BIOS的映射和C000H开始的VIDEO BIOS的映射)确实会加快速度。主要反映在字符界面的显示速度上。估计一些字模被放到了主存里的缘故?现在的机器则不太清楚,比如LZ说的,现在的BIOS大过512KB,上位内存也就是384KB,那么放哪儿?颇有点花非花的意思。
12 楼
kxzyf [专家分:0] 发布于 2008-03-08 14:37:00
没见到这方面的资料,不知道“影子内存”的地址和 BIOS 是怎样的关系,另外,现在的 BIOS 都是采用压缩的方式,不解到 RAM 里,根本无法运行。
13 楼
kxzyf [专家分:0] 发布于 2008-03-08 14:55:00
[quote]感觉你很多基本感念都理解错误了。
1:CPU只会运行RAM中的指令,不会运行ROM的内容。也就是ROM中内容是映射到了RAM中,CPU通过运行相应的RAM的内容来执行ROM中预定的功能。
... ...,
所以这个地方一般是存放一个JMP指令,让CPU跳到内存其他地方运行(这个地方必定要C0000-FFFFF之间)。我们把这期间运行的程序叫BOIS程序。[/quote]
这个地方觉得有点矛盾,刚开机时 RAM 是空的,根本无法运行,即使是“让CPU跳到内存其它地方运行(这个地方必定要C0000-FFFFF之间”,也要先进行自检,首先需要检测的便是 RAM ,然后再根据不同机型或需求来确定,是否拷贝或“映射”到 RAM中。
可以由用户来设置“影子内存”本身就说明可以选择运行 ROM 或 RAM。
14 楼
我是大喊三 [专家分:3010] 发布于 2008-03-08 22:44:00
影子内存就是所谓的“映射”吧。记得当时的BIOS SETUP就是用Shadow这个词。好象当时所有的书籍资料也习惯这么叫来着。现在一般叫CACHE。那段地址就是复用的吧,即虽然访的是BIOS ROM,但因为用的是相同的地址,RAM也就相当于浪费掉了。当然,如果把BIOS从ROM“拷贝”到RAM里,然后访问RAM当然更快。有类似问题的还有VIDEO BIOS。那你说,CPU又怎样的访问VIDEO BIOS的?以前的386时期显卡配的显存至少都128KB以上啊,一般以256KB为多,512KB也有,那么A000~B000也就是图形缓存只有64KB怎么说?好象是寄存器通过“位面”来访问?显示芯片上面是否有也个内存控制器,地址又多少根?
15 楼
kxzyf [专家分:0] 发布于 2008-12-22 10:28:00
映射地址就是用 MMMMMMMMH 的逻辑地址来访问 NNNNNNNNH 的物理地址,就叫做前者映射到后者。
影子内存是把 ROMBIOS 中的内容复制到 RAM 中某区域再执行,概念根本不同。
我来回复