问题:“当我们按下电源开关时,电源开始供电,芯片组撤去RESET信号,CPU马上就从地址FFFF0H处开始执行指令,这个地址在系统BIOS的地址范围内,无论是Award BIOS还是AMI BIOS,放在这里的只是一条跳转指令,跳到系统BIOS中真正的启动代码处。”

内存地址空间分布

Shadow RAM也称为"影子内存",是为了提高计算机系统效率而采用的一种专门技术,所使用的物理芯片仍然是CMOS DRAM(动态随机存取存储器)芯片。Shadow RAM占据了系统主存的一部分地址空间。其编址范围为C0000~FFFFF,即为1MB主存中的768KB~1024KB区域。这个区域通常也称为内存保留区,用户程序不能直接访问。Shadow RAM的功能就是是用来存放各种ROM BIOS的内容。也就是复制的ROM BIOS内容,因而又它称为ROM Shadow,这与Shadow RAM的意思一样,指得是ROM BIOS的"影子"。现在的计算机系统,只要一加电开机,BIOS信息就会被装载到Shadow RAM中的指定区域里。由于Shadow RAM的物理编址与对应的ROM相同,所以当需要访问BIOS时,只需访问Shadow RAM而不必再访问ROM,这就能大大加快计算机系统的运算时间。通常访问ROM的时间在200ns左右,访问DRAM的时间小于100ns、60ns,甚至更短。

在计算机系统运行期间,读取BIOS中的数据或调用BIOS中的程序模块的操作将是相当频繁的,采用了Shadow RAM技术后,无疑大大提高了工作效率。

386之前与386之后,这个地址是不同的,但都在系统内存的最高
地址段。在386下为
FFFFFFF0H。因为CS段是16位的,EIP是32位的,为了得到一个32位地址,386给CS段增加了几个字段,这是隐藏的字段,系统可以通过
GDT,IDT将更改段选择子的字段,此时地址转换就不是 段地址左移4位 + 偏移地址,而是CS的Base字段+偏移地址。

下面是一个例子

当系统加电后,系统会复位。此时在386以前的系统下CS=F000H,IP=FFF0H,BIOS地址为段地址左移4位 + 偏移地址挤即 F0000H + FFF0H = FFFF0H

在386以前系统可寻址范围为1MB即 00000H~FFFFFH

在386下CS=F000H,IP=FFF0H,这是不变的,但是这时,CS中的内容为:
Selector = F000H (这个就是你可以看到的那部分内容)

这时隐藏的部分是不能用的,因为在实地址模式下,所以BIOS地址与386以前的地址一样,

但是386可寻址范围为4GB 即 00000000H~FFFFFFFFH,如果以这个地址(000FFFF0H)作为BIOS地址的话,系统内存不连续,因此,386使用硬件置1的方式将A20~A31地址线置1,就变成FFFFFFF0H,并以此作为BIOS地址。

这个置1的结果是,隐藏的部分的一个字段Base=FFFF0000H,这个操作不是由更改描述符表实现的,因为还没有进入保护模式,而且描述符表还没有
建立。这是硬件实现的,而且当进行一次段间跳转后,由于置1的结果就不能保存,因为硬件设计是从会将其置0,所以当执行完FFFFFFF0H处的指令
jmp ,Base=00000000H,这时,BIOS就使用1M以下内存。

参考:

http://blog.csdn.net/rongwenbin/article/details/18962057

