首页 工作计划 工作总结 事迹材料 心得体会 述职报告 疫情防控 思想汇报 自查报告 党建材料 策划方案 教案设计 范文大全
  • 工作计划
  • 工作总结
  • 事迹材料
  • 心得体会
  • 述职报告
  • 疫情防控
  • 思想汇报
  • 自查报告
  • 党建材料
  • 策划方案
  • 教案设计
  • 范文大全
  • 嵌入式操作系统内核程序的设计与实现

    时间:2023-06-01 13:05:07 来源:正远范文网 本文已影响 正远范文网手机站

    摘要: 本文设计了一个微内核结构的嵌入式操作系统,整个系统内核由任务管理、任务通信、时钟管理、中断管理、内存管理等模块组成,并给出了系统各模块的详细设计。

    Abstract: The paper designed a micro kernel operating system. The system kernel consists of task management module, task communication module, clock management module, interrupt management module and memory management module. The detailed design of each module was showed.

    关键词: 嵌入式操作系统;微内核;任务

    Key words: embedded operating system;micro kernel;task

    中图分类号:TP316文献标识码:A文章编号:1006-4311(2011)17-0162-02

    1嵌入式系统的内核简介

    操作系统内核是操作系统最核心最基础的部分,其结构往往对操作系统的外部特性以及应用领域有着一定程度的影响。操作系统按内核的结构来分大致可以把内核分为单内核、微内核两种。微内核是内核的精简版本,只是提供操作系统的核心功能,如任务调度、时钟管理、中断管理等,把其它功能以系统服务器的方式提供给用户,用户可以根据需要对其进行裁减。采用微内核结构的操作系统占用的内存小,可移植性强,从而有效提高了系统的灵活性、可扩展性、可维护性与可靠性。本系统是基于微内核的操作系统内核设计。

    2内核整体结构

    本系统采用模块化结构,最多可支持64个优先级队列256个任务,同一优先级队列上可以有多个任务,整个系统中总是就绪的优先级最高的那个队列的任务优先得到执行。整个系统内核分为任务调度、任务通信、中断管理、临界资源管理、时钟管理、内存管理等几个模块,系统内核的整体结构如图1。

    3嵌入式微处理器内核程序的设计

    3.1 上下文切换在单CPU的机器上运行指令,只能运行单一的指令序列,所以在不加任何外在机制的情况下是不可能运行多个没有关联的任务的。为了实现多任务而实现的这个处理机制,就是上下文切换。

    上下文切换的核心思想是:保存当前运行任务的各种信息,接着恢复另一个任务的各种信息。整个过程可以如下的图2来描述。

    3.2 任务调度本系统结合了基于优先级抢占式调度和基于时间片轮转的分时调度两种调度方式。系统的任务优先级队列通过一张优先级队列就绪表[3]来进行管理,最多可管理64个优先级队列,256个任务,每个优先级队列上可有多个任务。在系统里通过对优先级队列就绪进行查表能快速的找到优先级最高的就绪队列,当查找到下一个将要运行的优先级队列后,队列头的那个任务即为将要调度运行的任务。在定位优先级队列时要用到两个量:优先级表task_queue_tb1[]和优先级组变量task_queue_grp。在设计时把64个优先级分成了8组,每组8个,这样查找表就不会过于庞大。

    在需要重新定位任务队列时,系统就根据task_queue_grp里的数值和task_queue_tb1[]对应组里的数值查search_table[]表得到的最高就绪任务队列的优先级。当被调度队列的优先级确定后,就能很容易找到将被切换进的任务了。

    3.3 信号量信号量在系统中主要用于保护系统的临界资源、指示事件的发生、同步任务等。为了便于对信号量进行管理,在系统中设计了一个信号量控制块SCB(Semaphore Control Block),其结构如下:

    信号量在系统中是一个全局量,通过一个SCB类型的数组来存放系统中的所有信号量控制块,数组的下标作为相应信号量控制块的ID号,并在系统初始化时把所有的SCB连成一个空闲信号量控制块链表。系统的信号量数组定义为:SCB scb_array[MAX_SEM_NUM]。

    在系统中,通过信号量控制块数组下标或信号量句柄都能找到所需要的信号量,查询到信号量的状态信息、等待该信号量的任务列表等。除在系统启动时把信号量控制块数组初始化成空闲控制块链表的函数scb_init( )外,系统里还设计了6个对信号量进行操作的函数:

    3.4 对共享临界资源的控制本系统使用二员信号量实现对共享临界资源的控制。在使用信号量前,首先用sem_create()创建一个二值信号量,如果信号量创建成功则返回指向被创建信号量的指针作为该信号量的句柄。当访问临界资源时先对该句柄执行sem_wait( )操作,sem_wait( )操作判断信号量是否可用,如果信号量可用,即count 减1后是否大于等于0 ,count 可能为1、0和负数三种情况,1表示任务可以获得信号量,其它表示任务不能马上获得信号量,需挂起等待,如果大于等于0则让ptskget指针指向此任务,否则说明信号量不可用,把任务挂在该信号量的等待队列上。

    3.5 时钟管理模块的设计系统中与时间有关的操作都通过时钟管理模块来进行管理,对时钟的管理关系到系统的实时性、任务调度和任务运行的精度等问题。

    为实现延时和定时功能,要求系统的硬件能够产生定时中断,通过定时中断来产生系统的时钟节拍,时钟节拍的频率越高系统的精度越高,但负荷也会越重。当时钟中断节拍到来时,系统里的时钟中断服务程序就会响应中断,并做一些必要的处理。通过时钟延时程序能够把当前的任务延时一定量的时钟节拍(Ticks),所有被延时的任务都挂在延时队列上,每个时钟节拍到来时都对这些队列上的任务的延时值减1,当任务的延时值被减为0时就把任务重新置为就绪状态,并把其从延时队列中删除,挂在相应的就绪队列上。

    3.6 中断管理模块的设计中断是一种硬件机制,是对内部、外部事件做出的一种响应,用于通知CPU有异步事件发生,一般由外设或机器指令触发,不受调度程序支配。中断一旦被系统识别,系统就跳到相应的中断入口处,保存部分或全部现场(context),然后执行中断服务程序。中断服务程序对事件作必要的处理,处理完成后再执行任务调度,如果中断服务使比被中断的任务优先级更高的任务就绪了,则系统就进行任务切换,否则返回到被中断了的任务[4]。

    本系统在设计时为了提高对有高实时性要求的中断处理的响应,中断服务程序只是负责在最小的时间内通知系统中断的产生,除非是异常紧急的一些中断请求才放在中断服务程序中处理。系统通知中断处理的任务是通过在中断服务程序里向中断处理的任务发送消息来实现的,中断处理任务在收到消息后,将在适当的时候完成对中断的处理。

    3.7 内存管理的设计在系统采用了二元伙伴算法来对内存进行管理,把除系统内存和堆栈之外的内存空间划分为N个区,每个区中内存块的大小为2nKB,并且把分区内的内存块连成一个双向链表[5]。内存的分区控制块MEMEY_PARTITION_CB和内存块控制块

    4结束语

    本设计是针对目前流行的嵌入式设备而开发的内核程序,利用它可以开发各种满足实时要求的实际应用。它实现了多任务,并且是基于优先级的,可抢占式内核程序。由于使用最高优先级,所以该内核可以使得使用单调速率分析所设计实时任务得以按要求运行,即该内核是实时内核。在此基础上还可以实现信号灯、事件寄存器、计时功能,以及内存管理。这些功能可以辅助内核,完成应用中的其他各项功能。

    参考文献:

    [1]Cheng,Xiao-Hui,Li Ming-Qiang,Wang Xin-Zheng.Embedded real-time operating system micro kernel design.ICMIT 2005:Information Systems and Signal Processing,2005.

    [2]Jean J.Labrosse著,邵贝贝等译.嵌入式实时操作系统uC/OS II(第二版)[M].北京航空航天大学出版社,2003.

    [3]吴荣华,邵时,杨早.基于中断的实时任务调度策略[J].计算机应用与软件,2007,1.

    [4]黄贤英,王越,陈嫒.嵌入式实时系统内存管理策略[J].计算机工程与设计,2004,10(25):1808-1810.

    [5]王新政,程小辉,周华茂.实时操作系统任务调度策略的研究与设计[J].微计算机信息,2007.5.

    推荐访问:内核 嵌入式 操作系统 程序 设计