操作系统
以我的理解,从大方面来说,操作系统介于底层硬件和用户之间,他封装了底层驱动,对上统一接口,进而方便了上层软件开发。但不仅仅是这些,他介于二者之间,成为了硬件资源的管理者,为上层提供资源使用接口,进而完成用户所需要的功能。
一般来说,一个现代操作系统需要具备以下的各种功能。
- 进程管理(Processing management)
- 内存管理(Memory management)
- 文件系统(File system)
- 网络通讯(Networking)
- 安全机制(Security)
- 用户界面(User interface)
- 驱动程序(Device drivers)
这些只是针对个人PC来说的操作系统。
而实际上操作系统也有很多种,而且各自有各自的针对性,可能有的操作系统完全不需要网络通信,完全不需要内存管理,这种情况。
嵌入式操作系统
嵌入式操作系统,一般应用的环境都很有限,所以各种功能可能不如PC上的操作系统那么全面。
但一般来说,都具有下面的这些功能。
- 任务调度系统
- 中断管理系统
- 资源管理系统
- 内存管理系统
- 通信系统(一般指任务间通信)
至于下面的这些功能,一般来说都是可选的,或者可以添加/移植的
- 网络通信系统
- 文件系统
- UI系统
而且一般嵌入式操作系统内核相对来说很小,便于移植到小FLASH上。
为什么要有操作系统
从操作系统的概念就能知道,其实就是为了合理管理资源,分配资源,屏蔽底层硬件,提供统一的上层接口,操作系统其实就是对于底层硬件的一个超级大封装。
那又为什么要有嵌入式操作系统
多数单片机,其实完成的功能很单一,需要使用的硬件外设也是很单一的,这种情况下,其实不需要。
但是当单片机所具有的功能变多的时候,需要操作的硬件外设很多的时候,这种情况下,就需要操作系统来帮忙分配资源了。
比如说:
平常的单片机,只跑了一个流水灯,这只完成了一个任务。
后来有一天,又添加了一个,一边亮灯,一边放音乐的功能,灯还要随着音乐变化。
再后来又要能通过遥控点播音乐…
这个时候已经有很多功能了,这么多功能都集合在了这里
while(1)
{
检测遥控命令()
播放音乐()
PWM输出控制灯()
...
}
而这个时候可能需要多个任务并行,或许你可以通过巧妙利用TIM定时器进行时间规划,安排各个任务的执行时间。
然而这样只是针对当前功能来说的,如果功能增加了,需要并行的任务更多了,那么TIM的时间安排可能还需要调整,这样很麻烦很不高级,很不程序员。
那么最好的办法自然是拥有一个任务调度系统,每次只需要把对应的任务交给系统,然后由系统去完成这个TIM时间的管理,而不是我们手动调整。
当然这里除了这个并行的任务以外,还有中断,多个中断的情况下,需要先响应谁,后响应谁,当前任务是否可以被中断等这些问题考虑起来也很复杂,那么不如都交给系统去处理好了。
功能多了,就有可能大家会抢硬件资源,比如某个引脚既需要输出PWM又需要由他输入模拟信号,那么这个资源就会被争抢,那么这个时候就需要对这个资源进行管理,什么时候给什么任务,那么如果有操作系统帮忙去处理这个问题,那不就好了?除了硬件资源以外,还有内存可以抢,两个任务共用了相同的内存块,但这一部分内存只能是由一方先使用之后,另一方才能使用,这个时候,一般可以用互斥啊,信号量啊,什么的来操作防止其他程序使用,但是如果这个内存,使用者越来越多,又或是还有很多其他内存块被多个任务共同使用,那么这个时候单独由使用者来维护资源,实在是太麻烦了,那不如都丢给操作系统去处理吧。
所以啊,当资源多了,各种管理都需要使用者自己来的时候就变得很麻烦了。
而且如果有一天要开发新的功能,或者是有不懂底层的需要把应用层的代码放进来的时候,那么就更需要底层维护者提供支持,毫无疑问,操作系统更适合作为底层的维护者,省去大量的时间去维护这些问题。
Quote
http://www.nxpic.org/module/forum/thread-563173-2-1.html
http://bbs.eeworld.com.cn/thread-38282-1-1.html