首页> 中国专利> 基于动态内核实现跨地址空间创建构件对象的方法

基于动态内核实现跨地址空间创建构件对象的方法

摘要

一种计算机操作系统构件化灵活内核实现的方法,将计算机操作系统的系统功能抽象为对象并用构件技术封装成独立的构件模块,将该系统功能接口以构件对象接口的形式体现,根据需要动态地配置模块运行状态,将构件模块配置在内核态运行或置于用户态运行。用户构件在内核态与用户态可以使用同样的方法获取系统功能构件对象的接口,调用方法相同。为用户通过该中间构件完成跨地址空间的构件调用,内核态构件模块包括逻辑抽象层一构件运行平台,利用该运行平台生成跨地址空间的创建构件对象的中间件构件。本发明灵活内核技术是将构件技术融入到系统内核中,实现从系统级支持构件技术,从而能够灵活地动态配置应用构件在用户空间或内核空间的运行状态。

著录项

  • 公开/公告号CN1514353A

    专利类型发明专利

  • 公开/公告日2004-07-21

    原文格式PDF

  • 申请/专利权人 北京科泰世纪科技有限公司;

    申请/专利号CN02160134.8

  • 发明设计人 陈榕;杜永文;林清洪;

    申请日2002-12-31

  • 分类号G06F9/30;G06F9/34;

  • 代理机构11205 北京同立钧成知识产权代理有限公司;

  • 代理人刘芳

  • 地址 100176 北京市海淀区清华科技园创新大厦B座6层

  • 入库时间 2023-12-17 15:26:25

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-02-22

    未缴年费专利权终止 IPC(主分类):G06F9/30 授权公告日:20060816 终止日期:20151231 申请日:20021231

    专利权的终止

  • 2006-08-16

    授权

    授权

  • 2005-07-20

    专利申请权、专利权的转移专利申请权的转移 变更前: 变更后: 登记生效日:20050617 申请日:20021231

    专利申请权、专利权的转移专利申请权的转移

  • 2004-09-29

    实质审查的生效

    实质审查的生效

  • 2004-07-21

    公开

    公开

说明书

技术领域

本发明涉及一种计算机操作系统动态内核的实现机制,尤其是一种基于动态内核实现跨地址空间创建构件对象的方法。属于计算机技术领域。

背景技术

由于计算机硬件的快速发展和用户要求的提高,以及因特网时代的到来,操作系统的复杂性与日俱增,系统的体系结构对系统性能的影响也越来越明显。大多数的操作系统采用两种体系结构之一:一个是整体内核(Monolithickernel or Macro-kernel)操作系统,另一个是微内核(Micro-kernel)操作系统。

早期的操作系统基本上采用的是整体内核技术,此类系统的系统服务和驱动程序都在内核空间,分别定义成不同的功能模块;任何模块可以遵循特定的接口规范来调用其它模块;所有模块必须连接在一起,形成一个可执行文件,使用时整个文件都应完整装载到计算机的内存中。微内核是从功能上说,它由操作系统最基础的抽象模块构成的,整体内核系统中包含的许多系统服务以及驱动程序都被放在了核外,核内一般只包括进程管理、I/O处理、内存管理、进程间通讯等。整体内核和微内核的特点分别为:整体内核的效率高但稳定性比较差,而微内核恰好相反,效率低而稳定性好。究其原因:微内核效率低的原因是因为大量使用了进程间通讯造成的。整体内核的系统功能大部分是在内核中实现的,从而降低了系统的稳定性。从技术上讲,要从根本上解决效率和稳定性这对矛盾即解决微内核和整体内核的矛盾是不可能的。

构件技术已经广泛应用于应用软件的开发过程中,在系统软件设计中运用构件技术已经成为研究的热点,特别是分布式系统的发展,为构件技术提供了广阔的施展空间。

发明内容

本发明的目的在于提供一种基于动态内核实现跨地址空间创建构件对象的方法,其灵活内核技术是将构件技术融入到系统内核中,实现从系统级支持构件技术,从而能够灵活地动态配置应用构件在用户空间或内核空间的运行状态。

