关于计算机基本问题的探讨

来源:互联网 发布:艾克里里的变声软件 编辑:程序博客网 时间:2024/04/28 12:40

 这篇文章在几年前就写了,回想起来,当初思考的情景依然历历在目!

         有这么一个问题,一直百思不得其解,那就是计算机的源头。我们都知道计算机是由软件与硬件组成,计算机几乎可以实现我们想要的一切操作。这一切都得益于软件的诞生。缺少了软件的计算机,充其量就是死板的电路。学过数字电路的人,应该都会明白,一个具体事项或应用上的操作,完全可以由硬件电路来实现。通常一个简单的问题,我们可以由硬件来实现,也可以由软件来实现。比如,我们考试用的计算器,就是纯粹的硬件电路构成,没有加载任何的程序或软件。我们按计算器上面的数字键以及运算键,就可以实现加,减,乘,除等运算功能。当然,我们也可以通过软件来实现,就是编写一个简单的程序。其实,从本质上来说,我们按计算器上面的键,比如求一个1+2等于多少,我们需要按1,+,2,=,这几个键。我们按的这几个键就已经构成了一个简单的程序,是计算器可识别的二进制程序(高低电平)。为了满足人们的需要,计算机的功能越来起丰富。如果单单靠硬件来实现几乎是不可能了。这样就需要利用软件来实现。但必须说明的是,计算机上任何的应用最终是通过硬件来实现的。任何程序的运行脱离不了硬件。只不过加载了软件的硬件电路使得硬件的功能得到全面的发挥,使我们的硬件能够灵活,从容实现各种应用。换句话说,如果不加载软件,硬件电路的功能将非常死板,难用。

       我们都知道我们计算机的核心就是CPU。没错,正是因为有了CPU作为支撑才有了电脑这么丰富的功能实现。CPU本身就具备了机器指令集的功能。或者说汇编上讲的那些汇编指令的功能。这是完全靠硬件来实现的。试想,我们一个计算器就只能实现计算功能。而其硬件电路已经是挺复杂的了,要让一个CPU在硬件具备这么丰富的功能,可想而知,其电路之复杂。更难能可贵的是,我们所有的功能实现,最终都依托这些指令集的各种组合来实现。

       我们都明白,我们的计算机要安装操作系统,再安装应用程序,就可以做很多事情。书上讲操作系统是最接近硬件的软件,我们的应用程序在操作系统上运行。操作系统的功能是管理各种软硬件资源,控制程序运行等。操作系统支撑应用程序,谁来支撑操作系统。答案是硬件。操作系统用来连接我们的硬件与应用软件。但我们的应用程序和操作系统同样都是软件,都是由C语言来编写的啊?没错,我们利用C语言编写出复杂的操作系统来实现操作系统的各种具体功能。同样,我们也是利用C语言编写出各种应用软件来实现软件的各种功能。学过程序设计语言的人都知道,程序设计语言有高级语言与低级语言之分。像C语言属于高级语言,汇编语言属于低级语言。汇编指令与CPU指令一一对应。我们用C语言写的程序要先编译成低级的汇编语言,再由汇编编译器编译成二进制文件,二进制文件就是计算机可识别可运行的文件。

        以前一直陷入一个不解的思维,一直在想既然应用程序是由C语言来编写的,那么 就需要C编译器,那C编译器是由什么来编写的?是由汇编语言来写的,而汇编语言需要汇编编译器,汇编编译器是由什么来写的?汇编编译器是由机器代码来写的?按此推理,这样一级支撑一级,那机器代码由谁来支撑?到这里就开始模糊了。直到最近,才恍然大悟是由硬件电路来支撑。硬件电路的复杂结构决定他的功能(指令集的实现)。也决定这些指令的机器代码表示。由于硬件电路只识别0或1代表的二进制文件(0,1代表高,低电平)。从这里也暴露自已其实对硬件的本质并不理解,通透。也即数字逻辑电路的本质。应该说软件之所以能够驾驭硬件,本质在于数字逻辑电路集成的硬件本身具备能识别0,1组成的二进制文件,并执行它。(在此想说,有学过数字电路的人,可以在此好好思考这句话的真正意义)。没学过数电的,可能会比较迷茫。不过请看下面的一个例子,或许你就开窍了!

        很多人应该都知道,现在的C编译器,还有汇编编译器,都可由C语言来编写的。这时,大家有可能会发出疑问。C编译器是用来翻译C语言的,或者说有了C编译器,才有了C语言。怎么C语言可用来编写C编译器呢?这不就跟鸡生蛋,蛋生鸡相似了?先不说这两回事是否是一个同样的问题。但必须肯定这的确是事实!原因在于,C语言软件已经通过编译,链接成二进制文件了,并存储在计算机中,硬个电路可以识别并运行的。这时,我们完全可以靠这个二进制的C语言软件来写一个C编译器或汇编编译器,再把它编译,链接成二进制文件。通过运行这个二进制的C编译器,反过来编译C语言软件写的代码。因而,我们发现随着计算机语言的发展,很多编译器已由高级语言来编写了。为什么?容易实现啊! 编写相对简单得多啊!好比有了飞机,我去一趟北京,干吗不做飞机呢?多省事。要是再由低级语言来写,没几个人做得到,想想当年的机器语言,只有那些真正的计算机专家才能掌握(透彻熟悉理解计算机硬件电路原理)。但追溯历史。历史上的第一个程序肯定也必须是由机器代码来写的。得到印证的是历史上的第一个汇编编译器是由机器代码写的。由此,可以推得历史上第一个C编译器也应只能由汇编语言来写,或者直接由机器代码来写。也就是一句话,任何一种编程语言的第一次(请注意是“第一次”)实现必须由比它低级的语言来编写支撑的。但只要不是第一次,就完全可以由高级语言来编写一个低级语言的编译器。

        以上就是自已最近的所想所得。

       正因为有了以上的解读,才会对操作系统与应用程序的关系有了进一步的理解,以及驱动程序的本质。与应用程序一样,同样是由C语言写的操作系统,蕴涵了丰富强大的功能,使我们在编写应用程序,运行应用程序不用考虑得太多,它帮我们规划好了。至于驱动程序呢?编写驱动

 程序的人一定得熟知该硬件的原理。好比如,U盘的驱动程序。你必须知道U盘的硬件原理,才能编写其驱动程序,再把驱动程序装到电脑上(相当于把U盘的工作原理介绍给操作系统),这样,才能连接使用它。如果不装驱动,计算机肯定不能识别它,运行它。因为不知道它的工作原理。

0 0
原创粉丝点击