首页 服务器 编程 必备知识 搜索引擎 圩日手册
站内搜索
最近浏览
推荐文章
热文排行

第三章 计算机原理


 

第三章 计算机原理

3.1 电唱机、电话、电脑——谈谈模拟信号

3.2 数字信号

3.3 I/O设备,存储器、处理器

3.4 内存

  3.4.1 内存地址

  3.4.2 虚拟内存

 

“原理”一词,似乎总是代表艰深难度,另外还多少有些“太过理论,脱离实际”的意味。对于计算机,它的原理还偏向于硬件。基于这些,我们需要明白,在真正开始学习编程之前,我们有何必要学习一些计算机原理呢?

在大学里,计算机系有专门的一门《计算机原理》课,计算机原理的内容并不出现在计算机语言的课中。或许是这个原因,许多面向社会人员(非专业人士)的计算机编程书籍同样不讲计算机原理。这容易造成学习者也许上手很快,但学到一定程度后就难以有较深入的发展。我想,这是因为“底气不足”。

如上面提到的,计算机原理是完整的一门课,我们此处只用一章的时间阐述,所以我们必须讲最本质的原理。

3.1 电唱机、电话、电脑——谈谈模拟信号

要了解电脑的原理,不妨举一些我们早已熟悉的其它电器的例子,看看它们的原理。

假如你第一次看到一台会能说会唱的电脑,你可能会感到新奇,但事实上,别忘了,从CD机到带式的随机听,它们都没有生命却“记下”然后“说出”声音。事实上它们运行的原理,在本质和电脑完全一致,只不过由于我们太过熟悉,所以就认为它们没有什么了不起。其实,你能说出电唱机为什么能唱吗?

原始的电唱机会发唱的原理:

一张盘,表面涂一层石蜡。取一根针,针尖正好接触蜡面,针上顶一张薄膜。让帕瓦罗蒂在不远处冲着这张膜唱《我的太阳》。另有一人在老帕高歌时均速地旋转蜡盘。于是,歌声高低不同,薄膜向下压的幅度也不同,针在蜡上刻的深浅便不同,这样,就将人的声音最终以蜡上划痕的深浅记录下来。将蜡盘固化,在一套反方向的装置上:盘转,顶针上下高底不同地拉动一张膜,那张膜就会有模有样地唱《我的太阳》了。

再来看看电话的原理:

话筒内有一堆碳粉,碳粉内埋一导线,碳粉盖一张膜。同样,当你对话筒大喊大叫时,膜对碳粉造成忽紧忽松的压力,碳粉之间时紧时松,引起其电阻的大小变化,最终忽大忽小的电流传到对话的听筒。听筒内有一电磁铁随电脑大小而磁性不同,它对埋有金属丝薄膜时吸时放,薄膜便发出了你的声音。

你我都已经永远地失去了发明的电唱机或电话的机会了……伟大的先驱们是那么的聪明,懂得将一种不便于存储,不便于传播的信号转换为另一种便于存储,便于传播的信号,从而有了伟大的发明。

电脑(计算机)要管理各种信息,首先它必须能存储,传载这些信息,所以,在这一点上,它的本质和电唱机或电话没有区别,必须实现各种信息以某种方法,转换为另一种信息。

这就是计算机的第一条本质原理:将各类信息以某种信号进行存储。

好极了,现在,我们已经是了解计算机本质之一的人,从今天起,当我们再听到有菜鸟在说硬盘时,你大可对其怒喝:“成天就知道‘酷鱼大脚西部数据’!不管是什么牌子,也不管是硬是软是光,它们都是计算机将外界信息以磁或者激光信号的形式进行存储的介质,懂不?看你真像个中关村的电脑贩子!”(如果对方体积俨然在你的1.5倍以上,最后一句可以不说)

3.2 数字信号

“数字”——digit。

无论我说中文还是英文的,除了刚巧学完0~9的小学低年级学生外,20和21世纪内出生的人都知道我是在说一个时髦词。

这个“数字”所代表的,是“模拟”的反面。

电视,我们要数字的(尽管据说在中国并没有数字信号的电视节目);

手机,当然是数字的,前阵子中国电信已彻底地向采用模拟信号的蜂窝说bye-bye;

相机,数码的。(数码就是数字)

空调,数控的(空调吹不出数字的风,但它说,我这风是在数字信号的控制下吹出来的,当然就白里透红与众不同)。

 

