操作系统浅析

操作系统浅析

这篇文章不是探讨操作系统的具体实现细节这样技术性的问题,而是想从宏观上探讨一下为什么会有操作系统,操作系统是干什么的。

一.从最简单的输入输出设备说起

我做过一个最简单的带有输入输出设备的装置,大致是这样:

屏幕快照 2016-09-16 下午2.30.32.png

一个按键设备作为输入,一个 数码管作为显示输出,一个 单片机处理数据
整个单片机的工作流程是这样的:

操作系统浅析_第1张图片
屏幕快照 2016-09-16 下午5.07.12.png

这是一个没有操作系统的设备,程序是在电脑上写好了然后下载到单片机上的,所以写了之后就不能更改。

我在获取到键值(哪个键被按下,编号为1-10,共10个按键)和按键类型(长按,短按,双击)之后所做的显示操作是:数码管的前两位显示键值,后两位显示当前键值代表的按键被按下了多少次(短按加一次,双击加两次,长按加三次),比如说如果当前数码管显示为0222,则表示2号按键被按下的次数为22次,如果此时我再对2号按键长按一次,则数码管显示会变成0225(长按按键次数加3)。

作为一个嵌入式的设备,整个设备的功能已经很完善了,在没有操作系统的情况下运行的很好。实际上这就是一个最简易的计算机模型,它有输入设备(10个按键),有CPU和内存(单片机),有显示器(数码管)。这个装置在没有操作系统的情况下也可以良好运行,那么为什么计算机上要有一个操作系统呢?

二.操作系统的引入

实际上大多数嵌入式设备都是没有操作系统的,都是直接面向硬件编程,因为大多数嵌入式设备的功能比较固定,比如电视遥控器,它的功能就只是负责控制电视。这类专用设备实际上是不需要操作系统的,直接对硬件编程就行了,那么操作系统是怎么产生的呢?

我还是以上面那个最简单的设备为例,如果其他的程序员拿到了我的这个设备,而他现在在获取按键键值和按键类型之后想要做其他的显示操作(比如只想显示哪个键被按下,只需要前面两位数码管就行了,后面两位可以显示为0),而他又看不懂我的原始代码,这样就意味着,他需要从做基础的检测按键键值→检测按键类型→进行显示操作做起,而他实际上只是希望在获取到键值和类型之后进行其他的显示操作,也就是只想改变一下最后一步。这样的情况下,这个程序员肯定就会想,如果能够有一个东西帮我检测按键键值和类型就好了,这个东西就是操作系统。

如果这个设备有了操作系统,它可以帮程序检测但按键键值和类型,那么程序员就可以很方便的对其进行编程,达到所需要的显示操作,因此这个设备就有了通用性。这实际上就是操作系统一个很重要的功能:为应用程序提供底层接口。以这个设备为例,它提供的底层接口就是按键键值和类型,使程序员可以忽略具体的检测过程而直接进行所需要的显示操作。想象一下,如果IOS程序员在编程时,还需要自己去写代码检测是否有手指点击以及点击的位置,那么对程序员来说无疑是灾难性的,这些检测实际上都是操作系统完成的,程序员编程时只需要告诉操作系统有手指按下之后需要做什么就行了,包括iOS最新出的3Dtouch的功能,程序员并不需要自己去检测是否发生了一次3Dtouch,而只需要告诉操作系统当3Dtouch发生之后需要做什么就行了。这些都是操作系统提供的接口

我们大多数有操作系统的设备,比如手机和电脑,其实都是通用设备,你可以在上面装各种各样的应用程序来完成不同的功能,而如果要在操作系统上编写应用程序,实际上就是利用了操作系统所提供的各种各样的接口,操作系统很重要的一个功能就是:为上层应用程序提供底层接口。当然操作系统还有其他很多功能比如进程线程管理等。
以上内容为自己的一些浅薄的认识,如有错误,还请大神指出。

你可能感兴趣的:(操作系统浅析)