应用程序在面向过程的语言中是指令加数据,即以指令为中心,围绕着指令的执行去选择所需要的数据;而在面向对象的语言中是算法加上数据结构,即以数据为中心,围绕着选定好的对象来组织算法。
不管怎么说,程序是由开发者通过某种语言编写出来的,并且存放在外部的存储器中的。当然了,设计出的程序是要让它在某种特定的硬件上运行的并实现某种功能的,而想要程序运行,就需要将这些程序从外部的存储器加载到内存中,并且能够被CPU处理。说到这里,问题出现了,我们的计算机只能识别二进制的数据,要如何才能让它识别高级语言编写的程序呢?所以这里需要对程序进行特别的处理才能让它被底层的硬件设备执行。人们在底层丑陋的硬件接口上加上汇编接口,使得高级语言汇编以后成二进制,从而使其能够被计算机识别。然而汇编接口仍然很底层,所以开发者又对这些硬件程序开发了一个能够顺利完成汇编功能的程序------驱动程序。有了驱动程序以后,人们不用再自行编写某段代码,只要在适当的时候调用驱动程序即可,之后访问硬件,然后在将程序汇编成二进制,就可以被CPU处理了。这样一来,每个程序就是一个计算机的运行的基本单位,这个运行中的程序,我们不再称呼他为程序,而是称它为进程(Process)。
之后人们发现,这样逐一的处理进程方式,使得计算机的执行效率太低。所以人们想要设计出一种能够提高计算机效率,让多进程在硬件上运行,并且进程之间不会发生冲突的监控程序,这个程序就是我们所说的操作系统。完整的操作系统是指内核以及各种应用程序。内核工作在底层的硬件系统上,屏蔽了丑陋的接口,为用户提供了更为方便的接口,以便用户调用,这些接口被称为“系统调用”。之后程序员还将经常使用的接口再次封装,用户可以更加方便的调用这个接口,这被称为“库调用”。内核还具有API(application programming interface),即应用编程接口。
我们以Windows以及Linux为例:如果一个程序运用了Windows的API,那它如果想要在Linux上运行,那就需要不同系统的API兼容才可以。所以,如果你遵守了POSIX(portable operating system可移植性操作系统)的规范,那么就可以在不同的操作系统上运行。
还有另外一个接口,ABI(applicationbinary interface,应用二进制接口),这个接口是应用者运行程序时面对的接口。
操作系统具备以下基本的功能:硬件的驱动、资源分配、进程管理、文件系统管理、安全防护特性。这些功能够让操作系统更加稳定的工作。
当然了,操作系统只有内核是不够的,在操作系统上还应有很多的应用程序。其中有一个特殊的应用程序----访问接口程序。其主要分为:GUI(Graphic User Interface,即图形用户界面)以及CLI(Command Line Interface,即命令行界面)。其中Windows虽然有CLI,但是很少人用,人们使用主要还是Windows提供的GUI,因为它简单易上手。但是对于Linux来说,GUI就是一个负担了,它大大占用了Linux的内存空间。当然了,使用CLI比GUI要方便的多,只是CLI入门比GUI难,所以Windows被广大群众使用,而Linux主要是应用在公司的服务器上。
原文地址:http://xuwenlong.blog.51cto.com/13132323/1971843