操作系统实例创建方法及装置的制造方法_3

文档序号:8395742阅读:来源:国知局
,之后准备在内核空间构建完整资源描述信息。
[0080]在对第一资源描述信息,即启动参数部分数据结构填充完毕后,Osloader模块调用CPU Controller模块,通过调用函数(1ctl)将构造的第一资源描述信息传入内核空间,并监控该参数中的指示Secondary操作系统实例是否成功创建的成员变量ret,以确定Secondary操作系统实例创建的成功与否。
[0081]S3、CPU Cont1ller模块根据在用户层生成的第一资源描述信息,分配相关的系统资源,在内核空间构建Secondary操作系统实例的完整资源描述信息,该过程包括具体CPU/core的分配、物理内存分区的分配、页表映射、CPU分配状态位图(MP Table)等一系列Secondary操作系统实例启动所需求的资源准备工作,最后发送高级可编程中断控制器(Inter-Processor Interrupt Controller, IPI),顺序启动 Secondary 操作系统实例。具体的,CPU Controller模块完成如下子步骤:
[0082]S3UCPU Controller模块接收Osloader模块发送的在用户层生成的第一资源描述信息。
[0083]在接收到Osloader模块传入的第一资源描述信息后,CPU Controller模块根据CPU 分配状态位图(MP Table、CPU_Possible、CPU_online_map),从当前空闲的 CPU/core 中或通过其他方式释放(如CPU_hotplug)的第一资源描述信息指示的CPU/core资源,分配给Secondary操作系统实例,同时通过alloc_pages ()函数为该Secondary操作系统实例分配第一资源描述信息指示的、连续的物理内存分区。
[0084]S32、CPU Controller模块生成Secondary操作系统实例的资源描述信息。
[0085]CPU Controller模块在S31中分配所需资源中,为Secondary操作系统实例分配的物理内存分区上构建符合PC标准的MP_Table、ACPI_Table描述信息,描述为Secondary操作系统实例分配的CPU/core的具体相关信息以及系统的全局描述符表(GlobalDescriptor Table, GDT)、中断描述符表(Interrupt Descriptor Table, IDT)等信息,同时构建E820map数据结构,在Secondary操作系统实例启动过程中,通过detect_memory_e820 O获取内存布局,填充boot_params.e820map,从而建立Secondary操作系统实例物理内存分区的管理框架基础。其中,ACPI_Table可用于描述为Secondary操作系统实例分配的系统资源中的独占的设备资源的信息,该独占的设备资源信息可以是从Primary操作系统实例的设备信息中选取可用的信息参数后再填充在ACPI_Table中。
[0086]S33、Primary操作系统实例对所理内存分区资源进行虚拟地址重映射。
[0087]Primary操作系统实例的CPU Controller模块为步骤S31中分配的物理内存分区获取起始处(memstart)信息,进行虚拟地址的重映射page_to_phys (),使得Secondary操作系统实例具有独立的地址空间。
[0088]S34、CPU Controller模块将系统映像文件传入Secondary操作系统实例的物理内存分区。
[0089]CPU Controller模块复制传入的系统映像文件到指定的物理内存空间,并填充完善启动参数Kernbootparams数据结构,如步骤S33中获取起始处(memstart)信息、系统映像文件等,完成资源描述信息构造工作,准备好所有必须的资源后,Secondary操作系统实例等待IPI信号。
[0090]S35、CPU Controller模块将资源描述信息传入Trampoline模块。
[0091]在构造完资源描述信息,即对整个启动参数Kernbootparams数据结构填充完毕后,CPU ControIler模块将模式转换的功能代码(trampoIine_data_muIt1-kerneI)设置到指定位置,并将整个启动参数Kernbootparams数据结构传入至Trampoline模块。
[0092]S36、CPU Controller模块向Secondary操作系统实例发送IPI中断信号。
[0093]具体的,CPU Controller模块转换启动参数成员变量bspindex为高级配置与电源管理接 P (Advanced Configurat1n and Power Interface, apicid),即 intapicid=apic->CPU_present_toapicid (bp->bspindex),通过 apic 机制发送 IPI 中断信号,让Secondary操作系统实例执行相应的中断处理程序。
[0094]S4、Trampoline模块对Secondary操作系统实例分配的系统资源进行初始化,并启动Secondary操作系统实例。
[0095]本步骤中,Trampoline模块在Primary操作系统实例为Secondary操作系统实例分配好系统资源后,初始化处理器资源、内存分区资源等系统资源,如初始化CPU等待IPI信号、调整trampoline里页表区域的值、虚拟地址的重映射等。具体的,Secondary操作系统实例的CPU/core在Trampoline模块支持下初始化后,等待IPI信号,当接收到IPI中断信号后,执行相应处理程序,然后,通过trampoline跳转、使得Secondary操作系统实例的CPU/core完成实模式到保护模式的转换。Trampoline模块通过head.S复制trampoline功能代码的构造参数到Secondary操作系统的内核空间,作为Secondary操作系统实例启动所需的参数,然后跳转到Secondary操作系统实例的系统映像文件加载处,加载系统映像文件后,将执行权交给Secondary操作系统实例的内核,完成一系列的初始化任务,搭建整个系统运行内核环境,从start_kernel到CPU_idle。该启动过程中,对于Linux操作系统,Secondary操作系统在启动过程中会从低地址空间,如B1S内存区域读取设备资源的信息,以此来启动和初始化设备。对于非直接访问的设备,有Primary操作系统实例和Secondary操作系统实例协商完成“虚拟设备”的构建。
[0096]最后,当Secondary操作系统实例启动成功后,Primary操作系统实例将osloader中用于监控的成员变量ret置I,标识该Secondary操作系统实例成功创建。
[0097]图3为本发明操作系统实例创建装置实施例一的结构示意图。本实施例提供的操作系统实例创建装置可设置在多处理器操作系统的Primary操作系统实例上,也可以是Primary操作系统实例本身,是与本发明图1实施例对应的装置实施例,具体实现过程在此不再赘述。具体的,本实施例提供的操作系统实例创建装置100具体包括:
[0098]接收模块11,用于接收指示创建从操作系统实例的创建请求,创建请求携带从操作系统的资源需求信息;
[0099]分配模块12,用于根据资源需求信息,为从操作系统实例分配独占的系统资源,系统资源至少包括:处理器资源、物理内存分区资源;
[0100]生成模块13,用于根据资源需求信息,生成从操作系统实例的资源描述信息;
[0101]初始化模块14,用于初始化系统资源,得到初始化系统资源;
[0102]启动模块15,用于在初始化系统资源上启动从操作系统实例。
[0103]本发明实施例提供的操作系统实例创建装置,根据资源需求信息,为Secondary操作系统实例分配独占的系统资源,生成Secondary操作系统实例的资源描述信息后,初始化并启动Secondary操作系统实例,从而实现根据用户提供的资源需求,动态的创建具有独占资源的操作系统实例,达到提高系统扩展性能,并满足用户的需求的目的。
[0104]图4为本发明操作系统实例创建装置实施例二的结构示意图。如图4所示,本实施例提供的操作系统实例创建装置200,在图3的基础上,还包括:
[0105]判断模块16,用于根据资源需求信息,判断资源池中是否存在满足资源需求信息的系统资源。
[0106]进一步的,资源描述信息,包括:
[0107]兼容的资源描述信息,兼容的资源描述信息为不符合引导过程标准multiboot的资源描述信息;或者,
[0108]标准的资源描述信息,标准的资源描述信息为符合引导过程标准multiboot的资源描述信息。
[0109]进一步的,生成模块13,用于根据资源需求信息,在用户层生成描述系统资源的数量信息的第一资源描述信息,并在内核空间,根据数量信息,生成从操作系统实例完整的资源描述信息
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1