CN1273890C - Arm处理器架构的微内核设计方法 - Google Patents

Arm处理器架构的微内核设计方法 Download PDF

Info

Publication number
CN1273890C
CN1273890C CN 200410018198 CN200410018198A CN1273890C CN 1273890 C CN1273890 C CN 1273890C CN 200410018198 CN200410018198 CN 200410018198 CN 200410018198 A CN200410018198 A CN 200410018198A CN 1273890 C CN1273890 C CN 1273890C
Authority
CN
China
Prior art keywords
service
thread
kernel
data
inter
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN 200410018198
Other languages
English (en)
Other versions
CN1570855A (zh
Inventor
陈文智
谢铖
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CN 200410018198 priority Critical patent/CN1273890C/zh
Publication of CN1570855A publication Critical patent/CN1570855A/zh
Application granted granted Critical
Publication of CN1273890C publication Critical patent/CN1273890C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Computer And Data Communications (AREA)
  • Multi Processors (AREA)

Abstract

本发明公开了一种ARM处理器架构的微内核设计方法。涉及一个针对ARM架构设计的完全可抢占的微内核。它用于支持下一代面向服务的嵌入式操作系统。该内核支持软件模块以服务线程的形式构造系统,服务器与客户以及服务器内部使用相同的线程间通信技术,线程间通信只使用ARM通用寄存器组发送和接收数据,动态更改通信结构则实现服务动态替换、参数化或者分层叠加。内核执行并管理这些服务器进程,使之高效的协同工作。内核支持在线程间通信中共享地址空间,用于服务器进程间传输更多数据。内核使用自卷上下文结构实现完全可抢占性,支持硬实时中断响应。

Description

ARM处理器架构的微内核设计方法
                          技术领域
本发明涉及一种操作系统微内核,尤其涉及一种ARM处理器架构的微内核设计方法。
                          背景技术
随着网络技术的发展,采用ARM处理器的嵌入式设备联网的趋势日渐明显。嵌入式操作系统的运行环境也从孤立的单机环境发展为复杂的网络分布式环境,应用软件也出现了向以服务为单位发展的趋势。但是针对ARM架构设计的嵌入式操作系统往往是单内核系统,难以采用面向服务的软件技术进行开发,由此带来了软件开发周期长,软件难以重用、维护和更新、系统不易于用户定制等缺点。随着嵌入式设备硬件结构日趋复杂,功能日益增强,对嵌入式操作系统技术和嵌入式软件开发技术提出了新的挑战。这主要包括:支持软件快速开发和升级、支持嵌入式软件的高度可配置性、轻便的移动应用和多媒体的信息处理。为控制功能的复杂性、减少开发难度、保障软件质量和缩短开发周期,嵌入式应用软件的开发需要操作系统和强大的开发工具的支持。目前国内外被广泛应用的商业嵌入式实时操作系统大部分是传统的嵌入式操作系统。国外嵌入式实时操作系统有:VxWorks,Microsoft Windows CE,QNX,NuClear,eCos等等。在国内,凯思集团的“女娲Hopen”是拥有自主产权的嵌入式操作系统,应用于数字电视、股票机顶盒、VOD视频点播机顶盒等方面。嵌入式Linux方面,中软总公司以数控平台为背景,推出了中软Linux3.0,主要应用于数控机床等工业控制领域。中科红旗公司把工控和信息家电作为主要的发展领域,开发出了针对工控领域的红旗ControLinux。商用嵌入式操作系统如表1所示:
表1商用嵌入式操作系统
  公司名称   OS名称   备注
  QNX Software Systems   Neutrino RTOS
  Wind River Systems   VxWorks   应用于实时领域
  Palm   PalmOS   应用于PDA
Microsoft WinCE
  Red Hat   eCos   开放源码
  MontaVista Software   MontaVista Linux  实时嵌入式Linux
  凯思昊鹏软件工程技术有限公司   Hopen
  中软网络技术股份有限公司   中软Linux  工业控制领域
  北京中科红旗技术有限公司   ControLinux  工业控制领域
在这些流行的嵌入式操作系统中,基于面向服务的微内核技术构建的嵌入式操作系统还不多。而在内核上支持多服务器技术特点的嵌入式操作系统目前还不存在。基于本发明所实现的嵌入式操作系统是新一代的嵌入式操作系统,能够满足新一代嵌入式应用的需求。
                         发明内容
本发明的目的是提供一种ARM处理器架构的微内核设计方法。
方法的步骤为:
a)将用于构造面向服务的嵌入式操作系统中所有的服务用线程来表示,系统调用都是以线程为操作对象,将服务的地址空间作为线程附带的一部分状态进行管理;
b)用线程间通信方式实现多服务器协作,通信数据用寄存器组进行传递;
c)在线程问通信接口中支持地址空间的传递,用于不同地址空间的服务协作中大量的数据通信;
d)将微内核中无法确定计算量的大任务划分为多个基本的内核指令,进行流水作业;
e)对关键区采用非阻塞式同步访问机制,实现完全可抢占性。
本发明克服ARM架构上嵌入式操作系统在单内核体系结构上的缺陷,本发明提供一个针对ARM处理器优化设计的完全可抢占的微内核,该内核用于支持下一代面向服务的嵌入式操作系统。在架构设计上重点考虑安全性、可扩展性和实时性能,以服务的形式构造上层应用,实现了高度的模块化结构和稳定的系统性能,为开发复杂的嵌入式操作系统提供了坚实的基础。
本发明围绕服务的概念设计微内核,每个服务独立为一个线程,该模块包含了相关的内部数据和硬件资源,操作系统是多个服务器线程的组合,服务器与客户以及服务内部线程使用相同的线程间通信技术,动态更改通信结构则实现服务动态替换、参数化或者分层叠加。微内核以线程和线程间通信为基础执行并管理服务器进程,使之高效的协同工作。线程间通信只使用ARM通用寄存器组发送和接收数据,内核完成一次线程间通信的数据传递,只需要将数据从发送进程的寄存器组拷贝到接收的寄存器组即可。内核支持在线程间通信中共享地址空间,用于服务器进程间传输更多数据。内核使用自卷上下文结构实现完全可抢占性,支持硬实时中断响应。
                          具体实施方式
