12
10
2009
0

处理器技术解析

本站文章,皆为原创,如需转载,请注明出处,违者必究

处理器发展史

在计算机技术发展的期初,并不存在处理器的概念,整个计算机都是由电子管组成的庞大的电路系统,处理功能、输入输出功能全部混杂在一起,形成简单的计算功能,速度也非常低。后来人们为了方便细致研究计算机系统的每一个部分,从功能上将计算机系统划分为了计算单元、输入输出接口、外接的附属设备系统。

计算机最开始的应用目的是完成科学家复杂的重复性计算,因而即使当今的计算机系统中最基本的处理单元也是基于会编码概念的机器码。期初,人们接口计算机、控制计算机的方式就是通过编写简单的汇编指令,由于计算机不能直接识别基于字符串形式存储的指令,因而将各种指令指派一个固定的十六进制数码,作为该指令的替代品用于计算单元来识别程序的含义。

为了存储这些计算指令还有计算过程中的数字,人们发明了专门用于存储数据的内存,后来为了更好地访问大规模的内存系统,发明了最原始的内存总线系统。总线就像现实世界的高速公路,总线上包含地址线路和数据线路。计算单元掌管着整天总线的主动权,每一个与计算单元进行连接的设备都被分配给了一个独立的地址,通过将地址总线的十六进制数转换为二进制序列,每一个设备便因而得到一根单独的线路,一旦处理器向指定的设备发送信号,这个单独的线路就会被激活,对应的设备就明白要如何配合处理器进行工作,并通过数据总线传递数据或者控制信号,比如内存中数据的存储,当然,最早的计算机系统中除了磁带机之外,只有内存这样的设备。

后来60年代的时候,一些从事电气控制和电话交换领域的工程师看中了计算机系统,计算机的总线便不再仅仅是内存和磁带机的天下,各种各样的设备被添加到了同样的总线之中,使得计算机系统几乎可以完成所有的工作。然而,那个年代,计算机系统缺乏的已经不是多少功能,而是需要更大的内存、存储以及更快的速度。如今,计算机技术已经被大量应用于了航空航天的飞行器控制、各种家用电器的智能控制、交通运输系统、互联网络信息系统以及家庭娱乐系统。

十六进制原理

十六进制数是理解计算机系统原理的核心概念,因此,要想理解处理器的工作原理,首先需要明白十六进制数的原理。记得几年前曾经读到一篇文章中提出的疑问“为什么计算机采用十六进制数而不用生活中常用的十进制数”,这个问题在这里可以得到回答。

十进制数中,人们使用 0123456789 这十个阿拉伯数字表达数值,计算机中十六进制数在这十个阿拉伯字母基础之上,添加了6个字母: 0123456789ABCDEF,其中F代表15,而计算机中通常用 0x1B 这样的形式来表达十六进制数,目的是为了与10进制数产生区别以方便计算机识别(注意!许多初学者易误把 0x 最开始的 ”零“ 误读为 "欧")

二进制数与十六进制数之间有着明确的关联,只要我们看看如下的例子就能简单的看出:

十六进制:0x80,     0x40,     0x20,     0x10,     0x30    , 0x0F

二进制数:10000000, 01000000, 00100000, 00010000, 00110000, 00001111

由于计算机的存储单元一般都是以8个二进制为单位的(用“有”和“无”)的方式来存储数字,所有的内存单元都是以8位二进制为基础单元的,而二进制之中每4个二进制数,如果从左只右分别置为1的话,分别对应十六进制中的8、4、2、1,因而十六进制数和二进制数之间非常容易进行转换。

同时,如果把总线中对应的8位二进制数字的位置不放置内存,而放置一组输出到外边的电线,通过简单的给该地址设置数值就可以使得8根电线中形成可控模式的0、1(0V电压、5V电压)的信号输出,从而可以实现对各种外设、电机的控制,同样,计算单元也可以同样从这样的外部信号读入外部设备的状态。

控制器、处理器

