[发明专利]一种创建基于多映像的多功能嵌入式系统的方法有效
申请号: | 201811548125.2 | 申请日: | 2018-12-18 |
公开(公告)号: | CN109783145B | 公开(公告)日: | 2022-02-08 |
发明(设计)人: | 潘润宇 | 申请(专利权)人: | 潘润宇 |
主分类号: | G06F9/4401 | 分类号: | G06F9/4401;G06F9/445;G06F12/02;G06F11/07 |
代理公司: | 广州专理知识产权代理事务所(普通合伙) 44493 | 代理人: | 曲超 |
地址: | 450042 河南省*** | 国省代码: | 河南;41 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 创建 基于 映像 多功能 嵌入式 系统 方法 | ||
1.一种创建基于多映像的多功能嵌入式系统的方法,其特征在于,包括以下步骤:
步骤1、创建一个操作系统模块映像,并烧写入系统存储器内,或者放在网络上的某个服务器内;所述操作系统模块映像sys_image包括引导文件、板级支持包BSP、操作系统内核的二进制映像和设备树,存放操作系统模块映像的存储介质是连续的也能够是不连续的;
步骤2、创建一个或多个应用程序模块映像,并烧写入系统存储器内,或者放在网络上的某个服务器内,所述应用程序模块映像app_image包括应用程序二进制映像本身和应用程序的内存要求描述符app_mem_desc,存储应用程序模块映像的存储介质是连续的也能够是不连续的;
步骤3、在系统初始化阶段,先从系统存储器或者网络加载操作系统模块映像,并将操作系统模块映像做初始化,并且将系统设置到启动阶段;
步骤4、在系统启动阶段,操作系统模块映像从系统存储器或者网络加载各个应用程序模块映像,并分析app_mem_desc;加载一个应用程序模块映像的sys_load_app包括以下步骤:
步骤4.1、解析应用程序模块映像的app_mem_desc,分析其各段内存的加载虚拟地址、实际物理地址和读写执行权限属性,以及内存访问实时性属性,内存访问的实时性属性有两种,一种是需要实时访问,以下称实时内存段,一种是不需要实时访问,以下称非实时内存段;
步骤4.2、在操作系统模块映像中建立对应app_mem_desc的内存空间数据结构app_mem_trie,通过所述数据结构记录所述应用程序模块映像的当前地址空间分布;
步骤4.3、根据app_mem_trie生成对应于所述应用程序模块映像的、填充内存保护单元或基于基址-长度的内存管理单元的硬件寄存器的、存储在所述应用程序模块映像的管理数据结构app_mgmt内的地址空间缓存app_mem_cache,当应用程序模块映像的内存段数超过硬件支持的槽位数,按照内存选择流程sys_mem_choose判定哪些内存段被加入地址空间缓存app_mem_cache中;内存选择流程sys_mem_choose包括以下步骤:
步骤4.3.1、在app_mem_desc中找出所有实时内存段,并优先为其分配地址空间缓存的槽位;
步骤4.3.2、当地址空间缓存的槽位数量小于需要应用程序模块内存描述符中实时内存段的数量,操作系统应当使用地址空间缓存所有的槽位满足实时内存段;
步骤4.3.3、当地址空间缓存的槽位在为实时内存段分配之后还有剩余,将剩下的各个槽位分配给非实时内存段;
步骤4.4、加载应用程序模块映像的数据段和代码段,完成其他相关初始化;
步骤5、在完成应用程序模块映像的加载后,操作系统即转入后台,并按照设定的调度算法调度各个应用程序,在运行中也能够动态加载更多应用程序模块映像,仍按照加载一个应用程序模块映像的过程sys_load_app执行;
步骤6、应用程序模块映像在运行中调用接口向操作系统请求更多内存,要求与某个其他应用程序模块映像共享内存,释放内存,或者取消与某个应用程序模块映像共享内存;
sys_mem_shared_add相当于两个或多个应用程序模块映像同时调用内存增加流程sys_mem_add,并由操作系统分配相同的物理地址进行映射,sys_mem_shared_rem则相当于两个或多个应用程序模块映像同时调用内存减少流程sys_mem_rem,并由操作系统解除相应的物理内存的映射;内存增加流程sys_mem_add和内存减少流程sys_mem_rem包括以下步骤:
步骤6.1、内存增加流程sys_mem_add操作的流程;包括以下步骤:
步骤6.1.1、操作系统模块映像寻找一块大小和属性匹配的物理内存准备进行映射;
步骤6.1.2、在应用程序模块映像指定物理内存的情况下,操作系统检查地址的合法性,当通过则按照步骤6.1.3进行,不通过则报错;
步骤6.1.3、修改内存空间数据结构app_mem_trie的内容,将所述物理内存段所对应的描述符添加到数据结构内部以反映应用程序模块映像地址空间的改变;
步骤6.2、内存减少流程sys_mem_rem操作的流程;包括以下步骤:
步骤6.2.1、根据应用程序模块映像提供的地址,操作系统模块映像在内存空间数据结构app_mem_trie中找到需要移除的物理内存段;
步骤6.2.2、当能够找到所述地址则按照步骤6.2.3进行,不通过则报错;
步骤6.2.3、修改内存空间数据结构app_mem_trie的内容以反映这一改变;
步骤6.2.4、在地址空间缓存app_mem_cache中寻找对应这一区域的槽位,找到则清空;
步骤6.2.5、当前运行的是所述应用程序模块映像,则在硬件寄存器中也需要清空所述物理内存段对应的缓存条目,即将地址空间缓存app_mem_cache重新装入硬件寄存器;
操作系统模块映像能够进行应用程序模块切换;当操作系统模块映像切换应用程序模块映像时,需要切换执行环境的上下文,并将即将切换到的应用程序模块映像对应的地址空间缓存app_mem_cache装入硬件寄存器中;
步骤7、内存段替换更新;对于某些内存段数较多的应用程序模块,地址空间缓存app_mem_cache不能在同一时刻包含其所有内存段,当应用程序访问到那些潜在的未被包含内存段时,硬件会产生一个内存访问错误异常;操作系统模块应当按照访存异常处理流程sys_mem_fault处理此内存访问错误异常;访存异常处理流程sys_mem_fault包括以下步骤:
步骤7.1、从硬件访存错误地址寄存器hw_mmfar中读取错误发生的内存地址,并从硬件访存错误原因寄存器hw_mcause中读取所述内存访问错误发生的原因;
步骤7.2、在当前应用程序模块映像对应的内存空间数据结构app_mem_trie中寻找对应于所述地址的描述,当找不到描述符或描述符不包含错误原因中指示的访问类型,则按照真正的权限错误处理,在实际应用中的处理方法是终止此应用;当找到相关条目则继续按步骤7.3处理;
步骤7.3、将与所述错误发生的内存地址相对应的缓存条目加入当前应用程序对应的地址空间缓存app_mem_cache;在地址空间缓存app_mem_cache中有空余位置的前提下,加入地址空间缓存app_mem_cache的空余位置;在地址空间缓存app_mem_cache填满的前提下,按照替换算法,优先替换地址空间缓存app_mem_cache中的非实时内存段;
步骤7.4、将更新过后的地址空间缓存app_mem_cache装入硬件寄存器内。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于潘润宇,未经潘润宇许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811548125.2/1.html,转载请声明来源钻瓜专利网。