本发明的又一目的在于提供一种基于动态内核实现跨地址空间创建构件对象的方法,其系统功能接口的构件化,通过系统构件API创建构件对象,并实现跨地址空间的创建构件。

本发明的再一目的在于提供一种基于基于动态内核实现跨地址空间创建构件对象的方法,基于用户—中间件——服务的三层结构体系,由内核的构件支持部件自动建立作为中间件的构件对象的存根代理构件,使用构件对象的存根代理构件跨进程访问构件。

本发明的还一目的在于提供一种基于基于动态内核实现跨地址空间创建构件对象的方法,对于同一构件,可以二进制载体形式直接运行在用户空间或内核空间。

为此,本发明通过如下技术方案实现上述目的:

一种计算机操作系统构件化灵活内核实现的方法,将计算机操作系统的系统功能抽象为对象并用构件技术封装成独立的构件模块,提供系统级构件技术支持,将该系统功能接口以构件对象接口的形式体现,用户可根据需要动态地配置模块运行状态,将构件模块配置在内核态运行或置于用户态运行。并且,用户构件在内核态与用户态可以使用同样的方法获取系统功能构件对象的接口,而且调用方法相同。

具体地,内核态构件模块包括内存管理、进程/线程管理以及控制装载的设备管理器。如果需要,也可包括扩展构件,用于针对具体的设备或应用设置相对固定的对应应用构件,以及文件系统构件或图形系统构件或网络服务构件或设备驱动程序构件。

作为用户态构件模块,包括扩展构件或文件系统构件或图形系统构件或网络服务构件或设备驱动程序构件。

为用户通过该中间构件完成跨地址空间的构件调用,内核态构件模块包括逻辑抽象层一构件运行平台,利用该运行平台生成跨地址空间的创建构件对象的中间件构件。  而中间件为代理构件对象、存根构件对象;其中存根构件对象设置在被创建的构件对象端;代理构件对象设置在对象的创建者端。

本发明的一种基于上述系统功能内核构件化的构件对象创建方法,在于通过系统提供给用户的API,用户可以选择在内核空间或用户空间创建构件对象。

针对在内核空间使用系统功能接口,直接调用系统功能接口;而在用户空间调用系统功能接口,通过中间件到实际对象,从用户空间获取某个系统功能接口时,系统自动创建对应于该接口的代理构件/存根构件,然后把代理对象的接口返回给用户。

进一步地,在用户空间创建用户态构件对象步骤为:

步骤1:在用户空间调用创建函数,其中设置参数,在同一地址空间中创建构件对象;

步骤2:在用户空间创建构件的类厂,然后使用类厂创建构件对象;

步骤3:返回构件对象的接口,使用该接口直接访问该构件对象。

在用户空间创建内核态构件对象步骤为:

步骤1:在用户空间调用创建函数,其中设置参数,表示内核地址空间中创建构件对象;

步骤2:使用内核中的构件运行支持部件的功能,陷入到内核中,在内核中创建构件的类厂,然后使用类厂创建构件对象,生成构件对象的存根对象,并返回到用户态;

步骤3:返回到用户空间,系统发现该系统功能调用应返回一远程对象的接口,则相应创建一个和存根对象对应的代理对象;

步骤4:使用代理对象接口,通过进程间通信实现对真实构件对象的访问。

当然,用户可以跨地址空间在用户空间创建构件对象。跨地址空间创建构件对象是由系统自动创建中间件的存根构件/代理构件,创建过程通过自动化散列集实现。

具体地,在跨地址空间的构件调用中,代理对象负责进程间通信,生成远程对象的本地代理;被调用构件对象所在的地址空间生成一存根对象,与代理对象匹配,通过存根对象向代理对象返回调用结果。其中创建存根构件对象时,获取对应构件对象的相应接口的元数据,根据元数据构造存根的接口形式,即建立存根的虚表,同时存根还有保存指向真实对象的指针和接口地址等信息;创建代理构件对象时,首先也要获取对应构件对象的相应接口的元数据,根据元数据构造代理的接口形式,并保存接口地址等信息。

