zoukankan      html  css  js  c++  java
  • 揭开计算机的神秘面纱

    写在前面的话:从接触电脑以来,就一直对电脑充满好奇。当电脑连接上电源,按下开机键,我们就可以做所有我们想做的事情,打游戏、写文章、看电影、搭建web服务器、自己写程序等等。随着接触电脑的时间越长,反而对电脑更加的陌生,不断的问自己,计算机到底是怎么组成的?为什么就能够实现这些功能?如果让我穿越回多少年前,该如何搭建一台电脑?恰好这几天读完这本书《code:the hidden Language of computer hardware and software》,确实一本好书,许多的疑惑得以解开,这篇博客就写写那些深深触动我的点,我认为,理解了这些点,也就理解了整本书的内容,进而理解了计算机是怎么回事。

    =====正文开始========

    1.继电器

      看下面两幅图:

      

      (1)左图中:一个铁芯,缠上一些线圈,当没有通电时,开关A是断开的,Out端没有电压,我们认为输出为0.

      (2)右图中:当线圈通电后,铁芯被磁化,相当于变成了一块磁铁,进而可以吸引上面的开关A,Out端有电压,我们认为输出为1.

      上面这么一个小小的简单的东西,就是继电器,它的意义非凡,因为我们可以人为的去控制:输出0和1了。

      虽然在计算机中,继电器逐渐被真空管、晶体管取代,但是他们要实现的作用是一致的:输出0和1。

     2.二进制

       我们生活中采用十进制,可是计算机内的计算采用二进制,我认为这是非常重要的改变。请看下面的逻辑:

      (1)二进制只有0和1,进而也导致二进制的加减乘除的结果只有0和1,二进制的与或非的结果也只有0和1

      (2)进而可以将二进制的加减乘除与二进制的与或非进行等价

      (3)而继电器可以输出0和1,因此可以通过继电器的各种”变着花样的组合“实现各种与或非

      (4)因此可以通过继电器的各种”变着花样的组合“实现二进制的加减乘除运算。

      理解了上面的逻辑,接下来要做的仅仅是实现所需功能而已。如何实现功能,也只是时间而已,下面贴一些图,展示一下如何通过继电器实现复杂的逻辑结构,作为一个实现思路的引子,而实现各种自己想要的逻辑,经过几个夜晚的苦思冥想,是可以想出来的,如果不想自己去想,那么可以看看Code一书,算作一个捷径。

                继电器实现逻辑与                        继电器实现逻辑或

                继电器实现半加器                        继电器实现全加器

      不要被上面的图吓到,他们仅仅是继电器的变着花样的组合而已,如果我们沉下心来,也可以实现这样的组合,甚至可以实现更多我们所需要的,比如8位加法器、减法器、乘法器、除法器等等。

      于是我们已经能够实现了计算机中CPU的一个重要功能:逻辑运算。

      然而上面的操作,例如输入,都需要我们人为的去操作,我们可以去想象一下:一个人坐在那里,拨着开关,进行着操作,是多么的枯燥。如果实现自动运行,也就是说无需人为的操作,实现0、1的输出,是多么好的一件事清,我们确实也可以做到,接着往下看。

    3.另外一种连接方式的继电器:反馈

      看下面两幅图:

      左图中,继电器没有通电的时候,继电器上面的开关B是闭合的;右图中,一旦给继电器通电(也就是开关A闭合),奇妙的事情就发生了:

      (1)继电器通电,会吸引上面的开关B,进而使电路断开。

      (2)电路一旦断开,开关B又恢复原位,使电路接通。(注意开关A一直是闭合的)

      (3)上面两个过程自动重复进行下去了。

      上面实现了这样的一种可能:继电器的输出可以在0和1之间自动完成,而能够自动完成的根本原因,在于下面两点:

      (1)继电器在断电的情况下,开关B是闭合的(常闭型继电器),而前面的讲到的继电器在断电的情况下,开关B都是断开的(常开型继电器),这是一点不同。

      (2)继电器的输入和输出没有分开,而是组成了一个回路,确切的说:是有反馈了。

      经过上面两点小小的改变,我们可以利用这种思想,实现一系列其他所需的功能:

      (1)我们可以实现RS触发器              (2)我们可以实现D触发器:实现对1位数据的保存。

                 

      其中D触发器可以称为1位锁存器;通过对D触发器的各种变着花样的组合,我们可以实现边沿电源触发的触发器,进而实现多位锁存器;

      通过将边沿触发的D触发器的输出反馈至输入,我们又可以实现分频器,进而实现计数器,同时计数器可以作为各个部分的时钟触发信号。

      如果忽略上面的细节,我们知道我们已经可以实现锁存器、计数器、时钟信号。

      于是锁存器构成了CPU中的寄存器和电脑中的内存RAM以及显卡的显存RAM;

      计数器和时钟信号构成了计算机中的时钟驱动信号。

    4.总线

      上面我们可以说已经实现了CPU和RAM(内存、显存),一旦将CPU与RAM连接,在能够自动运行的时钟信号的驱动下,CPU和RAM就能够协同工作实现所需的功能。CPU与RAM连接后,既可以实现RAM的输出给CPU进行运算,又可以实现CPU的输出给RAM进行存储。

      这些的输入输出都是通过实实在在的导线连接的。为了不至于使导线密密麻麻的难以辨识,我们可以对各个电路部件进行”各种变着花样的组合“,并把线路梳理清楚,总结为三种线路:数据总线、控制总线、地址总线。

      (1)数据总线:上面传输的是数据,如果能够传输8位,那么就说数据位宽为8位。当然这里8位也是与前面提到的锁存器的位数是对应的;也可以说是与CPU中的寄存器的位数是对应的,其实都一回事。

      (2)地址总线:地址总线也一根根的实际的导线,通过这些导线,就可以能够方便的选取RAM中的特定的锁存器;地址总线的数目决定了能够寻址的最大RAM。

      (3)控制总线:传送控制信号,实现特定的控制功能,比如确定是读RAM中的数据,还是往RAM中写入数据。

      还是要说上一句:这些线都是实实在在的导线。

    5.机器语言

      总线上面传输着0和1信号,通过0和1信号的各种变换,表示着传送不同的信息;RAM具有存储的功能,因此我们可以把一下0和1的信息存储进RAM,进而就可以让CPU去执行该命令了,这些命令就可以称为机器语言。

      机器语言的0和1我们可以通过开关等多种方式写入RAM中,毕竟RAM是可以存储信息的;如果每次都写01太繁琐和不方便,于是将这些01的代码用特定的符号表示,出现了汇编语言,汇编语言变成01代码的机器语言,需要通过汇编程序来实现,而汇编程序将汇编源程序汇编成机器代码,其实就是去查一下机器代码和汇编符号的对照表格而已。

      随着时间的发展,高级语言也相应出现了。

      CPU本质上来说是由继电器构成的,确切一点是晶体管构成,不同的公司的不同工程师造出来的cpu,相应的构成也会有一些差别,导致机器指令代码也就不同,于是出现了不同的指令集,如X86指令集,RISC指令集等等。

    6.外部存储介质

      前面提到的RAM,本质上是由继电器构成的,确切的说是由半导体构成,这都无所谓,他们都有一个共同的特点:当断电的瞬间,一切都没有了,为什么呢?因为电这个东西比较奇怪,说没就没了,如果想要长久的存储数据,得需要其他的方式:例如通过磁性物质来存储,于是出现了磁带、磁盘;通过光信息来存储i信息,如光盘;以及其他的东西:如ROM、Flash等。 

       计算机的构成越来越复杂,以至于掩盖我们内心最初的好奇与冲动。

     (完)

      文档信息 

  • 相关阅读:
    第三天 moyax
    mkfs.ext3 option
    write file to stroage trigger kernel warning
    download fomat install rootfs script
    custom usb-seriel udev relus for compatible usb-seriel devices using kermit
    Wifi Troughput Test using iperf
    learning uboot switch to standby system using button
    learning uboot support web http function in qca4531 cpu
    learngin uboot design parameter recovery mechanism
    learning uboot auto switch to stanbdy system in qca4531 cpu
  • 原文地址:https://www.cnblogs.com/wuguanglei/p/4297904.html
Copyright © 2011-2022 走看看