如何管理定时器_如何写一个超级简单的嵌入式操作系统(三)

上一篇讲了嵌入式软件系统是如何从轮询系统过度到多任务系统的。

和前后台系统相比较,多任务可以理解为有多个后台程序的前后台系统。每个任务都专注于自己处理的问题。接下来我们再看看如何可以完成一个简单的多任务系统。

如果要我说,多任务系统中哪个部分最重要,那我一定会说是任务调度。任务调度机制就是多任务系统的核心机制,也是多个任务能够协同运行,甚至在同一个cpu上运行,但是却表现的好像是同时运行的关键所在。

任务调度机制概述

要了解任务调度,首先要了解时钟节拍:

时钟节拍

时钟节拍是任务调度的基础,它指明了把处理器时间以多大的频率分割成固定长度的时间片段。作为多任务系统运行的时间尺度,时钟节拍是通过特定的硬件定时器产生的。硬件定时器会产生周期的中断,在相应的中断处理函数中,内核代码得以运行,而内核代码就会进行任务调度和定时器时间处理等内核工作。

处理器的时钟节拍如下图所示:

8e247be50c78ca92a0f30f12bbbf96c7.png

硬件定时器中断的时间间隔取决于不同的内核设计,一般是毫秒级的。这种时钟节拍在任务切换中具有非常重要的作用,又十分有规律性,所以很多地方都将其称为心跳节拍

心跳节拍越快,内核函数介入系统运行的比例就越大,心跳节拍中断响应次数越多,内核占用的处理器时间越长。相反,如果心跳节拍太慢,则又会导致任务的切换间隔时间过长,进而就会影响到系统对事件的响应,影响所谓的任务的实时性。

下图演示了多任务系统中,中断处理程序和任务在时间上的关系。

a70f6540c12772594a7ee40892fd6fd3.png

多任务机制

在单CPU的计算机系统中,在某一具体时刻CPU只能运行一个任务,但是可以通过将处理器运行时间分成小的时间段,多个任务按照一定的原则分享这些时间段的方法,轮流加载执行各个任务,从而从宏观上看,有多个任务在CPU上同时执行,这就是单CPU系统上的多任务机制的原理,如图所示。

d5f0e44a7fb7b109dc3b434deca21e42.png

图中,任务 A 和任务 B 按照等长时间轮流占用处理器,在单CPU上造成多个任务同时运行的假象。

另外,因为不同任务的运行路径不同,在某一时刻有些任务可能需要等待一些资源,这时可以通过某种方案,使当前任务让出处理器,从而避免因为任务等待资源而长期占有处理器而使其他任务无法运行。这样多任务机制可以使处理器的利用率得到提高,并提高了系统的处理能力。

在多任务操作系统内核中必须提供解决并发任务的机制。通用操作系统一般以“进程”、“线程”等为单位来管理用户任务。在相关资料中,也会明确指出“进程”与“线程”的区别。但在很多嵌入式操作系统中,并没有区分进程和线程,只是把整个操作系统当作一个大的运行实体,其中运行着很多任务。任务通常作为调度的基本单位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值