为此,存根和代理还都会保存一个系统动态生成的标识符,系统通过此标识符来匹配一对代理和存根。代理/存根是对应于接口的,一个拥有多个接口的构件对象在作远程调用时,系统为每个接口建立一对代理/存根对象。

这样,在跨地址空间的通道建立后,代理与存根运行步骤为:

步骤1:当代理创建后返回一个指向代理对象的智能指针,对于智能指针方法的调用便转换为对代理对象方法的调用;

步骤2:代理对象调用通过IPC跳转到内核空间;

步骤3:系统在内核空间另外起一个线程,在该线程中使用IPC过程中复制的栈,调用存根对象;

步骤4:存根对象调用真实对象,真实的构件对象在完成调用之后,返回到存根调用;

步骤5:存根调用返回到IPC,在IPC中会根据接口方法的元数据将返回值和返回参数复制到代理对象所在的空间;

步骤6:IPC返回到代理调用;

步骤7:代理调用返回给调用者。

上述步骤2包括在IPC过程中,通过代理对象中的接口地址获取对应该接口的元数据,根据元数据将代理调用的栈拷贝到内核空间。

本发明操作系统把部分系统功能用构件技术封装成独立的构件模块,例如文件系统和图形系统。用户可以根据需要动态地配置这些模块运行状态,也就是说可以根据用户的需要,将一些来源值得信赖或对运行效率要求高的构件模块配置于内核态,而另一些不太稳定的模块置于用户态运行,在一个系统中同时满足稳定性、安全性与实时性的特殊要求。这样的体系结构不必区分是整体内核还是微内核,事实上所谓的“内核”可大可小,完全依据系统自身的需求动态决定。这就是本发明独创性的“灵活内核”体系结构,利用构件技术解决了长期以来困扰操作系统体系结构设计者的整体内核和微内核在性能、效率两者之间不能两全其美的矛盾。

附图说明

图1为本发明操作系统的三层结构示意图,图1中,1为动态链接库函数调用;2为构件对象接口方法调用;

图2为本发明构件运行平台共享代码动态链接库映射机制示意图;

图3为本发明基于构件化内核在用户空间创建构件对象接口结构示意图;

图4为本发明基于构件运行平台共享代码动态链接库在内核空间创建构件对象接口结构示意图;

图5为本发明基于构件运行平台共享代码动态链接库在用户空间创建构件对象接口结构示意图;

图6为本发明代理与存根生成流程图;

图7为本发明跨地址空间创建构件对象时代理与存根运行步骤流程图;

图8为本发明内核机制实现流程图;

图9为本发明构件接口方法调用流程图。

具体实施方式

如图1-9所示,本发明的本质是将构件技术引进到内核,因而内核是构件化,目的是实现系统的灵活多变。构件化内核是将计算机操作系统的系统功能抽象为对象并用构件技术封装成独立的构件模块,提供系统级构件技术支持。另外,本发明操作系统利用构件技术的优势在系统层面实现了“三层结构”(Client/Middleware/Server)计算模型,完全把构件技术的使用融入到系统内核中,由于构件、中间件技术,可以做到构件运行环境对用户和构件制造者透明,例如构件可以不加修改运行于不同地址空间。

内核态构件模块包括进程构件对象、线程构件对象、同步(Mutex,Monitor等)构件对象和虚拟内存构件对象以及控制装载的设备管理器。如果需要,也可包括扩展构件,用于针对具体的设备或应用设置相对固定的对应应用构件,以及文件系统构件或图形系统构件或网络服务构件或设备驱动程序构件;作为用户态构件模块,包括扩展构件或文件系统构件或图形系统构件或网络服务构件或设备驱动程序构件。

用户构件在内核态与用户态可以使用同样的方法获取系统功能构件对象的接口,而且调用方法相同。

