CN1090780C - 存储管理的方法和装置 - Google Patents
存储管理的方法和装置 Download PDFInfo
- Publication number
- CN1090780C CN1090780C CN94191425A CN94191425A CN1090780C CN 1090780 C CN1090780 C CN 1090780C CN 94191425 A CN94191425 A CN 94191425A CN 94191425 A CN94191425 A CN 94191425A CN 1090780 C CN1090780 C CN 1090780C
- Authority
- CN
- China
- Prior art keywords
- transient state
- memory block
- module
- piece
- storage
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0615—Address space extension
- G06F12/0623—Address space extension for memory modules
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明为DOS可执行程序或“模块”提供了一个环境,其中这样构造程序或模块,使它们与其它类似构造的程序协作共享其代码或数据所使用的存储区。这减少了对常规存储区(102)的总需求。模块包括可换出常规存储区的瞬态代码和数据(403)和不可交换并驻留常规存储区的全局代码和数据(402)。本发明不把模块瞬态块换入和换出磁盘存储器(204),而在常规存储区和扩充存储区(111)或扩展存储区406间交换瞬态块。与覆盖方案相比,这大大降低了传递时间,提高了性能。
Description
技术领域:
本发明主要涉及的领域是计算机存储系统,尤其涉及一种控制和优化使用计算机存储器的存储管理系统。
背景技术
通常的计算机系统由许多模块或元件组成。计算机系统包括一个诸如微处理器的中央处理器(CPU)。微处理器是一个程序控制设备,能获得、解译和执行指令。计算机系统还包括用于存储系统操作软件、应用程序指令和数据的存储元件。这些存储元件可以是只读存储器(ROM)、随机存取存储器(RAM),或者象磁盘或磁带等大容量存储器,或者任何其它合适的存储装置。
计算机系统的运行是由一系列称之为“操作系统”的指令来控制的。操作系统用来控制诸如输入/输出等计算机系统的基本功能,并且一般存储在ROM这种永久性的存储元件或以后会装入RAM并在RAM中运行的磁盘存储器中。操作系统的例子有MS-DOS或PC-DOS。计算机系统用来执行应用程序。
在一些处理操作过程中,当对某些数据执行指令时,CPU可能还需要暂时存储这些数据。另外,CPU必须可以访问控制处理的应用程序和控制该程序运行的操作系统。一种称为“主存储器”的RAM就为CPU提供了这种信息。
称为主存储器的存储元件是一种不足的资源,它需动态地分配给用户、数据、程序或处理过程。争夺该不足资源的存储用户有应用程序、TSR(“中断驻留”程序)和其他处理过程。例如,应用程序包括文字处理程序、电子表格、绘图程序、数据库等等。某些应用程序可以存储在ROM中。但一般把应用程序存储在诸如磁盘驱动器等大容量的存储设备中。在初始化的基础上,把CPU将要执行的应用程序从大容量存储器传送到RAM。
计算机系统上也使用中断驻留程序。这种程序提供“热键”和“弹出型窗口”,并且用来进行后台作业,如在视频显示器的角落中显示一钟,或者监测磁盘驱动器的活动情况等。已为许多其他的应用程序编写了TSR,而且用户常常希望同时在他们的计算机里驻留几个TSR。由于每个TSR都需要其存放的存储空间,所以把TSR加至系统上也要增加对主存储器的存储需求。
主存储器一般是诸如RAM的硅底存储器。换句话说,动态随机存取存储器(DRAM)可用作主存储器。主存储器RAM可以作为常规存储区(conventional memory)、扩充存储区(extended memory)和扩展存储区(expanded memory)来访问。常规存储区
常规存储区是RAM中CPU最易访问的一个区域。常规存储区中最好存储CPU所需的数据和指令。但是,常规存储区的大小是有限的,这会限制常规存储区中数据和指令的存储量。
早期的微机有16位地址总线,它们提供64K的地址空间。随着应用程序对存储量需求的增长,微机必须克服16位地址总线的局限。这样,IBM个人计算机便引进了一种支持20位地址总线的分段寻址方案(segmented addressing scheme)。20位地址总线提供1024K或1M的地址空间,该空间是16位总线的16倍。原来设计的IBM PC机和系统软件人为地限制了常规存储区为640K。从640K到1M的384K地址空间留作将来使用,主要留给ROM使用。由于把以后的计算机设计成与原始IBM PC机是向下兼容的,并且使用相同的PC-DOS、MS-DOS操作系统,所以在现代计算机上,常规存储区640K的限制继续约束着应用程序所能使用的存储量。扩充存储区
扩充存储区是大于1024千字节的RAM,若微处理器有足够数量的地址线的话,则可直接对其寻址。例如,Intel 80286微处理器具有24位的寻址能力,而且可以对第一个1M存储区以上的15M扩充存储区寻址。Intel 80386和80486微处理器具有32位的寻址能力,并且可以对第一个1M存储区以上大约4千兆字节的扩充存储区寻址。扩展存储区
扩展存储区也称为“扩展存储规范(expanded memory specifi-cation)”(EMS),它保留一部分不能直接访问的扩充存储区作为扩展存储区,并将其分成页面。每次向CPU可直接访问的地址空间换入一页扩展存储区,这样EMS能够虚拟地访问无限量的存储区。但是,EMS转换页面要花时间。如果所需的数据不在位于可直接访问的存储区内的EMS页面中,那么EMS必须调出页面中的当前内容,并且从扩展存储区调入包含所需数据的页面。由于这种换页需要时间,所以会降低计算机的处理速度。再有,EMS一般并不适用于所有的应用软件。如果可行,必须为利用EMS特地编写应用软件。存储图
图1描绘了一常规计算机上主存储器RAM的存储图,即是一个基于微处理器8088/8086族并在MS-DOS下运行的计算机,如IBM个人计算机等。图1的存储图不是唯一可能的存储图,但是一例典型的存储图。存储图自底向上管理,存储单元零(101)位于底部,连续向上一直到顶部存储器中的最高单元。存储图有三个基本区。第一区包括最低存储区640K,称为常规存储区102。尽管并非所有系统都包括整个640K,并且可把一些存储空间留着不用,但常规存储区102完全由RAM组成,允许读操作和写操作。
常规存储区102用来存储系统软件、应用软件、用户数据以及其它代码和数据,还有TSR和设备驱动程序。如图1所示,MS-DOS用存储区的最低部分来存储其本身代码106及相关数据107。在此之上,MS-DOS存储应用软件、TSR和设备驱动程序,图中用单元112集中表示。
常规存储区以上是384K保留存储区103,它位于640K RAM界和1024K之间的存储地址中。保留存储区103主要被ROM占据,是只读设备。保留存储区中的ROM包括系统ROM、显示ROM,也许还有其它诸如硬盘驱动器或网终接口等外围设备用的ROM。除了ROM以外,保留存储区103还包括其它特定类型的存储器,如视频画面贴缓冲器(video frame buffer)等。
系统ROM支持计算机的基本操作,一般占据(例如)保留存储区103中从960K至1024K的最高的64K。保留存储区103中剩余的空间或者不用,或者用于其它目的,包括支持其它外围设备或EMS页面的ROM。
如上所述,扩充存储区111包括1M以上的所有存储区。诸如80286等具有24位寻址能力的微处理器可以对16M存储区寻址,即除了1M的保留存储区103和常规存储区102之外还可包括15M的扩充存储区。诸如80386和80486等具有32位寻址能力的微处理器可以对4G存储区寻址,即除了1M的保留存储区103和常规存储区102之外还可包括4095M的扩充存储区。扩充存储区111的区域刚好位于1M以上,有时称为高位存储区(high memory area)113。
随着TSR的增多及应用程序变大,常规存储区中空间争夺更为激烈。最好在保持使用TSR的同时为应用程序提供更多的常规存储区。
可以通过减少TSR使用的存储量、减少TSR的数目,或者通过把TSR重新定位在常规存储区以外的存储区中,来增加应用程序可采用的常规存储量。
人们不希望减少TSR的数目,因为这会减少功能或降低性能。减少每个TSR所用的常规存储量是不实际的,因为这需要重写每个TSR。
由于TSR占据了一些原可由应用软件使用的常规存储空间,所以如果把这些程序移至常规存储区102以外的存储区,则可有更多的存储空间为应用软件使用。有一种现有技术方法,它通过把TSR从常规存储区102移至保留存储区103,来增加可为应用程序使用的常规存储区102的存储量。
为了实现该目的,必须首先确定保留存储区103中未使用的存储量。还必须确定TSR占据常规存储区的存储量。然后,必须把扩充存储区中足够多未分配的RAM映射到保留存储区,从而为TSR提供存储空间。接着,把TSR重新定位到保留存储区103的有效存储区中。
该种现有技术方法有缺点。首先,它只能使用未分配的保留存储空间。它不能使用已经分配给ROM、视频画面帧缓冲器或作其它使用的保留存储区。还有,对TSR的再定位必须保证所有对它们的引用都再指向其新的单元。
另一种从常规存储区再定位的现有技术方法称为“覆盖(over-lay)”。覆盖是把程序可执行部分按需要换入和换出存储区。覆盖的缺点是要求使用覆盖的程序与一覆盖管理器连接,该覆盖管理器对存取位于覆盖区中的函数和数据进行控制。
图2A和2B描绘了一例覆盖方案。首先参看图2A,第一个1024字节的、CPU可作访问的RAM用存储块201表示。存储块201包括一常规存储区102。常规存储区102在较低的地址处包括区域202,用来存储诸如DOS等操作系统代码。常规存储区102的剩余部分112在DOS区202以上、保留存储区103以下,用来存储应用程序、TSR和设备驱动程序等等。
有些应用程序太大,不能完全存储在常规存储区112中。例如,Word Perfect就是这样的应用程序,它是一个字处理应用程序。因此,在任何一个时刻,只有一部分Word Perfect被存储在存储区112中。其余部分则被存储在诸如磁盘存储器204等其它存储器中。当需要部分应用程序时,把它们从磁盘存储器204传送至存储区112。
在图2A的例子中,块A203表示一部分应用程序,其存储在存储区112中。块B205和块C206是应用程序分成的其它两个部分,它们存储在磁盘存储器中。磁盘存储器204通过一总线或其它传输装置207与RAM201耦合。
当正在调用或使用块A203中的功能时,块A203驻留在存储区112中。当需要其他功能时,必须把提供该功能的代码从磁盘存储器204传送给存储区201。现在参看图2B,块B205从磁盘存储器204传送至存储区112。由此,把原先驻留在存储区112中的应用程序部分块A203传送至磁盘存储器204。图中示出块B205比块A203占据了更多的存储区112。诸块不需要一样大小,但其存储空间不能超过存储区112中可使用的地址空间。
覆盖的缺点是,它们要从一磁盘文件换进换出,这会加长执行时间并降低性能。某些程序需要一些代码和数据总是驻留在常规存储区中。而覆盖不提供任何识别常驻常规存储区代码和数据的方法。当交换块A203和块B205时,它们被整个调换。块A203没有任何部分会留在存储区112中。因此,这种程序不能使用覆盖方案。某些TSR不能转变成覆盖区。这些TSR包括那些提供内部DOS功能的TSR。例如,由犹他(Utah)州普罗沃(Provo)的Novell股份有限公司生产的Netware DOS客户软件。
因此,现有技术没有提供一种系统,这种系统能减少TSR使用的常规存储量但不牺牲性能。
发明内容
本发明提供DOS可执行的程序,这些程序如此构造,即它们能够与其它相似构造的程序协调共享其部分代码或数据使用的存储区。这减少了对常规存储区的总需求。在本发明中,这些程序被称为模块,它们可以是应用程序、TSR或任何其它转变成该模块格式的可执行文件。模块包括可从常规存储区换出的瞬态代码和数据,以及不可交换并驻留在常规存储区中的全局代码和数据。
通过提供驻留在存储区中的全局数据块,本发明的模块能够调用其它模块以及中断处理程序和其它外部或异步使用的代码或数据。因此,本发明比覆盖技术支持更多的程序设计接口。
本发明允许模块共享单块常规存储区,这就减少了对常规存储区的需求。无论模块有多少,分给它们使用的常规存储块的大小是一样的。分配的存储块要足够大,足以存储共享常规存储块的模块中最大块的瞬态代码或数据。
不把模块瞬态块换入和换出磁盘存储器,而把瞬态块在常规存储区和扩充或扩展存储区间交换。这与覆盖方案相比大大地减少了传送时间,提高了性能。
附图概述
图1是一存储图,示出了一常规计算机系统的存储管理。
图2A和2B示出了一现有技术的覆盖方案。
图3示出了本发明的模块结构。
图4A-4E示出了存储管理器的操作。
图5是一流程图,示出了本发明的预初始(pre-init)操作。
图6是一流程图,示出了本发明的实初始(real-init)操作。
图7是一本发明调用模块的流程图。
图8是一实现本发明的计算机系统的方框图。
图9示出了一VMCB数据块。
本发明的最佳实施方式
现将描述一种更有效地使用计算机系统常规存储区的方法。在以下描述中,为了更全面地阐述本发明,将详细描述诸如计算机系统类型、存储地址单元、存储量等许多具体的内容。但是,对于本领域的熟练技术人员,显然不需要这些具体内容就可以实践本发明。在其它情况下,为了不使理解本发明有不必要的困难,这里不再详述众所周知的特性。
本发明为TSR和其它程序提供了一种共享常规存储空间的方法和装置,其减少了对常规存储区的需求。将TSR和诸程序构成“模块”,并且模块管理器控制模块换入和换出常规存储区。在本发明的较佳实施例中,常规存储区每次只驻留一个模块。其余模块存储在扩充存储区或扩展存储区中,这避免了时间的浪费,减少了与磁盘的交换。
图4A-4E示出了模块管理器的运行。图4A描绘了关于常规存储区、保留存储区、扩充存储区和扩展存储区的存储图。常规存储区102在较低的存储区包括DOS存储区202,在常规存储区102中DOS区202的上面是专供模块管理器401之用的空间。在模块管理器401以上是一区域,专供系统用到模块的全局代码和数据之用。存储在全局代码和数据区402以上的是一专供模块的瞬态块之用的区域。瞬态块模块403有一上界404,该上界是在系统中保持不变且由系统中任何模块的最大瞬态块来确定的。在常规存储区102中,上界404以上和保留存储区以下的空间由其它应用程序和处理过程使用。
保留存储区103用于ROM和扩展存储区406。在保留存储区103以上是扩充存储区111(1024千字节以上)。扩充存储器111存储着模块A的瞬态块405。扩展存储区406包括模块B和C各自的瞬态块407和408。
在把全局代码和数据存入全局区402中并限定了瞬态块403的上界404之后,模块管理器就可以在调用模块时访问它们。参看图4B,考虑需要模块B的情况。模块B可能包括常驻在全局区402中的代码。当调用模块B时,模块管理器把模块B的瞬态块407从扩展存储区406转移到常规存储区102的瞬态块403中。这时,其它模块的任何瞬态块都被换出常规存储区。然后,调用模块B的过程便可访问它,就好象模块B一直驻留在常规存储区中。如图4B所示,模块B的瞬态块407并不使用瞬态块403中所有可使用的地址空间。但,瞬态块403的上界404保持不动。
图4C-4E描绘了一个模块调用另一模块的过程。如图4C所示,模块C的瞬态块408驻留在常规存储区102的瞬态块403中。模块C通过模块管理器调用模块A。模块管理器跟踪调用模块和目的模块。模块C的瞬态块408与模块A的瞬态块405交换。参看图4D,现在模块A的瞬态块405存储在瞬态块403中。注意,模块A的瞬态块405占据了瞬态块403所有的地址空间。当模块A执行其被调用的功能后,如图4E所示,模块管理器再把模块A的瞬态块405与模块C的瞬态块408交换。模块结构
在本发明中,把模块的代码和数据构成不同的种类,从而提供一般管理常规存储区中模块的办法。这些类包括一功能调度表(转移表)、瞬态代码和数据、全局代码和数据,以及启动代码和数据。图3示出了模块的格式。
模块301的结构包括302、303和304三个区域。区域302包括一转移表305和一瞬态组(transient group)306。区域303包含全局代码和数据,而区域304包括启动代码和数据。瞬态区302包括“可交换的”代码和数据。也就是说,该数据可在常规存储区和增强存储区(扩充或扩展)之间换入和换出。转移表
转移表305表示模块支持的功能。任何时候都可把转移表(也称为瞬态代码)换出。因此中断处理程序(或任何可直接访问的代码段)不能存在于瞬态代码段中。转移表中的第一入口(first entry)是模块初始程序的指针。转移表至少由四个预定义功能的指针组成,其中预定义功能是所有模块共用的,它们是初始(init)、转储、版本(version)和统计功能。
初始:初始化功能是模块中一初始化程序,该初始化程序进行预初始(pre-init),为初始模块获得必要的参数,并随后进行实初始(real-init),把模块真正装入适当的段。挂钩向量就是在该实初始过程中进行的。
转储:转储功能有利于资源的释放。如果对转储安全性的检查(CX=FFFh)以后返回的是一临界区状态,则转储请求会失败。如果模块工作良好,则没有理由失败,于是对转储安全的检查返回一个零值,这表示实转储是安全的。实转储的请求不能失败。如果一模块的转储检查失败了,那么通知所有先前检查的模块转储取消。(即CX=FFFEh)。
版本:版本功能获取模块的主要版本和次要版本。该功能提供模块间的通用性。该版本功能的其它子功能也在模块间建立通用性。其余子功能(01h=0Bh)还有助于模块相互间有关连接建立、断开等的通信(多点播送multi-casting)。
例如,在第一任务终止时有一多点播送调用(即_Notify处理程序子功能01h,PSP终止)。该子功能是预定主功能的一部分。
统计:统计功能获取对模块的统计。该功能是可选的。统计用于模块调试。统计结构是一长度优先的缓冲器,统计结构表的第一个字表示有效统计信息的字节数。其它所有的统计信息需要被记录在统计大小(stat size)和统计端字段(stat end field)之间。
可以为模块提供其它特定的功能,它们跟在这些预定义的功能之后。终止零(DD0)跟在转移表中模块定义的公共功能和所有其它功能之后。这让模块管理器知道模块支持多少功能,从而避免超出该数目的请求。瞬态数据
类似于瞬态代码,瞬态数据有特殊的要求。某些类型的数据不能存在于瞬态组中。这些受限制的类型包括堆栈和转到另一模块的数据。为了性能方面的原因,所有非全局数据应该位于瞬态数据段中。瞬态数据在增强存储区和常规存储区之间交换。全局代码和数据
全局区303存储那些必须常驻在常规存储区内的代码和数据。例如,可存储在全局区303中的代码和数据包括使用全局代码的中断处理程序,不经过模块管理器存取的远调用处理程序(far callhandler)、堆栈,以及转到其它模块去的数据。可以创建一个在全局区中无存储器的模块。启动区
启动区包括初始化代码。代码提供预初始和实初始操作。在预初始期间,每个模块向一模块管理器提供一VMCB结构的数据块。模块利用初始程序通过该VMCB结构报告所需的初始存储量(包括全局和瞬态存储段)。特别是,VMCB_InitImageParaLength参数定义了预装入的总大小。
模块管理器用VMCB_InitImageParaLength确定在实初始和运行期间有多少存储量会换入和换出。这种确定模块存储分配的方法避免了混淆,并简化了使存储段保持独立的过程。当同时运行全局数据段和保护模式数据段时,保持存储段独立是有用的。如果模块依赖于其它正在装入的模块,那么在预初始阶段可检查模块的依赖性。将伪初始标起(AX=-1)传入该过程。
在实初始期间,要求模块把全局代码/数据从其存储的单元移走。当模块管理器在实初始时调用初始功能时,BX寄存器中定义了该组的目的地。此过程之后,模块必须执行任何转移全局组所必需的安排。执行这些安排以确保数据参考新的位置而不是DOS装入的组。模块管理器:
管理各个模块和多路转接器(multiplexor)的便是模块管理器。应用程序向模块管理器提出所有的调用请求,模块管理器把请求引向其适当的目的地,不管目的地是另一个模块(子女)或多路转接器。模块管理器还保证把回答返回到它们合适的调用程序处。
每个模块通过模块管理器调用其它模块。既使一模块正在调用其特定层的多路转接器,它也向模块管理器提出调用请求,然后由模块管理器调用特定的多路转接器。类似地,当某一调用从一特定模块返回时,该调用从多路转接器经过模块管理器返回特定的模块。
模块管理器的一项任务是保证其余段间的API调用按正确路线进行。因此,模块管理器必须知道是否已经装入了某一给定的用户应用程序所需的模块。经监管调用其它模块的模块。模块管理器还处理异步调用的模块和功能。
模块管理器可使API用数字编号调用功能和模块。模块管理器还通过调用程序模块标识符(ID)得知谁在调用那个功能。模块标识符(ID)是预先派定的。由于模块管理在编号的基础上处理所有的API,所以模块管理器与模块中的单个功能没有内在的依赖关系或相互联系。因而,非请求型(Requester model)部分的模块可把模块用作TSR存储管理器。这就是给予模块管理器的支持各种各样TSR的能力。
模块管理器提供所有模块都需要的基本服务,尤其是那些允许和有利于所有被装模块间调用的服务。因此,模块管理器拥有所有层次的请求型。
模块管理器不仅装入和转储每一模块(包括多路转接器),它还为所有模块处理存储服务(分配和管理)。模块管理器为其模块采取存储交换。
模块管理器决定给定的模块是否使用扩展存储区、扩充存储区、常规存储区或任何支持的存储类型,但不影响模块本身。因此,可把单个子女模块从这些相关的存储区中释放出来。
子女模块仍必须符合某些对存储使用的需求。一旦如此,它们便可获得所有由模块管理器为其处理存储机制的好处。
模块管理器还负责装入时间一配置API。任何模块都可配置。例如,连接表想要一定数量的连接,或者IPX想支持许多ECB,或较大或较小的缓冲器。在这些例子中,模块管理器为模块做工作。
另外,为了优化性能,一用户可能想把一模块装在不交换的存储区中,而不管正在使用的存储类型。理想的情况是由模块管理器来管理最佳配置的变化。为需要该能力的模块配备一个API。
由于模块管理器不能得知所有可能的配置交换,所以请求器(Requester)包括一API,在该API中模块可以规定其本身配置的选项,包括识别这些选项的令牌(token)。这是一个由表驱动的API,可在启动模块时调用,以便从NET·CFG文件分析配置信息。
当模块管理器装载时,它从当前或其它特定目录内的某一文件读取其将要装入的模块。模块管理器按文件规定的次序装入那些模块。
装载模块时,默认使用当前目录。如果你想从一不同的目录装入模块,那么你可以在配置文件中用该模块=命令来指定目录。比如:VLM=C:\NWCLIENT\CONN·VLM
你还可以在模块命令行上为配置文件规定路径。比如:VLM\C=C:\NWCLIENT\NET·CFG
有一组默认模块被硬编码至模块管理器中,它们提供基本功能。但,可用NET·CFG覆盖默认选项。调用模块管理
为了邦模块管理器远调用处理程序找到地址,应用程序用AX寄存器的7A20h和BX=0h实行中断2Fh。模块管理器返回ES:BX中的一个地址,它是远调用地址(模块管理器)的指针。将AX清零,让应用程序知道模块管理器处理了调用。用编号调用系统
模块管理器使用一种唯一识别系统中模块的编号调用系统。功能也由编号调用。该协议要求应用程序向模块管理器提供三条基本信息,包括CALLER_ID,DEST_ID和DEST_FUNC。这三个编号的大小都与WORD相同。
CALLER_ID和DEST_ID是唯一识别特定模块的编号。模块管理器用这些编号换入适当的模块并适当调度调用。
DEST_FUNC表示调用程序想执行哪个功能。目的功能被定义在单个模块中。这些功能由模块转换表区域305定义。
这三个所需的单元共同工作于本系统管理的每一个功能调用。当某一应用程序提出一模块调用时,模块管理器必须获得远调用地址。下列代码例举了应用程序是如何检索远调用地址的。
data segment vlmCallAddress dword 0 data ends code segment 。 。 。 mov ax,7A20h mov bx,0 int 2Fh or ax,ax jnz NO_VLM mov word ptr vlmCallAddress,bx mov word ptr vlmCallAddress+2,ES 。 。 。 NO_VLM: 。 。 。 code ends
下列代码例举了一非模块应用程序利用远调用地址进行_VLMNotify请求,从而返回模块管理器模块的版本。
mov ax,0 push ax ;CALLER_ID mov ax,VLM_ID_VLM ;(01h) push ax, ;DEST_ID mov ax,VLM_NOTIFY ;(01h) push ax ;DEST_FUNC mov bx,0 ;GET VERSION SUB-FUNC call VLMCallAddress
概括地说,调用程序首先将其自己的标识符(ID)推上堆栈。(模块的CALLER_ID用非零,而应用程序用零)然后,调用程序推入想要调用的目的标识符,尤其是多路转接器的标识符或特定子女模块的标识符。最后,调用程序推入希望的功能编号。
有两个保留的(或者唯系统的)功能:功能零和功能二,分别用于初始化和转储。功能一和三也自始至终为各种模块使用。一和三分别用于带有多子功能和模块统计的一般通知功能。
返回时,模块管理器从堆栈中清除CALLER_ID、DEST_ID和DEST_FUNC,所以应用程序不必这样做。这通常称为Pascal调用规则。
模块管理器使用AX和BP两个寄存器。BP只供模块管理器内部使用。应用程序不可用BP进行任何参数请求。BP只可用来把三个所需的值推上堆栈。应用程序只能用AX来返回代码。
模块管理器还提供一种处理异步调用的方法。调用功能为一存储块提供一指针,该存储块包括目的标识符、目的功能、调用程序标识符,还有任何调用所需建立的寄存器。于是,可进行请求,并在以后的某个时间执行该请求。当模块管理器确定无法执行所需代码时,模块管理器可以推迟执行代码。功能的调用程序可在功能实际完成之前收回控制。模块管理器预初始
图5示出了本发明预初始操作的流程图。在步骤501,模块管理器进行自身配置(NET.CFG,和VLM=文件)。配置可包括一新的或附加的模块表。然后,在步骤502,模块管理器每次装入一个当前表上的模块。步骤503用装入覆盖API(load overlay API)装入模块。步骤504在“伪初始”标志设置时,调用初始功能。在步骤505,正在装入的模块为模块管理器提供一VMCB数据块。在步骤506,模块管理器读取模块的存储需求,即初始化存储需求、任何全局存储需求,以及瞬态存储需求。
在步骤507,模块管理器将模块用的参数存入一模块参数表。参数包括初始化存储需求、全局存储需求(如果有)、瞬态存储需求,以及模块的功能数目。
模块管理器进入判断块508。在判定块508,提出“是最后模块吗?”的问题。如果该命题为假,则表示要获得更多的模块存储信息,并且模块管理器返回步骤505。如果判定块508的命题为真,则表示已经获得了所有模块的存储需求,并且模块管理器进入步骤509。
在步骤509,模块管理器从模块参数表收集数据,以确定全局数据所需的存储区。然后,模块管理器把常规存储区中的地址空间分配给全局数据储存。
在步骤510,模块管理器识别待装模块的最大瞬态存储需求。最大瞬态块的大小定义了常规存储区中瞬态块403的大小。在步骤510,模块管理器为某一大小的瞬态存储块分配至少与待装模块的最大块一样大的RAM。
在步骤511,模块管理器确定用哪个地址空间存储各模块的瞬态块。优先的次序是首先为扩充存储区,然后是扩展存储器,再后是常规存储区。用户对模块管理器进行配置,以特别使用某一种类型的存储区。模块管理器在步骤512确定某一种存储区类型是否能用。如果某种存储类型不能用,则模块管理器选择前面试探的存储类型。
图9示出了一例VMCB数据块。模块管理器实初始
在预初始程序后,再在不设置伪初始标志的情况下装入模块,从而执行实初始程序。图6显示了实初始程序的运行。在步骤601,模块管理器将伪初始标志设为零。在步骤602,装入第一模块。在步骤603,调用初始化程序。在步骤604,挂上任何用于该模块的中断向量。在步骤605,分配模块的其它资源。在步骤606,将全局代码和数据移至分配的地址空间。在步骤607,将模块的瞬态块复制到分配给该模块瞬态块(在扩充、扩展或常规存储区中)的地址空间内。在制定块608,提出“是否最后模块”的命题。如果命题为真,则实初始过程于步骤609结束,模块管理器中止并驻留于此。如果判定块608处的命题为假,则系统返回步骤602。装模块
图7示出了装模块的流程图。在步骤701,模块管理器收到一调用,以访问一模块。在判定块702,提出“正在服务其它请求吗?”的命题。如果命题为真,则模块管理器于步骤703存储当前标识符,从而当结束调用退出时,可以进行新的调用。
如果判定块702处的命题为假,则系统进入判定块704,并提出“DEST标识符有效吗?”的命题。如果命题为真,则模块管理器进入判定块705。如果命题为假,则模块管理器返回一出错。在判定块705,提出“功能有效吗?”的命题。如果命题为真,则系统进入判定块706。如果命题为假则模块管理器返回出错。
在判定块706,提出“调用程序标识符=0?”的命题。如果命题为真,则用当前模块标识符代替调用程序标识符,并且系统进入步骤707。如果命题为假,则系统进入步骤707。
在步骤707,将当前位于瞬态块中的任何模块复制到为其在增强存储区内分配的地址空间内。因此在“本地(home)”地址空间(该模块的分配地址空间)中更新任何对该模块的代码或数据的改变。在步骤708,从增强存储区中分配的地址空间映射被调用模块的瞬态块。在步骤709,参考现有存储在瞬态存储区中转移表内的被调功能编号。在步骤710,调用功能。返回时,于711检查调用程序标识符。如果必要,把调用模块映象至瞬态块中。在步骤712,控制返回调用功能或调用过程。
当一应用程序调用一模块功能时,上例便可应用。当一模块的全局存储器正在调入一瞬态存储功能,并且当瞬态存储区中的一模块调用另一模块的瞬态块时,也可使用本发明。在全局对瞬态调用中,运行过程与图7中应用程序调用过程相同。全局请求者的调用程序标识符为零。在瞬态对瞬态调用时,将适当的调用程序标识符推入,从而当映象返回调用程序并返回控制时,请求瞬态代码实际上在存储器中。否则,可能会有一些其它过程被映象回存储器,这会给计算机系统造成不稳定的环境。
本发明可在任何计算机系统上运行。图8示出了一典型的实行本发明的计算机系统。计算机系统包括一CPU801、RAM(主存储器)802、ROM(只读存储器)802,以及与系统总线807都耦合的I/O(输入/输出)804。I/O块804通过总线805访问诸如大容量存储器806等其它系统。
CPU801控制计算机、执行指令并处理数据CPU801通过系统总线807与其余的部件通信。CPU通过系统总线807从计算机其余的部件接收输入数据,并通过系统总线向计算机其余部件发送输出数据。系统总线807通常包括一地址总线、一数据总线和其它各种控制线。地址和数据总线的宽度与控制线的数目和类型一样从一种计算机系统到另一种计算机系统都有所变化。
计算机系统的每个部件(包括RAM802、ROM803和存储映象I/O804)包含许多单个存储器单元。为了允许CPU801访问这些单元,给每个单元分配一特定的地址。每一地址是可由地址总线传输的二进制值的特定组合。由于多数存储设备的单元多于一个,所以通常把单个存储器所有单元的地址分配成一相连块。也常以相连的方式给这些块分配地址(被映射入存储器)。
但可能存在未分配的地址间隙或留作将来利用的地址。
图8的计算机系统只是作为一个例子。本发明可在任何计算机系统上实行。
因此,描述了一种用于存储管理的方法和装置。
Claims (23)
1.一种分配计算机系统存储器的计算机执行方法,其特征在于,包括下列步骤:
识别第一程序的第一部分为第一全局块;
在常规存储区中分配第一存储空间;
将所述第一全局块存储在所述第一存储空间中;
识别所述第一程序的第二部分为第一瞬态块;
在保留存储区、扩充存储区或常规存储区内分配第二存储空间;
将所述第一瞬态块存储在所述第二存储空间中;
在常规存储区中分配第三存储空间;
检测对所述第一瞬态块的调用;并且
当检测到所述第一调用时,将所述第一瞬态块恢复到存储地址的所述第三存储空间中。
2.如权利要求1所述的方法,其特征在于,还包括下列步骤:
当结束所述调用时,把所述第一瞬态块重新存入所述第二存储空间中。
3.如权利要求1所述的方法,其特征在于,还包括下列步骤:
识别所述第一程序的第三部分为第二瞬态块;
将所述第二瞬态块存储在所述第二存储空间中;
检测对所述第二瞬态块的调用;
将所述第一瞬态块存储在所述第二存储空间中;
当检测到所述调用时,将所述第二瞬态块恢复到存储地址的所述第三存储空间中。
4.如权利要求3所述的方法,其特征在于,通过所述第一全局块对所述第二瞬态块进行所述调用。
5.如权利要求3所述的方法,其特征在于,通过所述第一瞬态块对所述第二瞬态块进行所述调用,并且包括下列步骤:
暂时将所述第一瞬态块重新存储在所述第二存储空间中;并且
当结束对所述第二瞬态块的所述调用时,将所述第二瞬态块重新存储在所述第二存储空间中,并将所述第一瞬态块恢复到所述第三存储空间中。
6.如权利要求5所述的方法,其特征在于,所述第二存储空间位于保留存储区或扩充存储区中。
7.如权利要求1所述的方法,其特征在于,还包括下列步骤:
识别第二程序的第一部分为第二全局块;
将所述第二全局块存储在所述第一存储空间中;
识别所述第二程序的第二部分为第二瞬态块;
将所述第二瞬态块存储在所述第二存储空间中;
检测对所述第二瞬态块的调用;并且
当检测到所述调用时,将所述第二瞬态块恢复到所述第三存储空间中。
8.一种访问和执行存储在计算机存储器中程序的计算机执行方法,其中存储器包括常规和非常规存储区,所述方法的特征在于,包括下列步骤:
把每个程序细分成一全局部分和一瞬态部分;
确定存储大致所有程序的所述全局部分所需的存储量;
在常规存储区中分配第一存储部分,使之至少与所述确定的存储大致所有所述全局部分的所需的存储量一样大;
将所述全局部分存储在分配给所述全局部分的所述第一存储部分中;
识别所述瞬态部分中的最大瞬态部分;
确定存储所述最大的瞬态部分所需的存储量;
在常规存储区中分配第二存储部分,使之至少与所述确定的用于存储所述最大瞬态部分所需的存储量一样大;
将所有所述瞬态部分存储在非常规存储区中。
9.如权利要求8所述的用于访问和执行程序的计算机执行方法,其特征在于,还包括下列步骤:
至少执行一个存储在分配给所述全局部分的常规存储部分中的所述全局部分;
检测对存储在非常规存储区中的第一瞬态部分的调用;并且
将所述被调用的第一瞬态部分从非常规存储区中移到常规存储区的所述第二存储部分中。
10.如权利要求9所述的方法,其特征在于,所述瞬态部分只能被一全局部分或另一个瞬态部分所调用。
11.如权利要求9所述的用于访问和执行程序的计算机执行方法,其特征在于,还包括下列步骤:
访问所述被调用的第一瞬态部分;
检测对存储在非常规存储区的第二瞬态部分的调用;
将所述第一瞬态部分移到非常规存储区;并且
将所述第二瞬态部分移到常规存储区的所述第二存储部分。
12.如权利要求11所述的方法,其特征在于,每次只有一个所述瞬态部分位于常规存储区的所述第二存储部分中。
13.如权利要求11所述的方法,其特征在于,还包括下列步骤:
当结束对所述第二瞬态部分的所述调用时,将所述第二瞬态部分移回非常规存储区;并且
当结束对所述第二瞬态部分的所述调用时,将所述第一瞬态部分移回常规存储区的所述第二存储部分;
14.如权利要求8所述的方法,其特征在于,分配给所述全局部分的常规存储区所述第一存储部分的大小是恒定的。
15.如权利要求8所述的方法,其特征在于,分配给所述瞬态部分的存储区所述第二存储部分的大小是恒定的。
16.一种计算机系统,其特征在于,包括;
一处理器;
一存储器,它与所述处理器相连并被构造用于存储多个程序,其中每个所述程序包括一全局部分和一瞬态部分,所述存储器包括常规和非常规存储区,并且所述常规存储区包括:
一全局存储空间,该空间被构造用于存储大致所有所述程序的所述全局部分,其中禁止将所述全局部分移到非常规存储区中,而且所述全局存储空间的大小至少与存储所有所述全局部分所需的存储区一样大;和
一瞬态存储空间,该空间被构造用于至少存储一个所述程序的所述瞬态部分,其中允许将所述瞬态部分从非常规存储区换进换出,而且所述瞬态存储区的大小至少与所述瞬态部分中最大的一个一样大;和
一程序管理器,该管理器被构造用于将第一瞬态部分存储在所述瞬态存储空间中,接收对所述瞬态部分第二个的调用,将所述第一瞬态部分移到所述非常规存储区,并将所述第二瞬态部分存储在所述瞬态存储空间中。
17.如权利要求16所述的系统,其特征在于,第一全局部分进行所述调用,并且所述程序管理器被构造成能跟踪所述第一全局部分和所述瞬态存储空间。
18.如权利要求16所述的系统,其特征在于,所述第一瞬态部分进行所述调用,并且所述程序管理器被构造成能跟踪所述第一瞬态部分和所述瞬态存储空间。
19.如权利要求16所述的系统,其特征在于,所述存储器被构造用于存储多个程序,每个所述程序包括一全局部分、一瞬态部分和一起动部分。
20.如权利要求19所述的系统,其特征在于,所述瞬态部分包括一初始化程序、一空载函数和一版本函数。
21.如权利要求20所述的系统,其特征在于,所述瞬态部分还包括一统计函数。
22.一种用于构造程序管理器的计算机执行方法,其中所述管理器用于控制包括计算机程序的计算机系统中的存储器,计算机程序被细分成包含一全局部分和一瞬态部分的模块,所述方法的特征在于,包括下列步骤:
装入一模块表;
比较所述模块每个全局部分的大小,以确定对全局存储区的需求;
求出全局存储区需求的总和;
在常规存储区中为所有全局部分分配RAM;
比较所述模块每个瞬态部分的大小,从而确定对瞬态存储区的需求;
识别所述瞬态部分中最大的瞬态部分;
在常规存储区中分配RAM,使其大小至少与最大瞬态部分一样大;并且
在非常规存储区中,为瞬态部分分配存储区。
23.如权利要求22所述的方法,其特征在于,还包括下列步骤:
装入一个模块;
将所述模块的所述全局部分存储到所分配的RAM中;
将所述模块的所述瞬态部分存储到所分配的非常规存储区中;并且
重复所述装入模块、所述存储所述全局部分和所述存储所述瞬态部分的步骤,直至装入和存入所有需要的模块。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US2831293A | 1993-03-09 | 1993-03-09 | |
US08/028,312 | 1993-03-09 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1120867A CN1120867A (zh) | 1996-04-17 |
CN1090780C true CN1090780C (zh) | 2002-09-11 |
Family
ID=21842743
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN94191425A Expired - Lifetime CN1090780C (zh) | 1993-03-09 | 1994-03-08 | 存储管理的方法和装置 |
Country Status (6)
Country | Link |
---|---|
EP (1) | EP0688449A4 (zh) |
JP (1) | JPH08507630A (zh) |
CN (1) | CN1090780C (zh) |
AU (1) | AU6253794A (zh) |
CA (1) | CA2157572C (zh) |
WO (1) | WO1994020905A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7143263B2 (en) * | 2003-10-16 | 2006-11-28 | International Business Machines Corporation | System and method of adaptively reconfiguring buffers |
US7603392B2 (en) * | 2006-06-05 | 2009-10-13 | International Business Machines Corporation | System, method and computer program product for storing transient state information |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4926322A (en) * | 1987-08-03 | 1990-05-15 | Compag Computer Corporation | Software emulation of bank-switched memory using a virtual DOS monitor and paged memory management |
US4943910A (en) * | 1987-04-14 | 1990-07-24 | Kabushiki Kaisha Toshiba | Memory system compatible with a conventional expanded memory |
US5146580A (en) * | 1989-10-25 | 1992-09-08 | Microsoft Corporation | Method and system for using expanded memory for operating system buffers and application buffers |
US5167030A (en) * | 1989-08-23 | 1992-11-24 | Helix Software Company, Inc. | System for dynamically allocating main memory to facilitate swapping of terminate and stay resident communication program to increase available memory space |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5280599A (en) * | 1989-01-09 | 1994-01-18 | Kabushiki Kaisha Toshiba | Computer system with memory expansion function and expansion memory setting method |
US5175830A (en) * | 1989-06-16 | 1992-12-29 | International Business Machines Corporation | Method for executing overlays in an expanded memory data processing system |
US5237669A (en) * | 1991-07-15 | 1993-08-17 | Quarterdeck Office Systems, Inc. | Memory management method |
-
1994
- 1994-03-08 AU AU62537/94A patent/AU6253794A/en not_active Abandoned
- 1994-03-08 WO PCT/US1994/002523 patent/WO1994020905A1/en not_active Application Discontinuation
- 1994-03-08 CN CN94191425A patent/CN1090780C/zh not_active Expired - Lifetime
- 1994-03-08 JP JP6520278A patent/JPH08507630A/ja active Pending
- 1994-03-08 EP EP94909862A patent/EP0688449A4/en not_active Withdrawn
- 1994-03-08 CA CA 2157572 patent/CA2157572C/en not_active Expired - Lifetime
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4943910A (en) * | 1987-04-14 | 1990-07-24 | Kabushiki Kaisha Toshiba | Memory system compatible with a conventional expanded memory |
US4926322A (en) * | 1987-08-03 | 1990-05-15 | Compag Computer Corporation | Software emulation of bank-switched memory using a virtual DOS monitor and paged memory management |
US5167030A (en) * | 1989-08-23 | 1992-11-24 | Helix Software Company, Inc. | System for dynamically allocating main memory to facilitate swapping of terminate and stay resident communication program to increase available memory space |
US5146580A (en) * | 1989-10-25 | 1992-09-08 | Microsoft Corporation | Method and system for using expanded memory for operating system buffers and application buffers |
Also Published As
Publication number | Publication date |
---|---|
CA2157572A1 (en) | 1994-09-15 |
CN1120867A (zh) | 1996-04-17 |
CA2157572C (en) | 1998-12-01 |
WO1994020905A1 (en) | 1994-09-15 |
AU6253794A (en) | 1994-09-26 |
EP0688449A1 (en) | 1995-12-27 |
JPH08507630A (ja) | 1996-08-13 |
EP0688449A4 (en) | 1997-08-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP1674987B1 (en) | Systems and methods for exposing processor topology for virtual machines | |
US6957435B2 (en) | Method and apparatus for allocating processor resources in a logically partitioned computer system | |
CN1088216C (zh) | 加载在mca适配卡上的pci扩展卡的配置和ram/rom控制 | |
KR100992034B1 (ko) | 동적 논리적 파티션 기능을 갖는 컴퓨팅 환경에서의 컴퓨터메모리 관리 | |
US8549521B2 (en) | Virtual devices using a plurality of processors | |
US20080162834A1 (en) | Task Queue Management of Virtual Devices Using a Plurality of Processors | |
US20110283293A1 (en) | Method and Apparatus for Dynamic Allocation of Processing Resources | |
JP2004220608A (ja) | スレッド型に基づくコンピュータ・リソースの動的割り付け | |
JP4562107B2 (ja) | 複数の仮想ダイレクトメモリアクセスチャネルをサポートするためのダイレクトメモリアクセスエンジン | |
CN101135982A (zh) | 在计算机中管理消息传信中断资源的方法和装置 | |
CN101065740A (zh) | USB便携式(On-The-Go)控制器 | |
JPS62281039A (ja) | 制御プログラムに仮想記憶資源を動的に提供するシステム | |
US6925546B2 (en) | Memory pool configuration system | |
US20110219373A1 (en) | Virtual machine management apparatus and virtualization method for virtualization-supporting terminal platform | |
JPS63251848A (ja) | コンピユータ・システム | |
US7447829B2 (en) | Heap and stack layout for multithreaded processes in a processing system | |
US20070136549A1 (en) | Information processing apparatus, controller and file reading method | |
CA2335561A1 (en) | Heterogeneous client server method, system and program product for a partitioned processing environment | |
US20210011759A1 (en) | Multi-core system and method of controlling operation of the same | |
CN1090780C (zh) | 存储管理的方法和装置 | |
CN1270253C (zh) | 包含中央处理单元的大规模集成电路 | |
CN117453352B (zh) | 一种Xen下的设备直通方法 | |
KR20180076051A (ko) | OpenCL 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치 | |
JPS60134940A (ja) | 情報処理装置のレジスタ選択方式 | |
CN114138422A (zh) | 可扩展性的NVMe存储虚拟化方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CX01 | Expiry of patent term |
Expiration termination date: 20140308 Granted publication date: 20020911 |