内存的使用方法

文档序号:6609060阅读:163来源:国知局
专利名称:内存的使用方法
技术领域
本发明是有关于一种内存的使用方法,且特别是有关于一种使用对应于内存映射式输入输出(Memory-Mapped I叩ut Output, MMIO)所占用的地址空间的内存 的方法。
背景技术
在英特尔(Intel) 80x86系列与其它的处理器家族中,均定义分离的地址空 间来存取内存与周边装置,其中一种地址空间称为内存空间(Memory印ace),主 要是用于存取内存装置的内容;另一种则是保留给周边装置使用,称为输入/输出 空间(I/O space)。当然,这些周边装置也可以占用内存空间,这完全取决于硬 件的设计者,当使用这种设计方式时,我们称这些周边装置为内存映射式装置 (Memory-mapped device)。由处理器的观点来看,内存映射式装置的动作就像是一般的内存,但其功能 却完全不同于内存。这类周边装置不仅仅是单纯地提供数据存储的功能而已,它还 会将收到的信息当成命令或是数据来做处理。如果周边装置存在于内存空间中,我 们称该系统为使用内存映射式输入/输出(Memory-Ma卯ed 1/0, MMIO)的系统。使用内存映射式输入/输出的方式可以省去部份配置输入/输出硬件所占用的 空间,因为许多的线路都可以整合在一起。这种方式可能无法有效降低整个电路板 的成本,但是能降低硬件设计的复杂度。使用内存映射式的周边装置也对程序设计 者较有利,因为这样就可以利用指标、数据结构等软件技术来与周边装置互动,让 程序比较有效率,并容易设计。值得注意的是,内存地址空间中的每个地址均对应于实体内存,处理器也是 依据内存地址空间中定义的地址去存取实体内存中的数据。采用内存映射式输入/ 输出的方式必须在内存地址空间中保留一个特定区段,以作为存取内存映射式输入 /输出装置之用。其中,对于一个使用32位操作系统的电脑来说,就必须在第一个4G的地址空间中保留一段地址空间给内存映射式输入/输出使用。
然而,此特定区段的地址空间也会对应到实体内存,而这部份的实体内存在 系统使用内存映射式输入/输出时,即会因为其对应的内存地址被占用,无法提供 给处理器运用,因而造成内存的浪费。
为了解决这个问题,现有的作法是要求操作系统进入实体地址扩充(Physical Address Extension, PAE)模式,在此模式下操作系统能够存取大于等于4G的内 存地址空间,此时再利用北桥芯片的内存重新映射(remap)功能,将内存地址空 间中被内存映射式输入/输出所占用的特定区段的地址空间映射至4G以上的地址 空间。在满足上述所有的情况下,当操作系统或应用程序有需要使用者此特定区段 的地址空间所对应的实体内存时,即可通过处理器送出一个大于等于4G之内存地 址,而存取实体内存的数据。然而,采用上述地址空间重新映射的方式,操作系统 必须支持实体地址扩充模式、北桥芯片也必须配备有内存重新映射功能,同时处理 器也必须支持能够送出大于等于4G的内存地址的功能,只要缺少其中一项因素就 无法达成上述使用实体内存的功效,因此在大部份的情况下,此部份的实体内存仍 无法被有效运用,仍旧会造成内存的浪费。