系统启动时,BIOS与影子内存_5的更多相关文章

  1. SpringMvc 系统启动时加载数据到内存中

    SpringMvc 系统启动时加载数据到内存中 学习了:http://blog.csdn.net/newstruts/article/details/18668269 https://www.cnbl ...

  2. 谈谈Android系统启动时的那点事儿

    Android系统完整的启动过程,从系统层次角度可分为Linux系统层.Android系统服务层.Zygote进程模型三个阶段:从开机到启动Home Launcher完成具体的任务细节可分为七个步骤, ...

  3. Windows: 在系统启动时运行程序、定时计划任务、定时关机

    lesca今天介绍一些让系统在启动时,而非登录时,加载用户自定义的应用程序或脚本的方法,推荐度从前到后依次递减. 1. Windows任务计划(task scheduler) 用户可以按以下步骤进行操 ...

  4. Linux中实现在系统启动时自动加载模块

    下面是以前学习Linux时写的,后来仔细研究rc.sysinit后发现,只需要修改下列地方就可以了,不必这么麻烦的: rc.sysinit中有这样的一段代码: # Load other user-de ...

  5. 影子内存(Shadow RAM)介绍_4

    影子内存(Shadow RAM,或称ROM shadow)是为了提高系统效率而采用的一种专门技术.它把系统主板上的系统ROM BIOS和适配器卡上的视频ROM BIOS等拷贝到系统RAM内存中去运行, ...

  6. mysql时该如何估算内存的消耗,公式如何计算?

    经常有人问配置mysql时该如何估算内存的消耗.那么该使用什么公式来计算呢? 关心内存怎么使用的原因是可以理解的.如果配置mysql服务器使用太少的内存会导致性能不是最优的;如果配置了太多的内存则会导 ...

  7. hibernate导入大量数据时,为了避免内存中产生大量对象,在编码时注意什么,如何去除?

    Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for ( i ...

  8. Ubuntu系统启动时waiting for network

    最近在使用Ubuntu时启动经常会遇到等待网络配置, 每次等待时间都很长,要几分钟,于是在网上看看其他大牛怎么解决该问题. 有些解决方法中有提到删除 网卡硬件信息文件/etc/udev/rules.d ...

  9. 记录:测试本机下使用 GPU 训练时不会导致内存溢出的最大参数数目

    本机使用的 GPU 是 GeForce 840M,2G 显存,本机内存 8G. 试验时,使用 vgg 网络,调整 vgg 网络中的参数,使得使用对应的 batch_size 时不会提示内存溢出.使用的 ...

随机推荐

  1. asp.net异常处理和错误页配置

    最近做一个项目,直接拷贝了前辈写的程序,结果报错了查了半天都没查出原因,也看不出哪里报错,最后发现有一个错误被try...catch了,所以我们做项目的时候一般不需要try...catch. 假设所有 ...

  2. LCS(最长公共子序列问题)

    LCS(Longest Common Subsequence),即最长公共子序列.一个序列,如果是两个或多个已知序列的子序列,且是所有子序列中最长的,则为最长公共子序列. 原理:    事实上,最长公 ...

  3. 资料:MVC框架+SQL Server 数据集成引擎

    ylbtech-资料:MVC框架+SQL Server 数据集成引擎 1.返回顶部 1. 功能特点: MVC框架耦合性低视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样 ...

  4. openStack kvm 虚拟机CPU颗粒化控制

    前一篇理解cpu topology对CPU Topology进行了学习总结,这里想总结下OpenStack下vCPU与pCPU常用的的绑定方式. 在尝试这些绑定之前,尤其是处理NUMA架构时还是建议看 ...

  5. SpringMVC RESTful中文乱码

    开发中常遇到各种中文乱码很少心烦,这里总结了各种中文乱码https://www.cnblogs.com/lwx521/p/9856186.html 下面以SpringMVC遇到的中文乱码为例详解 首先 ...

  6. windows、Linux 测试服务器、电脑的某些个端口是否打开

    测试远程端口是否开放包括两种方法: 一. 命令行的形式 二.代码 先参考我的博客 windows.Linux 开放端口 一.命令行的形式 两个命令:telnet.nc(netcat) 两种网络层协议: ...

  7. 报错:defined for 'courierAction_pageQuery' in namespace '/'Error creating bean with name 'cn.itcast.bos.web.action.base.CourierAction': Injection of autowired dependencies failed; nested exception is or

    No qualifying bean of type [cn.itcast.bos.web.service.base.CourierService] found for dependency: exp ...

  8. JavaScript: 高级技巧: window 对象也可以添加自定义属性

    JavaScript: 高级技巧: window 对象也可以添加自定义属性 例如 window.ntName = 'a';例如 window.ntXw = top; 优点是, window 无须等加载 ...

  9. 整数划分——真正的递归经典例题(NYOJ——90)

    先注明学习博客的地址:(http://www.cnblogs.com/hoodlum1980/archive/2008/10/11/1308493.html) 题目描述:任何正整数n都可以写成n=n1 ...

  10. java websocket中的ping-pong 机制

    参考源码: https://github.com/TooTallNate/Java-WebSocket/blob/master/src/main/java/org/java_websocket/cli ...