实时调页的计算装置及操作方法转让专利

申请号 : CN200680006899.1

文献号 : CN101133395B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 安德鲁·特尔克丹尼斯·梅

申请人 : 西姆毕恩软件有限公司

摘要 :

一种计算装置的构件,例如操作系统的内核,被安排来标识在该装置上运行的实时进程并且透明地锁定由这些进程拥有的内存以避免它们被页面调出。内核还能够检查由运行在这些进程中的实时线程发起的所有的进程之间的通信,以断定它们调用其他什么进程,并且,如果它们具有潜力来阻止实时操作,则安排内核以锁定这些进程所引用的内存的区域。该过程重复进行操作,并确保不会发生可能影响任何实时进程操作的页错误。

权利要求 :

1.一种用于在计算装置中为实时执行提供存储器调页的方法,所述方法包括使构件能够:a.识别包括要求实时执行的执行线程的进程;

b.识别包括要求实时执行的并且由先前已被识别为要求实时执行的执行线程所调用的执行线程的进程;

c.识别拥有由被标识为要求实时执行的执行线程所引用的存储器的进程;

d.锁定属于被所述构件识别的所有进程的存储器,以防止存储器被页面调出;

e.识别其执行线程不再要求实时执行的任一进程;以及f.解除锁定不再由要求实时执行的执行线程所引用的存储器。

2.根据权利要求1所述的方法,其中,所述构件被选择为包括操作系统内核。

3.根据权利要求1或2所述的方法,其中,所述构件被选择为包括存储器管理单元。

4.根据权利要求1或2所述的方法,其中,所述构件被选择为包括多个子构件。

5.根据权利要求1或2所述的方法,其中,在被页面调出的情况下安排所述构件以对将会阻止或影响实时线程执行的存储器与将不会阻止或影响实时线程执行的存储器进行区分,并且仅锁定前者。

6.根据权利要求1或2所述的方法,其中,安排所述构件以监控进程之间通信(IPC)的调用。

7.根据权利要求1或2所述的方法,其中,所述构件监控客户端-服务器交互。

8.根据权利要求7所述的方法,其中,安排所述构件以监控客户端存储器中的描述符的报头。

9.根据权利要求7所述的方法,其中,安排所述构件以在所述服务器上对未完成的请求计数。

10.根据权利要求7所述的方法,其中,安排所述构件以对由实时客户端开启的服务器会话计数。

11.根据权利要求7所述的方法,其中,安排所述构件以终止来自非实时客户端的对存储器调页的请求,所述请求被所述构件用故障代码否决以便于所述非实时客户端重新提交所述请求。

12.一种用于在计算装置中为实时执行提供存储器调页的装置,所述装置包括:a.用于识别包括要求实时执行的执行线程的进程的装置;

b.用于识别包括要求实时执行的并且由先前已被识别为要求实时执行的执行线程所调用的执行线程的进程的装置;

c.用于识别拥有由被标识为要求实时执行的执行线程所引用的存储器的进程的装置;

d.用于锁定属于被所述构件识别的所有进程的存储器以防止存储器被页面调出的装置;

e.用于识别其执行线程不再要求实时执行的任一进程的装置;以及f.用于解除锁定不再由要求实时执行的执行线程所引用的存储器的装置。

13.根据权利要求12所述的装置,其中,所述装置还包括操作系统内核。

14.根据权利要求12或13所述的装置,其中,所述装置还包括存储器管理单元。

15.根据权利要求12或13所述的装置,其中,所述装置还包括多个子构件。

16.根据权利要求12或13所述的装置,其中,所述装置还包括用于在被页面调出的情况下对将会阻止或影响实时线程执行的存储器与将不会阻止或影响实时线程执行的存储器进行区分并且仅锁定前者的装置。

17.根据权利要求12或13所述的装置,其中,所述装置还包括用于监控进程之间通信(IPC)的调用的装置。

18.根据权利要求12或13所述的装置,其中,所述装置还包括用于监控客户端-服务器交互的装置。

19.根据权利要求18所述的装置,其中,所述装置还包括用于监控客户端存储器中的描述符的报头的装置。

20.根据权利要求18所述的装置,其中,所述装置还包括用于在所述服务器上对未完成的请求计数的装置。

