操作系统--硬件与软件的桥梁

来源:互联网 发布:淘宝网包邮服务 编辑:程序博客网 时间:2024/05/20 10:56

现代计算机系统通常由一个或多个处理器,主存,磁盘,打印机,键盘,鼠标,显示器,网卡,还有各种各样的输入输出设备组成(数位板,扫描仪等等)

而操作系统就是在应用软件和底层硬件的一层抽象,让我们在编写应用程序时不用了解硬件的细节,而直接调用抽象的接口。

例如读取磁盘,可能需要翻看对应硬件的说明手册,知道有哪些指令,硬件一般还伴有一个简单的控制器,与CPU通过控制总线相连,就是用来传输这些指令以及返回值,然后控制器真正与硬件交互之后,再讲返回值放到指定的地方。

这些指令往往相当的底层,而且可能涉及到大量的硬件细节,读取一个磁盘可能需要要发送以下有关的参数到磁盘的控制器端口。例如磁道的扇区数,物理介质的记录格式,扇区间隙….

做过嵌入式的应该有体验,在开发程序中常常要查看硬件的指令手册,不过嵌入式上的程序一般较为简单,而且很多嵌入式程序都是独占整个硬件的,所以有些程序就是直接跑在硬件上,自己来写所有的硬件访问细节而不用系统(系统所要占用比较大的空间和时间也是一个问题)(当然现在一些用的多的嵌入式平台也有一些操作系统了,历史就是这样轮回的,在合适的时机,面对某种问题,就会有类似的解决方法被提出。)

但是现代计算机比嵌入式拥有更多的硬件以及各种各样的硬件,应用程序员不可能记住每一种硬件,例如每一种键盘的指令细节,所以转而由该硬件的生厂商来提供驱动。

驱动提供了一层薄薄的封装,然后驱动被操作系统加载,操作系统再做一层封装,此时应用程序员可以使用的接口已经与底层细节完全无关,相当抽象了,可能只需要发送读取多少字节,就可以取到磁盘上的数据。

再说一些有意思的东西,操作系统最重要的功能是提供了一层对底层的抽象,而不用让应用程序员关心麻烦的硬件细节,说到底就是一种社会分工,分工可以让每个人各司其职,发挥出更大的效率。

社会分工本身是经济学的概念,但这种类似的概念即使是在计算机软件领域也多次出现。稍微列举一下

操作系统—使上层应用可以不用关心底层是什么硬件
虚拟机—使虚拟机上的应用可以不用关心底层是哪个操作系统
浏览器—使浏览器上的应用可以不用关心底层是哪个操作系统
类库/框架—可以使使用该类库/框架的应用不用关心该领域的底层操作细节(比如一个游戏引擎可以使你专注于设计,而不用关心底层实现,以及各种效率问题)

说白了,以上所列的这些东西所做的,都是在一个合适的界限,将东西分类了开来。(当然,这个界限可能相当难找,而且在历史上也曾多次变动)


欢迎关注我的github https://github.com/luckyCatMiao

原创粉丝点击