参见图2、4、5,本发明作为中间件的构件运行平台与底层操作系统密不可分,在某种程度上构件运行平台是底层操作系统的一个抽象层,构件运行平台为客户程序与操作系统的交互界面,为客户程序提供相关的函数调用及构件服务,同时隐藏了底层操作系统的特征。构件运行平台为内核共享代码生成的虚拟动态链接库,通过该内核共享代码的映射机制,用户程序直接共享这些代码,在加载用户进程时,通过自动在用户空间注册该虚拟的动态链接库,将二进制载体直接运行操作。同时,构件运行平台还包括应用函数API,API是指动态链接库提供的系统调用函数,如:进程处理、线程管理、类对象等,提供用户基本的构件库服务和/或支持函数,共享代码表中的共享代码与API一一对应。

在本发明操作系统中,内核代码及用户代码都将被加载到共享地址空间(内核私有代码被加以保护,禁止用户进程直接访问),编译器将内核共享代码生成一个虚拟的动态链接库,通过内核共享代码的映射机制,所有用户程序共享这些代码,操作系统在加载用户进程的初始化时通过自动在用户空间注册该虚拟的动态链接库。动态链接库的引出API表与内核共享代码API表一一对应。动态链接库的引出API是提供给用户基本的构件库的服务及其他一些支持函数。

本发明内核代码映射由动态链接库的机制加以体现,由于都在共享地址空间,用户进程无需陷入到内核空间只需要一个长跳转指针就可以共享该部分代码资源,这样减少了切换CPU状态的系统消耗,并且该部分代码由所有进程共享(内核也是一个进程)可以最大程度的减少用户目标代码大小,以符合嵌入式市场对应用上的要求。标准函数库是完全基于系统功能接口实现的。

具体地,如图3、6所示,系统功能接口的使用:在内核空间使用系统功能接口,是直接的接口调用;在用户空间调用系统功能接口,也是通过代理/存根到实际对象,从用户空间获取某个系统功能接口时,系统会自动创建对应于该接口的代理/存根,然后把代理对象的接口返回给用户。

文件系统作为例子来说明。将一个构件加载在内核态和用户态,具体流程如下:

1、首先编写一个构件A;

2、编写一个用户程序,在用户态创建构件A的对象,并调用其中的方法;

3、编写一个用户程序,在内核态创建构件A的对象,并调用其中的方法;

其运行结果一致。

本发明用户态使用系统功能接口要跨越地址空间,在内核中使用系统功能接口则无需跨越地址空间,这其间的差异完全被系统所做的工作覆盖了。

下面说明在用户态和内核态获取系统功能接口的流程。

以创建进程为例,参见图5、8,在用户态获取系统功能接口的流程:

1、调用相应的API函数;

2、API函数调用系统功能接口,通过进程间通信(IPC)陷入到内核态创建一个新的进程,并创建一个对应于新进程构件对象接口的存根对象;

3、IPC返回到用户空间,系统发现该系统功能调用应该返回一个远程对象的接口,则会相应创建一个和存根(存根)对象对应的代理(代理)对象;

4、使用获取的代理对象接口,通过进程间通信实现对真实构件对象的访问。

以创建进程为例,参见图4,在内核态获取系统功能接口的流程:

1、调用相应的API函数;

2、API函数会调用系统功能接口,由于已经处于内核中,因此直接创建一个新的进程;

3、直接返回新进程的接口;

4、直接调用进程对象的接口。

对于构件对象的创建,本发明系统功能接口的调用和使用者所处于的运行状态无关,这样,基于本发明的系统功能接口开发的构件可以在不同运行状态下创建和使用,也就是说同样的二进制代码可以丝毫不变地运行于内核态和用户态,而且接口使用也不会受到运行空间的影响。

甚至可以说运行于内核态的构件看上去就像扩展的系统功能一样,但与系统功能接口不同的是系统功能接口是系统运行必须的构件,而用户构件可以加载也可以不加载;另外,系统功能接口背后的系统构件对象是系统用根据需要创建的,用户一般不会介入到系统构件对象的创建过程中,而用户构件则有比较显示的创建过程。