“数字的”就这么好吗?电脑也是数字的吗?

前面我们说唱机,电话的原理时,你可以看到,在一种信号转换为另一种信号时,采用的方法是进行“模拟”。比如用针在蜡上刻的深浅来模拟声音的高低。尽管新的信号记载原来不空易存储的信号(声音),但这种新信号本身也是不稳定,不精确,比如针的不同,或蜡的质量不同,但会造成虽然同样是老帕在同一时刻唱的歌,不同的盘最后播出的声音却不同。类似的,笔者便常常在电话这头将丈母娘的声音听成是丈母娘女儿的声音而下不了台。

和许多伟大发明一样,当初计算机的发明的需明恐怕也是为了战争。现代计算机更是广泛用于卫星发射,飞机导航等不允许出错的领域。其实,就算是仅仅用于让你给女朋友或男朋友发一封情义绵绵的e-mail,只怕你也不希望它出什么差错。

尽管模拟的手段是一种信号转换为另一信号时几乎是不可避免的最初方法,但我们要求有进一步的转换来或得可以精确复制,从而更利于存储,传播的信号。

当你将一首存在磁带式唱片上歌不停地录到别的唱片时,歌声会越来越变调。同样操作进行在数字信号的CD唱片,歌声却完全一致。

模拟信号转换成数字信号和其反方向的转换是如何实现,不是一章的文字能说清。也不是我们学习的重点。我们只需记住以下内容:

1、首先:模拟信号英文为:analog signals 缩写AS;数字信号为:digital signals/DS;因此,前者到后者的转换称为AD转换,另一方向则称为DA转换。在各种计算机系统(特别是工业控制)中,AD转换往往是采集数据的初始端,而DA则是播放数据的最终端。

2、第二就更简单。以下是两张示意图,分别为模拟和数字信号的波形图。你需要能认出二者。

像心电图一样的锯齿波是模拟信号典型的波样,比如我们的声音。而方形波则为数字信号。

(笔者用画笔毛糙地画成,不像样之处尚望各位包涵。)

 

面对左图的锯齿波。我们也就明白了为什么人生和生活会那么复杂。因为人类的原始的现实的生活中,各种信号几乎都是模拟的。不仅仅是声音,不仅仅是我们的心跳的规律,更包括我们的感情,都是“模拟信号”。你看“情绪化”一词又总是用来代表不稳定的,非理智的……和生活相比,编程世界是那么的简单。它0就是就0,1就是1,正所谓爱恨分明……似乎有些跑题,不过接来的另一段“面对”倒很重要,请认真看。

面对方形波,回忆第一章我们说过的二进制:二进制数只用0、1两个数字。方形波最适合于二进制表示。凸起的用1表示,凹下的用0表示。所以现在你可明白:在计算机的世界里,所有信息最终都被数字化为0和1,这是一种最彻底的数字化。譬如在我们已熟悉的数据存储方面:硬盘和软盘都为磁盘,它通过有盘上某一点有无磁性来表示1或0;而光盘,它盘面上会有连续的凸起颗粒,和间隔的平面。当激光头的射线进入前者时,光被散射,这些连续的点用于表示一个0,当光线照在平面区时,光被反射,则可表示1。(如下图)

(由于这种数字化的实现大多数通过电子电路,所以,一些场合数字化也被称为电子化)

至此,让我们再重复一遍在第一章我们说是严重跑题的那段话:

世界就是这样奇妙。万事万物五彩缤纷,但进了计算机,却只是个0和1的组合。不由得你会想起道教的古老玄机:“无极生太极,太极生两仪,两仪生四象,四象生八卦,八卦生十六爻”。

3.3 I/O设备,存储器、处理器

计算机系统中,硬盘、软盘/软驱、光盘/光驱等称为存储器。它们用来存储信息,这些信息在它们的内部统统以0和1表示。

如果只有这些,那计算机就只能叫数据仓库了。有了数据还需要处理数据的能力。

数据和处理。依笔者的理论,这是程序的全部,计算机的全部,也是世界的全部。反过来说,正因为整个世界都可以用数据和处理来表达,所以最终程序才有可能实现对现实问题的解决。

当我们在写程序时,就是在用程序来表达这个世界。当然,由于很多数据没法实现“数字化”,所以它们永远无法用程序来表达,比如人类的感情,或许永远只能是“模拟信号”。(基于此,所有科幻片中关于有一天计算机会突然具有自已的意识,并开始以人类为敌的设想,我们可以断定它也就只能是幻想——永远都是。)

 

计算机系统中,键盘,鼠标,扫描仪,数码相机等,可称为输入(Input)设备。

显示器,打印机,称为输出(Output)设备。

这二者统称为输入输出设备,也就是计算机英文中常见的那个缩写:IO或I/O。

 

输入设备用来做什么?用来向计算机输入信息,这过程便有非常多的“模拟->数字”转换器。而输出设备,则将处理后的的信息以合适的格式输出(一般是为了输出给人看)。下面我们用我们最熟悉不过的鼠标来说明。

第一,鼠标的输入端是什么呢?

答:是我们手里握着的那个类似老鼠的东西。

 

第二,鼠标的输入端要处理的是什么信息呢(换一种问法是:鼠标要输入什么信息)?

答:是我们胳膊肘的来回挪动(这里暂不说单击,双击等)。可别说胳膊肘的动作不是信息——那样说可真外行——包括挪动的方向,距离,速度等。

 

第三,胳膊肘的动作是“模拟信号”还是“数字信号”呢?

答:只要你的手是肉长的,那么就只能是模拟信号。

 

第四,胳膊肘的动作是如何被采集,又如何传输入进电脑,又如何被处理,又如何变成一个光标在屏幕上跑来跑去,有时候还会变成一只小手……

 

答:@ # ¥ % # ? !

关于鼠标的具体工作过程已经不是我能回答的了,也不是我们要学习的内容。不过如你很穷,和我一样用的是10来块的机械式鼠标,那么恭喜你,你可以亲自“解剖”一下鼠标,观察鼠标里头的“模数转换器”。方法是把鼠标背过来,揭掉合格证(提醒,揭掉后你的鼠标可能无法保修了),拧掉螺丝,打开上盖,会发现内有滚轮,水平向滚轴,垂直向滚轴,辅助压轮各一,组成一套采集设置,看看你就明白它们是如何配合工作,完成采集你胳膊肘的挪动的信息了。

最后在合上盖时,顺便将滚轴上的积泥刮掉,它们严重影响数据采集的精度。

 

说完存储设备和I/O设备,重要人物也要该出场了。它就是电脑的心脏:CPU。

 

CPU何许人也?Central Processor Unit。即:中央处理器。中央并不是说它正好在机箱内正中间,而是说它是核心人物,其实你显卡声卡等也有芯片在处理一些数据。但大都数数据,比如鼠标采集到信息后,便需要送到CPU中进行复杂的计算,最终才能输出。

CPU便是这样一个人物,它要处理几乎所有计算系统中的数据。它的重要性得就像是大脑之于人体。把它说成是心脏真是个混淆视听的比喻。

CPU又是如何处理数据的呢?大千世界中的数据(当我们偏向于专业时,我们就将信息说成是数据)各类各样,极其复杂;同样的,对种种数据的处理也相当复杂。比如给你一个苹果你的处理是吃掉,而女友把她的手给你时她的意思是要你牵着,如果你把后者等同于前者进行同样的处理……后果……

Intel或AMD生产的CPU如何先进,终究是个东西,怎能自已决定如何处理各种数据呢?

有数据:钢板拴着一个螺丝钉,

有处理数据的能力:工具箱中一把螺丝刀。

一只狗和一只猪从二者前面走过,它们不知用后者把前者拧下。因为马克思说了,只有人类才会制造和利用工具。

CPU也只是一个工具。尽管它有处理各数据的能力,但必须由人来控制它:什么时候,什么方法,计算什么样的数据。这样的工具并不仅有CPU,早在你我童年时爱不释手的,会自已摇摆走路的玩具小鸭内,那个发条就是这种工具。通过既定的设计,发条具有把人拧紧的能量存储,然后释放,一点点控制其它齿轮,小鸭的脚,最终让玩具小鸭如人所愿地走。

 

发条处理数据的动作很简单,只须一点展开就行。但是如果没有人事先将其拧紧,它一样动不了。CPU要处理的数据复杂,处理的方法更复杂。同样,必须有事先将计算机处理数据的方法存储在上述的存储器上,在要开始处理时,装上这些方法,然后开始执行。

