CN107273141B - 嵌入式实时操作系统 - Google Patents
嵌入式实时操作系统 Download PDFInfo
- Publication number
- CN107273141B CN107273141B CN201710556700.2A CN201710556700A CN107273141B CN 107273141 B CN107273141 B CN 107273141B CN 201710556700 A CN201710556700 A CN 201710556700A CN 107273141 B CN107273141 B CN 107273141B
- Authority
- CN
- China
- Prior art keywords
- task
- unit
- time
- mailbox
- real
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
- G06F9/4818—Priority circuits therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种嵌入式实时操作系统,包括应用层和内核;所述应用层与内核之间进行数据交互;所述应用层包括存储系统、设备驱动单元、虚拟内存单元和网络协议栈;所述内核包括任务管理单元、时间管理单元、信号量管理单元、内存管理单元、CPU单元和ICP单元;其效果是:通过内存管理单元将系统的大内存段分成一定数量小内存段,充分的利用了内存资源,优化了内存的使用率,使本发明所占空间小;并且在任务管理单元中,将任务分为不同的优先级,做到及时响应,提高本发明的实时性。
Description
技术领域
本发明属于计算机技术领域,具体涉及到一种嵌入式实时操作系统。
背景技术
随着嵌入式技术的普及,越来越多的电子产品使用嵌入式系统开发,而嵌入式操作系统是嵌入式系统的核心,所以嵌入式操作系统的性能直接影响到产品的性能。和通用操作系统相比,嵌入式操作系统一般都是实时性的。目前市场中流行的嵌入式实时操作系统有:VxWorks、uCLinux和WinCE。
VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统,它适用范围广,适用性强,可靠性高,可用于所有流行的CPU平台。美国火星探测器所使用的嵌入式实时操作系统就是VxWorks,它的价格也很昂贵,对于成本要求很高的产品不太适合。
uCLinux是根据特定的硬件需求从Linux内核剪裁出来的,它的特点是功能强大,几乎支持所有功能,而且是免费的,所以现在一半的嵌入式系统都是使用此操作系统。它的缺点就是剪裁后占用空间依旧很大,这样硬件成本得不到有效控制,不太适合对用户交互要求很少的工业控制领域。
WinCE是微软开发得一个开放得,可升级得32位嵌入式实时操作系统。它得特点是功能强大,图像处理能力强,编程接口简单易学,和通用编程几乎没什么差别,但是对操作系统得剪裁还是很麻烦得,同样它的价格不菲。
因此,现有技术中的嵌入式实时操作系统存在价格昂贵、所占用空间大、不适合应用于工业控制领域的缺陷。
发明内容
本发明提出一种嵌入式实时操作系统,用于实现所占空间小,实时性得到提高的嵌入式实时操作系统。
本发明采取的技术方案为:一种嵌入式实时操作系统,包括应用层和内核;所述应用层与内核之间进行数据交互;
所述应用层包括存储系统、设备驱动单元、虚拟内存单元和网络协议栈;所述内核包括任务管理单元、时间管理单元、信号量管理单元、内存管理单元、CPU单元和ICP单元;
所述嵌入式实时操作系统在处理任务时,所述任务管理单元将要处理的任务进行优先级划分,并与正在处理任务的优先级进行比较,将优先级低的任务通过所述时间管理单元进行延时,然后所述信号量管理单元用于保证被延时的任务不被并发调用,并且内存管理单元为被执行的任务提供所需的内存,最后通过ICP单元进行相互通信,CPU单元进行任务数据的处理和指令的执行。
优选的,所述任务管理单元具体包括,任务调度单元、任务创建单元、任务删除单元、任务挂起单元和任务唤醒单元;
所述任务调度单元用于对嵌入式实时操作系统中的普通任务、实时任务和空闲任务进行调度;
所述任务创建单元用于嵌入式实时操作系统在编译的时候预定义将要使用的任务数;
所述任务删除单元用于释放任务控制块,并将任务控制块返还给任务池;
所述任务挂起单元用于挂起当前任务或者就绪状态中的任务;
所述任务唤醒单元用于将挂起的任务恢复到就绪状态。
优选的,所述任务调度单元具体用于:
普通任务在系统中按时间片方式调度,即每个普通任务分配一固定的时间片,当它拥有的时间片用完时,就调度就绪队列中下一个普通任务;
实时任务的调度策略是,普通任务运行过程中,如果实时任务等待的资源可用,就中断普通任务的运行,调度实时任务运行;并将实时任务按优先级划分,如果当前运行的实时任务比就绪队列中任务的优先级高,那么就继续运行优先级高的任务,直到该任务进入等待状态或者删除,然后就调度就绪队列中优先级最高的任务;如果当前实时任务的优先级没有就绪队列中实时任务的优先级高,则中断当前任务的运行,调度优先级更高的实时任务运行;
空闲任务在没有普通任务运行和实时任务运行时被调度,它在系统启动前被创建,一直生存在系统运行期间,不能被删除。
优选的,所述时间管理单元具体包括任务延时单元和延时唤醒单元;
所述任务延时单元用于将任务添加到延时等待队列中,直到延时时间到期,或者延时唤醒该任务;
所述延时唤醒单元将延时睡眠的任务唤醒。
优选的,所述信号量管理单元具体包括同步信号量管理单元和互斥信号量管理单元;
所述同步信号量管理单元用于处理非独占资源,每个项目可用就释放一个信号量,直到释放满,同时任务可以得到释放的信号量取走这些可用的项目;
所述互斥信号量管理单元用于处理独占式资源,任何时候只能有一个任务占用它,下一个任务必须等待前一个任务释放资源后才可以继续使用。
优选的,所述内存管理单元具体包括:
内存初始化将系统固定的大内存段分成一定数量小内存段,设置内存使用表,初始化内存结构各个值;
从空闲内存中取一块出来给任务使用;
任务使用完内存后,将释放的内存添加到空闲表中。
优选的,所述内核还包括邮箱管理单元,所述邮箱管理单元用于任务可使用邮箱给另一个任务发送特定的数据。
优选的,所述邮箱管理单元具体包括邮箱创建单元、邮箱删除单元、邮箱等待单元和邮箱释放单元;
所述邮箱创建单元用于嵌入式实时操作系统为邮箱维护一个结构池,邮箱创建单元取结构池中空闲结构,并对邮箱结构进行初始化;
所述邮箱删除单元用于邮箱在不使用时,将邮箱结构放入缓冲池中以给其他任务使用;
所述邮箱等待单元用于等待所需资源条件得到满足;
所述邮箱释放单元用于当任务消息资源准备好以后,通过邮箱传递、释放邮箱。
优选的,所述邮箱等待单元具体用于:将邮箱等待单元分延时等待、一直等待和不等待三种情况;延时等待是指只等待规定的时间,等待时间到期后,如果资源条件还没满足,则返回超时;一直等待是指只要所需资源条件不满足,则将任务一直挂起,直到条件满足任务才被唤醒;不等待是指资源不满足时,任务不被挂起,任务继续运行。
采用上述技术方案,具有以下优点:本发明提出的嵌入式实时操作系统,通过内存管理单元将系统的大内存段分成一定数量小内存段,从空闲内存中取一块出来给任务使用,任务使用完内存后,将释放的内存添加到空闲表中;充分的利用了内存资源,优化了内存的使用率,使本发明所占空间小;
并且在任务调度单元中,将实时任务分为不同的优先级,最高优先级优先占有CPU时间片,只有当高优先级睡眠时低优先级的进程才占有时间片,一旦高优先级任务唤醒单元马上又占有CPU时间片,响应一个事件,从中断、任务调度单元、到函数调用、均按预期及时进行,做到及时响应,提高本发明的实时性。
附图说明
图1为本发明的系统结构图;
图2为本发明的一种方法流程图。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述,这里的描述不意味着对应于实施例中陈述的具体实例的所有主题都在权利要求中引用了。
IPC(Inter-Process Communication)进程间通信就是指多个任务进程之间相互通信,交换信息的方法。
请参照图1所示,一种嵌入式实时操作系统,包括应用层和内核;所述应用层与内核之间进行数据交互;
所述应用层包括存储系统、设备驱动单元、虚拟内存单元和网络协议栈;所述内核包括任务管理单元、时间管理单元、信号量管理单元、内存管理单元、CPU单元和ICP单元;
所述嵌入式实时操作系统在处理任务时,所述任务管理单元将要处理的任务进行优先级划分,并与正在处理任务的优先级进行比较,将优先级低的任务通过所述时间管理单元进行延时,然后所述信号量管理单元用于保证被延时的任务不被并发调用,并且内存管理单元为被执行的任务提供所需的内存,最后通过ICP单元进行相互通信,CPU单元进行任务数据的处理和指令的执行。
进一步地,所述任务管理单元具体包括,任务调度单元、任务创建单元、任务删除单元、任务挂起单元和任务唤醒单元;
所述任务调度单元用于对嵌入式实时操作系统中的普通任务、实时任务和空闲任务进行调度;
具体地,所述任务调度单元具体用于:
普通任务在系统中按时间片方式调度,即每个普通任务分配一固定的时间片,当它拥有的时间片用完时,就调度就绪队列中下一个普通任务;
实时任务的调度策略是,普通任务运行过程中,如果实时任务等待的资源可用,就中断普通任务的运行,调度实时任务运行;并将实时任务按优先级划分,如果当前运行的实时任务比就绪队列中任务的优先级高,那么就继续运行优先级高的任务,直到该任务进入等待状态或者删除,然后就调度就绪队列中优先级最高的任务;如果当前实时任务的优先级没有就绪队列中实时任务的优先级高,则中断当前任务的运行,调度优先级更高的实时任务运行;
空闲任务在没有普通任务运行和实时任务运行时被调度,它在系统启动前被创建,一直生存在系统运行期间,不能被删除。
所述任务创建单元用于嵌入式实时操作系统在编译的时候预定义将要使用的任务数;
具体地,使用任务创建单元相关的函数,INT32 TaskCreate(INT32 Type,INT32Priority,PVOID TaskAddr,PVOID TaskStack);
该函数有四个参数,分别是:任务类型,任务优先级,任务地址,任务堆栈;任务类型只能是TIME_TASK或REAL_TASK,任务优先级是0-TASK_REAL_COUNT之间的数,任务地址是任务的入口函数,任务堆栈是用户根据特定任务的堆栈使用情况,自己定义的一段空间,这样做是为了节约空间,减少不必要的浪费;
函数开始处先判断任务类型,如果是空闲任务则返回错,如果是普通任务,则从普通任务空闲列表中查找是否有可用的任务控制块,如果没有返回失败,如果有,初始化任务控制块,然后将任务添加到就绪列表中,返回任务ID;如果是实时任务,先判断优先级是否合法,然后判断优先级是否已经被占用,如果两个条件都顺利通过,则取任务控制块并初始化,然后将该任务加入到实时任务就绪列表中,接着判断操作系统是否已经运行,如果已经运行,则判断当前任务的优先级是否比将要创建的任务低,如果当前任务的优先级低于将要创建的任务,则调度,接着返回任务ID。
所述任务删除单元用于释放任务控制块,并将任务控制块返还给任务池;
具体地,使用任务删除单元相关的函数,该函数先判断任务是否存在,接着判断要删除任务是否为运行态,然后判断任务类型,如果是普通任务,就将任务控制块添加到空闲任务链表中,同时调度其他任务运行;如果要删除的任务不是运行态,依据任务状态来删除它,如果是等待状态,则将它从等待列表中删除,如果是就绪状态,则将它从就绪状态中删除,最后如果该任务是普通任务,将该任务控制块添加到空闲任务列表中;
所述任务挂起单元用于挂起当前任务或者就绪状态中的任务;
具体地,使用任务挂起单元相关的函数,函数原型如下:VOID TaskSuspend(INT32Id)
{
if(IntFlag)
{
return;
}
if(Id==TASK_IDLE)
{
return;
}
if(TaskTable[Id]==SYSTEM_NULL)
{
return;
}
if((TaskTable[Id]->State&TASK_WAIT)!=0)
{
return;
}
TaskTable[Id]->State=TASK_WAIT;
TaskTable[Id]->State=TaskTable[Id]->State|TASK_SUSPEND;if(Id==CurTcb->Id)
{
GetHigherPriority();
if(HigherPrirotiy!=INVALID_PRIORITY)
{
NextTcb=TaskTable[TASK_TIME_COUNT+HigherPrioriTy];DeleteReadyTable(HigherPrirotiy);
}
else
{
NextTcb=GetLinkHead(&TaskReadyHead,&TaskReadyTail);if(NextTcb==SYSTEM_NULL)
{
NextTcb=&TaskIdle;
}
}
Switch();
}
else
{
If(TaskTable[Id]->Type==TIME_TASK)
{
DelLinkItem(&TaskReadyHead,TaskTable[Id],&Task
ReadyTail);
}
else
{
DeleteReadyTable(TaskTable[Id]->Priority);
}
}
}
函数开始处先判断任务是否存在,接着再判断是否为空闲任务,空闲任务不能被挂起,接着判断任务状态,然后判断是否挂起当前任务,如果是调度优先级最高的实时任务,如果没有实时任务就调度下一个普通任务,没有普通任务就调度空闲任务,如果挂起的不是当前任务,判断挂起的任务类型,普通任务就将该任务从普通任务就绪列表中删除,实时任务就将该任务从实时任务就绪列表中删除。
所述任务唤醒单元用于将挂起的任务恢复到就绪状态。
具体地,使用任务唤醒单元相关的函数,函数原型如下:VOID TaskResume(INT32Id)
{
if(IntFlag)
{
return;
}
if(Id==TASK_IDLE)
{
return;
}
if(TaskTable[Id]==SYSTEM_NULL)
{
return;
}
if((TaskTable[Id]->State&TASK_WAIT)==0)
{
return;
}
if(((TaskTable[Id]->State&0xFF)&TASK_SUPEND)==0)
{
return;
}
TaskTable[Id]->State=TASK_READY;
if(TaskTable[Id]->Type==TIME_TASK)
{
AddLinkTail(&TaskReadyHead,TaskTable[Id],&TaskReady Tail);
}
else
{
if(TaskTable[Id]->Priority>CurTcb->Priority)
{
if(CurTcb->Type==TIME_TASK)
{
AddLinkHead(&TaskReadyHead,CurTcb,&TaskReadyTa il);
}
else
{
AddReadyTable(CurTcb->Priority);
}
NextTcb=TaskTable[Id];Switch();
}
else
{
AddReadyTable(TaskTable[Id]->Priority);
}
}
}
该函数不能由中断过程调用,同时不能唤醒空闲任务,接着判断任务是否存在,然后判断任务状态,只有等待状态且TASK_SUSPEND置位的任务才能被唤醒;这里只要将任务状态改为就绪态;判断它的类型,普通任务直接将它添加到普通任务就绪列表中,实时任务则和当前任务的优先级比较,如果高于当前任务优先级,则调度,否则将任务添加到就绪列表中。如果当前任务是普通任务就将当前任务添加到普通任务就绪列表表头中,如果是实时任务则添加到实时任务就绪表中。
进一步地,所述时间管理单元具体包括任务延时单元和延时唤醒单元;
所述任务延时单元用于将任务添加到延时等待队列中,直到延时时间到期,或者延时唤醒该任务;
具体地,函数原型如下:VOID TaskTimeDelay(INT32Count)
{
if(CurTcb->Id==TASK_IDLE)
{
return;
}
CurTcb->State=TASK_WAIT;
CurTcb->State=CurTcb->TASK_WAIT|TASK_DELAY;
AddLinkTail(&TaskWaitHead,CurTcb,&TaskWaitTail);if(CurTcb->Type==REAL_TASK)
{
GetHigherPriority();
if(HigherPriority!=INVALID_PRIORITY)
{
NextTcb=TaskTable[TASK_TIME_COUNT+HigherPriority];DeleteReadyTable(HigherPriority);
Switch();return;
}
}
NextTcb=GetLinkHead(&TaskReadyHead,&TaskReadyTail);if(NextTcb==SYSTEM_NULL)
{
NextTcb=&TaskIdle;
}
Switch();
}
函数首先判断是否是空闲任务需要延时,接着改变任务状态,然后将任务添加到等待列表中,判断当前任务是否是实时任务,如果是则判断就绪表中是否有实时任务,有则调度它,如果没有就调度普通任务,取就绪表头,如果就绪表中没有任务,则调度空闲任务。
所述延时唤醒单元将延时睡眠的任务唤醒。
具体地,函数原型如下:
VOID TaskTimeResume(INT32Id)
{
if(IntFlag)
{
return;
}
if(Id==TASK_IDLE)
{
return;
}
if(Id==CurTcb->Id)
{
return;
}
if(TaskTable[Id]==SYSTEM_NULL)
{
return;
}
if((TaskTable[Id]->State&TASK_WAIT)==0)
{
return;
}
if((TaskTable[Id]->State&TASK_DELAY)==0)
{
return;
}
DelLinkItem(&TaskWaitHead,TaskTable[Id],&TaskWaitTail);if(TaskTable[Id]->Type==REAL_TASK)
{
if(TaskTable[Id]->Priority>CurTcb->Priority)
{
NextTcb=TaskTable[Id];
if(CurTcb->Type==REAL_TASK)
{
AddReadyTable(CurTcb->Prirotiy);
}
else
{
AddLinkHead(&TaskReadyHead,CurTcb,&TaskReadyTai l);
}
Switch();
}
else
{
AddReadyTable(TaskTable[Id]->Priority);
}
}
else
{
AddTailHead(&TaskReadyHead,TaskTable[Id],&TaskReadyTail);
}
}
该函数不能由中断调用,首先检查被唤醒任务是否是空闲任务或者任务本身,因为这两个任务都是不能被唤醒的,接着检查任务是否存在,然后检查任务状态是否正确;接下来从等待队列中删除该任务,如果唤醒的任务是实时任务,那么和当前任务的优先级比较,如果高出,则调度它,同时保存当前任务到就绪队列中,否则加入实时任务就绪队列,如果唤醒的任务是普通任务,直接加入到普通任务就绪列表中。
进一步地,所述信号量管理单元具体包括同步信号量管理单元和互斥信号量管理单元;
所述同步信号量管理单元用于处理非独占资源,每个项目可用就释放一个信号量,直到释放满,同时任务可以得到释放的信号量取走这些可用的项目;
所述互斥信号量管理单元用于处理独占式资源,任何时候只能有一个任务占用它,下一个任务必须等待前一个任务释放资源后才可以继续使用。
进一步地,所述内存管理单元具体包括:
内存初始化将系统固定的大内存段分成一定数量小内存段,设置内存使用表,初始化内存结构各个值;
具体地,初始化内存结构各个值,函数原型如下:VOIDMemInit(PVOID StartAddr,INT32 DataSize)
{
INT32i=0;
MemData.StartAddr=StartAddr;MemData.FreeCount=MEM_COUNT;MemData.DataSize=DataSize;
for(i=0;i<(MEM_COUNT/32);i++)
{
Map[i]=0xFFFFFFFF;
}
}
该函数首先初始化数据结构各个值,然后初始化内存使用表。
从空闲内存中取一块出来给任务使用;
具体地,函数原型如下:
PVOIDGetMem()
{
INT32index;
if(MemData.FreeCount<=0)
{
return SYSTEM_NULL;
}
for(i=0;i<(MEM_COUNT/32);i++)
{
if(Map[i]!=0)
{
index=i*32+GetFreeMem(Map[i]);MemData.FreeCount--;
return(PVOID)(StartAddr+index*MemData.DataSize);
}
}
return SYSTEM_NULL;
}
函数首先判断是否有空闲内存,然后找到最靠前的空闲任务,返回给任务。
任务使用完内存后,将释放的内存添加到空闲表中。
具体地,函数原型如下:
VOID PutMem(PVOID Addr)
{
INT32index;
if(Addr==SYSTEM_NULL)
{
return;
}
index=((INT32)(Addr–MemData.StartAddr))/MemData.DataSize;
Map[index/32]=Map[index/32]|(1<<(32-index%32));MemData.FreeCount++;
}
函数首先判断地址是否合法,然后将这块内存添加到空闲表中。
进一步地,所述内核还包括邮箱管理单元,所述邮箱管理单元用于任务可使用邮箱给另一个任务发送特定的数据。
所述邮箱管理单元具体包括邮箱创建单元、邮箱删除单元、邮箱等待单元和邮箱释放单元;
所述邮箱创建单元用于嵌入式实时操作系统为邮箱维护一个结构池,邮箱创建单元取结构池中空闲结构,并对邮箱结构进行初始化;
所述邮箱删除单元用于邮箱在不使用时,将邮箱结构放入缓冲池中以给其他任务使用;
所述邮箱等待单元用于等待所需资源条件得到满足;
所述邮箱释放单元用于当任务消息资源准备好以后,通过邮箱传递、释放邮箱。
进一步地,所述邮箱等待单元具体用于:将邮箱等待单元分延时等待、一直等待和不等待三种情况;延时等待是指只等待规定的时间,等待时间到期后,如果资源条件还没满足,则返回超时;一直等待是指只要所需资源条件不满足,则将任务一直挂起,直到条件满足任务才被唤醒;不等待是指资源不满足时,任务不被挂起,任务继续运行。
参照图2所示,在具体应用中本发明的嵌入式实时操作系统的一种方法流程为:系统得电运行后,首先对寄存器、中断向量表、进程表、定时器进行初始化操作,然后设置CPU的工作模式,启动空闲进程任务,使系统循环工作,直到设备断电才停止运行工作。
最后需要说明的是,上述描述为本发明的优选实施例,本领域的普通技术人员在本发明的启示下,在不违背本发明宗旨及权利要求的前提下,可以做出多种类似的表示,这样的变换均落入本发明的保护范围之内。
Claims (7)
1.一种嵌入式实时操作系统,其特征在于,包括应用层和内核;所述应用层与内核之间进行数据交互;
所述应用层包括存储系统、设备驱动单元、虚拟内存单元和网络协议栈;所述内核包括任务管理单元、时间管理单元、信号量管理单元、内存管理单元、CPU单元和ICP单元;
所述嵌入式实时操作系统在处理任务时,所述任务管理单元将要处理的任务进行优先级划分,并与正在处理任务的优先级进行比较,将优先级低的任务通过所述时间管理单元进行延时,然后所述信号量管理单元用于保证被延时的任务不被并发调用,并且内存管理单元为被执行的任务提供所需的内存,最后通过ICP单元进行相互通信,CPU单元进行任务数据的处理和指令的执行;
所述信号量管理单元具体包括同步信号量管理单元和互斥信号量管理单元;
所述同步信号量管理单元用于处理非独占资源,每个项目可用就释放一个信号量,直到释放满,同时任务可以得到释放的信号量取走这些可用的项目;
所述互斥信号量管理单元用于处理独占式资源,任何时候只能有一个任务占用它,下一个任务必须等待前一个任务释放资源后才可以继续使用;
所述任务管理单元具体包括,任务调度单元、任务创建单元、任务删除单元、任务挂起单元和任务唤醒单元;
所述任务调度单元用于对嵌入式实时操作系统中的普通任务、实时任务和空闲任务进行调度;
所述任务创建单元用于嵌入式实时操作系统在编译的时候预定义将要使用的任务数,使用任务创建单元相关的函数;
所述任务删除单元用于释放任务控制块,并将任务控制块返还给任务池;
所述任务挂起单元用于挂起当前任务或者就绪状态中的任务;
所述任务唤醒单元用于将挂起的任务恢复到就绪状态。
2.根据权利要求1所述的嵌入式实时操作系统,其特征在于,所述任务调度单元具体用于:
普通任务在系统中按时间片方式调度,即每个普通任务分配一固定的时间片,当它拥有的时间片用完时,就调度就绪队列中下一个普通任务;
实时任务的调度策略是,普通任务运行过程中,如果实时任务等待的资源可用,就中断普通任务的运行,调度实时任务运行;并将实时任务按优先级划分,如果当前运行的实时任务比就绪队列中任务的优先级高,那么就继续运行优先级高的任务,直到该任务进入等待状态或者删除,然后就调度就绪队列中优先级最高的任务;如果当前实时任务的优先级没有就绪队列中实时任务的优先级高,则中断当前任务的运行,调度优先级更高的实时任务运行;
空闲任务在没有普通任务运行和实时任务运行时被调度,它在系统启动前被创建,一直生存在系统运行期间,不能被删除。
3.根据权利要求2所述的嵌入式实时操作系统,其特征在于,所述时间管理单元具体包括任务延时单元和延时唤醒单元;
所述任务延时单元用于将任务添加到延时等待队列中,直到延时时间到期,或者延时唤醒该任务;
所述延时唤醒单元用于将延时睡眠的任务唤醒。
4.根据权利要求3所述的嵌入式实时操作系统,其特征在于,所述内存管理单元具体包括:
内存初始化将系统固定的大内存段分成一定数量小内存段,设置内存使用表,初始化内存结构各个值;
从空闲内存中取一块出来给任务使用;
任务使用完内存后,将释放的内存添加到空闲表中。
5.根据权利要求4所述的嵌入式实时操作系统,其特征在于,所述内核还包括邮箱管理单元,所述邮箱管理单元用于任务可使用邮箱给另一个任务发送特定的数据。
6.根据权利要求5所述的嵌入式实时操作系统,其特征在于,所述邮箱管理单元具体包括邮箱创建单元、邮箱删除单元、邮箱等待单元和邮箱释放单元;
所述邮箱创建单元用于嵌入式实时操作系统为邮箱维护一个结构池,邮箱创建单元取结构池中空闲结构,并对邮箱结构进行初始化;
所述邮箱删除单元用于邮箱在不使用时,将邮箱结构放入缓冲池中以给其他任务使用;
所述邮箱等待单元用于等待所需资源条件得到满足;
所述邮箱释放单元用于当任务消息资源准备好以后,通过邮箱传递、释放邮箱。
7.根据权利要求6所述的嵌入式实时操作系统,其特征在于,所述邮箱等待单元具体用于:将邮箱等待单元分延时等待、一直等待和不等待三种情况;延时等待是指只等待规定的时间,等待时间到期后,如果资源条件还没满足,则返回超时;一直等待是指只要所需资源条件不满足,则将任务一直挂起,直到条件满足任务才被唤醒;不等待是指资源不满足时,任务不被挂起,任务继续运行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710556700.2A CN107273141B (zh) | 2017-07-10 | 2017-07-10 | 嵌入式实时操作系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710556700.2A CN107273141B (zh) | 2017-07-10 | 2017-07-10 | 嵌入式实时操作系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107273141A CN107273141A (zh) | 2017-10-20 |
CN107273141B true CN107273141B (zh) | 2020-12-29 |
Family
ID=60073295
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710556700.2A Active CN107273141B (zh) | 2017-07-10 | 2017-07-10 | 嵌入式实时操作系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107273141B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110879707B (zh) * | 2018-09-06 | 2022-10-14 | 迈普通信技术股份有限公司 | 编译任务执行方法及装置 |
CN109445939A (zh) * | 2018-10-19 | 2019-03-08 | 积成电子股份有限公司 | 一种基于主动出让机制的软实时调度内核的调度方法 |
CN109413064B (zh) * | 2018-10-24 | 2021-04-27 | 同方电子科技有限公司 | 单网卡VxWorks系统与多主机间应用层协议报文处理方法 |
CN109614221B (zh) * | 2018-10-30 | 2024-01-09 | 北京技德系统技术有限公司 | 一种实时操作系统的应用框架及其方法 |
CN110162328B (zh) * | 2019-05-28 | 2023-11-03 | 东信和平科技股份有限公司 | 一种智能卡操作系统升级方法及装置 |
CN110737522B (zh) * | 2019-10-16 | 2023-03-03 | 福州物联网开放实验室有限公司 | 一种嵌入式操作系统的待机任务调度方法 |
CN111209046A (zh) * | 2019-12-25 | 2020-05-29 | 北京时代民芯科技有限公司 | 一种面向多任务处理的嵌入式sparc处理器操作系统设计方法 |
CN111399624B (zh) * | 2020-02-18 | 2021-04-13 | 上海泰辑软件有限公司 | 一种基于嵌入式的低功耗图像显示方法及系统 |
CN112214309B (zh) * | 2020-09-08 | 2024-03-19 | 深圳航天科技创新研究院 | 实现车载物联网嵌入式操作系统内核的方法及介质 |
CN115328629A (zh) * | 2022-08-11 | 2022-11-11 | 江苏卓易信息科技股份有限公司 | 裸金属上扩展uefi固件进行实时性嵌入式管理的方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101051280A (zh) * | 2006-04-03 | 2007-10-10 | 北京握奇数据系统有限公司 | 智能卡嵌入式操作系统及其控制方法 |
CN102455940A (zh) * | 2010-10-29 | 2012-05-16 | 迈普通信技术股份有限公司 | 一种定时器和异步事件的处理方法及系统 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100485605C (zh) * | 2001-09-24 | 2009-05-06 | 中兴通讯股份有限公司 | 一种多任务实时操作系统的实现方法 |
CN100359489C (zh) * | 2004-07-13 | 2008-01-02 | 中兴通讯股份有限公司 | 一种嵌入式实时操作系统中内存分配的方法 |
CN101266553B (zh) * | 2008-05-06 | 2010-06-02 | 无锡紫芯集成电路系统有限公司 | 基于嵌入式系统的多任务管理方法 |
US7996595B2 (en) * | 2009-04-14 | 2011-08-09 | Lstar Technologies Llc | Interrupt arbitration for multiprocessors |
CN102043667A (zh) * | 2010-11-25 | 2011-05-04 | 深圳市科陆电子科技股份有限公司 | 一种嵌入式操作系统的任务调度方法 |
CN105302738B (zh) * | 2015-12-09 | 2018-09-11 | 北京东土科技股份有限公司 | 一种内存分配方法及装置 |
-
2017
- 2017-07-10 CN CN201710556700.2A patent/CN107273141B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101051280A (zh) * | 2006-04-03 | 2007-10-10 | 北京握奇数据系统有限公司 | 智能卡嵌入式操作系统及其控制方法 |
CN102455940A (zh) * | 2010-10-29 | 2012-05-16 | 迈普通信技术股份有限公司 | 一种定时器和异步事件的处理方法及系统 |
Non-Patent Citations (2)
Title |
---|
"An Improved Task Scheduling Algorithm in Embedded Systems";Xiong Yumei.etc;《2010 Third International Symposium on Intelligent Information Technology and Security Informatics》;20100422;正文第682-685页 * |
"嵌入式数控软件平台关键技术研究";杨凡;《中国优秀硕士学位论文全文数据库 工程科技Ⅰ辑》;20090515;B022-245 * |
Also Published As
Publication number | Publication date |
---|---|
CN107273141A (zh) | 2017-10-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107273141B (zh) | 嵌入式实时操作系统 | |
US5875329A (en) | Intelligent batching of distributed messages | |
US8141079B2 (en) | Dynamic application scheduler in a polling system | |
US8078768B2 (en) | Universal Serial Bus (USB) remote wakeup | |
JP5809366B2 (ja) | ポータブルコンピューティングデバイスにおいて要求をスケジューリングするための方法およびシステム | |
US10884786B2 (en) | Switch device, switching method, and computer program product | |
EP1789874A2 (en) | Method and system for concurrent excution of mutiple kernels | |
CN103412755A (zh) | 一种硬件实时操作系统 | |
US6907606B1 (en) | Method for implementing event transfer system of real time operating system | |
US7062303B2 (en) | Synchronizing power conservation modes | |
CN115361451A (zh) | 一种网络通信并行处理方法及系统 | |
JPH02300939A (ja) | セマフォオペレーション方式 | |
CN204302959U (zh) | 一种硬件实时操作系统 | |
CN101349975B (zh) | 一种在嵌入式操作系统上实现中断底半部机制的方法及装置 | |
CN114268670B (zh) | 基于时间触发的以太网异步消息处理系统及方法 | |
WO2004061663A2 (en) | System and method for providing hardware-assisted task scheduling | |
CN114697194A (zh) | 阻塞式事件通知方法及装置 | |
CN110262839B (zh) | 一种处理器的调度方法、装置及存储介质 | |
US20060112395A1 (en) | Replacing idle process when doing fast messaging | |
JP2005519393A (ja) | 仮想直接メモリ・アクセスのための方法及び装置 | |
US8631176B2 (en) | Asynchronous communications technique | |
CN116302402A (zh) | 嵌入式系统任务处理方法及装置 | |
CN115543461A (zh) | 一种强实时中断唤醒任务方法及相关设备 | |
US20210240528A1 (en) | Apparatus and method for deferral scheduling of tasks for operating system on multi-core processor | |
JPH08314740A (ja) | プロセスディスパッチ方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |