赞
踩
你需要有一定的电学知识,然后就可以去看模拟电路和数字电路相关的书籍了,了解完这两个东西后你就能基本明白计算机是怎么运作起来的了。这里只做简单回答。简单回答的意思是说,这个回答旨在让完全没有基础的人从理念上了解计算机如何运作----针对这一原则,答主会一切围绕通俗易懂来展开,因此在某些学术细节上或许有错。
读懂此答案需要具备的能力:
初中电学和数学知识 + 二进制的基本知识。
对于掌握了初中数学知识的朋友来说,大致了解二进制是很简单的,在这里做个简单介绍:
我们知道十进制是最常见的数制,它有十个数字0-9。二进制也同理,只不过二进制是两个数字。因此十进制里的“逢十进一”在二进制中变成了“逢二进一”。
十进制数数:1 2 3 4 5 6 7 8 9 10 11 12 ...
二进制数数:1 10 11 100 101 110 111 1000 1001 ...
正文:
1)半导体的发现。人类有一天被上帝丢下来的硅不小心砸到了脑袋,于是乎发现了半导体。用半导体材料可以制成二极管。
二极管的原理:给半导体材料里掺入某种元素后,半导体会这样:我讨厌电子;而给半导体掺入另外一种元素后,半导体会这样:我喜欢电子。我们把一个讨厌电子的半导体和一个喜欢电子的半导体放在一起的时候,在它们之间就会形成一个电子趋向的力量(半导体毕竟不是导体,半导体的原子核对电子的束缚力是足够大的,因此虽然有趋向,但不足以让一侧的电子跑到另一侧 --- 这也就是为什么它叫做“半导体”),这就是一个二极管了。当二极管外部有电流通过的时候,如果外部电流内的电子的运动方向顺从了其内部的这种电子的趋向,则这个二极管可以视为接通的导线;而如果外部电流的电子运动方向和二极管内部的电子方向相反的时候,外部电流就无法通过这个二极管(除非加了很高的反向电压 ----- 这样就会将二极管击穿 ---- 当然我们在使用二极管时不会让它被击穿因此这里无需考虑这种情况),此时这个二极管可以视为断路。所以在二极管的电路里,根据二极管两端的电压的高低的不同,就能测出某些电阻两端的电压有不同的数值:高或者低(具体看下面的4)。
2)数学上有二进制:0和1。由于只有两个数字,因此恰好可以和上面的高低电压一一对应起来。比如我们可以规定:1表示高电压0表示低电压。
3)就像四则运算中的加减乘除一样,对于二进制我们有配套的逻辑运算:与、或、非。
与:
0与0=0
1与0=0
0与1=0
1与1=1
一句话描述:“只要有0结果就是0”。
或:
0或0=0
1或0=1
0或1=1
1或1=1
一句话描述:“只要有1结果就是1”。
非:
非0=1
非1=0
还有其他逻辑运算比如同或、异或等就不一一列举了;总之基础的逻辑运算就这三个。
4)把123联系起来,人类做出了:与门电路、或门电路、非门电路、异或电路等。
注:
上图中最上面的唯一一个没有被字母标记的结点在这里记为:C
A、B和C都可以加上一定的电压;Y为测量端;DA与DB为二极管;C下面的矩形为电阻。
这是一个与门电路,有初中电学知识就应该可以看懂。大概很简单地解释下(其实不太对但是不影响你从原理上理解):
当A和B中任意一端是0V(可以理解为接地)而C端有一定的电压时(中学生理解方式:用导线将AB两点连接在一起后再连接到直流电源的负极,C点接正极),测量Y端电压(Y与大地间的电压或者说Y与0间的电压)几乎是0V。这是因为AB中至少有一个是0V且二极管的方向是那个样子的,所以电流从C端流入、通过那个电阻后从0V那里流入大地/回到负极了,因此此时测量Y端电压等于在测量一个导通的电路中的一段导线上的电压,所以很显然几乎是0V。而如果AB端电压都比较高(高于C端的电压但是没有到击穿的地步)的时候(中学生理解方式:用导线将AB两点连接在一起后再连接到直流电源的正极,C点接负极),两个二极管都等效于断路状态,电流试图从AB端流向右边(因为AB端电压高于C端电压因此电流的趋向是从AB流向C)但是流不过去,所以此时测量Y端电压的时候就不是0V了而是有一定的数值。
因此,在这个电路中,只有当AB两端同时有高电压时,Y端才有电压(大于0V);AB中只要有一个是0V,Y端就是0V。当我们把AB两端视为输入Y端视为输出时,就可以得到和上面的“与运算”相对应的结果(设高电压=1 低电压=0):只有输入都是1的时候输出才是1,其他时候都是0。这就是一个与门电路。同理,也有类似的或门电路等等。
5)有了这些门,就可以做半加器了,有了半加器就能做全加器,它的作用是实现加法。同理,可以实现四则运算了(如何用这些门实现四则运算,这里不细说,否则就违背了“通俗易懂”的原则。但这样的跨度有点大,因此后面的BONUS里有介绍这部分内容)。到了这里,理论上只要我给你相关的材料,你就可以做出一个有一定功能的电路了。比如你可以做一个:输入三个数字,把前两个数字相加的结果乘以第三个数字然后输出结果。
比如,你输入“高低低高”给一个电路,然后这个电路给你输出“高低高低”。如果我们之前已经规定了高电压表示1、低电压表示0,即:1001为输入,1010为输出,显然,这就是做了一个加1的运算。
当然,由于你电路里的所有门电路都是盯死在线路板上的,所以你的这个电路永远只能做这一件事。然后你就可以做一个专门卖这种功能电路板的硬件生产商了。像计算机里的那些固定在硬件上的指令,就是这么来的。所谓硬件上的那些指令,就是:你输入某些数字,硬件就做相关运算,然后输出结果。
很多朋友会在这里产生一个困惑(这个困惑甚至困扰着很多计算机专业的学生):你说用1表示高电压0表示低电压,那我怎么告诉电路这里是高电压或者低电压、电路又是怎么告诉我那里是高电压或者低电压呢?
本质上,这个问题是在问:电路和人如何交流,或者说是在问电路的输入输出设备是什么。
到目前为止,我们所需要用到的输入输出设备其实非常简单:输入设备就是一个个的开关 --- 开关接通则给电路输入高电压开关断开则给电路输入低电压;输出设备则是一个个的发光二极管或者简单理解为“灯泡” --- “灯泡”亮则表示电路输出了高电压“灯泡”不亮则表示电路输出了低电压。有了这样的输入输出设备,你就可以这样做了:通过控制一系列开关的状态,给电路输入高电压和低电压(即0和1);而后通过观察一系列“灯泡”的状态,来得到电路输出的结果。
6)逻辑完备性。这个世界中的万事万物都可以用三种顺序来表示出来:顺序、选择和循环。完备的意思就是说某个理论系统可以涵盖所有的情况,没有例外。
注:以下两个斜杠后面的部分属于注释,负责解释说明本行做了什么。
顺序:从第一行到第二行再从第二行到第三行......(就像你看文章一样,一行一行地看)
- 第一行:a = 1 // 告诉计算机:有一个值的名字是a,它的大小是1
- 第二行:b = 2
- 第三行:计算并显示(a + b)
- // 逐行执行:第一行 ---> 第二行 ---> 第三行......
选择:如果某个条件满足(比如x<y)就到第p行;如果不满足(比如x>=y)就到第q行
- 第一行:a = 1
- 第二行:b = 用户输入
- 第三行:如果(a < b)
- 第四行:显示(用户输入小于a)
- 第五行:如果(a > b)
- 第六行:显示(用户输入大于a)
- 第七行:如果(a = b) // 注意这里的等于号和第一行的等于号作用不同,这里是在判断a与b是否相等
- 第八行:显示(用户输入等于a)
- // 还是逐行执行,但第四行、第六行和第八行中只有一行会被执行
循环:如果某个条件不满足/满足(比如a<x)就到第p行,什么时候该条件满足/不满足了(比如a>=x)了就到第q行
- 第一行:a = 0
- 第二行:b = 10
- 第三行:语句标签(label): c = a, a = c + 1 // 把c设置成a 然后把a设置成c+1
- 第四行:如果(a < b)
- 第五行:执行标签:label // 跳到被label标记的那一行去执行,也就是第三行
- 第六行:显示(a)
- // 还是逐行执行,但从第三行到第五行会不断反复执行:第三行 ---> 第四行 ---> 第五行 ---> 第三行......直至a不再小于b --- 即第四行的条件不满足了,就会执行第六行
用这三个可以表示世间万物。
比如:你上楼梯回家:
a---打开楼门,面前出现一个10个台阶的楼梯
b---循环做登楼梯的动作直到做了10次
c---如果面对的是你家,开门,到e;如果不是,向右转
d---如果到家了,到e;否则,到c
e---结束
7)图灵机。图灵机简单来说就是一个能接受信息、处理信息和发出信息的虚构的机器。世间万物皆为图灵机。
比如,一个杯子放在一张桌子上:
输入:杯子
图灵机:桌子
输出:支持杯子或者说杯子没有掉下去
再比如,我对你说谢谢你回复我说不客气:
输入:谢谢
图灵机:你
输出:不客气
再比如6中的那个回家的例子:
输入:十个台阶的楼梯
图灵机:你
输出:重复十次登楼梯动作
当然,你这个图灵机在对信息的处理上远远比一张桌子要复杂得多:
如果 (十个台阶上面是你家 而且 你面对着台阶)
那么 (循环十次登楼梯动作)
当然,你不会是如此简单的一个图灵机。你还会这样:
在登楼梯过程中,如果有人通过你的耳朵给你输入:儿子别回家了,咱们到外面吃饭。
你这个图灵机就会立刻优先对这个新的输入进行处理而会将登楼梯的动作挂起(挂起的意思就是暂时不执行)
你会这样:
如果(声音是你爸或者你妈的)
那么(转身下楼梯)
否则 // 就是说声音不是你爸也不是你妈的
那么(唤醒刚才挂起的登楼梯的动作继续做)
回到家后,你这个图灵机会从你大脑里调出晚上要做的事情:写作业、看电视、睡觉
然后你会给这些任务排列一个优先级:比如写作业是1,看电视是2,睡觉是3。(坏孩子的任务优先序列可能是:看电视1,写作业2,睡觉3---小朋友们不要学哟)
你会根据哪个优先级更高来选择先做哪一个。
当然,远没有这么简单。比如:
如果(你正在做1 而且 时间已经12点了)
那么 (你决定停止1,直接做3,同时准备好明天给你们老师的输出 --- 跟他解释你为什么没写完作业)
......
......
......
所以人是一个非常非常非常非常复杂的图灵机。由于现在的5那里的硬件落后得和渣一样,所以人类目前根本无法用电路去模拟一个真人 。即使硬件发达到可以模拟真人了,那么依然也只是模拟。人类最大的本领:学习,只靠发达的硬件还是无法做到。所以人类到底能不能真的用电路去实现一个真正的人类的大脑,这是一个悬而未决的问题,有的人认为可以,有的认为不可以。
6+7:这个宇宙中的一切,都可以抽象成图灵机;这个世界上的所有事件,都可以用那三种逻辑来表示。 而用上面的5中的内容,可以在电路上实现6+7。只要电路的速度越来越快,我们就能实现越来越复杂的6+7。 图灵机,只是一个概念上的虚拟的机器。而人类可以通过各种手段去实现各式各样的图灵机:人类制造的机器,是图灵机;人类盖的楼房,是图灵机;哪怕人类生了一个婴儿,那个婴儿也是一个图灵机。计算机,只是众多图灵机中的一种。只要一个图灵机具备了6中所说的三种顺序的逻辑能力,那么这个图灵机理论上来说就可以模拟宇宙万物了。
比如在5)那里的那个做加1运算的“东西”-----其实那就是一台计算机。只不过它的输入是一个个的开关,而不是键盘和鼠标;它的输出是一个发光二极管闪了几下,而不是显示器和打印机。一个遥控器、一个手机、一个红白机,都是计算机、都是图灵机。
8)在半导体的基础上,如果加入一些其他化学元素(具体请去看模拟电路的书),就可以让半导体的状态变得“可擦除”和“可记忆”:比如上次这里是断路半导体状态、现在我可以改成连通的。我给一个电路板接通电路,然后给它某些输入、改变了里面的某些半导体的状态,然后断开电路,由于这种半导体是可记忆的,所以它里面的每个门电路都是你断电之前的状态,下次再接上电源的时候,就能读出上次的状态---这样就可以存储数据了。
9)振荡器。高中物理会学振荡回路。就是电磁一直相互转化而形成振荡,就和广播的道理一样。振荡的频率是固定的,比如每秒震荡100次,每振荡一次,就发射出一个电压信号。然后cpu每接收到一次电压信号,就去读一条指令(看6,类似这样:如果收到了电压信号,则执行***。当然还要有外来的用户输入,比如如果用户输入了1,同时接收到了电压信号,则执行a;如果没有用户输入,则执行b;如果用户第一次输入0第二次输入1,则执行c......)-----指令就是根据5那里被硬件生产商固定在硬件里的半导体的通断状态。一般你买电脑的时候都有个内存频率,单位都是MHz,表示一秒钟这个内存里的振荡器可以发送多少百万次信号。
到了这里,你就可以做出一个能处理四则运算和拉丁字母(拉丁字母可以和数字一一对应起来)的电路板了。
10)卷积定理+(离散)傅立叶变换+采样。大学数学基础课会学傅立叶变换,数学专业的某个方向会学卷积定理。你不需要知道它们是什么东西,你只需要这三个东西合起来能做这样一件事:
真实世界的信息转换成连续信号、连续信号转换成数字信号。
虽然我们永远不能把真实世界的信息零误差地转换为数字信号,但是可以无限逼近。由于人类太弱了感官系统太不敏感了,所以只要差不多逼近一点人是根本察觉不出来的。世界上有无数种红色,但计算机只要提供256种红色,人就以为能表示所有的红色了。
自此,你就可以做一个能处理数字、文字、声音和图像的机器了。
简单来说,只要能被转化成数字的信号,就都可以被计算机处理。
比如我们要处理256种颜色,那么我们只要把这些数字和1-256这些数字一一对应起来,那么当计算机要处理第一种颜色时,它只需要对数字1进行处理即可;当计算机处理完毕后,我们再把处理后的数字转换回它对应的颜色即可。这个过程就像是电话的原理:声波转换成电磁信号电磁信号最后又转换回声波。
11)荧光物质可以在受到不同能量的电子的轰击下发出不同的颜色,根据三原色原理,我们可以通过对电子加压的控制达到显示不同颜色的目的---------------------显示器。
12)键盘底下有一张导电的纸,你按下某个键,就等于接通了某些电路,就有一个独一无二的输出,你只要事先规定好哪种输出对应哪个键,主机就能够知道你按下了某个键了。比如规定“高低高高低低高高低”是K,那么主机只要从键盘那里接收到了101100110就知道用户按下了K。
鼠标:鼠标下面的光源发射器会向桌子发光,还有个光的接收器。当你移动鼠标时,接收器可以感知到发射器发出的光反射回来时的入射角和方向的不同变化,然后就可以以不同电信号的方式告诉主机鼠标在向着那个方向移动;鼠标点击的原理和键盘类似,不再赘述。
把制作上面所有物件的材料都买齐了,然后你就能自己攒一个计算机出来了.............Good luck!
====================================================================
上面说的这些其实非常粗浅,想知道完备的系统的知识请在上大学时报考计算机或通信专业: 通信就是把信息从自然界里捕捉到然后再转化成易处理的信息然后再通过各种方法传输最后到了信息处理的终端:计算机 这里。计算机处理信息后再把信息通过各种各样的方式传递出来。
=========================== BONUS ==========================
关于6:逻辑完备性。
如上所述,逻辑的完备性靠三种逻辑顺序实现:顺序、选择和循环。
用这三种逻辑顺序可以解决问题,比如上面7中的“回家”。这里再举一例:
计算从1到100的所有奇数的和。
- a = 1
- result = 0
- 语句标签(label):
- 如果(a > 100)
- 那么(执行label2)
- 如果(a除以2的余数不等于0) // 说明a是奇数
- 那么(result = result + a) // 把result和a相加的结果赋值给result
- a = a + 1
- 执行标签:label
- 语句标签(label2):显示(result)
- 程序结束
上面这个例子中把三种逻辑顺序已经都涉及到了。
依照这三种逻辑来描述世间的一切问题,可以把问题分为三类:
1)不可解决的问题。
虽然前面说了,用这三种逻辑顺序可以表示一切事物但是这并不意味着可以解决一切问题。
举个例子:
显示自己本身的所有代码。
什么意思呢?就是说你写一段程序,这段程序要把自己所有的代码都显示出来。
乍一看觉得这很简单啊,但其实你连一行都显示不了。
比如有这样一个程序,就一行:
显示(100)
这个程序就做一件事情:显示数字100。
问题来了,你如何把“显示(100)”这两个汉字一组括号和一个数字100显示出来呢?
似乎应该这样:
显示(显示(100))
但是其实当你这样做的时候,你已经改变了程序本身,现在的程序为两个“显示”两组括号和一个100,而你运行程序后只能显示一个“显示”一组括号和一个100,很显然你并没有把这个程序全部显示出来。
类似这样的问题,就是计算机无法解决的问题。(有兴趣的朋友可自行百度:停机问题)
2)能够在人类可以容忍的限度内解决的问题。
比如上面的那个“计算1到100内的奇数的和”的问题就是这类问题。解决这类问题所需要的时间的变化是线性变化的。即:“计算1到1000内的奇数的和”所需要的时间是“计算1到100内的奇数的和”的10倍。也就是说问题扩大多少,解决问题所需要的时间就线性地扩大多少。
3)无法在人类可以容忍的限度内解决的问题。
这类问题是计算机或者说用这三种逻辑顺序可以解决的、但是所需要的时间是人类无法容忍的。
比如“背包问题”:
一个小偷去博物馆偷东西。博物馆内有3件物品。
第一件物品的重量为3, 价值为4;
第一件物品的重量为2, 价值为3;
第一件物品的重量为4, 价值为5;
小偷的背包最多可以承受的重量为7。请问:应该如何拿物品,可以让背包里的物品总价值最大。
这个问题似乎非常简单,你在稍微比较后就会得出结论:拿第一件和第三件物品。
但是,如果我们扩大一下问题:如果有6件物品、背包可以承受的重量也提高一些,应该怎么拿?
这个时候如果让计算机去解决这个问题,我们就会发现当问题的规模扩大1倍后,计算机所需要的时间却扩大了远不止1倍 ----- 即解决问题所需时间不再是线性变化了。
就拿这个问题来说,如果物品数量超过12个(如果我没记错就是12个,反正这个数字很小),那么计算机要想解决这个问题所需要的时间就已经超过了100年。
上面的第三类问题,是今天人类在数学和计算机领域的难题,如果大家有兴趣可以了解一下。(自行百度:P问题 NP问题 NPC问题)
======================== BONUS2 =========================
关于8:存储器类型。
8中所涉及的存储器,其实只是硬盘、U盘等存储器的原理。这类存储器的特点是:存放在其中的数据断电后仍然存在,但读数据和写数据都非常慢。
而计算机在运行时会产生很多临时的数据,这些数据只是为当下正在运行的一些程序而服务的,使用计算机的用户并不关心这些数据。相应程序结束或者计算机断电后这些数据就没有存在的必要了。
比如有如下程序:
sum = 1 + 2
执行这一行的时候,计算机先计算等号右面的值 ---- 结果是3,然后把3存放在一个临时的地方,最后再把这个临时地方里的数值3赋值给sum。(为什么不能直接赋值给sum而要经过一个“临时的地方”:等号右侧的计算,必须在计算机内专门做计算工作的芯片 --- 也就是CPU内完成,完成计算后的结果只能保存在CPU的临时存储空间里,然后sum才能拿到这个值)这里的这个“临时存放的地方”,它只是为这个程序而暂时服务一下,过后就不再需要它了。于此同时,我们需要它的读写数据的速度要足够快。如果我们用硬盘来“临时存放这个3”,那么计算机执行这么一行代码也得需要好几秒因为计算机读写硬盘的速度是非常慢的。
因此我们还需要一种存储器:断电后数据不需要存在,但是读写数据的速度要够快。
这种存储器被称为寄存器。
寄存器是用触发器实现的而触发器是用上面的4中所提到的各种门实现的。
举一个最简单的例子:
其中,i为这个寄存器的输入,比如如果i是0(1),则表示希望该寄存器存储0(1);o为寄存器的输出,即该寄存器存储的值是多少;s的作用则是“告诉寄存器要工作了”,即当s为1时,寄存器会把i输入的值存储下来 ---- 也就是从o输出来。
另外,图中的1、2、3和4为与非门。
与门电路是:两个输入都为1时输出才为1,否则输出均为0。即只要输入有0输出就是0。
与非门电路是:两个输入都为1时输出才为0,否则输出均为1。即只要输入有0输出就是1。
容易想到,与非门电路就是与门电路的输出的地方再接一个非门电路而实现的。
假设某个时刻,s是1,i是0,则根据上述与非门的规则,我们可以的到如下结果:
s = 1 i = 0
a = 1 b = 0
c = 1 o = 0
然后,此时我们让s也变成0,同理,可以得出o还是0;再然后,我们让i等于1,得出o还是0。这也就意味着,该寄存器成功保存了当s为1时i的值 ---- 也就是0。
同样地,当s和i均为1时,o为1;随后让s为0、i为1和s为0、i为0时,o均为1。也就是说此时寄存器是保存了1(当然还是在s为1时i的值)。
这就是寄存器的大致原理 ---- 只要不要断电保持1、2、3和4的正常工作,那么输入即使消失了也会被电路保存下来。
当然,实际的电路要比这个复杂,有兴趣的朋友可以自行阅读相关资料。
======================= BONUS3 ======================
关于5:逻辑电路实现四则运算。
我们先来考虑如何实现一位数(二进制)加法。
0 + 0 = 0(无进位:进位为0)
1 + 0 = 1(无进位:进位为0)
0 + 1 = 1(无进位:进位为0)
1 + 1 = 0(有进位:进位为1)
于是问题转化成了:
如何用那些门电路,设计一个逻辑电路,实现上述等号左侧的两个数值为输入,等号右侧的内容为输出(显然,这里需要两个输出,一个是加法结果另一个是进位)?
经过分析不难发现,加法的特点是两个输入一致时结果为0,两个输入不一致时结果为1;同时,只有当两个输入均为1时,进位才为1,其他情况进位均为0。
很显然,进位是一个与门电路。而结果呢?则是一种叫异或的逻辑关系:相同为0相异为1。
异或门电路有多种实现方式,这里只举一例:只用与非门(BONUS2中已讲过)实现异或门电路:
到此,我们就可以实现上面的一位数的加法了:
AB为输入,S为加法的结果,C为进位。S的左侧为异或门,C的左侧为与门。
这就是一个半加器。
至于半加器如何做成全加器,这里就不谈了,无非就是把多个半加器串联起来。有兴趣的朋友请自行了解。
实现了加法,则可以实现减法,因为减法等效于“加负数”;也可以实现乘法,因为乘法可以转换成多次相加(例如,3 * 3等效于3 + 3 + 3);也可以实现除法,因为除法可以转换成多次相减(例如,7 / 2等效于7 - 2 - 2 - 2:一共减了3次且结果为1,因此7 / 2的结果为:商3余1)。
至此,四则运算全部实现。
最后只剩下了一个问题:如何实现负数。
以1和-1为例:
假设我们的加法器可以进行8位二进制的运算,我们用最高位表示符号位:0为正数1为负数。
则1为:00000001
-1为:10000001
但这样1 + (-1)的结果并不是0,而是10000010,也就是-2。
于是我们需要改变负数的表达方式:按位取反(除了符号位)。
注:我们叫最原始的表达方式为原码,按位取反后的表达方式为反码。正数的反码和原码一样,负数的反码则是原码按位取反后所得。
因此,-1 = (10000001)原 = (11111110)反。
此时,1 + (-1) = (00000001)反 + (11111110)反 = (11111111)反 = (10000000)原 = -0
但这样还有一个问题,就是0和-0的表达方式不同:
0为:00000000
而-0为:10000000
对负数的反码做进一步处理:加1,形成补码。(正数的补码仍然是原码本身)
1 + (-1) = (00000001)反 + (11111110)反 = (00000001)补 + (11111111)补 = (00000000)补 = (00000000)原 = 0
注:由于一共只能表示8位,所以最后溢出的进位被丢弃掉了。
说到这里,一定有朋友会说:
你别急!等一下!你说的这些原码反码补码都是理论,具体到电路中到底是如何实现的呢?
对于这样的问题我就不在这里做详细的解释了,因为它的原理和上面讲的门电路一样,无非就是通过不同的门电路的组合而形成一个复杂但有一定功能的“片子”罢了。(片子是行业黑话,高大上的说法是“芯片”)
以原码变反码为例,其实你可以自己设计一个片子,来实现:
输入是八个0或1,输出也是八个0或1。其中,当最左侧的输入为1时,则其他七位的数字全部取反输出;而如果最左侧的输入为0时,则八个数字全部原样输出。
在这里我仅以一位数字加上符号位(最左侧的位)来简单解释一下:
设符号位为A,输入为B,输出为C。容易得到如下的表(这个表叫真值表,是设计片子的重要手段)
- A B C
- 0 0 0
- 0 1 1
- 1 0 1
- 1 1 0
再重复一下:当符号位是0时,数字位原样输出;当符号位是1时,数字位取反输出。
观察真值表可得:当AB相等时C为0,AB不等时C为1。即,相同为0,相异为1 ---- 这就是一个异或门了。如何实现异或门上面已经说过了。可见,通过原码求出反码只需要用若干个异或门即可实现。
简单总结一下如何设计电路(这种和01打交道的电路叫做逻辑电路):
第一步:先分析需求,即你要输入什么、输出什么,根据输入和输出,做出真值表;
第二步:观察真值表,找到规律;
第三步:根据上面找到的规律,依据各种门电路的特点,完成逻辑电路的设计。
其中,第二步有的时候会非常复杂,难以一下子找到规律,如果不找规律就直接去设计逻辑电路,那么设计出来的逻辑电路会非常复杂。那么如何解决“找规律难”的问题呢?这就是大学里相关专业的数字电路课程的任务了......这里就不介绍了,如有兴趣,请自行百度:如何通过真值表写出逻辑表达式。我们设计逻辑电路其实就是根据逻辑表达式去做的,故只要确保逻辑表达式已经最简化,那么设计出来的逻辑电路就一定是最简单的。
以上,就实现了整数的四则运算,至于如何实现小数的运算,大同小异,只不过在计算机里是用科学计数法来表示的,在处理上会更加复杂。
====================== 什么是机器思维 =======================
问题一:如果要计算1加到100,应该怎么算呢?
人类:等差数列求和,有公式的:(1 + 100) * 100 / 2 = 5050
机器:愚蠢的人类啊,我们机器最大的长处就是“规律性地计算非常快”,所以我们不需要公式,只需要老老实实从1一直加到100就好了。
- a = 1
- result = 0
- 语句标签(label):
- 如果(a > 100)
- 那么(执行label2)
- a = a + 1
- 执行标签:label
- 语句标签(label2):显示(result)
- 程序结束
问题二:如何判断一个数字是否为偶数。
人类:用这个数字除以2,如果余数为0,则为偶数,否则为奇数。
机器:告诉你,人类,在我这里,/表示除法,%表示求余,我是不是很友好呀?
初级程序员:
- a = 用户输入
- result = a % 2
- 如果(result = 0)
- 那么(显示(您输入的数字为偶数))
- 否则
- 显示(您输入的数字为奇数)
- 程序结束
机器:呵呵哒,愚蠢的人类,看来即使是程序员也不能真正懂我们的感受!我好伤心,你们知道要我做求余运算需要花多大的力气吗......
高级程序员:
- a = 用户输入
- result = a & 1 // 按位与运算
- 如果(result = 0)
- 那么(显示(您输入的数字为偶数))
- 否则
- 显示(您输入的数字为奇数)
- 程序结束
注:按位与运算(与运算:0 & 0 = 0 1 & 0 = 0 & 1 = 0 1 & 1 = 1)
5 & 3 (十进制) = 101 & 011 (二进制) = 001 (二进制) = 1 (十进制)
奇数的二进制的最后一位一定是1,偶数的二进制的最后一位一定是0
机器:眼泪哗哗的!这种位运算我最喜欢啦,因为对我来说最省力最简单了,这样的程序员给我来一打!
最后,送给各位一个小程序:YvesZHI/FallingCode (非程序员请绕行)
体验一下类似“机器表示求余运算很累人”的问题。
总览
电脑看似复杂,其实硬件无非四种:CPU,内存,磁盘,输入输出设备,重要性依次递减。硬件之上,操作系统是一层,应用程序又一层。
一通电,CPU就会开始运行,从磁盘中将操作系统读取到内存中,CPU按时间顺序从内存中的操作系统里,读取指令执行之。
操作系统使CPU迅速地在许多进程中切换,以造成进程们在并发运行的假象。
进程的诞生是,将程序从磁盘载入内存,并分配内存空间用于储存数据,这装载程序的内存和储存数据的内存构成了进程的载体,等分配了CPU,进程即开始运行。
CPU的分配以优先级和时间片为准,让重要程度不同的各个进程并发运行。
用户的操作通过输入设备(或定时器)产生中断,操作系统的主循环会发现中断,并分配给适当的响应中断的程序。
程序的执行结果,体现在硬件的变化上,如输出设备给出画面或声音,让用户看到或听到。
操作系统
操作系统位于「底层硬件」和「应用程序」之间,向下管理硬件资源,向上提供高级接口。
在CPU的计算能力之上,操作系统提供了调度的能力,来运行进程、显示图画、响应事件。
进程
在物理实现上,每个进程都是内存中的一个局部,这个局部既放了程序代码,又提供了储存状态的场所。
这些局部被CPU轮流访问,形成并发的假象。这「轮流」并非让各进程盲目地平摊CPU时间,而是有主次之分。在CPU的轮流访问期间,进程也因而在创建、就绪、运行、阻塞、终止这五种状态间切换。
CPU的轮流访问根据「优先级」和「时间片」,优先级是每个程序有的一个数字,数字大小关系决定了优先级高低关系,优先级低的进程要把CPU让给优先级高的,时间片指一小段时间,当一个进程用完一个时间片,CPU就重新选择下个时间片该运行谁。
因为CPU的程序计数器和各种寄存器都只有一份,当CPU切换到另一个进程时,上一个进程就需要把「我执行到哪了」保存下来,存到自己的「进程上下文」中,下次CPU切换回来时,把状态装回给CPU,继续运行,就好像什么都没发生过。
在任务管理器里查看进程列表,我们最关心的是内存占用和CPU占用,正说明了进程是「内存的片段」与「CPU的分配」的结合体。
进程可能是无限循环,也可能不是。如果不是,则处理完事务即停止,如果是,则不断监听事件以响应。
内存管理
如果内存有限,程序需要的内存超过实际内存,则需要虚拟内存:将磁盘的一部分用作「虚拟内存」,把内存中暂时不执行的程序外放到「虚拟内存」中,腾出来地方来运行需要执行的程序,当外放的程序需要执行时再换回到内存中。
分给某个程序的内存局部,在物理上未必是连续的,而是将真实内存分为固定大小的页,程序使用其中的若干页。这样能更灵活地使用。
文件
只有磁盘能断电存储,CPU和内存都不行,而且磁盘存储空间远大于CPU和内存,因此全部程序和数据都保存在磁盘上。保存的方式就是文件。
文件的本质是磁盘上的局部。磁盘分配方式与内存类似,也是划分为若干大小相等的小单元,文件按需使用其中一些小单元。
把磁盘看做输入输出设备也无妨,毕竟它相对于CPU和内存,是「外人」,内存从磁盘读,属于「输入」,内存向磁盘写,属于「输出」。
反过来,把输入输出设备,看做文件,也无妨,反正内存都是要向它们读和写的,只是看待它们的视角的差别。
输入输出设备
电脑想有用,就要跟用户有交互,跟用户的交互,全靠输入输出设备。用户给电脑信息,就是输入,电脑给用户信息,就是输出。
你对显示器、键盘、鼠标,肯定比对CPU、内存、磁盘更熟悉,对吧?因为显示器它们是「在一线面向用户」的。
引申,像计算机一样高效地使用大脑
人在同一时间只能做一件事,一心多用都是伪并发,切换上下文有成本。
应该把多而不重要的知识存到「磁盘」里,即笔记本、收藏夹等处,待用时方载入「内存」即大脑里即可,以减轻记忆负担。
最常用的知识才有必要记住在「内存」里,这取用方便,减少每次都从「磁盘」载入的成本,这是缓存的价值所在。
写在后面
这一个月每天都在读《30天自制操作系统》,同时使用大学时教材《计算机组成原理》《计算机三级教程PC技术》《现代操作系统》做参考,来进行对计算机底层硬件、操作系统的学习和巩固。
作为应用程序员,编写的代码都处于太高层,以至于觉得技术含量太差,久了对自己就不满意。一直都想好好复习下基础,但总因辛苦而坚持不下来。
后来终于想明白,基础的巩固和复习,应该是一个非常长期的工作,一蹴而就的想法非常不现实。于是决定用四个月时间,分别巩固计算机组成原理、操作系统、网络、算法的知识。这第一个月,做的是学习计算机组成原理的工作,还顺带看了操作系统。
机箱一拆开,电路板和连线怪复杂神秘的,吓人,其实那都不重要。最重要的三样东西,CPU,内存,磁盘,体积都有限,形状也规整,第四重要的就是机箱外面的显示器、键盘、鼠标这些总称为输入输出设备的东西了。
CPU是「原动力」,就像四驱车上的电机,呜呜转着,很蠢很机械。但能动起来就是万岁。人们开动脑筋,通过齿轮、皮带等零件,让电机旋转的单调动作转为更有意义的动作。对CPU也是一样,既然它能读取指令,并忠实地执行之,那就好办了,只要我们把指令写出花来,电脑的功能就会丰富锦簇。就像刘邦和张良,既然张良说什么刘邦都言听计从,那虽然刘邦能力有限,但只要张良智计百出,一切就都有可能了。
当然,在地位上,张良是刘邦的下级。在计算机体系中,操作系统是硬件的上层,其实计算机体系里,越上层权限越小,上层能做的,下层全能做,下层能做的,上层能不能做?那要看下层高不高兴暴露出调用的接口。所以,最上层的应用程序员,其实是被勒定在一个非常逼仄局促的空间里跳舞,在某个「平台」之上,利用平台好心提供的API,来使出浑身解数实现功能。API越简洁好用,应用程序员越显得无脑,其实未必是程序员蠢,而是饭已经熟了,再巧的媳妇也只能做做把它盛到碗里这种没有技术含量的工作,这跟「巧妇难为无米之炊」恰好是反的,好比「一键刷机」,程序给力到这个程度,只负责按一下按钮的人,即使有很高水平,也显不出来了。
不过,越上层固然离硬件越远,但抽象层次越高,离具体业务是越近的。搭积木搭得好,未必就不如造积木造得好那个人光荣。毕竟,用户要的,还是一个完成品,比如用户要一个城堡,那光造出来积木还是不行,需要有人搭起来。这搭积木,就需要很多造积木的人用不到的知识,例如空间想象力、图纸绘制能力、让城堡稳固不倒的力学知识、色彩搭配知识等等。每个层次,都有每个层次需要的专业技能,但人的认知总是有局限的,倾向重视自己的技能,轻视别人的技能,来达到满意自己、鄙视他人的心理诉求,其实这还是「成绩单的思维」,是没必要的。
但有些知识是无论造积木,还是搭积木的人都需要的,这就是所谓「通用知识」,例如数学知识、英语知识等等,当然计算机基础知识也是,这样看来计算机考研的课程都很有意义,比想象中的合理多了。不过现在学习资源这么丰富,书籍、视频、官网等等,即使不考研也可以自学,差别还是在肯不肯用功上。
话题回到刘邦张良,力量当然都在刘邦手上,但因为刘邦对张良言听计从,张良指哪里,刘邦的力量就打向哪里,这跟力量都在张良手上也没什么区别了。硬件和操作系统的关系也正像如此,虽然操作系统是「被动的」,只负责定义指令,执行权在CPU手里,但CPU这么听话,看成操作系统实际掌了权也就可以了:明明只有内存、磁盘的「容器」,却能无中生有地给抽象出「进程」「地址空间」「文件」这些可用性极强的概念来,操作系统真是把CPU内存和硬盘玩出了花来。
不过,同一份操作系统要卖给全世界,全世界各种用户需要的功能,这操作系统不可能全都包含了,所以操作系统索性也放权,操作系统提供出来API,世界各地程序员可以利用这API开发自己的程序,操作系统就负责把这些程序载入内存里作为进程来跑,当用户有操作时,操作系统负责把这操作事件交给适当的进程来响应。应用程序员能立足的基本点,其实就是操作系统提供的API们,当然,操作系统提供的API还是很丰富的,只要用好了各种程序都能开发出来,否则这操作系统也卖不出去呀。
对计算机的理解,最终就是到这里,CPU提供主循环,操作系统在这主循环中运行,提供次级主循环,应用程序的进程又在次级主循环中运行,提供三级主循环,当用户有操作了,CPU把操作交给操作系统,操作系统再交给应用程序进程,应用程序进程的三级主循环得知了事件的到来,再把它分发给响应事件的函数来处理,这个函数来做具体该做的事,比如把数据写向某个地方,或者在界面上显示某些东西,这显示某些东西,在本质上,其实也是向显卡内存中写些东西。
计算机组成原理和操作系统的学习,就先到这里(以后会慢慢修正和补充),下个月来复习数据结构和算法的知识,感觉还是这好玩,我都等不及了,至于计算机网络,下下个月再学,对这知识实在不很感兴趣。那对算法感兴趣的朋友,下个月咱们再见。
《编码-隐匿在计算机软硬件背后的语言》
https://book.douban.com/subject/4822685/book.douban.com
《程序是怎样跑起来的》
https://book.douban.com/subject/26365491/book.douban.com
《编码的奥秘》
<3>
我们先构造一个模型,解决简单的计数问题:1+1等于多少呢?
下面,请伸开你粉嫩的小爪,伸出一个手指,对的,一个。好了,下面,再伸出一个手指,对的,再伸出一个。然后,数一下有多少个手指,娃哈哈(请娃哈哈支付广告植入的费用),两个手指呢,一个简单的计算机就这样做出来啦。
糟啦,大一点的数手指不够用怎么办?于是我们的老祖宗机智得发明了算盘,简直是逆袭呀。
好啦,现在我们做一个减法的,这个我不讲了,容易挨骂。
好了,现在我们要一个乘法的:2x3,先伸出两个手指头,再伸出两个手指头,伸3次,哎呀,等于6嘛,这个太简单啦,23得六,小学生都知道啦,还用算吗?好吧,还是你聪明哒。
嘿嘿,现在问题来啦,37x89等于多少捏,终于算出来啦,啊,还要算78x47呀,还要算289x476呀,还要算7809x1467呀,好复杂呀,不想算捏,好无聊捏,不就是重复得加么,要不我卖个萌,你帮我算算嘛,什么,要我耍双截棍儿?哥至少也是个男人,卖肾不卖艺的好伐。
好吧,搞个什么东西,乘以多少就让他加多少次就好了撒。
于是,想到了这货:
大齿轮,小齿轮,小齿轮,大齿轮。
每个齿轮分成十个小格子,左边的齿轮转动一周下一个齿轮就转动一格。
咦,这个东西好像很熟悉的嘛,对了,不就是机械表嘛,那个我很熟呀。
哎呀,好聪明呀,就是时钟呀。
好啦,我们用这个来计算37X89
先把小齿轮转到3.7圈,然后再转3.7圈,再转3.7圈。。。转89次,好啦,有结果啦
哎呀,手都痛拉。
什么,还要算别的,哎呀,手好疼啊,呜呜呜
好吧,再想想办法,让他自己转嘛
如果能做一个东西,上面直接写上数字,要算什么就按什么,要加就加,要减就减,要乘就乘,要除就除该多好啊
。。。。。。。
登登登登
一代神机横空出世拉
哇塞,好复杂呀,怎么跨度这么大呀?
怎么会,很简单的呀,就是转齿轮的呀,什么,没看到齿轮,这里看这里瞧
啊,这都晕啦?你还需要多喝露露呀(露露请支付广告植入费用)
别,轻点
好啦,我也不懂嘛,就随便贴贴的啦,反正你就知道转齿轮就行啦呢
貌似这个有点复杂呀,脑袋里都是浆糊啦,整理整理吧,就是这么工作的呀
电子与计算机工程专业的学习课程一般是这样的(一些需要考虑的时序啊冒险hazard啊我就略过不说了):
1 电路基础
电阻R、电感L、电容C你总得知道吧?
2 逻辑电路
半导体(半导体之后会有专门的课程,这个阶段简单理解PN节有什么性质不深究原理)
→_→与或非门
→_→锁存器latch触发器flip flop寄存器register寄存器堆register file存储器RAM&ROM、运算单元ALU、选择器MUX、译码器decoder……
→_→控制单元controller数据通路datapath(插一句,有点类似于MVC开发框架中的C和M(model))
→_→有限状态机FSM: (复制自百度百科)有限状态机是指输出取决于过去输入部分和当前输入部分的时序逻辑电路。………… 在实际的应用中,根据有限状态机是否使用输入信号,设计人员经常将其分为Moore型有限状态机和Mealy型有限状态机两种类型。1 Moore型有限状态机其输出信号仅与当前状态有关,即可以把Moore型有限状态的输出看成是当前状态的函数。2 Mealy型有限状态机其输出信号不仅与当前状态有关,而且还与所有的输入信号有关,即可以把Mealy型有限状态机的输出看成是当前状态和所有输入信号的函数。
→_→一些基本元件工作原理(硬件方面的实现方式),内存啊硬盘啊总线啊blabla
3 计算机原理
processor:1/0机器码怎么通过与非门输出控制信号,通过选择器MUX选出所需的来源数据运算结果目标寄存器
…基友喊我出去玩,留坑
4 编译原理
5 操作系统
6 某编程语言精通
6.1 CS这么赚钱,投身之
6.2 颈椎病眼科疾病关节疼痛…治疗指南
7 网络
…
为方便阅读,就直接把评论回复复制到回答里面了。
电磁学,量子力学,半导体物理,模拟电路,数字电路,计算机体系结构,汇编语言,C语言,编译原理,数据结构,操作系统,linux内核分析。嗯,等学完这些,你就基本懂了
计算机依靠集成数字电路来工作,而集成电路都要用半导体来做。数字电路的基础就是与或非三种门电路,一般的逻辑门都是要用MOS(Metal Oxide Semiconductor),中文也叫金属氧化物半导体。而MOS结构能够工作的关键就是偏置电压不同导致半导体能级发生变化,也就可以控制载流子的变化(自由电子和共价键失去电子的空穴)。而随着载流子密度的变化,就可以控制电流大小和通断。利用这个原理就可以制造与或非等数字门电路。在这里面所说的能级、共价键、载流子实际上就是量子力学和麦克斯韦电磁理论结合应用的结果,我记得是用薛定谔方程然后结合电磁理论进行近似推导的结论。
那么计算出来之后,人眼是怎么看到的呢?
显示器工作的关键就是通过电压控制像素点的发光强度,oled是直接控制发光二极管的发光强度,而LCD的背光强度是一样的,而通过控制液晶的透光率来控制显示器的最终的发光强度。液晶各向异性晶体,折射率与方向有关。电压->液晶分子的角度->液晶的折射率->透光率->显示器表面的不同亮度->人眼识别;
详情请参考半导体物理、数字电路、计算机体系结构、物理光学等相关教科书。
编辑
计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去。直至遇到停止指令。
程序与数据一样存贮,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作是计算机最基本的工作原理。这一原理最初是由美籍匈牙利数学家冯.诺依曼于1945年提出来的,故称为冯.诺依曼原理。
编辑
计算机系统由硬件系统和软件系统两大部分组成。美藉匈牙利科学家冯·诺依曼(John von Neumann)奠定了现代计算机的基本结构,这一结构又称冯·诺依曼结构,其特点是:
1)使用单一的处理部件来完成计算、存储以及通信的工作。
2)存储单元是定长的线性组织。
3)存储空间的单元是直接寻址的。
5)对计算进行集中的顺序控制。
6)计算机硬件系统由运算器、存储器、控制器、输入设备、输出设备五大部件组成并规定了它们的基本功能。
7)采用二进制形式表示数据和指令。
8)在执行程序和处理数据时必须将程序和数据从外存储器装入主存储器中,然后才能使计算机在工作时能够自动调整地从存储器中取出指令并加以执行。
编辑
计算机根据人们预定的安排,自动地进行数据的快速计算和加工处理。人们预定的安排是通过一连串指令(操作者的命令)来表达的,这个指令序列就称为程序。一个指令规定计算机执行一个基本操作。一个程序规定计算机完成一个完整的任务。一种计算机所能识别的一组不同指令的集合,称为该种计算机的指令集合或指令系统。在微机的指令系统中,主要使用了单地址和二地址指令,其中,第1个字节是操作码,规定计算机要执行的基本操作,第2个字节是操作数。计算机指令包括以下类型:数据处理指令(加、减、乘、除等)、数据传送指令、程序控制指令、状态管理指令,整个内存被分成若干个存储单元,每个存储单元一般可存放8位二进制数(字节编址)。每个在位单元可以存放数据或程序代码,为了能有效地存取该单元内存储的内容,每个单元都给出了一个唯一的编号来标识,即地址。
按照冯·诺依曼存储程序的原理,计算机在执行程序时须先将要执行的相关程序和数据放入内存储器中,在执行程序时CPU根据当前程序指针寄存器的内容取出指令并执行指令,然后再取出下一条指令并执行,如此循环下去直到程序结束指令时才停止执行。其工作过程就是不断地取指令和执行指令的过程,最后将计算的结果放入指令指定的存储器地址中。计算机工作过程中所要涉及的计算机硬件部件有内存储器、指令寄存器、指令译码器、计算器、控制器、运算器和输入/输出设备等,在后续的内容中将会着重介绍。
编辑
硬件通常是指构成计算机的设备实体。一台计算机的硬件系统应由五个基本部分组成:运算器、控制器、存储器、输入和输出设备。现代计算机还包括中央处理器和总线设备。这五大部分通过系统总线完成指令所传达的操作,当计算机在接受指令后,由控制器指挥,将数据从输入设备传送到存储器存放,再由控制器将需要参加运算的数据传送到运算器,由运算器进行处理,处理后的结果由输出设备输出。
CPU(central processing unit)意为中央处理单元,又称中央处理器。CPU由控制器、运算器和寄存器组成,通常集中在一块芯片上,是计算机系统的核心设备。计算机以CPU为中心,输入和输出设备与存储器之间的数据传输和处理都通过CPU来控制执行。微型计算机的中央处理器又称为微处理器。
控制器是对输入的指令进行分析,并统一控制计算机的各个部件完成一定任务的部件。它一般由指令寄存器、状态寄存器、指令译码器、时序电路和控制电路组成。计算机的工作方式是执行程序,程序就是为完成某一任务所编制的特定指令序列,各种指令操作按一定的时间关系有序安排,控制器产生各种最基本的不可再分的微操作的命令信号,即微命令,以指挥整个计算机有条不紊地工作。当计算机执行程序时,控制器首先从指令寄存器中取得指令的地址,并将下一条指令的地址存入指令寄存器中,然后从存储器中取出指令,由指令译码器对指令进行译码后产生控制信号,用以驱动相应的硬件完成指令操作。简言之,控制器就是协调指挥计算机各部件工作的元件,它的基本任务就是根据种类指纹的需要综合有关的逻辑条件与时间条件产生相应的微命令。
运算器又称算术逻辑单元ALU(Arithmetic Logic Unit)。运算器的主要任务是执行各种算术运算和逻辑运算。算术运算是指各种数值运算,比如:加、减、乘、除等。逻辑运算是进行逻辑判断的非数值运算,比如:与、或、非、比较、移位等。计算机所完成的全部运算都是在运算器中进行的,根据指令规定的寻址方式,运算器从存储或寄存器中取得操作数,进行计算后,送回到指令所指定的寄存器中。运算器的核心部件是加法器和若干个寄存器,加法器用于运算,寄存器用于存储参加运算的各种数据以及运算后的结果。
存储器分为内存储器(简称内存或主存)、外存储器(简称外存或辅存)。外存储器一般也可作为输入/输出设备。计算机把要执行的程序和数据存入内存中,内存一般由半导体器构成。半导体存储器可分为三大类:随机存储器、只读存储器、特殊存储器。 RAM RAM是随机存取存储器(Random Access Memory),其特点是可以读写,存取任一单元所需的时间相同,通电时存储器内的内容可以保持,断电后,存储的内容立即消失。RAM可分为动态(Dynamic RAM)和静态(Static RAM)两大类。所谓动态随机存储器DRAM是用MOS电路和电容来作存储元件的。由于电容会放电,所以需要定时充电以维持存储内容的正确,例如互隔2ms刷新一次,因此称这为动态存储器。所谓静态随机存储器SRAM是用双极型电路或MOS电路的触发器来作存储元件的,它没有电容放电造成的刷新问题。只要有电源正常供电,触发器就能稳定地存储数据。DRAM的特点是集成密度高,主要用于大容量存储器。SRAM的特点是存取速度快,主要用于调整缓冲存储器。 ROM ROM是只读存储器(Read Only Memory),它只能读出原有的内容,不能由用户再写入新内容。原来存储的内容是由厂家一次性写放的,并永久保存下来。ROM可分为可编程(Programmable)ROM、可擦除可编程(Erasable Programmable)ROM、电擦除可编程(Electrically Erasable Programmable)ROM。如,EPROM存储的内容可以通过紫外光照射来擦除,这使它的内容可以反复更改。 特殊固态存储器 包括电荷耦合存储器、磁泡存储器、电子束存储器等,它们多用于特殊领域内的信息存储。 此外,描述内、外存储容量的常用单位有: ①位/比特(bit):这是内存中最小的单位,二进制数序列中的一个0或一个1就是一比比特,在电脑中,一个比特对应着一个晶体管。 ②字节(B、Byte):是计算机中最常用、最基本的存在单位。一个字节等于8个比特,即1 Byte=8bit。 ③千字节(KB、Kilo Byte):电脑的内存容量都很大,一般都是以千字节作单位来表示。1KB=1024Byte。 ④兆字节(MB Mega Byte):90年代流行微机的硬盘和内存等一般都是以兆字节(MB)为单位。1 MB=1024KB。 ⑤吉字节(GB、Giga Byte):目前市场流行的微机的硬盘已经达到430GB、640GB、810GB、1TB等规格。1GB=1024MB。 ⑥太字节(TB、Tera byte):1TB=1024GB。最新有了PB这个概念,1PB=1024TB。
输入设备是用来接受用户输入的原始数据和程序,并将它们变为计算机能识别的二进制存入到内存中。常用的输入设备有键盘、鼠标、扫描仪、光笔等。 输出设备用于将存入在内存中的由计算机处理的结果转变为人们能接受的形式输出。常用的输出设备有显示器、打印机、绘图仪等。
总线是一组为系统部件之间数据传送的公用信号线。具有汇集与分配数据信号、选择发送信号的部件与接收信号的部件、总线控制权的建立与转移等功能。典型的微机计算机系统的结构通常多采用单总线结构,一般按信号类型将总线分为三组,其中AB(Address Bus)为地址总线;DB(Data Bus)为数据总线;CB(Control Bus)控制总线。
编辑
CPU类型
CPU类型是指微机系统所采用的CPU芯片型号,它决定了微机系统的档次。
字长
字长是指CPU一次最多可同时传送和处理的二进制位数,字长直接影响到计算机的功能、用途和应用范围。如Pentium是64位字长的微处理器,即数据位数是64位,而它的寻址位数是32位。
时钟频率和机器周期
时钟频率又称主频,它是指CPU内部晶振的频率,常用单位为兆(MHz),它反映了CPU的基本工作节拍。一个机器周期由若干个时钟周期组成,在机器语言中,使用执行一条指令所需要的机器周期数来说明指令执行的速度。一般使用CPU类型和时钟频率来说明计算机的档次。如Pentium III 500等。
运算速度
是指计算机每秒能执行的指令数。单位有MIPS(每秒百万条指令)、MFLOPS(秒百万条浮点指令)
存取速度
是指存储器完成一次读取或写存操作所需的时间,称为存储器的存取时间或访问时间。而连续两次读或写所需要的最短时间,称为存储周期。对于半导体存储器来说,存取周期大约为几十到几百毫秒之间。它的快慢会影响到计算机的速度。
内、外存储器容量
是指内存存储容量,即内容储存器能够存储信息的字节数。外储器是可将程序和数据永久保存的存储介质,可以说其容量是无限的。如硬盘、U盘已是微机系统中不可缺少的外部设备。迄今为止,所有的计算机系统都是基于冯·诺依曼存储程序的原理。内、外存容量越大,所能运行的软件功能就越丰富。CPU的高速度和外存储器的低速度是微机系统工作过程中的主要瓶颈现象,不过由于硬盘的存取速度不断提高,目前这种现象已有所改善。
编辑
我们先从最早的计算机讲起,人们在最初设计计算机时采用这样一个模型:
人们通过输入设备把需要处理的信息输入计算机,计算机通过中央处理器把信息加工后,再通过输出设备把处理后的结果告诉人们。
其实这个模型很简单,举个简单的例子,你要处理的信息是1+1,你把这个信息输入到计算机中后,计算机的内部进行处理,再把处理后的结果告诉你。
早期计算机的输入设备十分落后,根本没有现在的键盘和鼠标,那时候计算机还是一个大家伙,最早的计算机有两层楼那么高。人们只能通过扳动计算机庞大的面板上无数的开关来向计算机输入信息,而计算机把这些信息处理之后,输出设备也相当简陋,就是计算机面板上无数的信号灯。所以那时的计算机根本无法处理像现在这样各种各样的信息,它实际上只能进行数字运算。
当时人们使用计算机也真是够累的。但在当时,就算是这种计算机也是极为先进的了,因为它把人们从繁重的手工计算中解脱出来,而且极大地提高了计算速度。
随着人们对计算机的使用,人们发现上述模型的计算机能力有限,在处理大量数据时就越发显得力不从心。为此人们对计算机模型进行了改进,提出了这种模型:
就是在中央处理器旁边加了一个内部存储器。这个模型的好处在于。先打个比方说,如果老师让你心算一道简单题,你肯定毫不费劲就算出来了,可是如果老师让你算20个三位数相乘,你心算起来肯定很费力,但如果给你一张草稿纸的话,你也能很快算出来。
可能你会问这和计算机有什么关系?其实计算机也是一样,一个没有内部存储器的计算机如果让它进行一个很复杂的计算,它可能根本就没有办法算出来,因为它的存储能力有限,无法记住很多的中间的结果,但如果给它一些内部存储器当“草稿纸”的话,计算机就可以把一些中间结果临时存储到内部存储器上,然后在需要的时候再把它取出来,进行下一步的运算,如此往复,计算机就可以完成很多很复杂的计算。
随着时代的发展,人们越来越感到计算机输入和输出方式的落后,改进这两方面势在必行。在输入方面,为了不再每次扳动成百上千的开头,人们发明了纸带机。纸带机的工作原理是这样的,纸带的每一行都标明了26个字母、10个数字和一些运算符号,如果这行的字母A上面打了一个孔,说明这里要输入的是字母A,同理,下面的行由此类推。这样一个长长的纸带就可以代表很多的信息,人们把这个纸带放入纸带机,纸带机还要把纸带上的信息翻译给计算机,因为计算机是看不懂这个纸带的。
这样虽然比较麻烦,但这个进步确实在很大程度上促进了计算机的发展。在发明纸带的同时,人们也对输出系统进行了改进,用打印机代替了计算机面板上无数的信号灯。打印机的作用正好和纸带机相反,它负责把计算机输出的信息翻译成人能看懂的语言,打印在纸上,这样人们就能很方便地看到输出的信息,再也不用看那成百上千的信号灯了。
不过人们没有满足,他们继续对输入和输出系统进行改进。后来人们发明了键盘和显示器。这两项发明使得当时的计算机和我们现在使用的计算机有些类似了,而且在此之前经过长时间的改进,计算机的体积也大大地缩小了。键盘和显示器的好处在于人们可以直接向计算机输入信息,而计算机也可以及时把处理结果显示在屏幕上。
可是随着人们的使用,逐渐又发现了不如意之处。因为人们要向计算机输入的信息越来越多,往往要输入很长时间后,才让计算机开始处理,而在输入过程中,如果停电,那前面输入的内容就白费了,等来电后,还要全部重新输入。就算不停电,如果人们上次输入了一部分信息,计算机处理完了,也输出了结果;人们下一次再需要计算机处理这部分信息的时候,还要重新输入。对这种重复劳动的厌倦导致了计算机新的模型的产生。
这回的模型是这样的:
这回增加了一个外部存储器。外部存储器的“外部”是相对于内部存储器来说的,在中央处理器处理信息时,它并不直接和外部存储器打交道,处理过程中的信息都临时存放在内部存储器中,在信息处理结束后,处理的结果也存放在内部存储器中。可是如果这时突然停电,那些结果还会丢失的。内部存储器(或简称内存)中的信息是靠电力来维持的,一旦电力消失,内存中的数据就会全部消失。也正因为如此,人们才在计算机模型中加入了外部存储器,把内存中的处理结果再存储到外部存储器中,这样停电后数据也不会丢失了。
外部存储器与内存的区别在于:它们的存储机制是不一样的,外部存储器是把数据存储到磁性介质上,所以不依赖于是否有电。这个磁性介质就好比家里的歌曲磁带,磁带上的歌曲不管有没有电都是存在的。当时人们也是考虑到了磁带这种好处,所以在计算机的外部存储器中也采用了类似磁带的装置,比较常用的一种叫磁盘。
磁盘本来是圆的,不过装在一个方的盒子里,这样做的目的是为了防止磁盘表面划伤,导致数据丢失。
有了磁盘之后,人们使用计算机就方便多了,不但可以把数据处理结果存放在磁盘中,还可以把很多输入到计算机中的数据存储到磁盘中,这样这些数据可以反复使用,避免了重复劳动。
可是不久之后,人们又发现了另一个问题,人们要存储到磁盘上的内容越来越多,众多的信息存储在一起,很不方便。这样就导致了文件的产生。
这和我们日常生活中的文件有些相似。我们日常生活中的文件是由一些相关信息组成,计算机的文件也是一样。人们把信息分类整理成文件存储到磁盘上,这样,磁盘上就有了文件1、文件2……。
可是在使用过程中,人们又渐渐发现,由人工来管理越来越多的文件是一件很痛苦的事情。为了解决这个问题,人们就开发了一种软件叫操作系统。
其实操作系统就是替我们管理计算机的一种软件,在操作系统出现之前,只有专业人士才懂得怎样使用计算机,而在操作系统出现之后,不管你是否是计算机专业毕业,只要经过简单的培训,你都能很容易地掌握计算机。
有了操作系统之后,我们就不直接和计算机的硬件打交道,不直接对这些硬件发号施令,我们把要的事情告诉操作系统,操作系统再把要作的事情安排给计算机去做,等计算机做完之后,操作系统再把结果告诉我们,这样就省事多了。
在操作系统出现之前,人们通过键盘给计算机下达的命令都是特别专业的术语,而有了操作系统之后,人们和计算机之间的对话就可以使用一些很容易懂的语言,而不用去死记硬背那些专业术语了。
操作系统不但能在计算机和人之间传递信息,而且还负责管理计算机的内部设备和外部设备。它替人们管理日益增多的文件,使人们能很方便地找到和使用这些文件;它替人们管理磁盘,随时报告磁盘的使用情况;它替计算机管理内存,使计算机能更高效而安全地工作;它还负责管理各种外部设备,如打印机等,有了它的管理,这些外设就能有效地为用户服务了。
也正因为操作系统这么重要,所以人们也在不断地改进它,使它的使用更加方面,功能更加强大。对于咱们现在使用的微机来说,操作系统主要经历了DOS、Windows 3.X、Windows95和Windows98、windows2000、windows2003、windowsXP、windows vista、windows7、windows8和最新的windows10这几个发展阶段。
在DOS阶段,人们和计算机打交道,还是主要靠输入命令,“你输入什么命令,计算机就做什么,如果你不输入,计算机就什么也不做”。在这一阶段,人们还是需要记住很多命令和它们的用法,如果忘记了或不知道,那就没有办法了。所以说,这时的计算机还是不太好用,操作系统也处于发展的初级阶段。Windows的出现在很大程度上弥补了这个不足,人们在使用Windows时,不必记住什么命令,只需要用鼠标指指点点就能完成很多工作。
编辑
应用软件
上面说的是硬件的工作原理,那么在软件上,我们又是如何使用计算机的呢?
在前面我们讲过,我们可以通过操作系统给计算机布置工作,操作系统也可以把计算机的工作结果告诉我们。可是操作系统的功能也不是无限的,实际上计算机的很多功能是靠多种应用软件来实现的。操作系统一般只负责管理好计算机,使它能正常工作。而众多的应用软件才充分发挥了计算机的作用。但这些应用软件都是建立在操作系统上的,一般情况下,某一种软件都是为特定的操作系统而设计的,因为这些软件不能直接和计算机交换信息,需要通过操作系统来传递信息。
硬件和软件的结合
这就是所谓的“硬”、“软”结合。硬件就是我们能看见的这些东西:主机、显示器、键盘、鼠标等,而软件是我们看不见的,存在于计算机内部的。打个比方,硬件就好比人类躯体,而软件就好比人类的思想,没有躯体,思想是无法存在的,但没有思想的躯体也只是一个植物人。一个正常人要完成一项工作,都是躯体在思想的支配下完成的。电脑和这相类似,没有主机等硬件,软件是无法存在的;而一个没有软件的计算机也只是一堆废铁。
操作系统对文件的管理
还有一个重要的概念没有讲,就是操作系统是如何管理文件的呢?其实也很简单,文件都有自己的名字,叫文件名,用来区分不同的文件的。计算机中的文件有很多,成千上万,光用名字来区分也不利于查找,所以计算机中又有了文件夹的概念,把不同类型的文件存储在不同的文件夹中,查找起来就快多了,也不会太乱。文件多了,可以分别存储在不同的文件夹中,而当文件夹多了之后,再把一些相关的文件夹存储在更大的文件夹中,这样管理文件是比较科学的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。