一切重要概念至此呼之欲出:

 

人不是普通的人,是伟大的程序员(当然当然,各行各业除了中国电信以外的从事者都很伟大);

 

计算机处理数据的方法,便是:程序!程序!!程序!!

《超级解霸》是什么?是音频视频播放软件,但归根是处理多媒体数据的程序。《金山毒霸》是什么?是杀毒软件,但归根是对付病毒数据的程序;《句神英语2002》是什么?是英语教育软件,但归根是辅助你自学英语口语的程序。Windows或Linux是什么?是操作系统软件,不过其实它们也是程序:管理所有其它程序的程序。

 

下一节,我们讲计算机内存,内存也是存储器,但它是一种特殊的存储器。

 

3.4 内存

有外存吗?软盘,光盘这些放在外面的存储器就是外存啊——真不明白这算是什么知识,但各种考试似乎兴趣这些。硬盘有可以放里头的也有可以放外头的,不知怎么算。

对内存要弄明白的第一件是事是:为什么要有内存?听我做一个不负任何责任的预言:10年之内,高速硬盘和高速外部总线的发展,但得计算机可在硬盘上固定划块分区作为内存。如此这般,以后关机时不用使用Win2000或XP的休眠功能,更不必像普通关机那样听硬盘卡卡响半天,一个关机命下,机器迅速关掉,妙哉。

 

程序和数据平常存储在硬盘等存储器上,不管你开机或关机了,它们都是存在的,不会丢失。硬盘可以存储的东西很多,但其传输数据的速度较慢。所以需要运行程序或打开数据时,这些数据必须从硬盘等存储器上先传到另一种容量小但速度快得多的存储器,之后才送入CPU进行执行处理。这中间的存储器就是内存。

 

无论何种存储器,软盘、硬盘、光盘或者内存,都有地址。因为它们要存储数据,所以就必须按一定的单位的数据分配一个地址。有了地址,程序才能找到这些数据。这很好理解,想想你们家为什么要有门牌号即可。

学习编程,必须对内存的地址有一个透彻的理解。我们编程中的每一行代码,代码中用到的每个数据,都需要在内存上有其映射地址。当然,我们并不需要掌握内存是如何进行编址,那是计算机系中的另外一门课:操作系统的事了。

下面,我将旧课程中的有关内存的一段内存拷到这里。

3.4.1 内存地址

“你叫丁小明吧?”

“是的。”

“噢,你记得你的姓名,那么请告诉我你把你的姓名记在你的脑海中的哪一个位置呢?在你记着你的姓名信息的下一个位置,你记着什么?上一个位置呢?”

“啊!这我不知道。”

“你骗我!既然你记着你的姓名,你怎么会不知道把它记在哪儿呢?”计算机生气说。

是啊,依靠现在的科技力量,我们无法得知自已把一个数据记在脑海里的哪个脑细胞里。这也是人的记忆状态无法数据化的原因。计算机就不一样的,我们说过,它是什么都数字化了。所以它知道自已把一个数据,一条命令记到了内存中的哪个(些)位置。每一个位置都有编号,就像编了门牌号一样。如果让计算机在内存里记住“丁小明”这个名字,可以示意为:

1000H

1001H

1002H

1003H

1004H

1005H

在第一行中,每一格表示一段内存,而格子里的内容是这段内容记下的数据;第二行中每一格内数字就是对应的内存的地址。至于为什么数字后面跟了一个字母H ,那是为了表示这是一个16进制的数。什么是16进制的数,大家现在可以不管。只要把它想成和上一节我们所讲的2进制一样即可:长有16个指头的人订出来的数。从0一直数到15,到了16才往高位进1。

可能有人会啄磨:为什么一个“丁”字(“小”“明”两字也一样)占用两个内存地址呢?这是因为汉字在一个地址(位置)里呆不下,必须放在连续的两个地址空间内。

那么,什么东西可以放在单独的一个内存地址里呢?像英文的里字母,比如’A’, 像阿拉伯数字:比如’1’,可以,而且就是放在一个内存地址里。假设有一字符串“ABC”,被记在内存里,可示意为(这次我们假设从内存地址2000H处记起):

A

B

C

2000H

2001H

2002H

现在我们提几个问题:

计算机记住”丁”字的内存地址是多少? 答案是:1000H。请见上图