线程是Pcanel支持的唯一的活动主体,Pcanel的系统调用都是以线程为操作对象。一个线程代表一个单独的服务,具有单独的寄存器组,包括指令执行地址、堆栈地址、处理器状态等寄存器,Pcanel对多服务器的支持直接体现在多线程管理上。
所说将用于构造面向服务的嵌入式操作系统中所有的服务用线程来表示:服务用一个32位无符号数标示,具有单独的寄存器组,包括指令执行地址、堆栈地址、处理器状态寄存器,创建新服务必须指定合作服务、空间服务及监控服务。通过指定一个现有的服务作为合作服务以共享同一个地址空间。
Pcanel中的线程基本上和POSIX线程功能相当,运行在同一个地址空间的所有线程则构成POSIX的进程概念。当用户创建一个新的线程A时,可以通过指定一个现有的线程B作为“同事”,这样,线程A与线程B就共享同一个地址空间;如果用户没有指定“同事”,则Pcanel为新线程创建一个独立的地址空间。
每个线程用一个32位无符号数表示,0表示空,若最高位为0表明系统服务线程,可以调用一些特权API,如果最高位为1表明普通用户线程,不可以调用Pcanel的特权服务。比如创建线程就是特权服务。线程ID号由创建者设定,创建线程的能力完全由特权线程控制,普通线程可以通过向特权线程发送请求间接创建线程。
Pcanel支持基于优先级的分时调度。缺省情况下,内核上将线程的优先级自高到低分为紧急级、实时级、正常级、后台级四层,总共定义了15个优先级,最高级为14,最低级为0,其中紧急级为12,实时级为8,正常级为5,后台级为2。紧急级一般是用于系统紧急事件的处理,实时级用于实时系统的用户事件处理,正常级则用于分时系统的任务调度,后台级一般用于显示一些调试信息等可以延缓处理的后台服务。优先线的数目以及四个预定义优先级在内核信息表中存取,通过启动时更改内核信息表可以定制线程的优先级数目。
优先级为0的线程是一个比较特殊的空闲线程,它并不参与调度过程,只有当所有其他线程都不处于活动状态的时候,Pcanel才会运行这个线程。该线程一般用于能耗管理,比如当持续运行1分钟后,可以关闭一些外围器件或者降低处理器主频。
任何一个线程创建的时候,都需要指定监控线程(Keeper)和宿主线程(Spacer),只有这两个线程才能控制其运行、暂停或者删除。其中Spacer线程还负责内存分配,也就是说,当一个线程调用malloc()这样的内存分配函数时,该内存分配请求将由Spacer来实现。
线程的执行地址(IP)和堆栈地址(SP)是两个最重要的值。当线程最初创建时,并不指定IP和SP,因此它不处于活动状态,不能被调度执行。当用户指定了合理的IP和SP值后,线程进入活动状态,可以被调度执行。IP值为特殊的0值时,表明暂停该线程,如果设置IP为1表明继续运行该线程;在暂停的情况下设置合理的IP值可以使暂停的线程从新的地址继续运行。SP值为特殊的0值时,表明删除该线程。这样,用户通过设置IP和SP的值,可以实现对线程的全面控制。
线程间通信
Pcanel基于通信顺序过程处理模式,以线程间通信方式实现相同或不同地址空间的服务之间的数据通信,从而实现服务接口的调用,Pcanel的主要功能就是实现线程间通信(线程间通信)。线程间通信既可以用于相同地址空间的线程,也可以用于不同地址空间的线程。
线程间通信两阶段
任何一个线程间通信都分为两个阶段:发送阶段和接收阶段。如果一个线程间通信只发送数据,那么其接收阶段为空,同样如果一个线程间通信只接收数据,那么其发送阶段为空。Pcanel支持阻塞式的线程间通信调用,也就是说,当线程A对线程B发送数据时,如果线程B并没有处于接收阶段,或者虽然处于接收阶段,但是线程A并不在其接收范围内,那么线程A将成为阻塞状态,直到线程B接收数据为止。Pcanel也支持非阻塞的线程间通信调用,也就是说,如果发送/接收阶段不能立即执行,线程将得到一个错误值,而不会进入阻塞状态。
线程间通信的发送/接收阶段只使用通用寄存器组,也就是说,发送/接收的数据完全通过通用寄存器来实现,现代RISC处理器都具有较多的通用寄存器,一般可以支持6个32位整数的线程间通信数据内容,根据对一些操作系统的系统调用参数的统计情况看,数据内容平均在3~4个32位整数之间。因此使用通用寄存器来实现线程间通信数据的传递,其效率很高。以ARM处理器的函数调用为例,函数的参数通过R0、R1、R2、R3传递,其余更多的参数则放到堆栈中,因此通常Pcanel完成一次线程间通信的数据传递,只需要将数据从发送线程的寄存器组拷贝到接收线程的寄存器组即可,并不涉及线程的地址空间、堆栈等,因此能够更高效的发挥处理器一级缓存的作用。
线程间通信的发送阶段必须指明接收线程;而线程间通信的接收阶段则不一定需要指明从哪个线程接收数据,具体分为三种情况,一是接收来自任何线程的数据,二是接收来自同地址空间线程的数据,第三种情况较为特殊,是针对Pcanel的多服务器架构设计的,称为客户/服务器模式。
客户/服务器模式
线程间通信的一个重要用途是向客户端程序提供服务器调用接口。通常情况下,线程A要调用线程B的服务,必然是先向线程B发送数据,然后等待来自线程B的回复,这两个阶段是紧密相连的,线程A不希望在等待线程B回复的过程中收到来自其他线程的数据,因此Pcanel设计了一种“客户/服务器”模式的线程间通信:当服务A调用服务B时,服务A充当客户角色,服务B充当服务器角色,即线程A进入发送阶段,当线程B接收数据之后,线程A直接进入接收阶段的阻塞状态,直到再次收到来自线程B的数据,在此过程中,任何其他线程如果向线程A发送数据,都将被阻塞。
抢占式线程间通信
Pcanel还提供了一种特殊形式的“抢占式”线程间通信,它有些类似于POSIX的信号机制。当线程处于发送/接收阶段的阻塞状态时,用户可以通过向其发送“抢占式”线程间通信,打断阻塞状态。此时线程得到的结果有两种:第一种情况是线程原先处于发送阶段的阻塞状态,那么线程将得到一个错误返回值,下一次调用只有接收阶段的线程间通信时,将得到这个“抢占式”线程间通信的数据;第二种情况是线程原先处于接收阶段的阻塞状态,那么线程将得到另一个错误返回值,以及这个“抢占式”线程间通信的数据。与POSIX信号机制不同的是,如果“抢占式”线程间通信发生时,线程并没有处于调用线程间通信的阻塞状态,那么这个“抢占式”线程间通信将保存起来,直到线程下一次调用线程间通信的时候才接收到。
“抢占式”线程间通信往往用于发送一些紧急事件,比如对线程间通信的超时处理、硬件中断或者其他异常情况的发生等。
传递地址空间
当线程间通信传递的数据较多时,可以通过共享地址空间来完成。对此,Pcanel实现了线程间通信的一种增强模式,支持地址空间的传递。
当线程A向线程B发送较多数据时,往往是以某内存块的形式调用,一个参数是该内存块的地址Address_Src,另一个参数则是该内存块的字节大小,而线程B在调用线程间通信接收数据时,则由内核指定某内存地址Address_Dst,Pcanel将把线程A所在的地址空间中Address_Src对应的物理内存区域直接映射
到线程B的地址空间中,即虚拟地址与物理地址的值相同。在共享期间,线程B可以直接访问这块虚拟地址空间;当线程B再次向线程A发送数据时,这块虚拟地址空间将归还给线程A,线程B自然也就不能再访问该地址空间了,上述的增强模式必须在“客户/服务器”模式的线程间通信上才能实现。
地址空间
MMU是ARM的协处理器,分为First-Level(L1)和Second-Level(L2)两层映射表。不同的L1表代表了不同的地址空间。Pcanel通过直接管理地址空间来实现多服务器之间的保护机制。
采用地址空间后,内存访问地址都是虚拟地址,其映射的物理地址由Pcanel指定并控制访问权限,一般分为不可访问、只读、读写三种权限,在个别微处理器平台上,还可以设置“可执行”权限。任何一个服务总是运行在某一个地址空间内,不同地址空间的服务可以对同一物理地址进行映射,因此数据块可以在不同地址空间传递,而不需要重复拷贝。
Pcanel没有提供单独的数据结构和接口来管理地址空间,而是将其作为线程的一部分进行内部维护。
流水线内核
有一些系统调用需要完成复杂的功能,不能在短时间或者说可估计的时间内完成,这样势必影响系统的实时响应性能。在下面这个案例中系统调用的执行时间无法确定。
一组线程{t1,t2,...,tn-1,tn},其中t1不处于线程间通信接收阶段,对于2≤i<n,线程ti调用的线程间通信包括发送和接收阶段,向线程ti-1发送数据,然后接收任何线程的数据,线程tn只有线程间通信发送阶段,此时{t2,t3,...,tn-1,tn}线程都处于阻塞的发送阶段。在某时刻Pcanel调度t1执行,当t1调用线程间通信接收t2的数据后,Pcanel应将t2转入线程间通信接收阶段,由于t3正处于线程间通信发送阶段,因此线程t2立即接收t3的数据,并进入活动状态,以此类推,{t2,t3,...,tn-1,tn}线程都将依次进入活动状态。
这里所有的行为都是由于t1进入线程间通信接收阶段这一事件引起的,如果Pcanel连续执行所有的行为,则其执行时间依赖于n的值,属单调递增关系,执行时间显然不确定。Pcanel采用了流水线技术来解决这一问题。
Pcanel将物理上的处理器划分为虚拟的“内核指令”处理器和“普通指令”处理器,每个系统调用提供的功能是由若干条基本的“内核指令”组合完成,而用户态程序执行的是“普通指令”,系统调用的开始相当于取指令,大多数简单的系统调用只需要一条“内核指令”即可完成,而复杂的系统调用类似于超长指令,可以分解为依次执行的多条简单指令。所有基本的“内核指令”都可以在固定的短时间内完成,而需要连续执行的多条“内核指令”则放入一条流水线中,定时器中断将激发“内核指令”取指器从流水线取得“内核指令”并执行,这就是“内核指令”的时钟周期。一条“内核指令”在执行期间,可以产生更多的“内核指令”,它们都被放入流水线中。当一条(超长)“内核指令”完成之后,把结果写回线程的寄存器组,线程就可以继续执行下去。
这样的内核结构称之为流水线内核,所有“内核指令”的最大延时就是整个系统的最大中断响应延时。从用户态程序的角度看,系统调用相当于虚拟的特权指令,而复杂系统调用则相当于虚拟的超长特权指令。系统调用的参数包含在线程的寄存器组中,执行结果也通过寄存器组返回给线程。
就前述案例而言,线程ti进入接收阶段,将立即接收ti+1的数据,但是ti+1不会立即进入接收阶段,Pcanel将发射一条“内核指令”,该指令的功能是令ti+1线程进入接收阶段。在下一个“内核指令”的时钟周期到来时,Pcanel将执行这条指令,并且在执行完毕的时候,又将发射新的一条指令来令ti+2线程进入接收阶段。在具体实现中,Pcanel可以在一条“内核指令”中令多个线程依次进入接收阶段,以提高效率。
“内核指令”的概念是简单的,其实现难点在于,每一条“内核指令”的实现必须是完全独立的过程,无论当前内核处于何种状态,都能够正确执行。Pcanel的体系结构是不可重入的,也就是说,Pcanel执行内核态代码的工作是不能被中断的。通过仔细实现系统调用,可以得到一个较短的单位时间,所有“内核指令”都能在这个时间内完成。
SRC结构
Pcanel在关键区内的指令采用自卷上下文(SRC)结构来保证最短的中断响应延时,实现内核的完全可抢占性。SRC结构就是任何一段关键区指令都自行管理上下文环境,在执行之前预先设置好上下文环境以便在任意时间被抢占,当关键区重入时,自动恢复被抢占上下文环境并切换运行的主体。SRC结构实现了完全可抢占的调度能力和非阻塞的同步能力,用于内核的并行计算及同步,保证了Pcanel的硬实时性能。通过SRC结构,关键区采用非阻塞式同步访问机制,实现完全可抢占性:为了让中断响应抢占内核任务,将关键区改造为非阻塞式同步,任何一段关键区内的任务都自行管理上下文环境,在执行之前预先设置好上下文环境以便在任意时间被中断抢占,当中断响应处理对该关键区重入时,首先恢复到被抢占的上下文环境完成该关键区任务,然后再继续中断处理。
SRC结构涉及系统调用、普通定时器和硬中断(高精度时间中断或者其他要求硬实时的中断)三部分。其中硬中断的例程是不可抢占的,它可以抢占系统调用和普通定时器,系统调用和普通定时器互相之间不可抢占,普通定时器在进入中断例程后改为与系统调用相同的处理器模式,即SVC模式,并且使用相同的一个KERNELBIN_STACK和KERNEL_CONTEXT,用Kernel_PreviousContext指向被它们(通称为内核例程)抢占的用户代码的CONTEXT,而当前的EXCEPTION_CURRENTCONTEXT则指向KERNEL_CONTEXT,因此,如果被硬实时中断抢占,则它们的CONTEXT将保存到Kernel_Context空间中,而如果是用户代码被硬实时中断抢占,则用户代码的CONTEXT保存到对应线程的Context空间中,对硬实时中断而言,只是将Context保存到EXCEPTION_CURRENTCONTEXT中而已。硬实时中断使用另外一个堆栈。所有的堆栈都分配在0xff00之前的一小段空间。
内核例程(Kernel_ServiceEntry和KernelTimer_Handler)首先将被抢占的用户代码保存到EXCEPTION_CURRENTCONTEXT中,然后先执行Kernel_SaveContext操作,然后屏蔽OSTIMER0中断,接下来进入preemptmode,即SVC_MODE,允许IRQ中断,然后进入可以被抢占的内核例程中了;执行完之后,首先进入safemode,即SVC_MODE,屏蔽IRQ中断,然后恢复OSTIMER0中断,最后设置当前Context为被抢占的用户代码上下文(Kernel_SwitchToPreviousContext),这之后就可以进行上下文切换了。在内核中,还有Thread_Schedule两处使用SRC结构,一处是线程的调度确定之后,应当将Kernel_PreviousContext设置到该线程对应的Context,另一处是Memory_Switch中先进入safemode,然后切换mmu,再重新进入preemptmode。
对于硬中断例程,首先将被抢占的用户代码(也可能是内核例程)保存到EXCEPTION_CURRENTCONTEXT中,然后执行中断例程,最后再恢复执行,过程比较直接。
内核例程使用SRC结构如下:
ldr   sp,exception_currentcontext
stmia sp!,{r14}
mrs   r14,spsr
stmia sp!,{r14}
stmia sp,{r0-r14}^
nop
ldr   sp,=KERNELBIN_STACK
ldr   r0,exception_currentcontext
ldr     r1,[r0]
ldr   r0,[r1,#-4]
   bic  r0,r0,#0xFF000000
ldr   r2,exception_currentcontext
str   r2,Kernel_PreviousContext
ldr   r3,=Kernel_Context
str   r3,exception_currentcontext
mov   r1,#0x40000004
add   r1,r1,#0xd00000
ldr   r2,[r1]
bic   r2,r2,#0x04000000
str   r2,[r1]
mrs   r4,cpsr
bic   r4,r4,#0x80
msr   cpsr,r4
bl Kernel_ServiceEntry
mrs   r4,cpsr
orr   r4,r4,#0x80
msr   cpsr,r4
mov   r1,#0x40000004
add   r1,r1,#0xd00000
ldr   r2,[r1]
orr   r2,r2,#0x04000000
str   r2,[r1]
ldr   r2,Kernel_PreviousContext
str   r2,exception_currentcontext
swi_recover_context:
ldr   sp,exception_currentcontext
ldmia sp!,{r14}
ldmia sp!,{r0}
msr   spsr,r0
ldmia sp,{r0-r14}^
nop
movs  pc,r14
引导
Pcanel的引导程序Initer首先进行硬件初始化,设置一些环境参数,然后将操作系统内核加载运行。引导程序Initer实现了一个基本的文件系统,它把Flash存储空间分配给两个映像文件,第一个映像文件存放Pcanel相关的系统模块,包括初始化程序、内核模块、资源服务器、文件系统服务器、核心动态链接库等,第二个映像文件占据其余的Flash存储空间,为应用程序提供完整的文件系统服务。
Initer将Flash存储系统映射到物理地址0x04000000开始的32M空间,由于使用了支持Execute-in-Place(XIP)的静态内存,处理器可以直接从Flash执行代码。Initer进行硬件初始化之后,直接跳转到第二部分初始化程序的开始地址执行。
内核运行环境的地址映射表如下:
  虚拟地址   物理地址   用途
  0x00000000   0xA0000000   内核管理的内存空间(1MB)
  0x04000000   0x04000000   Flash存储地址空间(32MB)
  0x40100000   0x40100000   FFUART Register
  0x40A00000   0x40A00000   OS Timer Register
  0x40D00000   0x40D00000   Interrupt Control Register
  0x40E00000   0x40E00000   GPIO Register
注:寄存器映射范围均为1MB。
初始化程序的作用是完成与内核运行相关的所有初始化工作,其任务分为四个部分。第一步,初始化MMU,建立一些硬件寄存器的虚拟地址映射,其中动态内存的物理地址0xA0000000开始的1M空间映射到虚拟地址0x0,这部分内存空间由Pcanel内核管理,存放内部数据,包括线程信息、MMU的映射表等。第二步,建立内核的运行环境,初始化程序将把内核模块从Flash拷贝到虚拟地址0x0开始的32K空间内,在0xFF00开始的256个字节空间内建立起Kernel信息表,该表存放系统相关的各种基本参数,包括内存容量、时钟频率等。第三步,初始化程序将资源服务器、文件系统服务器和核心动态链接库加载到内存,并直接调用内核中的系统函数创建线程和分配地址空间。第四步,初始化时钟中断等硬件部分。
所有系统相关的初始化工作完成后,内核将掌管系统,并调度资源服务器线程开始运行。
异常处理
ARM架构具有标准的异常产生机制。有些异常是系统硬件引起的,比如定时器中断,有些是用户线程运行过程中引起的,比如堆栈溢出,大多数异常都会引发线程调度。用户线程可以在Pcanel中注册接收系统的异常(Exception),当该异常发生的时候,Pcanel通过进程间通信(线程间通信)将相关信息发送给这个线程。
异常事件
Pcanel将ARM处理器架构中可能产生的异常事件分为四类:
■Software interrupt:用户线程执行“SWI”指令,就会产生软件中断异常事件。Pcanel的系统调用接口就是通过SWI指令实现,SWI指令的低24位用来表示系统调用的索引。
■Prefetch/Data Abort:指令预取或者数据访问的时候,由内存系统产生的异常事件。Pcanel采用内存管理单元(MMU)来管理内存,当发生该异常时,一般是由于线程运行出错访问非法地址,例外的情况是堆栈溢出,此时Pcanel将事件发送给内存管理器,由它自动扩展该线程的堆栈空间来解决异常。
■Undefined instruction:线程执行非法指令。这种异常发生的时候,Pcanel将停止线程的运行,并发送事件给相应的内存管理器,它将收回分配给该线程的地址空间,然后将线程删除。
■Interrupt:ARM处理器产生的中断分为IRQ和FIQ(快速中断)两种模式,Pcanel统一使用IRQ模式的异常处理例程。对于定时器中断,Pcanel进行抢占式的分时线程调度;对于其他中断,Pcanel将该事件发送给注册接收的线程。
异常的进入和退出
ARM处理器具有七种不同的运行模式(usr、fiq、irq、svc、abt、und、sys),Pcanel的用户线程总是运行在usr模式,前面列举的四类异常分别使处理器进入sys、abt、und、irq模式。所有处理器模式共享通用寄存器组R0~R7,各自配备独立的R8~R14寄存器组。
为简化中断处理例程的代码,Pcanel总是切换到svc模式运行,因此内核运行的堆栈寄存器(R13)就是相同的。当进入异常处理例程后,Pcanel总是将处理器的通用寄存器组R0~R7都保存到当前运行线程的控制块(TCB)中,作为线程的上下文(Context)的一部分,而当Pcanel处理完异常,可采取两种方式退出,一是如果没有发生线程切换,依然返回到刚才被抢占运行的线程,由于线程是在usr模式运行,而内核是在svc模式运行,不会更改线程的R8~R14寄存器组,因此只要将线程的R0~R7寄存器组重新恢复到处理器中即可;二是如果发生线程切换,则首先要保存被抢占线程的R8~R14寄存器组,然后将新线程的R0~R14寄存器组全部恢复到处理器中。下面是一个DaaAbort处理例程。
ldr   sp,exception_currentcontext
stmia sp!,{r14}
mrs   r14,spsr
stmia sp!,{r14}
ldr   r14,=KERNEL_MODE
msr   cpsr,r14
stmia sp,{r0-r14}^
mrc p15,0,r0,c5,c0,0
mrc p15,0,r1,c6,c0,0
ldr   sp,=KERNELBIN_STACK
bl data_abort_handler
ldr   sp,exception_currentcontext
ldmia sp!,{r14}
ldmia sp!,{r0}
msr   spsr,r0
ldmia sp,{r0-r14}^
movs  pc,r14
内存管理
Pcanel通过直接管理地址空间来实现多服务器之间的保护机制。MMU管理表,分为First-Level(L1)和Second-Level(L2)两层映射表。MMU使用不同的L1表,就可以切换到不同的地址空间。
采用地址空间后,内存访问地址都是虚拟地址,其映射的物理地址由Pcanel指定并控制访问权限,具有不可访问、只读、读写三种权限。任何一个服务器总是运行在某一个地址空间内,不同地址空间的服务可以对同一物理地址进行映射,因此数据块可以在不同地址空间传递,而不需要重复拷贝。
Pcanel管理着一些动态的数据结构,它们都在内核空间(缺省为1M字节)进行分配和维护,因此需要具备一套内部使用的内存管理算法。内核数据结构的大小与处理器关系密切,算法必须简单快速。
Pcanel内部分配的数据结构按照大小可以分为如下两类:
16K:Pcanel使用16K字节的内存作为MMU的L1表,要求开始地址与16K对齐。
1K:Pcanel使用1K字节的内存作为MMU的Large Page Table(LPT),要求开始地址与1K对齐。Pcanel还使用1K字节的内存作为线程控制块(TCB)。
另外,Pcanel还需要维护一些全局的数据,例如标记内存块分配/释放的位图数组、线程调度队列等,它们的大小与系统的具体配置有关。
总体考虑内存分配的需求,Pcanel采用Bit Maps算法管理内存空间的分配情况,单位块大小是1K,采用Linked List算法管理可用的内存块,具有16K、4K和1K三种规格。
在嵌入式系统中,内存空间较少,应用程序的内存分配的复杂度较低,因此Pcanel统一采用Coarse Page Table规格,表中共有256个页描述项,每一项对应一个Small Page,或者连续16项对应同一个Large Page,每一项具有四个访问权限单元,分别控制四分之一的子空间,对于Small Page,其访问权限单元AP0、AP1、AP2、AP3分别控制1K子空间。Pcanel通过线程间通信传递地址空间,由于两个地址空间的Page Table规格相同,就能够迅速完成传递工作,代码量也很少,这对于保证Pcanel的性能起了非常重要的作用。
内核接口
线程
√线程的创建
unsigned int Thread_Create(unsigned int dst,unsigned int coagent,unsignedint keeper,unsigned int spacer);
参数:
dst      新创建的线程的id号
coagent  伙伴线程id,伙伴进程间使用同样的地址空间,拥有同一张L1TABLE
keeper   监护线程id,负责处理线程运行时出现的各种执行异常
spacer   地址空间管理线程,负责创建线程的地址空间分配、再分配、映射等工作
√读取线程的Reg值
unsigned int Thread_GetRegs(unsigned int dst,unsigned int mask,unsigned int* registers);
参数:
dst        线程号
mask       Reg掩码,通过置不同的位区分各个Reg,具体见1.1.2
registers  依次表示要读取的Reg值
√设置线程的Reg值
unsigned int Thread_SetRegs(unsigned int dst,unsigned int mask,unsigned int* registers);
参数:类似读取线程的Reg的情形
dst     线程号
mask    Reg掩码,通过置不同的位区分各个Reg,具体见1.1.2
registers依次表示要读取的Reg值
寄存器掩码
在参数mask(Reg掩码)中设置不同的位来标志这4个Reg:
#define THREAD_REGSMASK_SP     (1<<0)
#define THREAD_REGSMASK_IP     (1<<1)
#define THREAD_REGSMASK_STATUS(1<<2)
#define THREAD_REGSMASK_CUSTOM(1<<3)
√sp      存放堆栈地址
√ip      下一条指令地址
√status  存放线程状态,通常是用来读取状态用。
Status值的设置:
高16位标志线程当前工作状态,有Active、Block、Suspand和Signal这4种设置。
#define THREAD_STATUS_ACTIVE(1<<16)
#define THREAD_STATUS_BLOCK(1<<17)
#define THREAD_STATUS_SUSPEND(1<<18)
#define THREAD_STATUS_SIGNAL(1<<19)
低16位标志优先级,目前有NORMAL(0x5),REALTIME(0x8)和基本进程(0x0)。其中,基本进程即为IDLE状态,可以负责有关功率消耗等问题处理。
√custom    用户自定义的Regs,是扩展出的虚拟寄存器。
地址空间
函数接口
√地址空间的映射
unsigned int Memory_Map(unsigned int src_pVAddress,unsigned int ap,unsignedint dst,unsigned int dst_pVAddress,unsigned int size);
参数:
src_pVAddress  Spacer在自己的地址空间中找到的足够的空间的首地址
ap             子线程对此空间的读写权限(只读、只写、可读可写、无权读写)
dst            子线程id号
dst_pVAddress  映射到子线程的空间首地址
size           空间大小
√地址空间释放
unsigned int Memory_Unmap(unsigned int dst,unsigned int dst_pVAddress,unsigned int size);
参数:与Map情形类似
src_pVAddress  Spacer在自己的地址空间中找到的足够的空间的首地址
dst            子线程id号
dst_pVAddress  映射到子线程的空间首地址
size           空间大小
函数说明
线程对自己的空间不能管理,所有的空间映射与释放和权限设置都由线程的Spacer来控制。每次线程需要空间,它就向自己的Spacer发出请求(IPC方式),由Spacer调用这个函数并实现空间的映射。Spacer总在自己的空间中找到一块可用且足够的空间给线程,若寻找不到可用的空间,Spacer将向它的Spacer,也就是上一级Spacer请求空间来满足需要。
这里所涉及的空间操作都是虚存操作。其中的映射工作由内核完成,对外不可见。当操作失败的时候,比如没有合适的空间分配,函数返回异常。如果是空间不足造成的异常,当spacer向上级spacer申请到空间之后,重新操作满足线程的空间请求。
线程间通信
unsigned int Ipc_call(unsigned int option,IpcBuffer * buffer);
参数:
option    IPC调用的方式
buffer    相关的IPC信息块地址
备注:
IPC传输普通数据的4种方式(option):
1、IPC_OPTION_SEND
   发送等待直至发出IPC,或者异常
2、IPC_OPTION_RECV
   接收等待直至得到IPC,或者异常
3、IPC_OPTION_UNBLOCKSEND
   无阻塞发送,发送之后不关心结果,即是否可以到达,类似UDP协议
4、IPC_OPTION_UNBLOCKRECV
   无阻塞接收,查找是否有IPC到达,没有就返回
IPC传输中的3种辅助设置(可以与其他option任意搭配):
1、IPC_OPTION_FROMCOAGENT
   只接收伙伴线程的IPC请求,其他的请求不关心
2、IPC_OPTION_SIGNAL
   紧急信号,可以结束所有等待状态,转向其他指定操作
3、IPC_OPTION_CLIENTSERVER
   等待某个特定回复,直到回复到达
IPC内存地址传输调用的2种方式:
1、IPC_OPTION_SENDSPACE
   发送一块地址空间,其中接受方可以判断是否接受
2、IPC_OPTION_RECVSPACE
   接收一块地址空间,目前尚不支持。线程运行库接口unsigned int thread_setpriority(unsigned int threadid,unsigned intpriority);unsigned int thread_delete(unsigned int threadid);unsigned int thread_suspend(unsigned int threadid);unsigned int thread_resume(unsigned int threadid);unsigned int thread_create(unsigned int newthread,unsigned int coagent,unsigned int keeper,unsigned int spacer,unsigned int sp,unsigned intip,unsigned int priority);unsigned int thread_getip(unsigned int threadid);unsigned int thread_getsp(unsigned int threadid);unsigned int thread_getstatus(unsigned int threadid);unsigned int thread_getcustom(unsigned int threadid);unsigned int thread_setcustom(unsigned int threadid,unsigned intcustom);unsigned int thread_precreate(unsigned int newthread,unsigned intcoagent,unsigned keeper,unsigned int spacer);unsigned int thread_start(unsigned int threadid,unsigned int sp,unsigned int ip,unsigned int priority);线程间通信运行库接口#define IPC_RECV_ALL  0#define IPC_RECV_COAGENT  1#define IPC_RECV_SERVER  2typedef struct_IPCBuffer{
union
{
  unsigned int to;
    unsigned int from;
}id;
unsigned int data[IPCREGISTERS];}IPCBuffer;unsigned int IPC_call(unsigned int option,IPCBuffer * buffer);阻塞模式unsigned int IPC_Send(unsigned int to,unsigned int * data);unsigned int IPC_Recv(unsigned int * from,unsigned int * data,unsignedint coagent);unsigned int IPC_SendRecv(unsigned int to,unsigned int * senddata,unsigned int * from,unsigned int * recvdata,unsigned int coagent);非阻塞模式unsigned int IPC_UnblockSend(unsigned int to,unsigned int * data);unsigned int IPC_UnblockRecv(unsigned int * from,unsigned int * data,unsigned int coagent);unsigned int IPC_UnblockSend_Recv(unsigned int to,unsigned int *senddata,unsigned int * from,unsigned int * recvdata,unsigned intcoagent);客户/服务器模式unsigned int IPC_Request(IPCBuffer * IPC);unsigned int IPC_WaitRequest(IPCBuffer * IPC);unsigned int IPC_AnswerAndWaitRequest(IPCBuffer * IPC);unsigned int IPC_Request_Space(IPCBuffer * IPC);