计算机技术后来发展中就自然而然分支为了两个方向:控制和计算。控制类型的计算机追求更快速的响应外部信号的能力和更低的功率,以及更小的尺寸(比如当今的单片机芯片),向计算发展的计算机则偏向于更高的运算速度、更强大的浮点运算单元,当然相对的是不可避免的更高的功耗,这类计算机包含当今的个人电脑、大型服务器。

如上一段文字所描述,人们发现了计算机系统潜在的控制和监控外设的能力之后,人们开始挖掘计算机系统的发展潜力,于是将计算单元、内存、程序存储、外设接口甚至一些可以内置的外设全都制造在了同一片芯片中,只需要编写入需要的程序就可以独立的完成所需要的控制功能。如今的8位、16位单片机普遍属于这一类的概念。

控制器领域的发展走向了更简单化、小尺寸化的道路,而处理器领域则开始将传统的计算单元变得更加复杂化。由于汇编语言本身虽然简单,但是用于大规模的工作往往反映出较低的开发效率和移植能力(一个芯片架构到另一个芯片架构的不修改代码而执行)以及维护能力(汇编语言代码晦涩难懂),因而更贴近数学的高级编程语言便因此诞生,但最开始的高级语言并没有如今这么发达,只是被称作汇编代码自动生成器。当然,无论高级语言如何强大,只要不是脚本语言(直接解析代码文字而执行的语言,比如TclTK、Python),都需要首先转换为汇编语言,然后翻译成永恒不变的机器二进制指令码。

由于高级语言最终变成机器码之间,需要经历编译、汇编、链接三个步骤。最开始的计算机只支持多任务(类似当今的多线程概念,最早没有进程的概念),但是多任务需要将不通功能的任务都编译在一个代码之中,相互参杂,然后一个任务出错很容易相互影响,同时需要每次都重新烧录计算机执行的程序体系。后来人们提出了进程的概念,将编译好的程序都存在一个固定的存储系统(比如硬盘、磁带)之中,系统初始化的时候加载一个管理这些程序的加载和执行的监视程序(操作系统的原型)。为了方便代码的编译,对程序进行保护,由于不可能给每一个加载的程序都重新链接其中的符号调用关系,便固定的把每一个编译成的应用程序都制定一个固定的内存入口地址,这些地址相互跳转调用,因而入口地址一旦固定,程序就必须放在固定的内存地址区间被执行。

但是,如何为每一个被加载的程序都分配同一块内存区域呢,多进程分时的概念最早在60年代初被提出,那时UNIX诞生之时是通过在存储上面建立一个交换空间,每当有要被执行的进程被执行时,便将当前进程的内存和寄存器信息存储到交换空间之中,然后把要调度的程序重新读取到同样的内存区域然后执行固定的时间片,实现了最原始的多进程。然而这样的多进程由于多次加载和存储导致效率非常低下,同时反复的读写造成存储设备的提前寿命终结。

后来多进程的概念被用硬件的形式实现了支持,也就是最原始的分段内存模式,通过将实际物理内存重新分段,然后每个段的偏移量取代了原来的内存地址的功能,实现了不需要交换空间的高速切换,但分段模式并没有存在多久(8086处理器到80386是一个典型的分段模式时代),新的更精确的内存重组的技术,分页技术便出现了。

分页技术提出两种地址概念,物理地址和线性地址(也称虚拟地址),线性地址是程序执行时遵循的地址,物理地址是实际内存芯片映射的内存地址。分页技术将物理内存划分为一片一片,尺寸都是4K的内存区域,物理地址和线性地址之间通过一个复杂的二级链表来描述每一片的对应关系。只需要给每一个进程设置一个独立的这样描述地址映射关系的链表,就可以实现内存区域的任意重新映射,实现自由灵活的多进程,这个附着在原来的总线之上的附加模块,就是现在所称的MMU(内存管理单元)。

内存管理单元是决定处理器与控制器之间区别的根本因素,也是现代处理器和传统计算单元的本质标志。

 

Category: 程序开发 | Tags: | Read Count: 1110

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com