Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1010553
  • 博文数量: 238
  • 博客积分: 2842
  • 博客等级: 少校
  • 技术积分: 2765
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-16 00:20
个人简介

stdlf

文章分类

全部博文(238)

文章存档

2013年(6)

2012年(13)

2011年(82)

2010年(89)

2009年(48)

我的朋友

分类: 服务器与存储

2011-08-24 11:53:58

1:CPU只会运行RAM中的指令,不会运行ROM的内容。也就是ROM中内容是映射到了RAM中,CPU通过运行相应的RAM的内容来执行ROM中预定的功能。
2:ROM和RAM的映射问题。他们是通过混合编址来映射的,而不是通过代码拷贝来完成的,这个非常重要。简单的理解混合编址的映射,就是说,如果你访问内存RAM中C0000-FFFFF中任何一个字节,等价于访问ROM中的内容。
3:自由内存区的意思是说这个区域的内存没有被系统使用,用户可以随便使用它。
4:刚开机的时候,ROM和RAM的就映射好了。这个时候的CS=0F000H,IP=0FFF0H,也就是说CPU执行F000:FFF0处的指令,因为在这个时候只可以使用1M的内存,也就是说只有F000:FFF0---F000:FFFF这16个字节的空间存放指令,所以这个地方一般是存放一个JMP指令,让CPU跳到内存其他地方运行(这个地方必定要C0000-FFFFF之间)。我们把这期间运行的程序叫BOIS程序。1楼
计算机开机的时候,内存空间的分配情况如下:
00000H  ~  003FFH  是中断向量表
00400H  ~  004FFH  是BOIS数据区
00500H  ~  9FFFFH  是自由内存区
A0000H  ~  BFFFFH  这段空间是视频显示区
C0000H  ~  FFFFFH  是BOIS中断处理程序区。
如果要讨论RAM 和 ROM 是混合编址的问题。讨论视频显示区就可以了。
比如下面的代码:
MOV AX,0B800H
MOV ES,AX
MOV ES:[0],‘A’
MOV ES:[1],01FH
它的功能是在屏幕的(0,0)位置显示一个字符'A',颜色由01FH确定。它的执行由大致由2个过程完成:
1、CPU把'A',01f分别送到ES:[0],ES:[1]中去。
2、视频处理器读这两个字节的单元内容处理并在屏幕显示字符'A'
在执行过程中,ES:[0],ES:[1]的内容并没有备份,它被覆盖了,也就是说混合编程的RAM的内存区域没有进行移动。
还有一个就是分时享用问题,实现的方法有很多,比如通过时钟周期来控制,通过内部寄存器状态来判断.......
以前的386机,如果打开BIOS SETUP所谓的“影子内存”(里面主要有F000H开始的BIOS的映射和C000H开始的VIDEO BIOS的映射)确实会加快速度。主要反映在字符界面的显示速度上。估计一些字模被放到了主存里的缘故?
一般情况下,主板BIOS是E0000~FFFFF,128KB;显卡BIOS是C0000~C7FFF;网卡BIOS是C8000~DFFFF。
当启动中计算机的时候,一开始BIOS并不会马上把Flash ROM中的内容copy到shadow memory,CPU会执行一部分代码,我们习惯把这一段代码叫做Boot Block。之所以要把Flash ROM中的内容loaded到memory,是因为当对CPU,memory进行完initialized,由于ROM的执行速度远比RAM要低,才会把BIOS shadow到memory中去,这样可以reduce POST的时间。所以我们在OS下会发现BIOS的content会shadow到memory的最顶端,举个例子,如果你是用的32bit的XP(support 4G),你就可以在FFF00000-FFFFFFFF(对1M的BIOS而言,如果是512K地址则是FFF7FFFF-FFFFFFFF)这段memory空间找到你的BIOS的content。至于VGA card的是C0000~C7FFF,Ethernet是C8000~DFFFF,这其实只是其相应PCI或是PCIe设备的Option ROM shadow到memory空间的地址。一开是BIOS会占用顶端1M的地址空间,并在POST过程中把VGA ROM copy到C000段,把其他的PCI/e的device Option ROM shadow到D0000-EFFFF。
阅读(795) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~