发布时间:2014-09-05 13:30:55作者:知识屋
Linux运维-必备专业知识冯诺伊曼体系
摘 要:冯·诺伊曼结构(von Neumann architecture),也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的电脑设计概念结构。描述的是一种实现通用图灵机的计算设备,以及一种相对于并行计算的串行式结构参考模型(referential model)。
本结构隐约指导了将存储设备与中央处理器分开的概念,因此依本结构设计出的计算机又称存储程序型电脑。
关键字:冯·诺依曼体系结,冯·诺依曼理论,计算机,二进制
冯诺伊曼体系
一、发展背景
最早的计算机器仅内涵固定用途的程序。现代的某些计算机依然维持这样的设计方式,通常是为了简化或教育目的。例如一个计算器仅有固定的数学计算程序,它不能拿来当作文字处理软件,更不能拿来玩游戏。若想要改变此机器的程序,你必须更改线路、更改结构甚至重新设计此机器。当然最早的计算机并没有设计的那个可编程化。当时所谓的“重写程序”很可能指的是纸笔设计程序步骤,接着制订工程细节,再施工将机器的电路配线或结构改变。
而存储程序型电脑的概念改变了这一切。借由创造一组指令集结构,并将所谓的运算转化成一串程序指令的运行细节,让此机器更有弹性。借着将指令当成一种特别型态的静态数据,一台存储程序型电脑可轻易改变其程序,并在程控下改变其运算内容。冯·诺伊曼结构与存储程序型电脑是互相通用的名词,其用法将于下述。而哈佛结构则是一种将程序数据与普通数据分开存储的设计概念,但是它并未完全突破冯.诺伊曼架构。
存储程序型概念也可让程序运行时自我修改程序的运算内容。本概念的设计动机之一就是可让程序自行增加内容或改变程序指令的存储器位置,因为早期的设计都要用户手动修改。但随着索引暂存器与间接位置访问变成硬件结构的必备机制后,本功能就不如以往重要了。而程序自我修改这项特色也被现代程序设计所弃扬,因为它会造成理解与除错的难度,且现代中央处理器的管线与高速缓存机制会让此功能效率降低。
从整体而言,将指令当成数据的概念使得汇编语言、编译器与其他自动编程工具得以实现;可以用这些“自动编程的程序”,以人类较易理解的方式编写程序[1];从局部来看,强调I/O的机器,例如Bitblt,想要修改画面上的图样,以往是认为若没有客制化硬件就办不到。但之后显示这些功能可以借由“运行中编译”技术而有效达到。
此结构当然有所缺陷,除了下列将述的冯·诺伊曼瓶颈之外,修改程序很可能是非常具伤害性的,无论无意或设计错误。在一个简单的存储程序型电脑上,一个设计不良的程序可能会伤害自己、其他程序甚或是操作系统,导致死机。缓存溢出就是一个典型例子。而创造或更改其他程序的能力也导致了恶意软件的出现。利用缓存溢出,一个恶意程序可以覆盖调用堆栈(Call stack)并改写代码,并且修改其他程序文件以造成连锁破坏。存储器保护机制及其他形式的访问控制可以保护意外或恶意的代码更动。
二、体系结构
2.1体系结构
(1)采用存储程序方式,指令和数据不加区别混合存储在同一个存储器中,(数据和程序在内存中是没有区别的,它们都是内存中的数据,当EIP指针指向哪 CPU就加载那段内存中的数据,如果是不正确的指令格式,CPU就会发生错误中断. 在现在CPU的保护模式中,每个内存段都其描述符,这个描述符记录着这个内存段的访问权限(可读,可写,可执行).这最就变相的指定了哪个些内存中存储的是指令哪些是数据)
指令和数据都可以送到运算器进行运算,即由指令组成的程序是可以修改的。
(2)存储器是按地址访问的线性编址的一维结构,每个单元的位数是固定的。
(3)指令由操作码和地址组成。操作码指明本指令的操作类型,地址码指明操作数和地址。操作数本身无数据类型的标志,它的数据类型由操作码确定。
(4)通过执行指令直接发出控制信号控制计算机的操作。指令在存储器中按其执行顺序存放,由指令计数器指明要执行的指令所在的单元地址。指令计数器只有一个,一般按顺序递增,但执行顺序可按运算结果或当时的外界条件而改变。
(5)以运算器为中心,I/O设备与存储器间的数据传送都要经过运算器。
(6)数据以二进制表示。
2.2冯? 诺依曼体系结构实例
我们想想这个:Cpu的控制器共有32个变化位,那它怎么跟内存进行通信呢?
Cpu要想和内存通信,彼此之间必须通过一种媒介,连接起来。
想想我们需要把一箱货物运送到另一个地方,需要用车拉,车拉上后通过公路进行搬运,这样才能运送到目的地。
Cpu也如此,需要靠线路运送,我们把线路叫总线(Bus)。 你可以理解为线路
那一条线路是不是很慢,多一点,两天路并行,那一下就可以发两条数据过去,那我们总线是多大呢?32根总线,每一个总线连接一个寻址位,这样可以达到4G的寻址能力。那这个总线上它实际上是从我们从存储器中读取数据和指令。
数据和指令在cpu中放置的位置是不一样的,数据是靠运算器运算的,指令靠控制器控制的,而且他们放置的寄存器也不一样。
所以既有数据总线,指令总线,为了避免更复杂,总线是合并起来的,复用的。对于cpu来讲,读数据和指令都通过总线来实现,这种cpu跟内存交换数据的总线叫做前端总线。
Cpu和内存的速度是不一样的,这个速度叫做带宽。两者速度不匹配。
Cpu的时钟周期,即运算频率,例:3.0GHz
内存的频率, 例:1333MHz
大家知道频率(Hz)是单位时间的变化量,是靠时间为驱动的,因此cpu的驱动能力是靠时间的流逝来完成的,大家应该记住这点,所以计算机的大多数操作都是时间驱动的概念,必须要靠时钟驱动。
这又引出一个问题,当我拿了一块表,我可以很明确的知道现在的时间是多少,但如果我有两块表,两块表的时间不一致,是不是我就很难准确的知道现在的时间。这就是手表定理。
同样的,cpu有自己的频率,内存也有自己的频率,由于cpu和内存频率不匹配。这样计算方法就不一样了,因此为了让大家的始终周期是一致的,或者说是让时间长度是一致的,主板或者各种芯片需要在某种晶体振荡器下按照某种固定的频率计算时间。
这些跟linux没有什么关系,是计算机的基础知识。
2.3 cpu计算1+1实例
以cpu计算1+1为例:
请问:当我们要计算1+1时,cpu怎么知道我们要计算1+1?
Cpu本身不是什么智能中心,我们要计算1+1,cpu怎么知道我们要计算1+1?为什么不是1*1呢,思考下。
那么,这就意味着,我们要计算1+1.那么我们就要把1+1= 这个需求做成一个独立的程序,程序是什么呢,说白了,就是能被cpu自动装入,能够有一个入口,让cpu自动执行它的指令集合。
大家要知道,cpu在内部,cpu的生产厂商无论是IBM,intel,AMD.他们生产的cpu都是内身都有一定的微码(汇编语言),能够完成一定意义上的智能操作,这个智能操作就包括能从某一个位置载入某段程序,并让他运行起来,所以每个芯片都有内置的智能接口,这个接口是通过微码(汇编语言)向外提供的,
而且其中的程序必须要按照某种格式,而且必须是二进制格式,从入口出开始执行。这就意味着控制器要告诉运算器程序从哪一位开始运算。
那么我们程序就必须告诉控制器“1”在哪个位置,“+”在哪个位置,因此,控制器在读到程序指令时,就知道需要在某个地址读取数据,将数据载入进来,
于是,控制器就控制着操作过程,通过总线向存储器发送指令,存储器就把该地址数据(假设“1”数据)放在地址总线,于是cpu得到此数据( “1”数据)。 同样的,“1”“+”都被读进来,于是控制器控制计算器进行计算。
需要记住这一点,读取被加数需要一个时钟周期(就是一个Hz),读取加数有需要一个时钟周期,读取操作福也需要一个时钟周期,在经过一个周期运算器计算结束,在经过一个周期,运算器把运算结果放在总线上。
所以就算是1+1这一个过程,在cpu内部就要经过n个周期才能完成,注意这点。这一切都要靠控制器完成。
运算是靠运算器完成的,控制器刚读进来数据时,运算器不能马上就计算,就要依次读进来“1”“1”“+”才能计算,所以其内部就有一个暂存的空间叫做寄存器,暂存数据,当所有运算数据读进来就可以运算了。
2.4特点
(1)计算机处理的数据和指令一律用二进制数表示
(2)顺序执行程序
计算机运行过程中,把要执行的程序和处理的数据首先存入主存储器(内存),计算机执行程序时,将自动地并按顺序从主存储器中取出指令一条一条地执行,这一概念称作顺序执行程序。
(3)计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成。
三、影响
冯.诺依曼体系结构是现代计算机的基础,现在大多计算机仍是冯.诺依曼计算机的组织结构,只是作了一些改进而已,并没有从根本上突破冯体系结构的束缚。冯.诺依曼也因此被人们称为“计算机之父”。然而由于传统冯.诺依曼计算机体系结构天然所具有的局限性,从根本上限制了计算机的发展。
根据冯·诺依曼体系结构构成的计算机,必须具有如下功能:把需要的程序和数据送至计算机中。必须具有长期记忆程序、数据、中间结果及最终运算结果的能力。能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力。能够根据需要控制程序走向,并能根据指令控制机
冯· 诺依曼体系结构
冯· 诺依曼体系结构
器的各部件协调操作。能够按照要求将处理结果输出给用户。
将指令和数据同时存放在存储器中,是冯·诺依曼计算机方案的特点之一 计算机由控制器、运算器、存储器、输入设备、输出设备五部分组成 冯·诺依曼提出的计算机体系结构,奠定了现代计算机的结构理念
四、其他结构
4.1哈佛结构
(英语:Harvard architecture)是一种将程序指令储存和数据储存分开的存储器结构。中央处理器首先到程序指令储存器中读取程序指令内容,解码后得到数据地址,再到相应的数据储存器中读取数据,并进行下一步的操作(通常是执行)。程序指令储存和数据储存分开,数据和指令的储存可以同时进行,可以使指令和数据有不同的数据宽度,如Microchip公司的PIC16芯片的程序指令是14位宽度,而数据是8位宽度。
哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和储存的,执行时可以预先读取下一条指令。
在Linux运维之前,需要搞清楚很多计算机基础问题,比如冯诺伊曼体系,哈佛结构等等。
2014年1月5日
linux一键安装web环境全攻略 在linux系统中怎么一键安装web环境方法
Linux网络基本网络配置方法介绍 如何配置Linux系统的网络方法
Linux下DNS服务器搭建详解 Linux下搭建DNS服务器和配置文件
对Linux进行详细的性能监控的方法 Linux 系统性能监控命令详解
linux系统root密码忘了怎么办 linux忘记root密码后找回密码的方法
Linux基本命令有哪些 Linux系统常用操作命令有哪些
Linux必学的网络操作命令 linux网络操作相关命令汇总
linux系统从入侵到提权的详细过程 linux入侵提权服务器方法技巧
linux系统怎么用命令切换用户登录 Linux切换用户的命令是什么
在linux中添加普通新用户登录 如何在Linux中添加一个新的用户
2012-07-10
CentOS 6.3安装(详细图解教程)
Linux怎么查看网卡驱动?Linux下查看网卡的驱动程序
centos修改主机名命令
Ubuntu或UbuntuKyKin14.04Unity桌面风格与Gnome桌面风格的切换
FEDORA 17中设置TIGERVNC远程访问
StartOS 5.0相关介绍,新型的Linux系统!
解决vSphere Client登录linux版vCenter失败
LINUX最新提权 Exploits Linux Kernel <= 2.6.37
nginx在网站中的7层转发功能