一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

微内核中系统服务并发调用方法与流程

2022-12-19 21:22:56 来源:中国专利 TAG:


1.本发明属于微内核技术领域,更为具体地讲,涉及一种微内核中系统服务并发调用方法。


背景技术:

2.随着嵌入式系统的飞速发展,微内核操作系统相对于宏内核操作系统的架构优势越来越明显,也越来越被人们重视。国内外巨头公司,如google、华为都在开发自己的微内核操作系统,也证明了微内核是未来非常有前景的内核架构。
3.微内核的关键设计是将大多数内核功能解除特权,使其进入位于独立用户进程中的不同服务器。内核提供了基本功能,例如进程管理、能力强制和行程间通讯(ipc)。这种分散式设计使操作系统架构对运行时错误具有健壮性,这意味着一个服务器中的错误不会影响其他服务器和内核。从内核中删除大部分功能还会导致一个小型的可信计算基础(tcb),使其更不容易受到攻击,并有可能实现全面的形式验证。鉴于这些优势,微内核被广泛应用于各种高可靠性领域,如航空航天、汽车和医疗设备。由于微内核系统中存在多个内核,在同一时间内会运行多个程序,即存在系统服务的并发。如何对系统服务进行并发管理,是微内核操作系统的一大难题。
4.在第三代微内核sel4中,使用ipc快速路径(fast path)处理调用(call)和等待回复(reply wait)系统调用,其中ipc消息在cpu寄存器中传输。对于快速路径,消息将立即发送,控制流将直接传输,而无需进入代价高昂的调度逻辑。1990年,bershad等人提出了一种同步的进程间通信设计,和主流ipc相比,它简化了ipc中的控制流切换,让客户端“执行服务端的代码”,还简化了数据传输,用共享参数栈和寄存器传递数据。这种设计下,内核不会进行完整的上下文切换,而是只切换地址空间(页表)等和请求处理相关的系统状态。其中,不会设计线程和优先级的切换,也不会调用调度器。它可以减少内核调度的时间,并简化内核中的ipc处理。这种思想还被应用在了mach微内核的优化版本中。2005年,uhlig提出,在服务器-客户端类型的进程间通信中,为了调用系统服务,应用程序向os服务器发送ipc。这种通信用两次ipc代替了宏内核中的所有系统调用,因此是最关键的性能操作。为了最小化ipc开销,在从客户端线程切换到服务器线程时不会调用调度程序,而是在客户端的时间片上执行服务器,该方案最早是由bershad等人提出的。
5.对于嵌入式系统中的并发性问题,也有许多研究,其中线程池技术是一种提高并发性常用的设计。它通过预先创建并共用线程,降低线程频繁创建和销毁导致的系统开销,缩短响应时间。其典型实现方式如下,初始化阶段,通过线程池创建一定数量的线程,在任务到来时,从线程池中选择空闲线程处理任务,若所有线程均忙碌,则在任务队列中进行排队。2003年,bagchi提出了一种将事件驱动模型和多线程模型相结合的架构。它在执行过程中,将ipc语义的决定赋予进程,以便它们可以根据需要以灵活的方式混合阻塞和非阻塞语义。而且,引入线程池后,线程池中的工作线程被有效调度,以最大限度地减少处理时间和动态线程开销的浪费。该架构以富有成效的方式利用了事件驱动模型和多线程模型的优点
来利用并发性和保护。然而,该架构在ipc上下文切换带来的开销上并没有做出优化。
6.综上所述,现有技术虽然在一定程度上突破了ipc的性能瓶颈,但是还不能支持大多数系统服务提供低时延且高并发的服务,例如文件系统、网络等,在具体应用场景的效果并不理想。


技术实现要素:

