一个一个的运送旅客
顺序执行
同时运送所有旅客
多任务并行
按不同的使用频度制定路线并优先跑较繁忙的路线 任务优先级
计算机有各种资源,单从硬件上说,就有 CPU,存,定时器,中断源,I/O 端口等.而
且还会派生出来很多软件资源,例如消息池.
操作系统的存在,就是为了让这些资源能被合理地分配.
最后我们来总结一下,所谓操作系统,以我们目前权宜的理解就是:为"解决计算
机资源争用而制定出的一种约定".
二.51 上的操作系统
对于一个操作系统来说,最重要的莫过于并行多任务.在这里要澄清一下,不要拿
当年的 DOS 来说事,时代不同了.况且当年 IBM 和小比尔着急将 PC 搬上市,所以
才抄袭 PLM(好象是叫这个名吧?记不太清)搞了个今天看来很"粗制滥造"的 DOS
出来.看看当时真正的操作系统---UNIX,它还在纸上时就已经是多任务的了.
对于我们 PC 来说,要实现多任务并不是什么问题,但换到 MCU 却很头痛:
1.系统资源少
在 PC 上,CPU 主频以 G 为单位,存以 GB 为单位,而 MCU 的主频通常只有十几 M,存
则是 Byts.在这么少的资源上同时运行多个任务,就意味着操作系统必须尽可能
的少占用硬件资源.
2.任务实时性要求高
PC 并不需要太关心实时性,因为 PC 上几乎所有的实时任务都被专门的硬件所接
管,例如所有的声卡网卡显示上都置有 DSP 以与大量的缓存.CPU 只需坐在那里
指手划脚告诉这些板卡如何应付实时信息就行了.
而 MCU 不同,实时信息是靠 CPU 来处理的,缓存也非常有限,甚至没有缓存.一旦
信息到达,CPU 必须在极短的时间响应,否则信息就会丢失.
就拿串口通信来举例,在标准的 PC 架构里,巨大的存允许将信息保存足够长的时
间.而对于 MCU 来说存有限,例如 51 仅有 128 字节存,还要扣除掉寄存器组占用
掉的 8~32 个字节,所以通常都仅用几个字节来缓冲.当然,你可以将数据的接收
与处理的过程合并,但对于一个操作系统来说,不推荐这么做.
假定以 115200bps 通信速率向 MCU 传数据,则每个字节的传送时间约为 9uS,假
定缓存为 8 字节,则串口处理任务必须在 70uS 响应.
这两个问题都指向了同一种解决思路:操作系统必须轻量轻量再轻量,最好是不
占资源(那当然是做梦啦).
可用于 MCU 的操作系统很多,但适合 51(这里的 51 专指无扩展存的 51)几乎没有.
前阵子见过一个"圈圈操作系统",那是我所见过的操作系统里最轻量的,但仍有
改进的余地.
很多人认为,51 根本不适合使用操作系统.其实我对这种说法并不完全接受,否
则也没有这篇文章了.
我的看法是,51 不适合采用"通用操作系统".所谓通用操作系统就是,不论你是
什么样的应用需求,也不管你用什么芯片,只要你是 51,通通用同一个操作系统.
这种想法对于 PC 来说没问题,对于嵌入式来说也不错,对 AVR 来说还凑合,而对