如何编写一个简单的嵌入式操作系统 (2)时间片轮转

上篇日志最后给出了一个最简单的人工调度系统。在实际应用中,人工的调度很常见,但更为普遍的是操作系统自动的任务调度。这篇日志介绍一种最常见的自动调度,即时间片轮转法,在上一节的程序的基础上,添加一些函数,用C语言实现。

1.时间片轮转调度

时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。算法的模型如右图所示。

但是现在为了简单起见,我们可以把模型设置的尽量简单:没有任务优先级,不考虑任务的等待,阻塞等等形式。所有的任务一旦创建,就是就绪的,等待系统的调度。调度时,简单的按照任务号的顺序依次调度。


2.时钟粒度与定时器中断

我们在使用单片机时,一般是用单片机的时钟周期(或者是指令周期)作为程序中最小的时间单位。在使用操作系统后,这种方法无疑太细致了些。如果把这个最小的时间单位划分的更大一点的话,管理起来会更方便。我们可以用定时器T0来做这种划分:每10000个时钟周期,定时器T0溢出一次。如果用12M晶振的话,这个时间正好是10ms。操作系统就把这个时间作为它的最小时间单位。换句话说,操作系统

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值