Claims (10)

1、一种ARM处理器架构的微内核设计方法,其特征在于方法的步骤为:
a)将用于构造面向服务的嵌入式操作系统中所有的服务用线程来表示,系统调用都是以线程为操作对象,将服务的地址空间作为线程附带的一部分状态进行管理;
b)用线程间通信方式实现多服务器协作,通信数据用寄存器组进行传递;
c)在线程间通信接口中支持地址空间的传递,用于不同地址空间的服务协作中大量的数据通信;
d)将微内核中无法确定计算量的大任务划分为多个基本的内核指令,进行流水作业;
e)对关键区采用非阻塞式同步访问机制,实现完全可抢占性。
2、根据权利要求1所述的一种ARM处理器架构的微内核设计方法,其特征在于所说将用于构造面向服务的嵌入式操作系统中所有的服务用线程来表示:服务用一个32位无符号数标示,具有单独的寄存器组,包括指令执行地址、堆栈地址、处理器状态寄存器,创建新服务必须指定合作服务、空间服务及监控服务。
3、根据权利要求2所述的一种ARM处理器架构的微内核设计方法,其特征在于所说寄存器组,其中指令地址寄存器和堆栈地址寄存器还用于管理服务的运行、暂停和删除,当服务最初创建时,并不指定指令地址寄存器和堆栈地址寄存器,因此它不处于活动状态,不能被调度执行,当指定了合理的指令地址寄存器和堆栈地址寄存器值后,服务进入活动状态,可以被调度执行,指令地址寄存器值为特殊的0值时,则微内核暂停该线程的运行,如果设置指令地址寄存器为1,则微内核继续运行该服务,在暂停的情况下设置合理的指令地址寄存器值可以使暂停的服务从新的指令地址继续运行,堆栈地址寄存器值为特殊的0值时,微内核删除该服务,通过指定一个现有的服务作为合作服务以共享同一个地址空间,否则微内核为新服务创建独立的地址空间,通过指定监控服务和空间服务,由这两个服务控制其运行、暂停或者删除,如果服务的标示号最高位为0表明系统服务,如果最高位为1表明普通用户服务,服务标示号由创建者设定,创建服务的能力完全由系统服务控制,普通用户服务通过向系统服务发送请求间接创建新服务,所述的空间服务还负责内存分配,当一个服务向系统请求内存管理时,内存请求由对应的空间服务来实现,微内核根据优先级进行服务调度,缺省情况下,内核上将服务的优先级自高到低分为紧急级、实时级、正常级、后台级四层,总共定义15个优先级,最高级为14,最低级为0,其中紧急级为12,实时级为8,正常级为5,后台级为2,其中优先级为0的服务是一个比较特殊的空闲服务,它通常不参与调度过程,只有当所有其他服务都不处于活动状态的时候,微内核才会运行这个服务,该服务管理系统的能耗,当持续运行一段时间后,则关闭外围器件并降低处理器主频。
4、根据权利要求1所述的一种ARM处理器架构的微内核设计方法,其特征在于所说用线程间通信方式实现多服务器协作:微内核基于通信顺序过程处理模式,以线程间通信方式实现相同或不同地址空间的服务之间的数据通信,从而实现服务接口的调用,任何一个线程间通信都分为发送阶段和接收阶段,如果一个线程间通信只发送数据,那么其接收阶段为空,同样如果一个线程间通信只接收数据,那么其发送阶段为空。
5、根据权利要求4所述的一种ARM处理器架构的微内核设计方法,其特征在于所说数据通信:数据通信用寄存器组进行传递,发送阶段和接收阶段只使用通用寄存器组,服务需要发送/接收的数据完全通过通用寄存器组来传递,微内核完成一次线程间通信的数据传递,只需要将数据从发送服务的寄存器组拷贝到接收服务的寄存器组,其发送阶段必须指明接收服务;而线程间通信的接收阶段则不一定需要指明从哪个服务接收数据,分为三种模式,一是接收来自任何服务的数据,二是接收来自同地址空间的服务的数据,第三种情况是针对的多服务器架构设计的客户/服务器模式,当服务A调用服务B时,服务A充当客户角色,服务B充当服务器角色。服务A进入发送阶段,当服务B接收数据之后,服务A直接进入接收阶段的阻塞状态,直到再次收到来自服务B的数据,在此过程中,任何其他服务如果向服务A发送数据,其发送阶段都不能执行,必须等到客户/服务器模式完成为止,服务通常采用阻塞式调用策略,当服务A对服务B发送数据时,如果服务B并没有处于接收阶段,或者虽然处于接收阶段,但是服务A并不在其接收范围内,那么服务A将成为阻塞状态,直到服务B接收数据为止,服务也可采用非阻塞式调用策略,如果发送/接收阶段不能立即执行,服务将得到一个错误值,而不会进入阻塞状态,微内核还提供一种特殊形式的“抢占式”线程间通信,当服务处于发送/接收阶段的阻塞状态时,其它服务可以通过向其发送“抢占式”线程间通信,打断阻塞状态,此时服务得到的结果有两种:第一种情况是服务原先处于发送阶段的阻塞状态,那么服务将得到一个错误返回值,下一次调用只有接收阶段的线程间通信时,将得到这个“抢占式”线程间通信所附带的数据,第二种情况是服务原先处于接收阶段的阻塞状态,那么服务将得到另一个错误返回值,以及这个“抢占式”线程间通信所附带的数据。
6、根据权利要求1所述的一种ARM处理器架构的微内核设计方法,其特征在于所说在线程间通信接口中支持地址空间的传递,用于不同地址空间的服务协作中大量的数据通信:传递地址空间是线程间通信的一种增强模式,当服务A向服务B发送较多数据时,以内存块的形式调用,一个参数是该内存块的地址Address_Src,另一个参数则是该内存块的字节大小,微内核把服务A所在的地址空间中Address_Src对应的物理内存区域直接映射到服务B的地址空间中,服务B在调用线程间通信接收数据时,由微内核指定读取数据的内存地址Address_Dst,该值指向实际数据块所在的物理内存地址,在线程间通信进行期间,服务B可以直接访问映射的内存区域,当服务B再次向服务A发送数据时,这块内存区域归还给服务A,此后服务B不能再访问该内存区域,上述的增强模式必须在“客户/服务器”模式的线程间通信上才能实现。
7、根据权利要求1所述的一种ARM处理器架构的微内核设计方法,其特征在于所说将微内核中无法确定计算量的大任务划分为多个基本的内核指令,进行流水作业:流水线结构中的每个任务提供的功能是由若干条基本的内核指令组合完成,大多数简单的任务只需要一条内核指令即可完成,而复杂的任务分解为依次执行的多条基本的内核指令,所有基本的内核指令都必须在固定的短时间内完成,需要连续执行的一系列内核指令则放入一条流水线中,定时器中断从流水线取得内核指令并执行。
8、根据权利要求7所述的一种ARM处理器架构的微内核设计方法,其特征在于所说需要连续执行的一系列内核指令则放入一条流水线中:一条内核指令在执行期间,可以产生更多的内核指令,它们都被放入流水线中,并由定时器中断依次执行内核指令,当一个任务的最后一条内核指令完成之后,把结果写回服务的寄存器组,服务就可以继续执行下去,内核指令用于分解复杂的线程间通信任务,一组服务{t1,t2,...,tn-1,tn},其中t1不处于线程间通信接收阶段,对于2≤i<n,服务ti调用的线程间通信包括发送和接收阶段,向服务ti-1发送数据,然后接收任何服务的数据,服务tn只有线程间通信发送阶段,此时{t2,t3,...,tn-1,tn}服务都处于阻塞的发送阶段,在某时刻微内核调度t1执行,当t1调用线程间通信接收t2的数据后,微内核应将t2转入线程间通信接收阶段,由于t3正处于线程间通信发送阶段,因此服务t2立即接收t3的数据,并进入活动状态,以此类推,{t2,t3,...,tn-1,tn}服务都将依次进入活动状态,通过内核指令的分解,微内核调度服务ti进入接收阶段,将立即接收ti+1的数据,但是ti+1不会立即进入接收阶段,微内核发射一条“内核指令”,该指令的功能是令ti+1服务进入接收阶段,在下一个“内核指令”的时钟周期到来时,微内核将执行这条“内核指令”,并且在执行完毕的时候,又发射新的一条指令来令ti+2服务进入接收阶段。
9、根据权利要求1所述的一种ARM处理器架构的微内核设计方法,其特征在于所说按照在前述步骤中确定的关键区采用非阻塞式同步访问机制,实现完全可抢占性:为了让中断响应抢占内核任务,将关键区改造为非阻塞式同步,任何一段关键区内的任务都自行管理上下文环境,在执行之前预先设置好上下文环境以便在任意时间被中断抢占,当中断响应处理对该关键区重入时,首先恢复到被抢占的上下文环境完成该关键区任务,然后再继续中断处理。
10、根据权利要求9所述的一种ARM处理器架构的微内核设计方法,其特征在于所说任何一段关键区内的任务都自行管理上下文环境:关键区内的任务用于所有内核例程,包括系统任务、普通定时器和硬中断三部分,其中硬中断的例程是不可抢占的,它可以抢占系统任务和普通定时器,系统任务和普通定时器互相之间不可抢占,普通定时器在进入中断例程后改为与系统任务相同的处理器模式,并且使用相同的一个内核堆栈和内核环境区,当被硬实时中断抢占时,则它们的上下文保存到内核环境区中,如果是用户代码被硬实时中断抢占,则用户代码的上下文保存到对应服务的环境区的空间中,对硬实时中断而言,只是将被抢占指令的上下文保存到全局环境区中,硬实时中断使用另外一个堆栈,系统任务和普通定时器的进入和返回步骤包括,首先将被抢占的用户代码保存到全局环境区中,然后将全局环境区指向内核例程的上下文,然后屏蔽普通定时器中断,接下来打开处理器的中断屏蔽模式,允许IRQ中断,然后进入可以被抢占的内核例程中,执行完之后,首先进入安全模式,屏蔽IRQ中断,然后恢复普通定时器中断,设置全局环境区指向为被抢占的用户代码的上下文,最后切换回原用户代码的执行指令环境,硬中断的进入和返回步骤包括,首先将被抢占的代码保存到全局环境区中,然后执行中断例程,最后再恢复执行。
CN 200410018198 2004-04-30 2004-04-30 Arm处理器架构的微内核设计方法 Expired - Fee Related CN1273890C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200410018198 CN1273890C (zh) 2004-04-30 2004-04-30 Arm处理器架构的微内核设计方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200410018198 CN1273890C (zh) 2004-04-30 2004-04-30 Arm处理器架构的微内核设计方法