发明内容
有鉴于此,本发明提供一种内存的使用方法,通过调整芯片组的低阶内存顶 端(Top of Low Memory, TOLM)值,而能够对内存映射输入输出(Memory Mapped Input Output,羅IO)功能占用的地址空间所对应的内存区块做有效的运用。
为达上述或其他目的,本发明提出一种内存的使用方法,此方法包括下列步 骤首先,接收一个内存存取指令,此内存存取指令系要求使用系统的内存中内存 映射输入输出(Memory Mapped Input Output,蘭IO)功能所占用的地址空间所对 应的内存区块。接着,进入内存存取模式,而将系统的芯片组的低阶内存顶端(Top of Low Memory, TOLM)寄存器的TOLM值更新为内存的最高地址。然后就可依据内 存存取指令中记录的地址空间,存取内存中对应的内存区块。最后则离开此内存存 取模式,而将原始的TOLM值写回TOLM寄存器。
在本发明的一实施例中,将系统芯片组的TOLM寄存器的TOLM值更新为内存 的最高地址的步骤包括先取得系统的芯片组的输入输出高级可编程中断控制器(I/O Advanced Programmable Interrupt Controller, I0APIC)的基本地址,然 后比较最高地址及基本地址的大小,若最高地址大于等于基本地址,则将基本地址 写入TOLM寄存器;反之,若最高地址小于基本地址,则将最高地址写入TOLM寄存 器。
在本发明一实施例中,在进入内存存取模式,而将系统芯片组的TOLM寄存器 的TOLM值更新为内存的最高地址的步骤之后,还包括将一组程序代码载入内存映 射输入输出功能所占用的地址空间对应的内存区块,并执行此程序代码,最后在程 序代码执行完毕时,才离开内存存取模式。
在本发明一实施例中,在进入内存存取模式之后还包括将系统对内存映射输 入输出寄存器的存取功能禁能,而在离开内存存取模式之后则将此系统对内存映射 输入输出寄存器的存取功能使能。
在本发明一实施例中,上述最高地址为对应于内存总容量大小的地址空间, 而可根据系统管理基本输入输出系统(System Management Basic Input Output System, SMBIOS)数据中有关于实体内存的数据计算而得。
在本发明一实施例中,上述内存存取指令包括由系统的操作系统及应用程序 其中之一所发出。
在本发明一实施例中,在进入内存存取模式之后还包括存储系统的芯片组的 TOLM寄存器的原始TOLM值。
在本发明一实施例中,上述芯片组包括北桥芯片。
本发明因采用调整TOLM值的作法,通过TOLM值暂时调到内存的最高地址, 使得系统能够使用原本由存取内存映射输入输出(Memory M邻ped I叩ut Output, 應IO)功能所占用的地址空间,进而达到存取其所对应的内存区块的目的。
为让本发明的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实 施例,并配合附图作详细说明如下。