21.根据权利要求18所述的装置,其中,所述装置还包括用于对由实时客户端开启的服务器会话计数的装置。

22.根据权利要求18所述的装置,其中,所述装置还包括用于终止来自非实时客户端的对存储器调页的请求的装置,所述请求被所述用于终止来自非实时客户端的对存储器调页的请求的装置用故障代码否决以便于所述非实时客户端重新提交所述请求。

说明书 :

技术领域

本发明涉及一种计算装置,更具体地,涉及操作计算装置的方法,其能够实现客户端-服务器的实时执行以及其他在该装置中的进程之间的通信。

背景技术

本文所用的术语“计算装置”将被扩展性地理解为覆盖任何形式的电计算装置并且包括:数据记录装置、任意类型或形式的计算机(包括手持和个人计算机,例如个人数字助理(PDA))、任何形状因子的通信装置(包括:移动电话,智能电话,将通信、图像记录和/或重放、以及计算功能结合到单个装置中的通信器)、以及其他形式的无线和有线信息装置(包括数字照相机、MP3和其他音乐播放器、以及数字收音机)。
计算装置中存在存储器类型的分级;通常,存储器越快,则它越昂贵。计算机科学家和软件工程师已经开发了许多有效利用这些装置中的各种类型的存储器的技术。本领域中的一种主要实例被称为调页(paging)。
调页的最常用形式之一是“按需调页(demand paging)”,下面对其进行更详细描述,但是其他调页算法(例如预调页)也是可能的。应该理解,适当情况下,本发明也可以使用其他这些调页算法。
当代计算装置能够寻址或引用大量虚拟存储器:远远超过它们实际以快速RAM(随机存取存储器)形式所物理安装的存储器。为了易于管理,该存储器通常被分成固定大小的块,通常称作页;例如,4K(4096字节)及其各种倍数是通常的页大小。只有一定数量的这些页(准确数字取决于该装置的制造者已选择提供多少存储空间)能够被容纳在初级RAM中,所用页的剩余部分被存储在某些类型的较慢且廉价的次级存储器(例如硬盘驱动器(HDD))中。
所有使用中的可寻址的存储单元的总和被称作“虚拟存储器”,并且计算装置包含虚拟存储页面到物理存储页面的映射。这些映射被称作页表,并且,通常这些页表由硬件实现的存储器管理单元(MMU)来维护。
对于按需调页,如果试图引用未保留在RAM中的存储器页面中的地址,则MMU导致页错误发生。在这种情况下,该装置临时暂停处理,同时相关的存储块被“页面调入”到RAM。该过程涉及从较慢和较廉价的存储器(通常为HDD)将所要求的页面复制到RAM中并且适当地更新MMU中的页表。
当计算装置已经运行了某些时间时,将会没有可将页面复制到其中的空闲存储器,因为计算装置中可用的所有物理RAM都将在使用过程中。当这种情况发生时,在所要求的存储块可被页面调入之前,需要通过使用反向处理进程(本领域中公知的页面调出过程(paging out))来释放页面将被复制到其中的RAM部分,页面调出通常涉及从RAM将页面复制回硬盘,或复制到可用的任何类型的较慢和较廉价的次级存储器,并且更新MMU中的页表。
关于存储器中哪块应该被页面调出的决策通常是一个复杂的决策;一些简单的算法是页面调出近来最少用的(LRU)或最不常用的(LFU)存储块。
由此可见,在页面因已被页面调入而未改变的情况下,就不需要执行复制步骤。未改变的页面被称作“干净”页面,而改变的页面被称作“脏”页面;对于MMU来说,通过与物理存储器的每页相关的标志来记住页面是干净的还是脏的是很正常的。
当应用于在相对受限容量电池源上进行操作的移动计算装置时,调页过程存在进一步的优点。存储器调页通常能够大大延长电池寿命。在空闲时保持大多数类型的次级存储器(例如,闪存或小硬盘)上的存储块不消耗功率,但是维护易失性动态RAM中的存储块确实消耗功率,这是因为动态RAM如果不想丢失其存储的内容的话,需要被持续刷新。
从以上描述中看得很清楚,在相对意义上,将存储器页面调入到动态存储器中和将存储器页面调出动态存储器的进程会占用相当长时间。除了操纵页表以及计算出初级RAM中哪块需要被页面调出的必要性以外,关键因素是页面调入总要求相当数量的存储从较慢的次级存储器中被读取。更经常地,页也需要被写入到慢速的次级存储器。举例来说,如果正被页面调出的存储器被标记为脏的,则这就是必要的。
对于总的计算装置操作的时间选择(timing)负担是绝对不可避免的;如果在初级和次级存储器之间没有速度差,则装置内将没有存储器的分级,并且将不要求调页。
对于调页所花费的时间量首要关注的是,该过程会干扰计算装置的实时操作;即,操作必需在一定的时间段内完成才正确完成。当代计算装置,特别是集成到通信装置中的那些,例如智能电话,通常必需为这种装置提供这种实时保证以令人满意地进行操作。例如,运行信号发送堆栈的GSM移动电话需要跟踪时隙,其长度仅为577微秒。因此,如果在试图进行实时保证的操作期间出现页错误,这些就可能不被保证,若操作被阻止直到所要求待被引用的存储器被页面调回的话。实施中的问题是,无法预测页错误何时可能出现、以及何时错误肯定出现、总的调页过程将会花费多长时间来补救该错误。
因此,现在普遍意识到调页过程一般并不与在计算装置中运行实时系统的过程相兼容。这是因为页错误出现的不可预测性以及因为在每个页错误后都把存储写入相对较慢介质存储器和从相对较慢介质存储器读取存储器所花费的时间。
当装置依赖于能够提供实时保证时,调页会使装置损毁或使其无用;上述移动电话堆栈是这样的一个实例,未能遵守通信堆栈的限制,在最坏的情况下,就会导致呼叫被该装置完全丢弃。比之于所察觉的可接受的性能所需要的实时保证的情况,调页可使得应用程序不可用;在非实时或“慢”系统上处理流音频或视频的尝试就完美地展示了这一点。
一些实施按需调页的操作系统特别声明它不应该被用在实时系统中。例如,Microsoft在Windows CE.Net文档(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcemain4/html/cmcondemandpaging.asp)中声明:“因为在实时环境中使用按需调页会有处罚,所以应该避免。”
其他操作系统试图改进该问题。Linux mlock系统调用的文档(http://linux.ctyme.com/man/man1739.htm)声明:“实时应用程序要求确定性时间选择...调页是造成意外的程序执行延迟的一个主要原因。
mlock Linux系统调用试图为该问题提供一种解决方案,因为它禁用对特定范围的存储器地址进行的调页。然而,本领域技术人员将很容易意识到:一种系统要求应用程序知道它们在此处加载的存储器地址以及它们所引用的(直接或间接地)所有存储器的存储器地址,并且它们可能需要使用的任何系统调用的地址以及那些调用所引用的存储器,因而该系统就不能被看作用于应用程序开发的实际解决方案。

发明内容

因此,本发明的一个目的是提供一种改进的用于使在计算装置中能够通过存储器调页的方式来实时执行的方法。
根据本发明的第一方面,提供有一种在计算装置中以存储器调页的方式来实时执行的方法,该方法包括使构件能够:
a.识别包括要求实时执行的执行线程的进程;
b.识别包括要求实时执行的并且由先前已被识别为要求实时执行的执行线程所调用的执行线程的进程;
c.识别拥有由被标识为要求实时执行的执行线程所引用的存储器的进程;
d.锁定属于被如此识别以防止所述存储器被页面调出的所有进程的所述存储器;
e.识别其执行线程不再要求实时执行的所有进程;以及
f.解除锁定不再由要求实时执行的执行线程所引用的存储器。
根据本发明的第二方面,提供了一种用于在计算装置中为实时执行提供存储器调页的装置,所述装置包括:
a.用于识别包括要求实时执行的执行线程的进程的装置;
b.用于识别包括要求实时执行的并且由先前已被识别为要求实时执行的执行线程所调用的执行线程的进程的装置;
c.用于识别拥有由被标识为要求实时执行的执行线程所引用的存储器的进程的装置;
d.用于锁定属于被所述构件识别的所有进程的存储器以防止存储器被页面调出的装置;
e.用于识别其执行线程不再要求实时执行的任一进程的装置;以及
f.用于解除锁定不再由要求实时执行的执行线程所引用的存储器的装置。

附图说明

现在将仅通过进一步的实例,参照附图来描述本发明的一个实施例,其中:
图1示意性示出了在计算装置中按需调页的方法;
图2示出了用于在其启动时标记服务器为实时服务器的过程;
图3示出了用于根据本发明的一个实施例锁定存储器的过程;
图4示出了用于根据本发明的一个优选实施例递增对服务进行实时请求的计数的过程;以及
图5示出了用于递减实时请求的计数以使得能够释放锁定的存储器。

具体实施方式

图1示意性示出了如何可执行按需调页。
计算装置的MMU通过一个或多个转换旁视缓存器(TLB)方式将虚拟存储器地址转换为物理存储器地址是很常见的。
图1示出了在基于4K页面的两级页表实施的情况下(如在IntelTM×86和许多ARMTM中所实施的)这如何工作的实例。在这些处理器上,MMU将“虚拟”32位地址2(其可映射存储器内的“虚拟”地址空间的四千兆字节)通过一系列表查找转换为“物理”32位地址。
虚拟地址2的最有效十位4编入索引(index)到称作页面目录的4K表6,其包括1024个32位值。页面目录表6的32位值中的每个都被称作页面目录条目(PDE)。由虚拟地址2的最有效十位所编入索引的PDE是到另一个32位条目的4K表8(称作页表)的(虚拟)指针。页表的32位条目被称作页表条目(PTE)。每个页表都可映射物理存储器的四兆字节。因此,如果整个4千兆字节虚拟地址空间都已用物理存储器来支持(back),则将会每个PDE都有一个页表:即1024个页表。然而,页面目录只需要包含足够的条目来映射该装置上可用的实际的物理存储器地址。因此,在具有例如16兆字节的物理存储器的装置中,就会需要四个页表。
虚拟地址2的次最有效十位10直接编入索引到页表8,该页表8由被虚拟地址2的十个最有效位4所编入索引的PDE映射,给出32位值,其是4K物理页面12的起始地址。
虚拟地址2的剩余部分的、或有效性最低的十二位14直接通过上述转换机构来在由32位值(PTE)从各个页表8寻址的4K物理页12内选择一字节。因此,可以看出,通过使用如图1所示的页面目录和页表,就可以使用这32位虚拟地址来在计算装置的物理存储器的存储页面内选择任一字节。
本发明基于这种理解,上面相对于现有技术描述的问题主要不是由运行进程的部分有可能被页面调出这一事实引起。事实上,对于本领域技术人员来说,把由包含实时线程的任何单个进程所使用的页面标记为可能实时限制并且因此其不应该被页面调出并不是特别困难的。这种标记例如能够在进程创建时由操作系统内核(其为负责创建线程和进程以及实施进程边界的操作系统的特许部分)自动执行,倘若上面提到的工具(例如mlock调用)可用的话。其他必要的步骤,例如确保实时线程被用这种方式编码以致于它们将适合物理存储器并因此将不需要被页面调出,对于本领域技术人员来说是类似的并不过分复杂的设计解决方案。
此外,本发明用以下理解为基础进行断定,即,实际上引起在实施调页的计算装置中的大多数实时进程的问题的是和运行在当代计算装置上的所有程序一样,它们依赖于操作系统服务,该操作系统服务基本上可用于所有进程,而无论其实时与否。正是这些公共服务可能由按需调页所阻止,从而影响依赖于它们的这些进程的实时能力。在访问这些公共服务由操作系统内核传达但是实际上未由内核提供的情况下,操作方面的问题尤为明显,这是因为没有简易的解决方案来确保在内核外部被引用的存储页面不被页面调出。
客户端-服务器交互作用是该问题的非常好的实例。因为客户端进程和服务器进程位于不同的地址空间,它们需要通过进程之间通信(inter process communication,简称IPC)机构(其必需总由内核进行传达)来进行通信;如上所述,内核是实施进程边界并因此必需通过该装置中所有的IPC进行传达的操作系统的特许部分。
任何单个服务器都能够为任何客户端提供服务,而不管它们实时与否;如果服务器没有为任何实时客户端提供服务,则没有理由说服务器所引用的存储器不应该被页面调出。另一方面,如果服务器正在为实时客户端提供服务,则必定有与该客户端相关的、由IPC所引用的存储器在任何情况下都不应该被页面调出的要求,这是由于此将导致服务器被页错误所阻止(这将明确地影响这种客户端的实时执行)的可能性。
此外,如果服务器这样设计,使得任何页错误,包括与非实时的客户端存储器相关的那些页错误,都会导致其对其他所有客户端进行阻止,于是,很明显,如果要维护实时执行则由这种服务器的任何客户端所引用的存储器一个都不应该被页面调出。
这种有问题的关系的一个实例将是通信服务器和其客户端之间的关系。如果通信服务器由页错误阻止并且正在等待客户端存储器被页面调回,则在使足够的存储器被页面调回所花的时段内它不能服务于任何客户端,即使其客户端之一是实时客户端。因此,由此断定,被具有实时客户端的任何服务器所引用的存储器绝不能被页面调出;但是在没有实时客户端的情况下,则页面调出存储器缓存区是没有问题的。
本发明通过修改计算装置中客户端-服务器通信(以及,通过扩展,其他IPC机构)运行的方式而解决了上述问题。本发明的关键方面是一旦内核有可能准确地知道存储器的什么区域被客户端/服务器消息所访问,内核检查消息并锁定相关存储器页面就变得技术上可行。该锁定进程防止相关的存储器页面被页面调出直到消息被完成。这确保服务器能够提供保证在读取或写入客户端存储器时不出错。
因为该操作在内核中发生,因此它对于服务器和其客户端都是透明的;所以,不同于上述的mlock进程,没必要使非内核进程知道关于它们拥有或访问的存储器的地址的任何事。
具有这种能力的操作系统内核的一个实例是Symbian Software有限公司的Symbian OSTM的EKA2内核。该内核具有实时能力,但是额外地具有检查IPC消息(包括客户端-服务消息)并且查看消息访问什么存储器的能力。这种消息通过RMessage2类穿过内核,其可被如下定义:
public:
    enum TSessionMessages{EConneot=-1,EDisConnect=-2};
public:
    inline RMessage2();
    inline TInt Function()const;
    inline TInt Int0()const;
    inline TInt Int1()const;
    inline TInt Int2()const;
    inline TInt Int3()const;
    inline const TAny* Ptr0()const;
    inline const TAny* Ptrl()const;
    inline const TAny* Ptr2()const;
    inline const TAny* Ptr3()const;
    inline CSession2* Session()const;
    IMPORT_C explicit RMessage2(const RMessagePtr2& aPtr);
    IMPORT_C TUint32 SecureId()const;
    IMPORT_C TUint32 VendorId()const;
    IMPORT_C TInt HasCapability(TCapability)const;
    IMPORT_C TInt HasCapability(TCapability,TCapability)
const;
    IMPORT_C TInt HasCapability(TCapability,TCapability,
TCapability)const;
    IMPORT_C TInt CheckPolicy(const TSecurityPolicy&)const;
protected:
    TInt iFunction;
    TInt iArgs[KMaxMessageArguments];
private:
    TInt iSparel;//Reserved for future use
protected:
    const TAny*iSessionPtr;
private:
    TInt iSpare2;//Reserved for future use
    TInt iSpare3;//Reserved for future use
    };
