0.4 软件程序运行
鸟哥的Linux 私房菜 基础学习篇(第三版)
鸟哥在上课时经常会开玩笑地问:“我们知道没有插电的计算机是一堆废铁,那么插了电的计算机是什么答案是“一堆会电人的废铁。”这是因为没有软件的运行,计算机的功能就无从发挥了。就好像没有了灵魂的躯体也不过就是行尸走肉,重点在于软件/灵魂。所以下面咱们就得要了解一下“软件”是什么。
一般来说,目前的计算机系统将软件分为两大类,一个是系统软件,一个是应用程序。但鸟哥认为我们还是得要了解一下什么是程序,尤其是机器程序,了解了之后再来探讨一下为什么现今的计算机系统需要“操作系统”。
0.4.1 机器程序与编译程序
我们前面谈到计算机只认识0与1而已,而且计算机最重要的运算与逻辑判断是在CPU内部,而CPU其实是具有微指令集的。因此,我们需要CPU帮忙工作时,就得要参考微指令集的内容,然后编写让CPU读得懂的指令码给CPU执行,这样就能够让CPU运行了。
不过这样的流程有几个很麻烦的地方,包括。
◆ 需要了解机器语言:机器只认识0与1,因此你必须要学习直接写给机器看的语言。这个地方相当的难呢!
◆ 需要了解所有硬件的相关功能函数:因为你的程序必须要写给机器看,当然你就得要参考机器本身的功能,然后针对该功能去编写程序代码。例如,你要让DVD影片能够放映,那就得要参考DVD光驱的硬件信息才行。万一你的系统有比较冷门的硬件,光是参考技术手册可能就会昏倒。
◆ 程序不具有可移植性:每个CPU都有独特的微指令集,同样,每个硬件都有其功能函数。因此,你为A计算机写的程序,理论上是没有办法在B计算机上面运行。而且程序代码的修改非常困难。因为是机器码,并不是人类看得懂的程序语言。
◆ 程序具有专一性:因为这样的程序必须要针对硬件功能函数来编写,如果已经开发了一支浏览器程序,想要再开发文件管理程序时,还是得从头再参考硬件的功能函数来继续编写,每天都在和“硬件”挑战。
为了解决这个问题,计算机科学家设计出一种让人类看得懂的程序语言,然后创造一种“编译器”来将这些人类能够写的程序语言转译成为机器能看懂得机器码,如此一来我们修改与编写程序就变得容易多了!目前常见的编译器有C, C++, Java, Fortran等。机器语言与高级程序语言的差别如图0-17所示。
● 计算机系统主要由硬件构成,然后内核程序主要在于管理硬件,提供合理的计算机系统资源分配(包括CPU资源、内存使用资源等),因此只要硬件不同(如x86架构与RISC架构的CPU),内核就得要进行修改才行。而由于内核只会进行计算机系统的资源分配,所以在上面还需要有应用程序的提供,用户才能够操作系统的。
● 为了保护内核,并且让程序员比较容易开发软件,因此操作系统除了内核程序之外,通常还会提供一整组开发接口,那就是系统调用层。软件开发工程师只要遵循公认的系统调用参数来开发软件,该软件就能够在该内核上面运行。所以你可以发现,软件与内核有比较大的关系,与硬件关系并不大。硬件也与内核有比较大的关系。至于与用户有关的,那就是应用程序啦!
在定义上,只要能够让计算机硬件正确无误地运行,那就算是操作系统了。所以说,操作系统其实就是内核与其提供的接口工具,不过就如同上面讲的,因为内核缺乏了与用户通信的亲和接口,所以,目前一般我们提到的“操作系统”都会包含内核与相关的用户应用软件。
简单地说,上面的图示可以带给我们下面的概念。
◆ 操作系统的内核层直接参考硬件规格写成,所以同一个操作系统程序不能够在不一样的硬件架构下运行。举例来说,个人计算机版的Windows XP不能直接在RISC架构的计算机下运行。所以你知道为何Windows又分为32位及64位的版本了吧为32/64位的CPU指令集不太相同,所以当然要设计不同的操作系统版本了。
◆ 操作系统只是在管理整个硬件资源,包括CPU、内存、输入输出设备及系统文件。如果没有其他的应用程序辅助,操作系统只能让计算机主机准备妥当而已!并无法运行其他功能。所以你现在知道为何Windows上面要实现 页影像的运行还需要类似PhotoImpact或Photoshop之类的软件安装了吧/p>
◆ 应用程序的开发都是参考操作系统提供的开发接口,所以该应用程序只能在该操作系统上面运行而已,不可以在其他操作系统上面运行的。现在你知道为何去购买在线游戏的光盘时,光盘上面会明白地写着该软件适合用于哪一种操作系统上了吧该知道某些游戏为何不能够在Linux上面安装了吧/p>
◆ 内核功能
● 既然内核主要是在负责整个计算机系统相关的资源分配与管理,那我们知道其实整部计算机系统最重要的就是CPU与内存,因此,内核至少也要有这些功能的:
■ 系统调用接口(System call interface)
● 刚才谈过了,这是为了方便程序员可以轻易地通过与内核的通信,将硬件的资源进一步利用,于是需要有这个简易的接口来方便程序开发者。
■ 程序管理(Process control)
◆ 总有听过所谓的“多任务环境”吧部计算机可能同时间有很多的工作在等待CPU运算处理,内核这个时候必须要能够控制这些工作,让CPU的资源做有效的分配才行。另外,良好的CPU调度机制(就是CPU先运行哪个工作的排列顺序)将会有效加快整体系统性能。
■ 内存管理(Memory management)
● 控制整个系统的内存管理,这个内存控制是非常重要的,因为系统所有的程序代码与数据都必须要先存放在内存当中。通常内核会提供虚拟内存的功能,当内存不足时可以提供内存交换(swap)的功能。
■ 文件系统管理(Filesystem management)
● 文件系统的管理,例如数据的输入/输出(I/O)等的工作。还有不同文件格式的支持等,如果你的内核不认识某个文件系统,那么你将无法使用该文件格式的文件。例如:Windows 98就不识别NTFS文件格式的硬盘。
■ 设备驱动(Device driver)
事实上,驱动程序的提供应该是硬件厂商的事情!硬件厂商要推出硬件时,应该要自行参考操作系统的驱动程序开发接口,开发完毕后将该驱动程序连同硬件一同贩卖给用户才对。举例来说,当你购买显卡时,显卡包装盒都会附上一张光盘,让你可以在进入Windows之后进行驱动程序的安装。
◆ 操作系统与驱动程序
● 老实说,驱动程序可以说是操作系统里面相当重要的一环了。不过,硬件可是持续在进步当中的,包括主板、显卡、硬盘等。那么比较晚推出的较新的硬件,例如显卡,我们的操作系统当然就不认识。那操作系统该如何驱动这块新的显卡了解决这个问题,操作系统通常会提供一个开发接口给硬件开发商,让他们可以根据这个接口设计可以驱动他们硬件的驱动程序,如此一来,只要用户安装驱动程序后,自然就可以在他们的操作系统上面驱动这块显卡了,如图0-19所示。

由上图我们可以得到几个小重点:
◆ 操作系统必须要能够驱动硬件,如此应用程序才能够使用该硬件功能。
◆ 一般来说,操作系统会提供开发接口,让开发商制作他们的驱动程序。
◆ 要使用新硬件功能,必须要安装厂商提供的驱动程序才行。
◆ 驱动程序是由厂商提供的,与操作系统开发者无关。
所以,如果你想要在某个操作系统上面安装一张新的显卡,那么请要求该硬件厂商提供适当的驱动程序。为什么要强调“适当的驱动程序”呢为驱动程序仍然是依据操作系统而开发的,所以,给Windows用的驱动程序当然不能使用于Linux的环境下了。
0.4.3 应用程序
应用程序是参考操作系统提供的开发接口所开发出来的软件,这些软件可以让用户操作,以达到某些计算机的功能利用。举例来说,Office软件主要是用来让用户办公用的;影像处理软件主要是让用户用来处理影音数据的;浏览器软件主要是让用户用来上 浏览用等。
需要注意的是,应用程序是与操作系统有关系的,如同上面的图示当中的说明。因此,如果你想要购买新软件,请务必参考软件上面的说明,看看该软件是否能够支持你的操作系统。举例来说,如果你想要购买在线游戏光盘,务必参考一下该光盘是否支持你的操作系统,例如是否支持Windows XP/Windows Vista/MAC/Linux等。不要购买了才发现该软件无法安装在你的操作系统上。
我们拿常见的微软公司的产品来说明。你知道Windows XP, Office 2007之间的关系了吗/p>
◆ Windows XP是一套操作系统,它必须先安装到个人计算机上面,否则计算机无法开机运行。
◆ Windows 98与Windows XP是两套不同的操作系统,所以能在Windows 98上安装的软件不见得可在Windows XP上安装。
◆ Windows XP安装好后,就只能拥有很少的功能,并没有办公室软件。
◆ Office 2007是一套应用程序,要安装前必须要了解它能在哪些操作系统上面运行。
文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux24925 人正在系统学习中 相关资源:聚会喝酒看美女必备APP_秀人 -Android其他资源-CSDN文库
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!