图1是依照本发明一实施例所绘示的内存地址空间的配置图。 图2是依照本发明一实施例所绘示的内存地址空间与实体内存的对应关系图。 图3是依照本发明一实施例所绘示的内存的使用方法流程图。图4是依照本发明另一实施例所绘示的内存的使用方法流程图。
具体实施例方式
为了能够支持内存映射输入输出(Memory Mapped I叩ut Output,画IO)功 能,传统的作法必须在地址空间中保留一个特定区段给其使用。然而,在没有需要 使用MMIO功能的情况下,这个特定区段的地址空间就可以拿来给系统做运用,而 用以存取对应的实体内存。本发明即是基于上述概念所发展出来的一套内存的使用 方法,为了使本发明的内容更为明了,以下特举实施例作为本发明确实能够据以实 施的范例。
图1是依照本发明一实施例所绘示的内存地址空间的配置图。请参照图1,本 实施例适用于一般支持32位的系统(其支持的地址空间最大为4G),此系统系利 用芯片组(例如是北桥芯片)中的一个低阶内存顶端(Top of Low Memory, T0LM) 寄存器来记录系统所能使用的内存地址空间的最高地址(即所谓T0LM值),而在 此TOLM值之后的内存地址空间必须保留给内存映射输入输出(Memory Mapped Input Output,醒IO)功能使用。换句话说,TOLM值代表的就是系统实际可以存 取实体内存的最高地址,而此最高地址例如可根据系统管理基本输入输出系统
(System Management Basic I叩ut Output System, SMBI0S)数据中有关于实体 内存的数据计算而得,而不限制其范围。
图2是依照本发明一实施例所绘示的内存地址空间与实体内存的对应关系图。 请参照图2,图2进一步绘示出内存地址空间210与实体内存220的对应关系,其 中TOLM值例如是C000—OOOOh,而介于TOLM值与输入输出高级可编程中断控制器
(I/O Advanced Programmable Interrupt Controller, 10 APIC)的基本地址(例 如FEC0J)000h)之间的区域即为上述所谓保留给内存映射输入输出功能使用的地 址空间。由图2中可明显看出,实体内存220中划斜线的区域即为系统可存取到的 内存区块221,而介于系统可存取最高地址与实体内存最高地址之间的内存区块 222则由于其所对应的地址空间已挪给内存映射输入输出功能使用,因此实际上是 形同浪费的。
为了能够存取上述闲置的内存区块222,本发明即通过将TOLM值暂时重设为 实体内存的最高地址(例如4G),而能够将其所占用的地址空间释放出来给系统运用,以存取内存区块222。以下则举实施例说明本发明的内存使用方法的详细步 骤
图3是依照本发明一实施例所绘示的内存的使用方法流程图。请参照图3,本 实施例适用于32位的系统,此系统可支持4G的内存地址空间。本实施例仅为举例 说明,而不限定本发明的应用范围,熟知本领域技术者当可视实际需要,将本发明 应用至32位以上或其他不同规格的系统。
当系统有大量的内存需求,而需要使用到原本由内存映射输入输出(Memory Ma卯ed Input Output,丽IO)功能占用的地址空间所对应的内存区块(以下简称 醒IO内存区块)时,操作系统或是应用软件便会发出一个内存存取指令,而执行 本发明的方法去要求处理器去存取此丽IO内存区块中的数据。本发明的方法即在 接收到此内存存取指令(步骤S310)之后,随即进入内存存取模式,而在此内存 存取模式中,存储在系统芯片组的一个低阶内存顶端(Top of Low Memory, TOLM) 寄存器中的TOLM值将会被更新为此内存的最高地址(步骤S320),此最高地址系 为对应于内存总容量大小的一个地址空间的最大值。举例来说,若内存总容量大小 为4G,则此系统所能存取的地址空间的最大值即为1—0000J)000h。
在将TOLM值转移到地址空间最大值之后,系统即能运用此空下来的地址空间, 而对其所对应的應IO内存区块进行存取,此时即可依据前述内存存取指令所记录 的地址空间,来存取内存中对应的顧10内存区块(步骤S330)。
值得一提的是,'本发明除了一般存取内存的功能外,还包括将一段程序代码 载入此醒10内存区块,而将处理器的控制权交由此程序代码去执行。当然,由于 此时无法使用内存映射输入输出的功能,因此这里所执行的程序代码也就不能直接 对内存映射输入输出寄存器进行存取。
最后,在对此MMIO内存区块进行存取,或是在载入此羅IO内存区块的程序 代码执行完毕之后,系统即会离开此内存存取模式,而将原始T0LM值写回T0LM 寄存器(步骤S340)。其中,此处所谓的原始TOLM值即为系统进入内存存取模式 之前,TOLM寄存器中存储的TOLM值的原始值,而系统在进入内存存取模式,也会 将此原始T0LM值存储起来,而作为系统之后回复状态之用。
值得注意的是,本发明在转移TOLM值后,虽可使用较大的内存区块,但相对 地也就无法使用内存映射输入输出的功能。因此,本发明还包括在进入内存存取模式时,将系统对内存映射输入输出寄存器的存取功能禁能,禁止操作系统或应用程 序去存取此内存映射输入输出寄存器,避免系统产生可能的错误;相对地,在离开 内存存取模式时,则是将系统对内存映射输入输出寄存器的存取功能使能,让系统 重新能够使用内存映射输入输出功能。
承上述,在此实施例中,本发明将TOLM值转设定为内存地址空间的最大值,
而在本发明的另一实施例中还包括将输入输出高级可编程中断控制器(I/O Advanced Programmable Interrupt Controller, I0APIC)的基本地址考虑在内, 以下则另举一实施例详细说明
图4是依照本发明另一实施例所绘示的内存的使用方法流程图。请参照图4, 由于内存地址空间中对应于输入输出高级可编程中断控制器的部份原本是接续在 内存映射输入输出功能所占用的地址空间的后面,而此输入输出高级可编程中断控 制器的地址空间通常存储有重要的输入输出数据,因此在存取实体内存时,最好避 免使用到此地址空间区段的数据。其中,上述地址空间区段例如是从自输入输出高 级可编程中断控制器的基本地址开始,直到内存的最高地址为止的地址空间区段, 以图2来说,即为FEC0—OOOOh到1—0000J)000h之间的地址空间区段。
据此,本发明即包括在进入内存存取模式时,判断此输入输出高级可编程中 断控制器的基本地址与内存的最高地址的大小,而决定要将TOLM值设为上述基本 地址或是最高地址,其步骤详述如下
类似于前个实施例,本实施例在接收到此内存存取指令(步骤S410)之后, 亦会进入内存存取模式,此时系统即会先去取得系统的该芯片组的输入输出高级可 编程中断控制器的基本地址,并取得内存的大小(步骤S420)。
接着即可将此输入输出高级可编程中断控制器的基本地址与内存的最高地址 做比较,例如判断内存的最高地址是否大于等于输入输出高级可编程中断控制器的 基本地址(步骤S430),其中,若内存的最高地址大于等于输入输出高级可编程 中断控制器的基本地址,则可将此基本地址写入TOLM寄存器,亦即将TOLM值设为 此高级可编程中断控制器的基本地址(步骤S440),而避免系统使用到高级可编 程中断控制器所对应的内存;反之,若内存的最高地址小于基本地址,则无此问题, 此时即可如前述般将最高地址写入TOLM寄存器(步骤S450)。
在将T0LM值转移后,系统即能运用此空下来的地址空间,而对其所对应的MMIO内存区块进行存取,此时即可依据前述内存存取指令所记录的地址空间,来 存取内存中对应的MMIO内存区块,或是在将程序代码载入此羅IO内存区块中执行 (步骤S460)。
最后,在对此顧IO内存区块进行存取,或是在载入此画IO内存区块的程序 代码执行完毕之后,系统即会离开此内存存取模式,而将原始TOLM值写回TOLM 寄存器(步骤S470),而让系统回复之前的状态。
综上所述,本发明的内存的使用方法至少具有下列优点
1. 将TOLM值指向较高的内存地址空间,因此操作系统能够在不支持或进入实 体地址扩充模式的情况下,就可以使用MMIO内存,排除操作系统不相容的可能性。
2. 无需使用到内存重新映射(remap)的功能,相对地也没有芯片组支不支持
重新映射功能的问题,可简化芯片组所需的操作功能,节省成本。
3. 对于32位的系统来说,无需使用到大于4G的内存地址空间就能够存取MMI0
内存,因此系统的处理器也不必支持到送出大于4G以上地址空间的指令。
虽然本发明己以较佳实施例揭示如上,然其并非用以限定本发明,任何熟习 此技艺者,在不脱离本发明的精神和范围内,当可作些许更动与润饰,因此本发明 的保护范围当以权利要求所界定的为准。
权利要求
1.一种内存的使用方法,包括下列步骤接收一内存存取指令,其中该内存存取指令系要求使用一系统的一内存中由一内存映射输入输出功能所占用的一地址空间对应的一内存区块;进入一内存存取模式,而将该系统的一芯片组的一低阶内存顶端寄存器的一TOLM值更新为该内存的一最高地址;依据该内存存取指令中记录的该地址空间,存取该内存中对应的该内存区块;以及离开该内存存取模式,而将原始的该TOLM值写回该TOLM寄存器。
2. 如权利要求1所述的内存的使用方法,其特征在于,将该系统的该芯片组的 该TOLM寄存器的该TOLM值更新为该内存的该最高地址的步骤包括取得该系统的该芯片组的一输入输出高级可编程中断控制器的一基本地址; 比较该最高地址及该基本地址的大小;若该最高地址大于等于该基本地址,则将该基本地址写入该TOLM寄存器;以及若该最高地址小于该基本地址,则将该最高地址写入该TOLM寄存器。
3. 如权利要求1所述的内存的使用方法,其特征在于,在进入该内存存取模式, 而将该系统的该芯片组的一 TOLM寄存器的该TOLM值更新为该内存的该最高地 址的步骤之后,还包括-载入一程序代码至该内存映射输入输出功能所占用的该地址空间所对应的该 内存区块;以及执行该程序代码,并在该程序代码执行完毕时,离开该内存存取模式。
4. 如权利要求1所述的内存的使用方法,其特征在于,在进入该内存存取模式 之后还包括禁能该系统对一内存映射输入输出寄存器的一存取功能。
5. 如权利要求4所述的内存的使用方法,其特征在于,在离开该内存存取模式 之后还包括使能该系统对该内存映射输入输出寄存器的该存取功能。
6. 如权利要求1所述的内存的使用方法,其特征在于,该最高地址为对应于该 内存的总容量大小的该地址空间。
7. 如权利要求1所述的内存的使用方法,其特征在于,该最高地址包括根据该 系统管理基本输入输出系统数据中有关于该内存的数据计算而得。
8. 如权利要求1所述的内存的使用方法,其特征在于,该内存存取指令包括由该系统的一操作系统及一应用程序其中之一所发出。
9. 如权利要求1所述的内存的使用方法,其特征在于,在进入该内存存取模式之后还包括存储该系统的该芯片组的该TOLM寄存器原始的该TOLM值。
10. 如权利要求l所述的内存的使用方法,其特征在于,该芯片组包括北桥芯
全文摘要
本发明公开了一种内存的使用方法,此方法是在接收到一个内存存取指令时,即进入一个内存存取模式,而将系统的芯片组的低阶内存顶端(Top of Low Memory,TOLM)寄存器的TOLM值更新为内存的最高地址。其中,上述内存存取指令系要求使用系统的内存中由内存映射输入输出功能(Memory-Mapped Input Output,MMIO)所占用的地址空间对应的内存区块。接着,系统即可依据内存存取指令中记录的地址空间,存取内存中对应的内存区块,并在存取结束后,离开此内存存取模式,而将原始的TOLM值写回TOLM寄存器。据此,本发明即可存取此”MMIO”内存区块,避免内存的浪费。
文档编号G06F12/02GK101303665SQ200710103449
公开日2008年11月12日 申请日期2007年5月10日 优先权日2007年5月10日
发明者卢盈志 申请人:英业达股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1