全网唯一标准王
(19)国家知识产权局 (12)发明 专利申请 (10)申请公布号 (43)申请公布日 (21)申请 号 202210523188.2 (22)申请日 2022.05.13 (71)申请人 上海交通大 学 地址 200240 上海市闵行区东川路80 0号 (72)发明人 钱宇超 古金宇 臧斌宇 陈海波  (74)专利代理 机构 上海汉声知识产权代理有限 公司 3123 6 专利代理师 胡晶 (51)Int.Cl. G06F 21/57(2013.01) G06F 9/445(2018.01) G06F 9/448(2018.01) (54)发明名称 动态决定运行态的可加载系统模块实现方 法及系统 (57)摘要 本发明提供了一种动态决定运行态的可加 载系统模块实现方法及系统, 包括: 通过基于 capability的访问控制实现内核向运行在内核 态和用户态的系统模块提供统一的API; 通过符 号重定位技术, 实现加载系统模块时动态决定其 所调用的内核API采用内核态实现还是用户态实 现; 在内核中基于capability机制提供跨模 块调 用机制, 采用共享内存页传递参数和返回值; 通 过提供预设接口, 允许在跨模块调用的内核API 中一次在 多个连接上等待。 本发 明利用符号重定 位技术、 capability机制, 提出了新的跨模块调 用机制, 最终实现了可加载系统模块在操作系统 运行期可选地加载到内核态或用户态并进行相 互通信的方法。 权利要求书4页 说明书14页 附图2页 CN 114969753 A 2022.08.30 CN 114969753 A 1.一种动态决定运行态的可加载系统模块实现方法, 其特 征在于, 包括: 步骤S1: 通过基于capability的访问控制实现内核向运行在内核态和用户态的系统模 块提供统一的API; 步骤S2: 通过符号重定位技术, 实现加载系统模块时动态决定其所调用的内核API采用 内核态实现还是用户态实现; 步骤S3: 在内核中基于capability机制提供跨模块调用机制, 采用共享内存页传递参 数和返回值; 步骤S4: 通过提供 预设接口, 允许在跨模块调用的内核API中一次在多个连接上等待。 2.根据权利要求1所述的动态决定运行态的可加载系统模块实现方法, 其特征在于, 在 所述步骤S1中: 将系统模块加载到内存运行时, 采用capability机制来提供对内核对象的访问控制, 系统模块代码不 直接访问内核对象的内存数据, 而是通过 方法调用进行读写; 为了能使直接调用内核中实现系统调用的函数和通过syscall指令进行系统调用产生 相同的效果, 系统模块能观测到相同的行为, 引入capability机制向系统模块提供统一的 内核对象抽象, 运行在内核态的系统模块和运行在用户态的系统模块一样, 通过 capability间接地访问内核对象, capability机制使不同系统模块之间对内核对象 的访问 权限相互隔离, 系统模块无法通过伪造capability值来访问它没有权限访问的内核对象, 当使用内存安全语言编写系统模块时, 通过capability和系统内核提供的封装库, 将系统 模块运行在内核态而不必担心模块通过猜测内存地址、 构造指针的方式任意访问内核数 据; 当使用非内存安全的语言编写系统模块时, 将其运行在用户态以通过进程级别的地址 空间隔离保证内核的安全。 3.根据权利要求1所述的动态决定运行态的可加载系统模块实现方法, 其特征在于, 在 所述步骤S2中: 通过符号重定位技术, 通过特制动态加载器的不同参数来控制将ELF格式的系统模块 的未定义符号重定向到内核态实现或用户态实现, 未定义符号是操作系统内核对系统模块 提供的API, 内核态实现表现为对内核函数的直接调用, 用户态实现表现为对内核的系统调 用; 特制的动态加载器根据用户指定的参数决定将系统模块加载到内核态还是用户态执 行, 动态加载器首先将ELF的各可加载段加载到内存中, 然后对其中未定义的符号根据其重 定位类型做重定位, 将符号在运行期的实际内存地址, 根据重定位类型 的不同进行不同运 算, 填充到重定位地址, 根据用户给出的参数不同, 特制的动态加载器为ELF所需的符号重 定位到不同的实现, 当用户将系统模块加载到内核态运行时, 加载器为其重定位的实现是 直接调用内核中实现系统调用的函数, 使其运行时无需真的向用户态程序一样通过系统调 用请求内核服务; 当用户将系统模块加载到用户态运行时, 通过syscall指令陷入内核处 理, 该过程会发生CPU特权级切换。 4.根据权利要求1所述的动态决定运行态的可加载系统模块实现方法, 其特征在于, 在 所述步骤S3中: 基于capability机制, 内核向系统模块提供跨模块调用机制, 使系统模块之间能够通 过统一的机制对外提供服务和调用外部服务, 该机制的运行需要服务端和客户端两端的参权 利 要 求 书 1/4 页 2 CN 114969753 A 2与, 服务端 首先向内核注册 服务, 随后在该服务的capability上等待客户端 连接, 客户端通 过向内核查询服务, 得到capability, 向服务端建立连接, 连接成功后, 服务端在该连接的 capability上等待客户端的调用请求, 收到请求后为期提供服 务并返回; 在跨模块调用机制中, 内核为系统模块提供接口, 跨模块调用 双方分为客户端和服务 端, 基本的工作方式如下: 在服务端: 步骤A1: 通过cmc_re gister_server接口向内核注册一个Server内核对象, 该接口 以一 个字符串作为键, Server对象作为值, 在内核中维护一个映射表, 以便之后客户端查询, 并 返回用于访问此内核对象的capabi lity; 步骤A2: 在该Server对象上调用cmc_accept接口, 使当前线程进入等待状态, 等待客户 端发起连接请求, 连接成功后返回Co nnection内核对象的capabi lity; 步骤A3: 服务端不断在Connection对象上调用cmc_wait接口以等待客户端的跨模块调 用, 使当前线程进入等待状态, 当接口返回时表明 收到了客户端的调用请求, 应对其进行 处 理; 在客户端: 步骤B1: 通过cmc_find_server接口向内核查询具有特定名字的S erver内核对象, 并获 得能够用于访问它的capabi lity; 步骤B2: 在此Server对象上调用cmc_connect接口, 以向服务端发起连接, 该接口检查 服务端是否已经调用cmc_accept接口等待连接, 若是, 则在内核 中创建Connection内核对 象, 以表示两者建立的连接, 并返回用于访问Connection内核对象的capability, 同时服务 端的cmc_ac cept接口调用也返回; 步骤B3: 客户端 多次在该Co nnection对象上调用cmc_cal l接口来发起 跨模块调用。 5.根据权利要求1所述的动态决定运行态的可加载系统模块实现方法, 其特征在于, 在 所述步骤S4中: 跨模块调用机制的API允许系统模块的一个线程在多个连接上等待调用请求, 从而使 服务端能够自由决定为 客户端服 务的线程数量; 内核为系统模块提供了cmc_select接口, 允许跨模块调用服务端同时在多个 Connection对象上等待, 其中任何一个收到跨模块调用都会返回, 通过cmc_ select接口, 系 统模块能够根据实际情况决定需要用多少线程处 理跨模块调用; 当跨模块参数需要传递参数和返回值时, 客户端和服务端双方通过cmc_get_shared_ pmo接口获取Connection对象对应的共享PMO, 同样是以capability的形式, 并各自映射到 自己的地址空间来访问, 共享PMO在调用cmc_get_shared_pmo时创建, 内核保证客户端和服 务端能够获得对同一个P MO的访问权限, 在调用cmc_call 发起跨模块调用之前, 客户端根据 服务端约定的ABI在 共享PMO中特定位置填写要请求的具体服务和所需参数, 然后服务端在 cmc_wait返回后从该共享PMO中取得参数, 并进行相应处理, 根据约定的ABI, 在共享PMO中 特定位置填写返回值, 并在下一次cmc_wait调用时将执 行流返回到客户端; 在cmc_wait和cmc_select接口中, 加入一个当前要返回的Connection对象的 capability, 从而在将当前服务端线程转为等待状态之后, 立即将执行流迁移到刚刚处理 的调用请求的发起侧。权 利 要 求 书 2/4 页 3 CN 114969753 A 3

.PDF文档 专利 动态决定运行态的可加载系统模块实现方法及系统

文档预览
中文文档 21 页 50 下载 1000 浏览 0 评论 309 收藏 3.0分
温馨提示:本文档共21页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
专利 动态决定运行态的可加载系统模块实现方法及系统 第 1 页 专利 动态决定运行态的可加载系统模块实现方法及系统 第 2 页 专利 动态决定运行态的可加载系统模块实现方法及系统 第 3 页
下载文档到电脑,方便使用
本文档由 人生无常 于 2024-03-18 00:03:17上传分享
友情链接
站内资源均来自网友分享或网络收集整理,若无意中侵犯到您的权利,敬请联系我们微信(点击查看客服),我们将及时删除相关资源。