zoukankan      html  css  js  c++  java
  • (转)Static MemoryLayout_shadow memory

    转载地址:http://www.cnblogs.com/kuwoyidai/archive/2010/10/15/1870455.html

    常规内存(Conventional Memory):系统内存的第一个640 KB就是著名的常规内存。每一个PC机用户随着时间的推移都更加清楚的知道它,(也更加恨它:)),它是标准DOS程序、DOS驱动程序、常驻内存程序等可用的区域,它们统统都被放置在00000h~9FFFFh之间。

    上位内存区(Upper Memory Area):系统内存的第一个1M内存顶端的384 KB(1024 KB - 640 KB)就是UMA,它紧随在常规内存之后。也就是说,第一个1M内存被分成640KB常规内存和384KB的UMA。这个区域是系统保留区域,用户程序不能使用它。它一部分被系统设备(CGA、VGA等)使用,另外一部分被用做ROM shadowing和Drivers。UMA使用内存区域A0000h~FFFFFh。 
    高端内存区(High Memory Area):系统内存第2个1M内存的第一个64 KB区域,被称做HMA。从技术上讲,它属于扩展内存的第一个64 KB,但它和其他扩展内存区域所不同的是,它可以在real mode下被直接访问,其它的则不然。所以在DOS时代,后期的DOS版本允许用户通过配置将DOS本身放置在HMA,从而让用户可以有更多的常规内存可以使用。HMA占据地址100000h~10FFEFh。 
    扩展内存(Extended Memory):从HMA结束的位置到系统物理内存的最大值之间的区域都属于扩展内存。当一个OS运行在Protected Mode时,它可以被访问,而在Real Mode下,则无法被访问(除非通过某些Hacker方法)。它的地址范围是10FFF0h~Last address of system momory(maximum of 4G-1M)。从技术上说,HMA也属于扩展内存,这依赖于你如何看待这个问题。

    1.1.3 Upper Memory Area

    PC机组织内存的方式有些让人感到困惑——欢迎来到最让人困惑的部分:)。在640 KB常规内存之上的384 KB部分被称为Upper Memory Area或者UMA,这是一个非常繁忙的地带。它非常重要,因为它是许多系统配置问题的根源。

    UMA让人感到如此困惑的一个原因是它实际上是2个互相交叠的内存。这里存在一段占据物理地址A0000h~FFFFFh的RAM;然而,也有一段不同类型的ROM被影射到这段地址的大部分区间。其中,和ROM有相同地址的部分的RAM被系统隐藏了,它们被BIOS用做ROM shadowing。没有被隐藏的部分仍然可以被OS和Application使用。

    为什么会造成这种情况?部分原因是为了实用:如果一台PC机有640 KB的常规内存,以及384 KB的UMA,那么你插在主板上的物理内存是连续的——没有一种实用的方法构造一个SIMM(Single In-line Memory Module,见本节末尾注解)为UMA留出一个384 KB的物理块(当然,从技术上可以做到,但成本比浪费这384 KB RAM的代价要高的多)。其它的主要原因是:RAM给你提供一种提高性能的选项,比如当你使用UMA存放drivers,或者UMA被用做ROM shadowing的时候。

    RAM覆盖了整个384 KB区域,而ROM只覆盖了一部分。所以你可以这样考虑UMA中的RAM和ROM:RAM是放在桌子上的一条彩色的纸带,而ROM是一条同样尺寸的白色纸带,白色纸带被剪了一些洞,然后覆盖在彩带上面。那些有洞的部分露出的彩色部分就是可以供OS和应用程序使用的UMA RAM,剩余的部分就是ROM部分,OS和应用程序不能使用它们。

    Address

    First 16K
    (x0000h-x3FFFh)

    Second 16K
    (x4000h-x7FFFh)

    Third 16K
    (x8000h-xBFFFh)

    Fourth 16K
    (xC000h-xFFFFh)

    A0000- AFFFFh

    VGA Graphics Mode Video RAM

    B0000- BFFFFh

    VGA Monochrome Text Mode Video RAM

    VGA Color Text Mode Video RAM

    C0000- CFFFFh

    VGA Video BIOS ROM

    IDE Hard Disk BIOS ROM

    Optional Adapter ROM BIOS or RAM UMBs

    D0000- DFFFFh

    Optional Adapter ROM BIOS or RAM UMBs

    E0000h- EFFFFh

    System BIOS Plug and Play Extended Information

    F0000- FFFFFh

    System BIOS ROM

    UMA的布局

    下面是对上面表格中内容的概要介绍:

    VGA Graphics Mode Video RAM: 内存A0000h~AFFFFh的64 KB块被系统保留作为VGA图形显示内存。最初的VGA是320x200,256色模式,这种模式需要64,000 bytes。当然现代显卡使用更多的内存。这个RAM区域被系统保留,应用程序被禁止使用它。 
    VGA Monochrome Text Mode Video RAM: 当显卡处于单色文本模式时,会使用这32 KB RAM。然而,在现代系统中,显卡已经几乎不使用黑白文本模式;即使当需要显示黑白文本的时候,也只会使用彩色文本模式黑白色彩来显示黑白文本而已。在某些环境下,这块内存可以被用做驱动程序,来节省常规内存的空间。 
    VGA Color Text Mode Video RAM: 当显卡处于彩色文本模式时,会使用这32 KB RAM。这个RAM区域被系统保留,应用程序被禁止使用它。 
    VGA Video BIOS ROM: C0000~C7FFFh是Video BIOS ROM的内存位置。Video BIOS ROM中包含着被Video Card使用的代码。注意这块ROM里存放的是BIOS INT 10H所使用的服务代码,而不是被Video Card显示的数据,如果是显示数据,就应该被放置在RAM中。 
    IDE Hard Disk BIOS ROM: C8000h 是存放控制IDE Hard Disk的BIOS的默认位置。在系统被启动的阶段,这块BIOS代码将会被调用。 
    Optional Adapter ROM BIOS or RAM UMBs: CC000h ~ DFFFFh 之间的内存块可以被PC厂商随意使用。这块内存可以被Hardware Adapters用来存放ROM代码(例如,一些网卡,或者SCSI host adapters)。 也可以被用做进行Loading Drivers的上位内存块RAM。这块内存通常是空的,除非你使用了那些刚才被提及的特殊硬件。 
    System BIOS Plug and Play Extended Information: E0000h ~ EFFFFh 之间的内存被Plug and Play BIOSes用来存放它的Extended System Configuration Data (ESCD)。 
    System BIOS ROM: UMA的最后64K区域被用来存放system BIOS代码。 

    以下表格中列出了除Video RAM之外的UMA内存布局:

    Address Width Content Description

    C000:0   -   EGA/VGA BIOS ROM (thru C7FF) 
    C400:0     -            Video adapter ROM space 
    C600:0 256bytes PGA communication area 
    C800:0 16K   Hard disk adapter BIOS ROM 
    C800:5 -   XT Hard disk ROM format, AH=Drive, AL=Interleave 
    D000:0 32K   Cluster adapter BIOS ROM 
    D800:0 -   PCjr conventional software cartridge address 
    E000:0 64K   Expansion ROM space (hardwired on AT+) 
         -         128K          PS/2 System ROM (thru F000) 
    F000:0 -   System monitor ROM 
    - -   PCjr: software cartridge override address 
    F400:0 -   System expansion ROMs 
    F600:0 -   IBM ROM BASIC (AT) 
    F800:0 -   PCjr software cartridge override address 
    FC00:0 -   BIOS ROM 
    FF00:0 -   System ROM 
    FFA6:E -   ROM graphics character table 
    FFFF:0 -   ROM bootstrap code 
    FFFF:5 8 bytes     ROM date (not applicable for all clones) 
    FFFF:E 1byte   ROM machine id

    在绝大多数PC中,UMA中包含一个384 KB的RAM内存。如果UMA区域中的任何地址被ROM使用,那么这个地址后面的RAM就被系统隐藏了。然而,这并不意味着这些被隐藏的RAM被浪费了。

    对于这些被用做System ROM和Video ROM的ROM来说,它的一个问题就是它比RAM的访问速度要慢。ROM的访问时间一般为120到200纳秒,而RAM的访问时间一般为50到70纳秒;更何况,系统RAM一次访问32-bit,而ROM是16-bit。结果就是,相对于访问系统内存,访问BIOS代码是非常慢的。

    所以,我肯定你已经知道我要说什么了:既然在ROM的后面隐藏着RAM,我们可以将ROM中的内容影射到RAM中以提高性能。事实上,绝大多数系统也是这么做的,这被叫做ROM Shadowing。你可以通过一组BIOS参数来控制哪些ROM区域被影射到RAM中。

    当一个内存区域的shadowing被通过配置BIOS参数打开的话,如果PC机被加电,则在机器启动的过程中,BIOS会将ROM中的内容拷贝到相应的RAM中(应该是先copy到0-640k,然后在北桥芯片里调整PAM register使其地址线对应到相应的RAM,在解压到这段RAM),然后将这段RAM设为写保护,然后禁止使用ROM。这个时候,这些RAM就看起来象ROM一样了。只不过性能要高于真正的ROM。

  • 相关阅读:
    linux 系统函数 basename和dirname
    写linux脚本你怎么能不知道位置参数!?
    Linux 使用中history 默认记录数不够用了?
    在C/C++中常用的符号
    java23种设计模式之一: 策略模式
    工作中用到的git命令
    注解@Aspect实现AOP功能
    AOP 面向切面 记录请求接口的日志
    javaWeb导出POI创建的多个excel的压缩文件
    nginx的重试机制以及nginx常用的超时配置说明
  • 原文地址:https://www.cnblogs.com/god_like_donkey/p/2162057.html
Copyright © 2011-2022 走看看