[内核技术]

嵌入式操作系统之一为什么要使用操作系统

[复制链接]
3864|14
手机看帖
扫描二维码
随时随地手机跟帖
山东电子小菜鸟|  楼主 | 2018-8-3 12:39 | 显示全部楼层 |阅读模式
本帖最后由 山东电子小菜鸟 于 2018-8-5 17:28 编辑


写在前面的话:
用最通俗的语言,贴近生活的实例带你进入操作系统的大门。
本文重点介绍实现嵌入
式操作系统的内核调度功能,
侧重任务调度部分,编写一个操作系统内核,如有兴趣
可自行在此基础上实现操作系统更多的功能。

在没有操作系统的情况下,C 语言是以函数为单位实现功能的,一个函数一个函数串行

的执行,一个完整的功能会由多个函数共同完成。然而当软件系统的功能变得多而庞大的时

候,这种方法几乎无法使用,因为此时各个功能之间必然会有千丝万缕的联系,不可能依次

串行的完成每个功能,各个功能必然需要交替执行。以函数为功能单元的程序很难在执行一

个函数的时候转而去执行另外不相关的函数,即使是使用一些技巧实现了,也会使整个软件

结构变的混乱不堪,不利于软件的维护和扩展。函数的工作方式就决定了并不适合以它为功

能单元运行复杂的程序,(作者:王奇  微信公众号:嵌入式单片机之家)在这种情况下就

需要使用操作系统了。操作系统是对函数运行管理的系统,它可以在一个函数还没有运行完

就转而去执行另外一个函数,并且还可以恢复到原来的函数继续执行,这样就可以根据需

要及时调整到需要运行的函数来满足各种要求。

相关**:


(作者:王奇  微信公众号:嵌入式单片机之家)


后期软文的资料及源代码原理图将在公众号中提供,有兴趣的朋友可以下载

相关帖子

山东电子小菜鸟|  楼主 | 2018-8-3 12:41 | 显示全部楼层
本帖最后由 山东电子小菜鸟 于 2018-8-3 12:53 编辑


一、操作系统的任务调度功能。


以大家熟悉的 Windows 为例,Windows 上运行了很多软件,有办公的、看电影的,玩


游戏的,等等等等,太多了。你想过没有,它们是怎么运行的?它们是由不同的厂商开发的 ,


它们之间如何协调?谁先运行谁后运行?这些就是操作系统要做的事。这些应用程序从宏观


上看是在一台电脑上同时运行,但从微观上看它们是串行运行的。电脑的 CPU 每一时刻只


能运行一个应用程序,运行很短的时间之后,CPU 又去运行下一个应用程序,周而复始的


这么运行。由于 CPU 的速度特别快,因此每个应用程序在很短的时间都可以运行很多次,


以人的感觉来说,根本就感觉不到 CPU 在各个应用程序之间切换运行,因此我们就觉得电


脑上的每个应用程序都是在同时运行。就像看电影一样,由于影片的刷新频率快过了人眼睛


的可分辨频率,因此我们就觉得电影是在连续播放。


使用特权

评论回复
山东电子小菜鸟|  楼主 | 2018-8-3 12:49 | 显示全部楼层
本帖最后由 山东电子小菜鸟 于 2018-8-3 12:53 编辑


二、这些都是操作系统的文件管理功能。

除此之外,操作系统还有很多功能,比如说文件系统。我们存储的游戏、电影文件是如

何放在硬盘上的?为什么我们将几 G 的文件剪切到同一个硬盘分区上时间很短,而剪切到

另外一个硬盘分区上则时间很长?为什么在 Dos6 下看不到 NTFS 分区的文件?

使用特权

评论回复
山东电子小菜鸟|  楼主 | 2018-8-3 12:52 | 显示全部楼层


三、操作系统的设备管理功能。


现在我们在 Windows 环境下,可以把一块显卡 、


声卡直接插到主板上,然后启动电脑,安装驱动程序,甚至不需要安装驱动程序就可以使用


了。你可能认为电脑就应该是这样的,但实际上,这简单的背后是操作系统为我们做了很多


工作,在过去操作系统并不完善的日子,我们需要手动为硬件分配物理地址、中断等资源 ,


极其麻烦。

使用特权

评论回复
山东电子小菜鸟|  楼主 | 2018-8-3 12:59 | 显示全部楼层
本帖最后由 山东电子小菜鸟 于 2018-8-3 13:00 编辑



对于功能简单的小系统设备来说,我们只需要设计一个 while 死循环就可以完成所有的
软件功能,这种小系统一般没有复杂的外部输入,例如电子表,外部输入只有调节时间的按


钮,软件的主要功能也只是读取定时器的数值并显示出来。我们以伪码的形式描述一个这样


的软件结构:



int main(void)
{
while(1)
{

1.判断按键输入并执行相关操作。
2.读取定时器数值。
3.刷新液晶屏显示时间。

}
}


这个小系统的运行几乎不依赖于外界的输入,只要按照软件设定好的顺序周而复始的执


行就可以实现所有功能。