无论将用户构件创建在用户态还是内核态,对使用者来说都是透明的,在使用者看上去任何时候都像是在同真实的对象交互。本发明操作系统把内核看成是一个进程,通过本发明提供给用户的API,可以选择在用户空间还是内核空间创建构件对象。

在用户空间创建内核态构件对象的流程为:

1、在用户空间调用创建函数,其中设参数,表示在内核地址空间中创建构件对象;

2、使用内核中的构件运行支持部件的功能,陷入到内核中,在内核中创建构件的类厂,然后使用类厂创建构件对象,生成构件对象的存根对象,并返回到用户态;

3、返回到用户空间,系统发现该系统功能调用应该返回一个远程对象的接口,则会相应创建一个和存根(存根)对象对应的代理(代理)对象;

4、使用代理对象接口,通过进程间通信实现对真构件对象的访问。

在用户空间创建构件对象的流程为:

1、在用户空间调用创建函数,其中设参数,表示在同一个地址空间中创建构件对象;

2、创建函数会在用户空间创建构件的类厂,然后使用类厂创建构件对象;

3、直接返回构件对象的接口,使用该接口即可直接访问构件对象。

本发明内核中的构件运行环境,是灵活内核技术在使用中的外在体现。本发明系统实现灵活内核技术的根本在于将构件技术融入到内核当中,并且系统能够自动为跨地址空间的接口创建存根代理对象,并且实现了自动化散列集(marshaling)。

在跨地址空间的调用中,要考虑调用参数和返回值的传输问题,列集是指把方法的参数打包,准备传输到另一个地址空间;散集在另一端把收到的数据包打开,散集和列集合称散列集。散列集的过程中必须掌握数据的格式,包括数据的尺寸以及数据的摆放形式。这些描述数据的信息可以称作元数据,本发明中准确地说元数据是指用于描述构件信息的数据,包括构件功能和接口形式。获取元数据通常有两种方式。一种方式是把这些信息静态地注册到系统中,在需要的时候,进行查询并获取。另外一种方式是把元数据直接封装到构件中,这种方式可以降低系统成本。

具体地,本发明存根代理构件的创建是在跨地址空间的构件调用中,因调用者与被调用者不在同一个地址空间,无法实现直接的调用,代理对象就是为完成进程间通信而生成的远程对象的本地代理。与之相对应,被调用构件对象所在的地址空间也会生成一个存根对象与代理对象匹配,通过存根对象向代理对象返回调用结果。在有多个地址同时对一个构件进行调用时,被调用构件对象会为每个地址生成一个存根构件(与每个进程调用生成的代理构件对象相对应);另外,创建存根构件对象时,首先要获取对应构件对象的相应接口的元数据,根据元数据构造存根的接口形式。亦即建立存根的虚表,同时存根还有保存指向真实对象的指针和接口地址等信息。

而在创建代理构件对象时,首先也要获取对应构件对象的相应接口的元数据,根据元数据构造代理的接口形式。并保存接口地址等信息。

此外存根和代理还都会保存一个系统动态生成的标识符,系统通过此标识符来匹配一对代理和存根。

应该强调的是,代理/存根是对应于接口的,一个拥有多个接口的构件对象在作远程调用时,系统会为每个接口建立一对代理/存根对象。

参见图7,针对存根代理的运作,本发明是在跨地址通道建立起来以后,进行如下运作流程:

步骤1:当代理创建后会返回一个指向代理对象的智能指针,对于智能指针方法的调用便转换为对代理对象方法的调用;

步骤2:代理对象调用会通过IPC跳转到内核空间。在IPC过程中,通过代理对象中的接口地址获取对应该接口的元数据,根据元数据将代理调用的栈拷贝到内核空间;

步骤3:系统在内核空间另外起一个线程,在该线程中使用IPC过程中复制的栈,调用存根对象;

步骤4:从存根对象调用真实构件对象,真实的构件对象在完成调用之后,返回到存根调用;

步骤5:存根调用返回到IPC,在IPC中会根据接口方法的元数据将返回值和返回参数复制到代理对象所在的空间;

步骤6:IPC返回到代理调用;

步骤7:代理调用返回给调用者。

最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号