全部文档
概述 硬件支持 快速开发指南 内核 驱动 通用组件 专业组件 常见问题

内核简介

内核是操作系统最核心也最重要的部分,OneOS内核总体采用可抢占式的实时的轻量级内核的方式设计,主要包含任务管理和调度、任务同步和通信、内存管理、定时器、时钟管理、工作多队列等模块。下图展示了OneOS内核在软件架构中的位置和基本架构,可见,内核处于组件层之下,处于HAL层之上。

下面是对内核几个重要模块的简介:

任务管理及调度

任务是软件系统中运行实体的基本单位,也是内核管理和调度的最小单位。

任务管理实现了对任务的创建、销毁、阻塞、睡眠、挂起、唤醒、状态迁移、资源回收等基本功能,这些功能通过队列的方式实现,涉及的队列有任务资源队列、任务资源回收队列、就绪队列、睡眠队列、阻塞队列,例如,基于任务资源队列管理创建成功还未被销毁的任务,基于就绪队列管理处于就绪态可以投入运行的任务,基于阻塞队列管理正在等待某种资源(如信号量)的任务,任务数量理论上不做限制,但是受限于硬件本身的RAM资源。

任务调度实现了如何选取任务投入运行的策略,调度主要支持2种方式,第1种是基于优先级的抢占式调度,即当有优先级更高高的任务就绪时,就会抢占当前任务并运行更高优先级任务,优先级数值越小,优先级级别越高,第2种是相同优先级任务的时间片轮转调度,即当任务时间片耗尽时,就会退出当前任务并选取另一个相同优先级的任务投入运行。

任务同步与通信

任务同步与通信是内核的基本功能。

任务同步实现了任务间的协同交替运行,同步机制包括信号量,互斥锁,事件3种方式。同步机制都可以选择按优先级方式等待和先进先出顺序方式等待,但是也有不同的应用场景,信号量主要用于任务间的同步,而且可以实现任务和中断之间的同步,互斥锁主要用于对共享资源的保护,并且可以解决优先级翻转问题,事件可以支持任务等待多个事件场景,而且也可以实现任务和中断之间的同步。

任务通信实现了任务间的数据传递,通信机制包括邮箱和消息队列,都可以选择按优先级方式等待和先进先出顺序方式等待,但是也有各自的特点,邮箱传递数据的大小固定,消息队列传递数据大小不固定,邮箱效率更高。

内存管理

内存管理实现了内存的分配和释放,任务需要内存时调用分配接口得到内存,内存使用完内存后,调用释放接口把内存返还给系统,提高了系统内存的利用率。内存管理有内存池和内存堆两种方式,内存池分配的内存大小固定,分配效率高,碎片少,但是无法按需分配。内存堆可以按需分配,但是分配效率比内存池低,碎片更多;内存堆支持添加内存区域,并且内存至少要添加一个内存区域才能分配;内存堆支持选择指定的管理算法,目前有firstfit和buddy两种算法。

时钟管理

时钟节拍是操作系统的心跳,任何操作系统都需要时钟节拍。时钟节拍是基于硬件定时器实现的,定时器的周期性中断到来时,就会处理一些和时间有关的事情,比如系统时钟计数,任务睡眠时间处理、任务的时间片轮转调度、定时器处理等。

定时器

定时器提供了延迟一段时间执行某个用户操作的接口,分为2种,第1种是单次性定时器,即触发一次后停止,第2种是周期性定时器,即周期性地循环触发,需要手动停止。目前内核只提供软件定时器,回调函数运行在任务上下文,不支持硬件定时器,如果要使用硬件定时器,需要调用BSP相关接口。

工作队列

工作队列提供了执行某个用户工作的接口,如果用户想执行某个工作,可以向工作队列提交工作,并且可以设置延时执行和不延时执行。如果想执行某个简单的或者不需要循环处理的操作,选择工作队列比较合适,不需要创建单独的任务。内核提供的工作队列有两种接口,第一种接口,用户可以创建自己的工作队列,自行决定栈大小和任务优先级,然后把需要的工作项提交到工作队列上;另外一种接口,用户不用创建工作队列,而是直接把工作项提交到系统创建的工作队列上。

results matching ""

    No results matching ""