1、计算机的组成模块
计算机的组成有三大部分:处理器(cpu),输入输出(I/O),存储器(Memory)。处理器从存储器中获取指令,再按照指令执行一定的操作,输入/输出用来提供运算数据、显示运算结果。
I/O是数据进行输入输出的装置,比如鼠标键盘。访问I/O的方式大致分为存储器映射I/O和端口映射I/O两种。
存储器映射I/O方式中,I/O也和内存一样使用地址进行管理,可以和访问内存一样的方式进行访问。这种方式硬件上较为优化,但是I/O也会占用地址空间。
端口映射I/O中,cpu含有支持访问I/O的专用指令。这种方式的优点一是地址空间可以全部分配到内存,二是内存和I/O的访问可以在指令级别区分,但是缺点是硬件设计变得复杂。
2、计算机的简单使用模型
理论上,可以直接使用0,1编码进行程序设计,但是那样显然太不方便,容易出错,于是人们使用一些助记符来表示各种指令,这就是汇编指令,使用汇编程序将汇编指令翻译为计算机可以识别的0、1编码,后来又发明了高级语言,其语法、使用方式比汇编更加方便、更加易于理解。一般使用编译程序将高级语言编写的程序翻译为汇编指令,然后再使用汇编程序将其翻译为0、1编码。
3、架构与指令集
类似于不同国家的人使用不同的文字,不同的处理器也使用不同的指令,这样,为处理去A编写的程序不能直接在处理器B上使用,需要重新编写,然后再次编译、汇编后才能使用,减低了软件的移植性。IBM为了让自己的一系列计算机使用相同的软件,在他的System/360计算机中引入了指令集架构(ISA)的概念,从软件人员的角度来看,ISA包括一套指令集和一些寄存器。
与ISA对应的一个概念是微架构,后者是前者的一个实现,比如Intel的许多处理器都是遵循x86的ISA,但是每一款都有自己的微架构。ISA好比设计规范,微架构则是具体实现。
3.1CISC与RISC
从大的方面,根据ISA的不同可以将计算机分为两类:复杂指令集计算机(CISC)和精简指令集处理器(RISC)。他们的主要区别是CISC每条指令对应的0,1编码串长度不一,而RISC的每条指令对应得0,1编码长度是固定的。
典型的CISC指令集架构就是Intel的x86ISA,而RISC对应得是arm。
3.2主要的几种ISA
目前存在多种ISA,就像这个世界上存在多种语言一样,主要的ISA有:x86,ARM,SPARC,POWER、MIPS,除了x86是CISC ISA外,其余都是RISC ISA.
ISA | 主要用途 | 所属分类 |
x86 | 个人计算机的标准平台,绝大多数个人计算机使用的都是兼容x86指令集架构的处理器 | CSIC |
ARM | 侧重低功耗,低成本,主要面向嵌入式应用 | CSIC |
SPARC | 高性能工作站和服务器 | CSIC |
POWER | IBM生产的跟多服务器,大型机,小型机及工作站都采用POWER架构的微处理器作为其主CPU使用 | CSIC |
MIPS | 他的含义是无内锁流水线微处理器,当初的设计基于以下理念:使用相对简单的指令,结合优秀的编译器以及采用流水线执行指令的硬件,就可以用更少的晶元面积生产更快的处理器。国内的龙芯处理器采用的就是该架构 | CISC |
4.计算机体系结构
哈佛结构:
哈佛结构(Harvard architecture)是一种将程序指令储存和数据储存分开的存储器结构。中央处理器首先到程序指令储存器中读取程序指令内容,解码后得到数据地址,再到相应的数据储存器中读取数据,并进行下一步的操作(通常是执行)。程序指令储存和数据储存分开,数据和指令的储存可以同时进行,可以使指令和数据有不同的数据宽度,如Microchip公司的PIC16芯片的程序指令是14位宽度,而数据是8位宽度。
哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和储存的,执行时可以预先读取下一条指令。
目前使用哈佛结构的中央处理器和微控制器有很多,除了上面提到的Microchip公司的PIC系列芯片,还有摩托罗拉公司的MC68系列、Zilog公司的Z8系列、ATMEL公司的AVR系列和安谋公司的ARM9、ARM10和ARM11。大多数DSP是哈佛结构的。
冯.诺伊曼结构:
冯.诺伊曼结构(von Neumann architecture),也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的电脑设计概念结构。该结构隐约指导了将储存装置与中央处理器分开的概念,因此依该结构设计出的计算机又称储存程式型电脑。
最早的计算机器仅内涵固定用途的程式。现代的某些计算机依然维持这样的设计方式,通常是为了简化或教育目的。例如一个计算器仅有固定的数学计算程式,它不能拿来当作文书处理软件,更不能拿来玩游戏。若想要改变此机器的程式,你必须更改线路、更改结构甚至重新设计此机器。当然最早的计算机并没有设计的那个可编程化。当时所谓的“重写程式”很可能指的是纸笔设计程式步骤,接着制订工程细节,再施工将机器的电路配线或结构改变。
而储存程式型电脑的概念改变了这一切。借由创造一组指令集结构,并将所谓的运算转化成一串程式指令的执行细节,让此机器更有弹性。借着将指令当成一种特别型态的静态资料,一台储存程式型电脑可轻易改变其程式,并在程控下改变其运算内容。冯·诺伊曼结构与储存程式型电脑是互相通用的名词,其用法将于下述。而哈佛结构则是一种将程式资料与普通资料分开储存的设计概念,但是它并未完全突破冯.诺伊曼架构。
储存程式型概念也可让程式执行时自我修改程式的运算内容。本概念的设计动机之一就是可让程式自行增加内容或改变程式指令的内存位置,因为早期的设计都要使用者手动修改。但随着索引暂存器与间接位置存取变成硬件结构的必备机制后,本功能就不如以往重要了。而程式自我修改这项特色也被现代程式设计所弃扬,因为它会造成理解与除错的难度,且现代中央处理器的管线与快取机制会让此功能效率降低。
从整体而言,将指令当成资料的概念使得组合语言、编译器与其他自动编程工具得以实现;可以用这些“自动编程的程式”,以人类较易理解的方式编写程式;从局部来看,强调I/O的机器,例如Bitblt,想要修改画面上的图样,以往是认为若没有客制化硬件就办不到。但之后显示这些功能可以借由“执行中编译”技术而有效达到。
此结构当然有所缺陷,除了下列将述的冯·诺伊曼瓶颈之外,修改程式很可能是非常具伤害性的,无论无意或设计错误。在一个简单的储存程式型电脑上,一个设计不良的程式可能会伤害自己、其他程式甚或是操作系统,导致当机。缓冲区溢位就是一个典型例子。而创造或更改其他程式的能力也导致了恶意软件的出现。利用缓冲区溢位,一个恶意程式可以覆盖呼叫堆栈(Call stack)并覆写程式码,并且修改其他程式档案以造成连锁破坏。内存保护机制及其他形式的存取控制可以保护意外或恶意的程式码更动。大多数CPU和GPU是冯诺依曼结构的。
冯·诺依曼体系和哈佛总线体系的区别:
二者的区别就是程序空间和数据空间是否是一体的。冯·诺依曼结构数据空间和地址空间不分开,哈佛结构数据空间和地址空间是分开的。
哈佛总线技术应用是以DSP和ARM为代表的。采用哈佛总线体系结构的芯片内部程序空间和数据空间是分开的,这就允许同时取指和取操作数,从而大大提高了运算能力。
持续更新