在计算机记住”丁”字的内存地址后移两个最小内存地址单位,计算机记住的是哪个字:答案是:”小”。因为 1000H+2=1002H。

请同学自己对图1.3作类似的问答。

如果不再往下讲一点点,可能会使关于内存地址的这一讲的有些内容和第1章中有关2进制语言的内容看起有矛盾。

我们一直在说,在计算机中,所有信息都被数字化为2进制的0、1,所以,“丁小明”这个名字被也应该是一串:0001 0010 0111 0101……,可是在中图所画出的,计算机内存里记的,仍是“丁小明”三个字啊。

 

下面是解释,我们只举一个字”丁”讲解。我们假设在那一串里的 0001 0010 0111 0101 对应的是 “丁” 字,那么有:

0

0

0

1

0

0

1

0

0

1

1

1

0

1

0

1

1000H

1001H

让我们把字母’A’对应的图也画出来:

A

0

1

0

0

0

0

0

1

1000H

 

在上面的两个图中:

第一行分别是“丁”和“A”,它是给人看的。

第二行则是一串的的0和1,这才是计算机内存中实际存储的数据。

第三行是内存的地址。并不是每个0和1所占的位置都被编上地址。而是每8个才拥有一个地址。

关于第三行,你可以这样理解,门牌号是一个家庭分配一个,每家每户内还有客厅卧室,这些就没有地址了。

 

可见:

‘丁’的确是由一串0、1组成的。更确切地,从图上可以看出‘丁’是由160和1组成。这16数都存放在2个内存地址里。

‘A’也一样,它是由80、1组成的。占1个内存地址。

 

位: 一个0或1称为一位(bit);

字节:连续八位称为一个字节(Byte);字节是计算机中可单独处理的最小单位。

 

用上的两个单位来表达上面的图,便是:

汉字如“丁”,在内存中,占两个字节(Byte),共16位(Bit)。

英文字母如 ‘A’在内存中,占1个字节,8位。

(这里说的是内存,其实在其它存储器中,所占空间是一致的)

 

公式 :1 字节(Byte) = 8位(bit)

3.4.2 虚拟内存

程序和数据必须装入内存,这就必须面对内存不足的问题。这一问题有许多解决措施,其中很重要的措施就是使用虚拟内存。而所谓的虚拟内存,其实就是硬盘。

打开一个Word写文章,再打开几个IE浏览网页;后台还有FlashGet在默默地为你下载网上文件。很快你就会觉得的机器反应变得慢了。为什么?因为程序本身和程序所使用的数据太大,物理内存(真实内存)已经不足,系统采用了大量的硬盘空间来模拟内存。上节说过,硬盘虽大,但其(传输、查找)速度比物理内存慢一个数量级,所以整个系统速度就变慢了。

在DOS的编程时代,程序必须自已实现虚拟内存,或者采用第三方程序。而在Windows时代,虚拟内存机制由操作系统来实现。所以在本节,我们只需知道,虽然理论上程序在运行时必须装载入内存,但这内存并不一定全是真正的内存,很大一部分,其实是在使用虚拟内存。当然,在Windows下,程序员无须去考虑自已的程序什么时候使用物理内存,什么时候使用虚拟内存。

操作系统设置了最大可以使用多少虚拟内存?现在正在使用多少虚拟内存,这一些都有工具可以查看到。现在让我们用最方便的方法来看看第一个问题。

Windows95/98/Me:

请在您的电脑桌面上找到“我的电脑”图标,点击鼠标右键,在弹出的右键菜单里选“属性”,然后在弹出的“系统属性”对话框里选“性能”这一页,就可以看到右下角的“虚拟内存”按钮,点击后便可看到Windows对我们所讲的“虚拟内存”的设置。

Windows XP/2000:

在开始菜单中找到“我的电脑”,点击鼠标右键,在弹出的右键菜单里选“属性”,然后在弹出的“系统属性”对话框里选“高级”选项页,点其中“性能”组内的“设置”按钮。出现“性能选项”对话框。选“高级”选项页,底部有“虚拟内存”组。你可以从中看到有多少MB的硬盘空间允许Windows拿来当虚拟内存。如何想修改或查看更多信息,可点“更改”按钮。建议采用系统默认值,不要修改。

[wangjy17908]
添加时间:2008-04-12
版权所有(C)2005-2015