2008年10月15日星期三

计算机组成学习笔记(4)--指令的执行

之前一直在将计算机的一些分类和简史,现在开始具体的关于计算机组成的内容,先聊一聊CPU吧。

关于CPU干什么是什么之类的废话就不多说了,直接进入CPU的组成。

CPU由相对独立的几个部分组成。控制器负责从主存储器中取指令和确定指令类型;算术逻辑部件(ALU)通过完成诸如加法、逻辑或与非等运算来执行指令。同时CPU内部也有一些小容量高速度的存储器,它们用于存放中间结果和一些控制信息,它们由寄存器组成,一般每个计算器的容量都相等,可以存放一个不超过其存储范围的数。

需要提到的一个寄存器是程序计数器(Program Counter),之所以提到它,不仅是因为它的重要性,而且是由于它经常被人误解,实际上它并没有任何计数的功能,它的作用是指向下一条要被执行的指令。另外,指令寄存器(Insturction Register)也十分重要。

下面来说说指令执行的过程:

ALU对输入数据进行简单的计算,然后把结果送入到输出寄存器,经输出寄存器存回到某个寄存器中,当然也可以从寄存器写入到内存中。一般的指令有两种类型:寄存器-内存指令和寄存器-寄存器指令,很好理解的。另外,ALU将两个操作数进行计算并将结果存回的过程称之为数据通路周期,是大多数CPU的核心,从某种意义上,它决定了计算机的性能。

然后具体说下指令执行的步骤:

1)从内存中取下一条指令到指令寄存器中--->2)将程序计数器指向后面的一条指令--->3)判断刚刚取到的指令的类型--->4)如果该指令用到了某个内存单元,则对该内存单元进行寻址--->5)必要的时候,从内存中取一个字到CPU的寄存器中--->6)执行指令--->7)返回第1步准备执行下一条指令

也许用代码来表示会更清晰一些:

public class Interp
{
private static int PC;//Program Counter 程序计数器
private static int AC;//Arithmetic Counter 累加器
private static int instr;//存放当前指令的寄存器
private static int instrType;//指令的类型
private static int dataLoc;//数据地址,若没有则为-1
private static int data;//存放当前数据数
private static bool runBit = true;//运行指示位,需停机时将其关闭

public static void Interpret(int[] memory, int startAddress)
{
PC = startAddress;
while (runBit)
{
instr = memory[PC];
PC++;
instrType = GetInstrType(instr);
dataLoc = FindData(instr, instrType);
if (dataLoc>=0)
{
data = memory[dataLoc];
}
Execute(instrType, data);
}
}
private static int GetInstrType(int instr) { ... } //得到指令的类型
private static int FindData(int instr, int instrType) { ... }//获得数据的地址,若没有则返回-1
private static void Execute(int instrType, int data) {... }//执行指令
}

2008年10月12日星期日

经济学原理学习笔记(2)--经济学十大原理 II

上回提到四个关于人们如何作出决策的原理,这次来聊聊人们之间是如何进行交易的。

原理五:贸易可以使每个人的状况更好

当前世界,大到国家与国家之间的竞争,小到个人与个人之间的竞争,导致很多人都有这样的误区:就是竞争一定会产生利益受到损害的一方,其实并不是这样的。

为了说明这一点,先考虑一下贸易是如何影响你的家庭吧,当你的家庭的某个成员在找工作时,不可避免的,他会要与其他的家庭的成员竞争,因此从某种意义上来说,经济中每个家庭都与其他的家庭存在着竞争的关系。

然而尽管存在这种竞争,但把你的家庭和其他家庭隔绝开来并不会大家变得更好,因为真的隔绝开来的话,每个家庭就不能从事他们所擅长的工作来获取利益。换句话说吧,比如说我自己,是一个程序员,虽然我不会做菜不会缝衣服,但是我可以通过我编程序得到的收入来获得衣食住行这些必需品。但如果把我同他人相隔绝开来,我就得自己做很多自己并不擅长的事情,这大大降低了我的生活效率。

也就是说,贸易是每个人都可以专门从事自己最擅长的活动,通过与其他人的交易,人们可以以较低的成本获得各式各样的物品与劳务。


原理六:市场通常是组织经济活动的一种好方法

20世纪80年代苏联和东欧的解体宣告了计划经济的失败,事实证明,通过中央计划者来决定生产什么物品和劳务,生产多少,以及由谁来生产和消费这些物品和劳务这种政策是错误的。

现在全球绝大多数国家都在努力发展市场经济,在一个市场经济(Market Economy)的条件下,中央计划者的决策被成千上万的企业和家庭的决策所取代,企业决定雇佣谁和生产什么,家庭决定为哪家企业工作,以及用自己的收入来购买什么。这些企业和家庭在市场上相互交易,价格和利己,引导着他们的决策。

