操作系统与我们编程的关系(抽象和封装的运用)

来源:互联网 发布:简易财务记账软件 编辑:程序博客网 时间:2024/06/04 19:07

通常,计算机用户是用高级语言来编写应用程序的,但计算机的硬件却是按照机器码指令来执行操作的。于是,就出现了这样一个问题:用户如何才能用高级语言来指示一台只能识别机器码指令的机器来工作。显然,在高级语言程序和机器硬仵之间,必须有一个中介来完成高级语言与低级语言的对接工作。

  为了说明问题,先看一下当一个用户面对一台裸机时他会面对什么样的问题及困难。在使用计算机时,如果用户面对的是一台只由硬件组成的裸机,那么用户就不得不使用低级语言来编写指挥硬件的程序。例如,需要从磁盘中读取一批数据,那么凡是涉及读取磁盘数据工作的每一个步骤和细节,包括给出磁头号、启动驱动步进电机并命令磁头移动到给定的磁道位置、给出扇区号、等待磁头和扇区移动到合适位置、读出数据等一系列的繁杂动作,就都需要由用户自己来编写程序。诸如此类的事情,在计算机应用中还有很多。例如,键盘数据的读取、鼠标状态的读取、向打印机输出数据、向磁盘输出数据、向显示器输出数据、计算机硬件异常的处理等等。显然,上述这些程序的设计工作对于普通计算机用户来说,是极其困难和艰巨的。因为他必须既通晓计算机硬件的所有技术细节,又要精于汇编语言程序设计。

  但是,人们发现,这些实现硬件操作的汇编语言程序模块都有一个共同的特点,即它们都具有很强的通用性,也就是说,它们是大多数应用程序都要用到的通用功能。于是,请一些通晓计算机硬件工作机理并精于汇编语言程序设计的人来编写这些程序功能模块,通过这些模块与高级语言对接的接口向用户提供服务,并把这些模块作为一种通用软件提供给用户是一个好办法。这样,用户在装有这种通用软件的汁算机上来编写高级语言程序也就非常容易和方便了。

  例如,还是上面所说的从磁盘中读取一批数据这项工作,如果系统中已经有了三个具有接口的汇编语言程序模块:磁头移动并定位模块、读磁盘数据模块和写人磁盘模块,那么用户的工作就简单多了,他只要在自己的应用程序中,通过接口调用所需要的模块即可。

  可以看到,如果系统中对所有硬件进行操作的程序功能模块都具各,那么应用程序设计人员所面对的就再也不是那些陌生的硬件电路,而是一些见到后就会各感亲切的软件接口了。

  这种提供了一些例程接口,从而使应用程序可通过这些接口对计算机硬件进行操作的软件,就叫做计算机硬件的抽象层HAL。这个层次作为操作系统的最底层,是对计算机硬件的第一次软件封装。

  更进一步,如果在硬件抽象层与应用程序之间再添一层;或者说,在硬件抽象层的基础上再加一层,即使用高级语言再编写一些程序模块(例如C函数),并在这些模块中,通过调用诸如磁头移动、定位、读磁盘数据和写入磁盘等这些底层程序模块,把这些繁杂的硬件操作根据需要适当地组合封装起来,形成一些有通常意义的模块,那么用户就更加方便了。

  例如,可在函数read()中调用两个汇编例程:磁头移动并定位和读磁盘数据。那么,用户应用程序在需要读取磁盘数据时,就可以简单地提出类似如下请求:

  并提供必要的参数(fp是要读取的文件句柄;buf是内存存放所读取数据的缓冲区;count是要 读取数据的字节数)即可。

  事实正是如此,现在应用程序设计人员在编写程序时使用的read()、wrlte()等功能更为 综合、强大的函数,就是系统软件在硬件抽象层HAL的基础上为用户提供的高级语言编写的 程序功能模块。

  正因为应用程序是使用这些程序模块来操作计算机硬件工作的,所以这些模块的集合就 叫做操作系统。

  当然,为了方便用户,操作系统还提供了一些与硬件操作无关的通用程序模块(例如,开 方、取整等一些数学运算函数),并把它们与上述的read()、wrlte()等模块组织成函数库,以供 应用程序来调用。这些函数(模块)也被叫做API(Application Programming Interface)函数。

  从计算机应用程序的角度来看,API中与硬件相关的那些函数就是对计算机硬仵的第二 次抽象和封装。

  从用户的角度来看,计算机的功能更为强大了。因为它能接受意义更为抽象的高级语言 指令来工作,原来用户必须用几十条甚至几百条汇编语言指令,或者多个汇编语言程序模块来 完成的任务,现在只用一条或很少几条高级语言指令就可以完成。

  这样一来,应用程序对计算机硬件进行操作就变得十分简单了:当应用程序需要硬件系 统的某种服务时,只需以软件的方式提出要求即可。至于硬件是如何提供这个服务的,那是操 作系统的事情,应用程序对此则可以完全不予理会。这就像在饭店吃饭一样,客人只要按照菜 单点饭菜,然后就是等待,至于饭菜是如何制作的,那是饭店的事情。如果把灶房看作是饭店 的硬件,那么厨师就是对灶房的第一次抽象和封装,而服务员和菜单就是对厨师的抽象和封 装,是对灶房的第二次抽象和封装。于是,经过这两次抽象和封装,就使得客人到饭店吃饭变 得极为简单和方便了。

  当应用程序读取磁盘数据时,用户应用程序、计算机操作系统和计算机硬件的关系如图所示。

在读磁盘数据时,用户应用程序操作系统与计算机硬件之间的关系

  图 在读磁盘数据时,用户应用程序操作系统与计算机硬件之间的关系

  从计算机的角度来看,操作系统扩充了计算机硬件的功能,使得带有操作系统的计算机比 只有硬件的计算机功能更强、更容易编程。

  从应用程序设计人员的角度来看,操作系统是计算机硬件系统与应用程序之间的接口。

  所以人们又说,计算机操作系统是对计算机硬件的一个软件包装,它为应用程序设计人员 提供了一个更便于使用的虚拟计算机(Virtual Machine)。

0 0
原创粉丝点击