Publications (2)

Publication Number Publication Date
CN1570855A CN1570855A (zh) 2005-01-26
CN1273890C true CN1273890C (zh) 2006-09-06

Family

ID=34479399

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200410018198 Expired - Fee Related CN1273890C (zh) 2004-04-30 2004-04-30 Arm处理器架构的微内核设计方法

Country Status (1)

Country Link
CN (1) CN1273890C (zh)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102063332B (zh) * 2011-01-12 2013-02-13 中国电子科技集团公司第七研究所 一种软件通信体系结构的逻辑设备组件及其操作方法
CN103412796A (zh) * 2013-08-30 2013-11-27 北京经纬恒润科技有限公司 操作系统中任务的堆栈分配方法及装置
US10282227B2 (en) * 2014-11-18 2019-05-07 Intel Corporation Efficient preemption for graphics processors
CN105138360A (zh) * 2015-08-19 2015-12-09 惠州Tcl移动通信有限公司 一种可穿戴设备的系统函数调用方法及其可穿戴设备
CN105205013A (zh) * 2015-09-15 2015-12-30 浪潮集团有限公司 一种高安全的内核对象内存分配方法
CN109117253B (zh) 2017-06-26 2022-05-24 阿里巴巴集团控股有限公司 一种微内核调度的方法和装置
CN107221014A (zh) * 2017-06-26 2017-09-29 上海联影医疗科技有限公司 医学图像重建任务的调度方法和装置以及医学成像系统
CN107526622B (zh) * 2017-08-16 2020-04-07 北方工业大学 Linux的快速异常处理方法及装置
CN108614460B (zh) * 2018-06-20 2020-11-06 东莞市李群自动化技术有限公司 分布式多节点控制系统及方法
CN110955546B (zh) * 2018-09-26 2023-03-21 迈普通信技术股份有限公司 一种内存地址监控方法、装置及电子设备
CN110032441B (zh) * 2018-11-22 2023-03-28 创新先进技术有限公司 提升服务器性能的方法及装置和电子设备
CN111596962B (zh) * 2019-02-20 2023-05-30 中标软件有限公司 一种基于高速协议通道的实时微内核系统及其初始化方法
CN116097221A (zh) * 2020-04-30 2023-05-09 华为技术有限公司 安全数据处理方法及装置
CN112134859B (zh) * 2020-09-09 2021-07-06 上海沈德医疗器械科技有限公司 一种基于arm架构的聚焦超声治疗设备控制方法
CN112363779A (zh) * 2020-11-25 2021-02-12 王志平 一种动态链接程序的安全控制方法
CN112395066A (zh) * 2020-12-06 2021-02-23 王志平 一种流水线时分复用和空分复用的方法
CN112463723A (zh) * 2020-12-17 2021-03-09 王志平 一种微内核阵列的实现方法
CN113377517B (zh) * 2021-06-28 2023-02-28 上海鲲宜软件技术有限公司 基于实时操作系统的线程调度方法及系统
CN113791898B (zh) * 2021-08-24 2022-07-26 电子科技大学 一种基于TrustZone的可信微内核操作系统
CN115480904B (zh) * 2022-10-09 2023-06-09 电子科技大学 微内核中系统服务并发调用方法
CN115718622B (zh) * 2022-11-25 2023-10-13 苏州睿芯通量科技有限公司 一种arm架构下的数据处理方法、装置及电子设备
CN117331720B (zh) * 2023-11-08 2024-02-23 瀚博半导体(上海)有限公司 用于多核间通信的方法、寄存器组、芯片及计算机设备