伟大的经济学家Adam Smith在他的神作《国富论》中曾经提到过个全部经济学中最有名的观察成果:家庭和企业在市场上相互交易,它们仿佛被一只看不见的手所致应,并导致了合意的市场结果。(其实价格,就是这支看不见的手用来指引经济活动的工具)

计划经济之所以失败,因为当政府去阻止价格根据供求的自发的调整时,它就限制了这只看不见的手对组成经济的千百万家庭和企业之间进行协调的能力。这也就解释了为什么税收会对资源的配置有着不利的影响。

总之,这个观点可能与我们小时所受的教育理念相悖:当一个人去追求自己的利益时,往往使他能比在真正出于本意的情况下更加有效的促进社会的利益。

原理七:政府有的时候可以改善市场结果

虽然市场这只看不见的手拥有这么强大的力量,但不要忘记这一条,只有在个人和企业的产权(Property Rights)得到保护,市场才能正常的运行。打个比方,如果一个农民可以预见到他的谷物会被偷走,那他绝不会去主动种庄稼;如果多数顾客都选择到网上下载免费的MP3或者是购买盗版的CD,唱片公司不会去生产CD。这也解释了为什么很多中国的软件公司的产品并不在中国销售,我就不多说了,呵呵。

因此市场需要政府来进行一定的调节,通常来说,政府干预经济并改变人们根据自己的利益选择的资源配置的原因有两类:促进效率和促进平等,也就是说,大多数政策的目标是既要把经济蛋糕做大,同时也要使这块蛋糕的分割方式尽可能的合理。

计算机组成学习笔记(3)--机型和芯片

根据荷兰老爷子Tanenbaum的定义,他把计算机分成了如下的几类:

一次性计算机:分类的最低端。比如说以前买的那种贺卡,打开就有音乐放出,它所使用的芯片就可以说是一次性计算机的一个范例。当然它的应用不仅有这么简单,现在很热门的RFID(无线射频识别),就是它的一种应用。

微控制器:可以被认为是一台很小但是却很完整的计算机。常常用于不同种类的设备中,比如说家用电器、通信设备等。

游戏机:PS3、Wii、XBOX360….

个人计算机:PC或者Macintosh之流,日常生活中接触最多的计算机

服务器、工作站和大型机:它们的处理能力更强,有一个或多个处理器,就不加赘述了。

接下来就是芯片了,很不幸,AMD的芯片并没有被Tanenbaum所看中。

首先要说的自然是芯片老大Intel的东东了

从最初的4004到第一片16位微处理器8086,在到后来的80486,由于80486这个商标已被人注册,于是Intel就为80586采用了一个别名Pentium,(其实Pentium就是希腊字5的英文写法,玩电脑早一点的朋友都知道,97年、98年那一会,还都管Pentium叫586,管Pentium II叫686呢,呵呵),随着MMX(MultiMedia eXtension)和SSE(Streaming SIMD Extensions)的引入,再到后来Pentium的马甲版本Celeron和Xeon,然后到支持超线程(就是允许程序把它们的任务分解成两个控制线程)的Pentium 4,但随着CPU时钟的飞速提高,发出的热量也变得越来越巨大,3.6G的Pentium4已经有了115w的功率,热量相当于一个100w的白炽灯泡。后来Intel就开始了多核技术的研究,这是后话了~

然后说说UltraSPARC

说到UltraSPARC就不得不提起SUN,SUN可不是太阳能公司~~而是Stanford University Network的abbreviation,它最初是一个印度阿三和几个技术天才的一家生产UNIX工作站的公司,到后来翅膀长硬了就开始自己做CPU了,SPARC实际上就是可伸缩处理器体系结构的简写。

和其他的公司不一样的是,SUN并没有自己去生产SPARC CPU,而是授予其他的半导体公司生产许可权,期望它们之间的竞争能使产品更加质优价廉,因此SPARC芯片也就五花八门。

SPARC最早就是32位机,主频32MHz,到95年的完全64位体系结构的Ultra SPARC I,到接下来的II、III,以及封装了两个Ultra SPARC III芯片的Ultra SPARC IV

最后提一下8051

现在还模糊的记得大二时上的计算机组成课,老师拿了一台很高深的机器,一顿比划,那似乎就是传说中的8051,直到看Tanenbaum的书之前,我还不知道为什么讲解CPU要拿那个老掉牙的东西来讲。

用一个具有20多年历史的8位芯片来讲解计算机组成实在是很eccentric,但是要知道,知道2001年,8为微控制器的年销量才超过4位的微控制器,而现在,8位微控制器销量超过了其他微控制器销量的总和~~ 而且8051的问世时间很长,积累了大量的技术资料和软件,学习起来非常方便。


8051属于MCS-51系列芯片,有兴趣的同学可以Google一下看看。