为Symbian OSTM操作系统编程的本领域技术人员将从上述代码明了每个消息都包括四个通用参数,其中每一个都可以是指向客户端存储空间中描述符的指针。支持所有描述符类型,并且TPtrC类型描述符可指的是在客户端存储空间的其他地方的存储缓存区。
本发明最直接的实施方式是用于操作系统服务,其可能被多个实时客户端需要以在其首次启动时就将其自身标识为实时服务器。该过程可在图2中看到。在图3中可以看出内核检查在这种服务器处被引导的所有IPC消息。如图3所示,如果该消息用于实时服务器,则该内核锁定服务器所引用的存储页面,从而保证这些客户端将不会遇到任何页错误。在上述的Symbian OSTM操作系统实施方式中,这可通过对于所有可应用的RMessage2对象安排操作系统内核来检测在客户端存储器内的四个可能描述符的报头的内容来实现。
然而,也设想本发明的更复杂的实施例,其能够通过利用客户端的实时状态以及服务器的实时状态来更高效地进行操作。以此方式,这些实施方式能够最小化要求锁定的存储页面的数量。现在将描述关于客户端-服务器交互作用的这些更复杂的实施方式的实例。
在能够实时执行的任一操作系统中的内核都将会知道在该系统中运行的所有执行线程的优先级,这是因为内核需要该信息来适当地调度任务以满足实时保证。因此,内核将知道传递消息的客户端是否具有实时优先级,如图4所示,从而能够监控哪些服务器具有来自实时客户端的未完成的(outstanding)请求,并因此需要有足够可用的资源以避免页错误的生成。
如果服务器被设计为使得与一个客户端请求相关的页错误不阻止其他客户端请求,则内核只锁定来自实时客户端请求所引用的存储器就足够了。
然而,如果以这种方式设计服务器使得页错误能够阻止整个服务器,则内核需要把未完成请求的数量的计数保存在服务器上。因此,如图4所示,当内核接受到来自客户端的请求时,它决定客户端是否时为实时客户端。如果回答是“否”,则它确定请求计数是否为零。如果请求计数不是零,则被该请求所引用的存储器就被锁定,因为这就知道存在有来自其他实时客户端的未完成请求。
在服务器具有仅来自非实时客户端的未完成请求并且该服务器接收到来自实时客户端的请求时,由来自非实时客户端的请求所引用的存储器可能已经被页面调出,并因此不能被页面调回(对于该请求来说必需运行的)而不影响实时客户端的性能。因此,优选地,所有这样的请求,包括在来自实时客户端的请求时可能未完成的请求,都应以故障代码终止,这使得非实时客户端能够将请求的故障的原因标识为仅要求任何这种客户端重新提交其原始请求。
因此,如果客户端是实时的,则内核再次确定请求计数是否为零。如果在该阶段确定计数不是零,这意味着存在其他未完成的实时请求,则该存储器被锁定,如图4所示。如果请求计数是零,则内核然后就确定是否存在任何其他客户端。如果回答是“是”,则如上所述以错误代码终止该请求,因为这就知道该其他客户端是非实时客户端,这是由于刚刚已经确定该请求计数为零。然后就锁定由该请求所引用的存储器。
如果确定在该进程阶段不存在其他客户端,则锁定由该请求所引用的存储器。如图4所示,一旦锁定了存储器,内核就递增实时请求的计数。
图5示出了当请求完成时的进程。当请求完成时,首先确定是否请求计数为零。如果“否”,则递减计数,如图5所示,并且一旦计数到达零,由那个服务器所引用的所有锁定的页面都可被解除锁定。对于本发明的该实施例,还设想在某些条件下,可优选地对通过实时客户端而不是单个客户端请求所开启的服务器会话进行计数,这是由于此消除了锁定和解除锁定在转换计数到零和从零的转换计数这每一次转换过程中的页面的需要。
在该情形中,内核还要求分配足够的存储器来记忆哪些页面已被锁定以便在消息完成后那些页面正好被锁定。
应该理解本发明能够应用到包括任何类型的存储器调页的计算装置,而不管该装置如何决定哪个存储器应该被调页,以及何时被调页。为了避免怀疑,本发明并不限于按需调页。本领域技术人员将会观察到本发明涉及阻止特定页面被页面调出而并不涉及决定哪些页面应该被页面调入。
还应该理解,虽然结合Symbian OSTM内核中的实施描述了本发明,但是具有足够的特权级别以收集关于线程优先级和进程存储器映射的装置构件或构件的组合都能够执行所提供的功能。因此,诸如微内核或服务器的软件构件或足够高级的诸如MMU的硬件构件也能够执行所有或部分该功能。因此,本质上,提供了期望的功能的构件可包括许多子构件,其又可以进一步与另一个构件进行组合。所以,例如,设想可通过多个微内核与MMU结合来提供所需要的功能。
因此可以看出本发明的一个关键优点在于它使得计算装置能够利用调页来高效地管理具有不同性能和价格特性的存储器类型分级,而不影响该装置运行实时软件(这构成过硬的时间选择保证)的能力。
虽然参照特定实施例描述了本发明,但是应该理解在所附的权利要求限定的本发明的范围内可以实施修改。