为何要有嵌入式操作系统?
先要明白,最原始的,最基本的嵌入式系统,是什么样的:
就是一个大循环superloop
然后,期间根据中断等特殊情况,去处理一些相对比较简单的任务等等。
而后来:
随着各种系统,各种嵌入式系统,所需要实现的功能,越来越复杂而导致:
之前简单的循环结构,远远无法满足日益增长的嵌入式系统对于各种资源使用的复杂的要求
所以:
需要有个统一的管理机构,去管理通用的资源
也便于各个程序,子模块,子任务,去使用
而关于复杂点的系统,会是什么样子?
为何需要如此多的各种资源的复杂的需求和使用?
举个之前遇到的例子:
比如我们要实现一个:
MP3
听起来,相对很简单:
就是播放歌曲而已
但是实际上,其内部的,最低的,基本的需求就包括:
要有一个简单的文件管理系统,能否支持用户拷贝歌曲到MP3内部,此处对应的,就是:文件系统,File System
而且还要有:
一部分的功能,去实现:从文件系统中,读取某个MP3文件,此处的功能,假如叫做:Load File
而为了你能听歌,所以对于加载进来的文件,还要进过:
MP3文件的数据,去解码,然后把数据,放到声卡上(内部一般是I2S接口),此部分,假如叫做:Decode File
对应的,一般的MP3,还有个基本的播放界面,提供你,对于歌曲去:播放,暂停,上一首,下一首,等等功能,此部分假如叫做:(图形用户界面)GUI
所以,截至目前,相对比较简单,很基本的一个MP3播放器,都至少要有如下几个功能模块:
- File System:存放MP3文件
- Load File:加载MP3文件
- Decode File:解码MP3文件
GUI:图形界面显示
而对于播放普通一首歌曲的过程,大致可分为:
- 先从File System中,(根据文件路径)找到对应的MP3文件
- 然后读取加载进来Load File
- 然后再去解码对应的MP3文件 Decode File
- 然后图形界面中,还要提供基本的显示界面
而如果嵌入式系统,都是像上面这样,
只是一个从上到下,顺序执行,就结束
或者简单的再次循环一遍,那么,相对来说,也不是很复杂
但是,事情往往没这么简单
就拿最常见的需求来说:
上述简单的MP3播放系统,
在图形用户界面中
你点击了暂停后,则内部需要实现的功能有:
- 1.对应的用户界面中,要把那个暂停键,变成播放键(以便你再次按此播放键,得以继续播放)
- 2.底层的Load File,(虽然可以继续加载文件,但是为了节省系统功耗)对应的,需要停止加载文件
- 3.底层的解码MP3文件的过程,也要暂停
这就意味着:
对于你在界面上按了一个暂停键后
整个,你所设计的嵌入式系统,能够有对应的机制,
及时的去:
通知对应的:
- GUI线程去换图标;
- Load File线程暂停载入文件内容;
- Decode File线程,暂停解码
而对应的,不同进程之间的通讯。如果在没有嵌入式系统的前提下,自己去手动实现对应的通讯机制,(我没有亲自实现过,但是可以确定)相对是费时费力的活。
而且也不是那么容易设计出一个好的机制的。
如果设计出一个比较好的通讯机制
那么往往是:
正是目前市面上,你所能见到的,某种嵌入式操作系统中,真正使用的,某种机制
比如:
常见的,进程间的通讯机制,有很多经典的:
- 信号
- 管道
- 等等
- 消息队列
- 信号量
等等。
如此可见:
即使像上面,一个相对比较简单的MP3播放器,
其内部所涉及的逻辑,都远远不是很多人所想的那么简单
都会涉及很多功能模块或任务或进程,都会涉及到不同的模块,任务,进程之间的协调处理,互相通讯,共享信息,同步等等
而实际上:
现实中的,现存的,各种嵌入式系统,往往都要比这个简单的MP3播放器,复杂成千上网倍
对于一个比较复杂的系统
要实现各种不同的功能
各种不同功能之间,还要分轻重缓急,主次关系:内部往往涉及到任务的优先级
不同的功能,之间要互相协调才能有条不紊的让系统正常运行:内部涉及到不同进程(任务)之间的通讯
同时,系统的资源往往是优先,所以这么多功能或任务,谁该在什么时候用什么资源,不能让多个任务互相掐架:内部涉及到常见资源的管理,比如内存就是内存管理,CPU被谁用,往往是进程调度,CPU被用多长时间,往往是时间片轮转等等;
总而言之:
为了使一个复杂的系统,按照你所希望的样子,有条不紊的运行,还要保证稳定,不容易死机,还要保证高性能
所以需要:
一个很好的嵌入式系统,帮你去管理嵌入式系统中,如此多复杂的软硬件资源,各种功能模块
用物业类比解释操作系统
对于嵌入式操作系统的作用,可以用下面的类比,来解释其作用:
程序的逻辑相对复杂到了一定程度了
必须划分成逻辑独立的多个线程
然后多个线程之间同步协调处理
才能很好的使得整个系统运行下去
同时:
操作系统,提供对应的,各种,常见的,必要的,一些工具盒资源
比如:
进程间同步机制:
- 信号量
- 共享区域(临界区域?)
- 邮箱
- 互斥量(?)
- 等等
- 就是:
为了多个进程之间,协调处理,协同工作,而需要用到的资源
对应的:
操作系统,就像一个:小区的物业
作为小区的各个业主,对于物业所承担的所有指责,理论上,都是可以自己去亲力亲为的
比如:
卫生保洁,小区绿化,保安管理等等
只是
如果每个业主,都去分散的,处理各自的地区的卫生,绿化,保安等等
从总体上,从小区整个范围来看:
还是各自为政,整体效率不高:
毕竟每个业主,对于:
保洁卫生:扫地谁都会,但是未必有足够的时间和耐心;
小区绿化:各自需要花时间,去买绿色植物,这背后就需要一定的专业知识,加上买了绿色植物,如何运输回来,运输回来后,如何移植栽培,如何后期养护等等事情,都是费时费力的,每个人,未必都是专家,做起来,都未必可以做的很好;
保安:自己花时间,看管小区,也是费时费力;
如此:
每个人,每件事情,都去做
即使都可以做成,但是效果未必都很好
从整个小区所有业主的利益出发:
全局来看,花最少的钱,把事情办得最好
相对来说,每个人亲力亲为所有事情
还是没有花一定的钱,请个专业的物业管理公司,帮忙管理小区,来的效率更高
而每个小区,说白了,就是物业管理公司提供物业服务的使用者;
对应的:
对于设计一个嵌入式系统
如果每个细分的任务,每个人,都去实现:
- 管理多个子任务的管理工作
- 操心内存分配的细节
- 操心文件系统的细节
- 操心多个子任务,之间的协调处理和信息沟通
等等内容,则:
每个人,每个子模块,子任务
都实现了自己的,内存管理,进程通信等内容
就像:
各个业主都去实现自己的绿化,保安等事情,效果未必最好,所以最好的是:
对于每个实现自己的任务的人,每个任务自身来说,只关注自己要做的事情
剩下的,相对通用的事情,交由统一的,专门的管家去做:
这就是:
操作系统,存在的必要
其把所有的任务,所有各色不同的系统,公用的部分的内容,都统一实现了。
操作系统作为服务提供商,将这些基本的服务,提供给各个任务,各个功能模块,程序的设计者去使用
就像:
业主发现门口脏了,打电话,叫物业帮忙清理干净
程序,任务,发现需要什么资源了,就从操作系统那里申请
操作系统,就是起了一个,管家,或者是,物业的角色
专门给任务,程序,进程,提供公共基础资源,供其使用的。
类似的:
各个程序之间,往往需要协调
转载请注明:在路上 » 【整理】嵌入式操作系统心得+用物业类比解释操作系统