Also Published As

Publication number Publication date
CN1570855A (zh) 2005-01-26

Similar Documents

Publication Publication Date Title
CN1273890C (zh) Arm处理器架构的微内核设计方法
CN1245681C (zh) 进入和退出多线程处理器中多线程的方法和装置
CN1111787C (zh) 使面向目标的应用程序与过程操作系统接口的方法与装置
CN1183446C (zh) 处理多线程处理器中事件发生的方法和装置
CN1842770A (zh) 一种在处理器中挂起和释放执行过程中计算线程的整体机制
US9798595B2 (en) Transparent user mode scheduling on traditional threading systems
CN1760836A (zh) 信息处理系统、信息处理方法和程序
CN1184562C (zh) 处理器的转移指令
CN1264078A (zh) 执行多个操作系统的计算机
CN1684412A (zh) 利用安全散列演算法的装置与方法
CN1906583A (zh) 信息处理设备、中断处理控制方法、以及计算机程序
CN104272256B (zh) 任务处理装置
CN101051301A (zh) 用于操作计算机处理器阵列的方法和装置
CN101069161A (zh) 调度方法、调度装置和多处理器系统
CN1993670A (zh) 信息处理装置
CN1434938A (zh) 重启动翻译的指令
CN1268688A (zh) 异步更新共享资源的接口系统和方法
CN1922576A (zh) 操作系统
CN1993674A (zh) 多芯架构中的资源管理
CN1538296A (zh) 图形处理单元的多线程内核
CN1121014C (zh) 具有risc结构的八位微控制器
CN1233016A (zh) 具有事件相关矢量选择的历境控制器和采用其的处理器
CN1177772A (zh) 独立处理多个指令流、软式控制各指令流的处理功能的多程序流程同时处理器
CN1245922A (zh) 有时间片任务切换能力的前后关系控制器及其应用处理器
CN1867891A (zh) 用于实时多线程处理的方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20060906

Termination date: 20140430