7.本发明的目的在于克服现有技术的不足,提供一种微内核中系统服务并发调用方法,结合线程池和lrpc模型,提高微内核操作系统中系统服务的并发性。
8.为了实现上述发明目的,本发明微内核中系统服务并发调用方法包括以下步骤:
9.s1:系统服务向内核进行注册,内核为每个系统服务提供服务的抽象,即为其生成服务描述符,各个系统服务将自己的处理函数注册至对应的服务描述符中;
10.s2:在内核启动并初始化后,内核会创建第一个用户态线程并进入用户态;此后每当有系统服务注册完成后,内核为该系统服务创建一个线程池,该线程池包括管理线程、工作线程和任务等待队列,其中:
11.管理线程用于接收来自客户端的调用请求,并将其指派到工作线程执行;
12.工作线程对应系统服务提供的全部服务或部分服务,具体配置根据实际情况设置,用于对管理线程指派的调用请求进行执行;
13.任务等待队列用于记录自客户端接收的、等待执行的调用请求;
14.s3:基于lrpc模型进行系统服务调用,具体方法如下:
15.1)客户端创建一个线程,向内核发送对系统服务的调用请求,内核验证客户端的正确性,如果验证不通过,则向客户端反馈错误提示信息,如果验证通过,则查找得到系统服务对应的服务描述符,为服务描述符分配两个资源:参数栈和连接记录,并返回给客户端线程一个该服务描述符的绑定对象,客户端线程将需要向系统服务传递的参数存放至参数栈,并通过绑定对象找到系统服务对应的服务描述符,然后向系统服务发起通信;
16.2)内核验证参数栈和连接记录的正确性,如果验证未通过,则向客户端反馈错误提示信息,如果验证通过,进入步骤3);
17.3)内核检测当前是否存在并发调用,如果存在,则将该调用请求存放至所调用系统服务线程池的任务等待队列中,如果不存在,进入步骤4);
18.4)内核将客户端线程的返回地址和栈指针存放到连接记录;
19.5)内核将连接记录发送至线程池中管理线程的栈上,管理线程为本次调用分配相应的工作线程,然后内核将参数栈同时映射到本次调用系统服务的工作线程和客户端线程;
20.6)内核切换至本次调用的系统服务工作线程的线程地址空间;
21.7)内核找到系统服务线程池中本次调用的工作线程的运行栈(执行代码所用的栈);
22.8)内核将当前运行的客户端线程的栈指针设置为本次调用系统服务工作线程的运行栈地址;
23.9)内核将当前运行的客户端线程的代码指针指向本次调用系统服务工作线程地址空间中的处理函数;
24.10)内核在当前运行的客户端线程执行系统服务提供的处理函数,得到本次调用的执行结果,根据连接记录中客户端线程的返回地址将执行结果返回至客户端,本次调用结束。
25.本发明微内核中系统服务并发调用方法,系统服务向内核进行注册,内核为每个系统服务提生成服务描述符,各个系统服务将自己的处理函数注册至对应的服务描述符中;内核为注册完成的系统服务创建一个线程池,该线程池包括管理线程、工作线程和任务等待队列;当客户端需要调用系统服务时,基于lrpc模型向内核进行系统服务调用。
26.本发明具有以下有益效果:
27.1)本发明在微内核操作系统中引入线程池,提高对并发系统服务的管理能力;
28.2)本发明通过在微内核操作系统中引入lrpc模型,与现有微内核中的ipc机制相比,减少了内核上下文切换的次数,也不会涉及到线程的切换,,可以有效降低ipc开销;
29.3)本发明针对微内核操作系统中低并发的缺点,引入线程池,结合lrpc模块,形成高并发系统服务框架,提高微内核中服务程序的并发性,使得即使在高并发环境下,微内核操作系统中如文件系统、网络协议等也能提供较高性能的服务。
附图说明
30.图1是本发明微内核中系统服务并发调用方法的具体实施方式流程图。
具体实施方式
31.下面结合附图对本发明的具体实施方式进行描述,以便本领域的技术人员更好地理解本发明。需要特别提醒注意的是,在以下的描述中,当已知功能和设计的详细描述也许会淡化本发明的主要内容时,这些描述在这里将被忽略。
32.实施例
33.图1是本发明微内核中系统服务并发调用方法的具体实施方式流程图。如图1所示,本发明微内核中系统服务并发调用方法的具体步骤包括:
34.s101:注册并生成服务描述符:
35.内核中的系统服务向内核进行注册,内核为每个系统服务提供服务的抽象,即为其生成服务描述符,各个系统服务将自己的处理函数注册至对应的服务描述符中。
36.s102:创建线程池:
37.线程池是一种多线程处理形式,利用线程池技术能有效提高系统实时性和整体性能。其主要的思想是在服务器启动时,自动创建一个对象池,并在这个对象池中创建n个空闲线程。当有客户请求时,服务器自动分配给该客户1个空闲线程。当线程池中所有线程都处于繁忙状态时,则该请求自动进入等待队列。线程池有工作组模型、主从模型和管道模型3种。其中主从模型是指线程池中有1个或多个线程处于管理者(master)的地位,而其他线程处于被管理(slavers)的地位。master接受用户的请求,并将其指派到其他slaver线程执行。主从模型具有易于管理、可移植性高、易于开发等特点,这些特点更符合嵌入式环境下系统开发的要求,因此本发明中采用主从模型。
38.在本发明中,在内核启动并初始化后,内核会创建第一个用户态线程并进入用户态。每当有系统服务注册完成后,内核为该系统服务创建一个线程池,该线程池包括管理线
程、工作线程和任务等待队列,其中:
39.管理线程用于接收来自客户端的调用请求,并将其指派到工作线程执行;
40.工作线程对应系统服务提供的全部服务或部分服务,具体配置根据实际情况设置,用于对管理线程指派的调用请求进行执行;
41.任务等待队列用于记录自客户端接收的、等待执行的调用请求。
42.为了使得主从模型线程池的工作效率达到最优化,本实施例中对于线程池初始大小、动态调整策略和线程死锁处理这三个关键问题进行了研究,提出了解决方法,具体方法如下:
43.对于线程池的初始大小,本实施例中根据系统服务的服务范围和服务频率,来计算线程池的初始大小n:
[0044][0045]
其中,k表示历史数据中调用该系统服务的客户端数量,pk表示历史数据中调用该系统服务的客户端的频率,λ表示预设的常数,其取值范围为[0.5,1]。
[0046]
在运行过程中,管理线程对线程池的使用情况进行监控并进行动态调整,具体方法如下:
[0047]
内核对线程池中工作线程的使用率进行统计,当工作线程的使用率大于等于预设阈值t1,则新建工作线程,当工作线程的使用率小于等于预设阈值t2,t2<t1,则关闭部分未调用的工作线程。
[0048]
对于线程死锁问题,管理线程在检测到工作线程发生死锁时,将该工作线程杀死,然后将在其上执行的客户端调用请求重新放入任务等待队列。
[0049]
s103:基于lrpc模型进行系统服务调用:
[0050]
lrpc模型是一个同步的进程间通信设计,在数据传输方面,它主要通过参数栈和寄存器来传递参数。参数栈中存放着调用中客户端给服务端传递的参数。系统内核为每一个lrpc连接预先分配好一个参数栈,并将其同时映射在客户端进程和系统服务进程的地址空间中。因此,在通信的过程中,客户端进程只需要将参数准备到参数栈中即可,不需要额外的内存拷贝。这个过程和函数调用中准备参数的过程是类似的。和l4中的短消息的ipc数据通信的方式类似,lrpc在通信调用的过程中,不会切换通用寄存器,而是直接使用当前的通用寄存器。客户端进程会优先使用寄存器,在寄存器不够的情况下用参数栈传递参数。
[0051]
本发明,基于lrpc模型进行系统服务调用的具体步骤如下:
[0052]
1)客户端创建一个调用线程,向内核发送对系统服务的调用请求,内核验证客户端的正确性,如果验证不通过,则向客户端反馈错误提示信息,如果验证通过,则查找得到系统服务对应的服务描述符,为服务描述符分配两个资源:参数栈和连接记录,并返回给客户端线程一个该服务描述符的绑定对象,客户端线程将需要向系统服务传递的参数存放至参数栈,并通过绑定对象找到系统服务对应的服务描述符,然后向系统服务发起通信。
[0053]
2)内核验证参数栈和连接记录的正确性,如果验证未通过,则向客户端反馈错误提示信息,如果验证通过,进入步骤3)。
[0054]
3)内核检测当前是否存在并发调用,如果存在,则将该调用请求存放至所调用系统服务线程池的任务等待队列中,如果不存在,进入步骤4)。
[0055]
4)内核将客户端线程的返回地址和栈指针存放到连接记录。
[0056]
5)内核将连接记录发送至线程池中管理线程的栈上,管理线程为本次调用分配相应的工作线程,然后内核将参数栈同时映射到本次调用系统服务的工作线程和客户端线程。
[0057]
6)内核切换至本次调用的系统服务工作线程的线程地址空间。
[0058]
7)内核找到系统服务线程池中本次调用的工作线程的运行栈(执行代码所用的栈)。
[0059]
8)内核将当前运行的客户端线程的栈指针设置为本次调用系统服务工作线程的运行栈地址;
[0060]
9)内核将当前运行的客户端线程的代码指针指向本次调用系统服务工作线程地址空间中的处理函数。
[0061]
10)内核在当前运行的客户端线程执行系统服务提供的处理函数,得到本次调用的执行结果,根据连接记录中客户端线程的返回地址将执行结果返回至客户端,本次调用结束。
[0062]
尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献