但如果系统功能复杂一些统,使用上述的软件结构就显得有些不适合了。例如我们常用


的手机,一般手机处于不通话的状态下,屏幕是黑的,但这并不代表软件没有工作,此时软


件需要检测按键是否被按下,闹表定时是否到了,是否有电话来了等等,假设用户在使用手


机上网,同时又在听音乐,而电话又来了,你想想软件这个 while 循环应该如何去写?手机


中软件遇到的情况可要比我列出的上述情况复杂的多,仅仅使用这个 while 循环是无法完成


的。



使用特权

评论回复
caijie001| | 2018-8-3 13:42 | 显示全部楼层
鸟哥,在github发布一个项目啊,一起来写一个rtos

使用特权

评论回复
山东电子小菜鸟|  楼主 | 2018-8-3 14:28 | 显示全部楼层
caijie001 发表于 2018-8-3 13:42
鸟哥,在github发布一个项目啊,一起来写一个rtos

嗯呢

使用特权

评论回复
caijie001| | 2018-8-3 21:52 | 显示全部楼层

使用特权

评论回复
山东电子小菜鸟|  楼主 | 2018-8-4 06:46 | 显示全部楼层
本帖最后由 山东电子小菜鸟 于 2018-8-4 06:52 编辑

从手机的例子我们可以看到一个软件系统是由多个功能组成的,有些功能之间相对比较
独立,例如听音乐与上网是没什么联系的,发短信与闹表是没什么联系的。因此,我们很容


易想到,如果软件是以功能为单位去运行的,而各个功能又可以同时运行,那么每个功能只


需要专注完成自己的功能就可以了,上述这么复杂的问题也就可以迎刃而解了。


但传统的函数调用方式无法同时运行多个功能函数,因此,我们就无法使用传统的函数


方式同时执行多个功能。


前面我们说过,操作系统从宏观来看是可以实现多个功能同时运行的,这种宏观的同时


运行是建立在微观的从一个函数的运行过程切换到另一个函数的运行过程实现的,并且还可


以再切换回原来的函数继续运行。这种在函数间跳来跳去的运行方式就是操作系统赖以生存


的最核心功能——系统调度功能。从原理上来说,这个实现过程并不复杂,并且只需要使用


C 语言和一点点汇编语言外加一点点技巧就可以实现,所用的软件与我们平时编程时用的软


件没什么区别。


操作系统是以任务为执行单元的,每个任务就是一个相对独立的功能单元,各个任务之


间可以并行运行,因此操作系统也就实现了多个功能的并行运行功能。每个任务是使用一个


函数创建的,没有操作系统的函数和操作系统中创建任务的函数是没有什么区别的,主要区


别在于操作系统可以使用一些技巧,
(作者:王奇  微信公众号:嵌入式单片机之家)

让以任务形式存在的函数可以在运行时互相切换。当然 为了实现这个功能,还需要为创

建操作系统的函数增加一些额外的属性,将函数变成任务 ,

这个我们将会在后面章节讲述。


1.jpg






使用特权

评论回复
山东电子小菜鸟|  楼主 | 2018-8-4 06:53 | 显示全部楼层
本帖最后由 山东电子小菜鸟 于 2018-8-4 06:55 编辑

正是任务具有同时执行的特点,我们可以将几个不相关的功能分别用几个任务来实现 ,


例如手机的听音乐、上网、发短信和闹表等功能,我们使用操作系统为每个功能建立一个任


务,每个任务的代码只重点关心自己的功能,至于任务间的间插执行就交给操作系统了,这


样就使得整个软件结构变的清晰简单。(作者:王奇  微信公众号:嵌入式单片机之家)

使用特权

评论回复
Vansm| | 2018-8-4 07:31 | 显示全部楼层
为什么要使用操作系统   主要是为了多任务并行  

使用特权

评论回复
山东电子小菜鸟|  楼主 | 2018-8-4 07:36 | 显示全部楼层
Vansm 发表于 2018-8-4 07:31
为什么要使用操作系统   主要是为了多任务并行

精辟

使用特权

评论回复
caijie001| | 2018-8-4 19:39 | 显示全部楼层
Vansm 发表于 2018-8-4 07:31
为什么要使用操作系统   主要是为了多任务并行

说是并行,那是宏观上的并行

使用特权

评论回复
icecut| | 2018-8-6 09:38 | 显示全部楼层
本帖最后由 icecut 于 2018-8-6 09:40 编辑

看我 stm32  从入门到精通 最后两节视频. 不用关注这么多. 所有os的套路是一样的. 很多人都是拿os当多个单片机来跑.这是不合适的.
http://open.21ic.com/open/lesson/258

使用特权

评论回复
山东电子小菜鸟|  楼主 | 2018-9-20 16:28 | 显示全部楼层
感谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq:641208111;技术交流群:377640799 大学电子竞赛预热赛开赛啦~千元大奖等你来拿火热进行中!!点击参加活动 欢迎加个人QQ:641208111一起交流合作

140

主题

3082

帖子

23

粉丝