专栏首页运维部落【万字长文】计算机系统概述

【万字长文】计算机系统概述

计算机系统概述

传统计算系统采用分层方式构建,也即计算机系统是一个层次结构的系统,通过向上层用户提供一个抽象简洁的接口而将较低层次的实现细节隐藏起来。计算机解决应用问题的过程就是将不同抽象层进行转换的过程。由于并非每位朋友对计算机系统和原件工作原理有所了解,但Linux系统又是基于这些硬件的基础方可正常运行,同时又因为当代计算机的UI已经做的如此完美易用,以至于占比很高的IT从业人员忽略计算机硬件,但对于高级资深IT从业人员来讲,知其一不知其二对于个人技能树的发展影响深远,根基不稳大厦将倾,因此我们也将会较多篇幅为大家介绍关于计算机的一系列知识。

1 计算机的发展历程

1.1 电子计算机的诞生

世界上第一台电子计算机(有争议第一台名为Atanasoff-Berry-Computer,简称ABC)是1946年在美国诞生的ENIAC,其设计师是美国宾夕法尼亚大学的莫齐利(John Mauchly)和他的学生艾克特(John Eckert)。

当时正值第二次世界大战,军方急需一种高速电子装置来解决弹道的复杂计算问题,莫齐利和艾克特的方案在1943年得到了军方的支持。在冯.诺依曼(数字计算机之父)等人的帮助下,他们经过两年多的努力,终于研制成功第一台电子计算机。1946年2月,美国陆军军械部与摩尔法学院共同举行新闻发布会,宣布计算机 ENIAC(Electronic Numerical Integrator and Computer,电子数字积分和计算机) 研制成功。

ENIAC每秒5000次加法运算,60秒种的弹道计算时间由原来的20分钟一下缩短为30秒(现在世界上最快的超级计算机是由中国出资的天河二号,运行速度为每秒5.49亿亿次浮点计算!),ENIAC的名声不胫而走。

ENIAC是个庞然大物,ENIAC长30.48米,宽6米,高2.4米,耗资48万美元,使用18 000个真空管,重30吨,占地面积170平方米,耗电160千瓦,第一次开机整个费城地区的照明都闪烁变暗。该机正式运行到1955年10月2日,期间共运行了80 223小时(3342天)。

自从第一台计算机ENIAC诞生后, 人类社会进入了一个崭新的电子计算和信息化时代。早期电子计算机的发展和电子元器件的发展息息相关。为此,传统上人们以元器件的更新作为计算机技术进步和划时代的主要标志。

1.2 第一代计算机

第一代计算机(20世纪40年代中到20世纪50年代末)为电子管计算机,其逻辑元件采用电子管,存储器为声延经或磁鼓,典型逻辑结构为定点运算。这个时期的计算机“软件”一词尚未聘,编制程序所用工具为低级语言。电子管计算机体积大,速度慢(每秒千次或万次),存储容量小,典型机器除上术的ENIAC外还EDVA、EDSAC等,第一台计算机ENIAC没有采用二进制操作和存储程序控制,不具备现代计算机的主要特征。

在1945年3月,冯.诺依慢领导的小组发表“存储程序”方式 的电子数字计算机方案EDVAC,宣告现代计算机结构思想的诞生。“存储程序”方式的基本思想:必须将事先编好的程序和原始数据传入主存后才能执行程序,一旦程序被启动执行,计算机能在不需操作人员干预下自动 完成逐条指令取出或执行的任务。 冯.诺依曼及其同事在普林斯顿高级研究院(Institute for Advance Study at Princeton,IAS)于1946年开始设计“存储程序”计算机,该机被称为IAS计算机。

英国剑桥大学的M.V.Wilkes在EDVAC方案启发下,于1949年制造成功的EDSAC成为世界上第一台“存储程序”式的现代计算机,而IAS计算机直至1951年才研制成功。此外,尚有1951年的UMVAC-1和1956年的IBM 704等也属于第一代计算机。

1.3 第二代计算机

第二代计算机(20世纪50年代中后期到20世纪60年代中)为晶体管计算机。1947年,美国贝尔实验室的三位科学家William Shockley、John Barden和Walter Brattain发明了晶体管,为计算机的发展提供了新的技术基础。该实验室于1954年研制了晶体管计算机TRADIC,而麻省理工学院于1957年完成的TX-2对晶体管计算机的发展起到了重要作用。IBM于1955年研发成功全晶体管计算机7070和7090,1959处IBM推出商用机IBM 1401,其小巧价廉和面积数据处理的特性获得广大用户认可,从而促进计算机工业的迅速发展。

这代计算机除逻辑元件采用晶体以外,其内存采用磁蕊存储器,外存采用磁鼓和磁带存储器,实现了浮点运算,并在系统结构方式实现变址、中断、I/O处理器等新概念。这时计算机软件得以发展,出现了多级高级语言及其编译程序。和第一代计算机相比,第二代计算机体积小、速度快、功率快、可靠性高。

1.4 第三代计算机

第三代计算机(20世纪60年代中到20世纪70年代后期)为集成电路计算机,集成电路计算机为现代计算机的发展奠定了革命性的基础,使计算机的逻辑元件和存储器均可由集成电路实现,集成电路的应用是微电子和计算机技术相结合的一大突破,为构建运算速度快,价格低,容量大,可靠性高,体积小,功耗低的各类计算机提供了技术条件。

1964年IBM推动第一个采用集成电路的通用计算机IBM 360系统研制成功,该计算机涵盖了很多新技术,如微程序控制,高速缓存,虚拟存储器和流水线技术等,软件方面实现了操作系统,具有资源调度,人机通信和输入输出控制等功能。IBM 360对计算机的普及和大规模工作业生产有着重大的影响,实现了真正意义上的量产,到1996年底其已经实现月产400台,5年产量达33000台。

同时期的大型/巨型与小型机同时发展: 大型机代表:1964年的CDC 6600 CDC 7600和CYBER 巨型机代表:CDC STAR-100, ILLIAC IV阵列机 小型机代表:DEC公司的PDP系列

1.5 第四代计算机

第四代计算机(20世纪70年代后期开始)为超大规模集成电路计算机。20世纪70年代初,微电子学飞速发展为大规模集成电路和微处理器提供了高速发展的基础。大规模集成电路 (LSI)和超大规模集成电路(VLSI)成为计算机的主要器件,其集成度从20世纪70年代初的几千个晶体管/片到20世纪末的千万个晶体管/片,这个时期的发展遵循主要 摩尔定律由于硅技术的不断发展,每18个月,集成度将翻一番,速度将提高一倍,而其价格也将降低一半。

当1976年的这段时间,巨型计算机的峰值速度已经达到每秒千亿次或万亿次,这种并行处理技术在20世纪90年代是巨型计算机发展的主流。

第四代计算机时间的另外重要特点是计算机网络的发展和广泛应用,计算机的普及和通信技术的调整发展与密切结合,世界各地的计算机通过Internet相互连接,大大扩展和加速了信息的流通,增强了社会的协调和合作能力,使计算机的发展方向发生重要变化,由个人计算方向向网络化方向发展。

由于计算机技术和使用方式的飞速发展,目前学术界和工业界大多已不再沿用传统以元器件划分“第X代计算机”。

1.6 第五代计算机

第五代计算机(20世纪80年代开始)为智能计算机,把信息采集、存储、处理、通信同人工智能结合在一起的智能计算机系统。它能进行数值计算或处理一般的信息,主要能面向知识处理,具有形式化推理、联想、学习和解释的能力,能够帮助人们进行判断、决策、开拓未知领域和获得新的知识。人-机之间可以直接通过自然语言(声音、文字)或图形图象交换信息。第五代计算机又称新一代计算机。

智能计算机的主要特征是具备人工智能,能像人一样思维,并且运算速度极快,其硬件系统支持高度并行和推理,其软件系统能够处理知识信息。神经网络计算机(也称神经元计算机)是智能计算机的重要代表。

1.7 第六代计算机

第六代计算机为神经电脑。半导体硅晶片的电路密集,散热问题难以彻底解决,影响了计算机性能的进一步发挥与突破。研究人员发现,脱氧核糖核酸(DNA)的双螺旋结构能容纳巨量信息,其存储量相当于半导体芯片的数百万倍。一个蛋白质分子就是存储体,而且阻抗低、能耗小、发热量极低。

基于此,利用蛋白质分子制造出基因芯片,研制生物计算机(也称分子计算机、基因计算机),已成为当今计算机技术的最前沿。生物计算机比硅晶片计算机在速度、性能上有质的飞跃,被视为极具发展潜力的“第六代计算机”。

2 操作系统的基本功能和基本组成

操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。

操作系统是运行在内核态的软件,计算机是一种能自动对数字化信息进行算术处理和逻辑运算的高速处理装置。言外之意是,计算机处理的对象是数字化信息,处理的手段是算术和逻辑运算,处理的方式是自动化。

操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。操作系统的功能包括管理计算机系统的硬件、软件及数据资源,控制程序运行,改善人机界面,为其它应用软件提供支持,让计算机系统所有资源最大限度地发挥作用,提供各种形式的用户界面,使用户有一个好的工作环境,为其它软件的开发提供必要的服务和相应的接口等。实际上,用户是不用接触操作系统的,操作系统管理着计算机硬件资源,同时按照应用程序的资源请求,分配资源,如:划分CPU时间,内存空间的开辟,调用打印机等。

通常所说的计算机系统,除了肉眼可见的硬件设施外,还包括计算机硬件上的软件。

2.1 计算机系统的基本功能

操作系统的主要功能是资源管理、程序控制、人机交互、进程管理、内存管理、虚拟内存、用户接口和用户界面等。计算机系统的资源可分为设备资源和信息资源两大类。

设备资源指的是组成计算机的硬件设备,如中央处理器,主存储器,磁盘存储器,打印机,磁带存储器,显示器,键盘输入设备和鼠标等。

信息资源指的是存放于计算机内的各种数据,如文件,程序库,知识库,系统软件和应用软件等。

**操作系统位于底层硬件与用户之间,是两者沟通的桥梁。**用户可以通过操作系统的用户界面,输入命令。操作系统则对命令进行解释,驱动硬件设备,实现用户要求。以现代观点而言,一个标准个人电脑的OS应该提供以下的功能:

  • 进程管理(Processing management)
  • 内存管理(Memory management)
  • 文件系统(File system)
  • 网络通讯(Networking)
  • 安全机制(Security)
  • 用户界面(User interface)
  • 驱动程序(Device drivers)

2.1.1 资源管理

系统的设备资源和信息资源都是操作系统根据用户需求按一定的策略来进行分配和调度的。如:操作系统的存储管理负责把内存单元分配给需要内存的程序以便让它执行,在程序执行结束后将它占用的内存单元收回以便再使用;提供虚拟存储的应用,操作系统还要与硬件配合协调页面调度工作,根据执行程序的要求分配页面,在执行中将页面调入和调出内存以及回收页面等。

处理器管理或称处理器调度,是操作系统资源管理功能的另一个重要内容。操作系统发展至今日,多进程操作系统已是主流,系统会根据一定的策略将处理器交替地分配给系统内等待运行的事件或事件,等待状态的程序只有在获得了处理器资源后方可继续运行。等待状态的程序在运行中若遇到例如启动外部设备而暂时不能继续运行下去或一个外部事件等的意外事件时,操作系统就要来处理相应的事件,然后将处理器重新分配。

设备资源管理功能主要是分配和回收外部设备以及控制外部设备按用户程序的要求进行操作等。如显示器、打印机、硬件存储磁盘等。

信息资源管理是操作系统的一个重要的功能,主要是向用户提供一个文件系统。如Create、Delete、Remove、Move、RWX文件权限管理等,有了文件系统后,用户可按文件名存取数据而无需知道这些数据存放在哪里。这种做法不仅便于用户使用而且还有利于用户共享公共数据。

2.1.2 程序控制

一个用户程序的执行自始至终是在操作系统控制下进行的。一个用户将他要解决的问题用某一种程序设计语言编写了一个程序后就将该程序连同对它执行的要求输入到计算机内,操作系统就根据要求控制这个用户程序的执行直到结束。操作系统控制用户的执行主要有以下一些内容:

  • 调入相应的编译程序
  • 将用某种程序设计语言编写的源程序编译成计算机可执行的目标程序
  • 分配内存储等资源将程序调入内存并启动
  • 按用户指定的要求处理执行中出现的各种事件以及与操作员联系请示有关意外事件的处理等

2.1.3 人机交互

操作系统的人机交互功能是决定计算机系统“友善性”的一个重要因素。人机交互功能主要靠可输入输出的外部设备和相应的软件来完成。可供人机交互使用的设备主要有键盘显示、鼠标、各种模式识别设备等。与这些设备相应的软件就是操作系统提供人机交互功能的部分。人机交互部分的主要作用是控制有关设备的运行和理解并执行通过人机交互设备传来的有关的各种命令和要求。

2.1.4 进程管理

不管是常驻程序或者应用程序,他们都以进程为标准执行单位。

当年冯.诺依曼架构建造电脑的理念是:每个中央处理器最多只能同时执行一个进程。早期的OS(例如DOS)也不允许任何程序打破这个限制,且DOS同时只有执行一个进程(虽然DOS自己宣称他们拥有终止并等待驻留(TSR)能力,可以部分且艰难地解决这问题)。现代的操作系统,即使只拥有一个CPU,也可以利用多进程(multitask)功能同时执行复数进程(时序复用)。进程管理指的是操作系统调整复数进程的功能。

由于大部分的电脑只包含一颗中央处理器,在单内核(Core)的情况下多进程只是简单迅速地切换各进程,让每个进程都能够执行,在多内核或多处理器的情况下,所有进程通过许多协同技术在各处理器或内核上转换。越多进程同时执行,每个进程能分配到的时间比率就越小。

很多OS在遇到此问题时会出现诸如音效断续或鼠标跳格的情况(称做崩溃(Thrashing),一种OS只能不停执行自己的管理程序并耗尽系统资源的状态,其他使用者或硬件的程序皆无法执行)。进程管理通常实现了分时的概念,大部分的OS可以利用指定不同的特权等级(priority),为每个进程改变所占的分时比例。特权越高的进程,执行优先级越高,单位时间内占的比例也越高。交互式OS也提供某种程度的回馈机制,让直接与使用者交互的进程拥有较高的特权值。

2.1.5 内存管理

根据帕金森定律:“ 你给程序再多内存,程序也会想尽办法耗光 ”,因此程序员通常希望系统给他无限量且无限快的存储器。因此程序员通常希望系统给他无限量且无限快的存储器。

大部分的现代计算机存储器架构都是层次结构式的,最快且数量最少的暂存器为首,然后是高速缓存、存储器以及最慢的磁盘存储设备。而操作系统的存储器管理提供查找可用的记忆空间、配置与释放记忆空间以及交换存储器和低速存储设备的内含物……等功能。此类又被称做虚拟内存管理的功能大幅增加每个进程可获得的记忆空间(通常是4GB,即使实际上RAM的数量远少于这数目)。然而这也带来了微幅降低运行效率的缺点,严重时甚至也会导致进程崩溃。

存储器管理的另一个重点活动就是借由CPU的帮助来管理虚拟位置。如果同时有许多进程存储于记忆设备上,操作系统必须防止它们互相干扰对方的存储器内容(除非通过某些协定在可控制的范围下操作,并限制可访问的存储器范围)。分区存储器空间可以达成目标。每个进程只会看到整个存储器空间(从0到存储器空间的最大上限)被配置给它自己(当然,有些位置被操作系统保留而禁止访问)。CPU事先存了几个表以比对虚拟位置与实际存储器位置,这种方法称为标签页(paging)配置。

借由对每个进程产生分开独立的位置空间,操作系统也可以轻易地一次释放某进程所占据的所有存储器。如果这个进程不释放存储器,操作系统可以退出进程并将存储器自动释放。

2.1.6 虚拟内存

虚拟内存(SWAP)是计算机系统内存管理的一种技术,它使得应用程序认为其拥有连续的可用内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。

2.1.7 用户接口

用户接口包括作业一级接口和程序一级接口。作业一级接口为了便于用户直接或间接地控制自己的作业而设置。它通常包括联机用户接口与脱机用户接口。程序一级接口是为用户程序在执行中访问系统资源而设置的,通常由一组系统调用组成。

在早期的单用户单任务操作系统(如DOS)中,每台计算机只有一个用户,每次运行一个程序,且次序不是很大,单个程序完全可以存放在实际内存中。这时虚拟内存并没有太大的用处。

但随着程序占用存储器容量的增长和多用户多任务操作系统的出现,在程序设计时,在程序所需要的存储量与计算机系统实际配备的主存储器的容量之间往往存在着矛盾。例如,在某些低档的计算机中,物理内存的容量较小,而某些程序却需要很大的内存才能运行;而在多用户多任务系统中,多个用户或多个任务更新全部主存,要求同时执行独断程序。这些同时运行的程序到底占用实际内存中的哪一部分,在编写程序时是无法确定的,必须等到程序运行时才动态分配。

2.1.8 用户界面

用户界面(User Interface,简称 UI,亦称使用者界面)是系统和用户之间进行交互和信息交换的媒介,它实现信息的内部形式与人类可以接受形式之间的转换。

用户界面是介于用户与硬件而设计彼此之间交互沟通相关软件,目的在使得用户能够方便有效率地去操作硬件以达成双向之交互,完成所希望借助硬件完成之工作,用户界面定义广泛,包含了人机交互与图形用户接口,凡参与人类与机械的信息交流的领域都存在着用户界面。用户和系统之间一般用面向问题的受限自然语言进行交互。目前有系统开始利用多媒体技术开发新一代的用户界面。

2.2 计算机硬件

关于计算机的组成部分,其实参考眼前的电脑即可分析出来,依据外观来讲,计算机主要分为三部分:

输入单元:键盘、鼠标、绘图板、摄像头、手写板等 中央处理器(CPU):算术逻辑、控制、记忆等单元 输出单元:屏幕、打印机、音响等

计算机接收用户输入指令与数据,经过中央处理器的数据与逻辑单元运算处理后,以产生或存储成有用的信息。

整台主机的重点在于中央处理器(Central Processing Unit,CPU),CPU是一个具有特定功能的内置微指令集的物理芯片。由于CPU主要工作是管理与运算,所以CPU又划分两个主要单元,分别是算术逻辑单元和控制单元,其中算术逻辑单元主要负责程序运算与逻辑判断,控制单元则主要协调各组件与各单元间的工作。 综上所述,计算机是由如下五个单元组成:

  • 运算器

运算器又称算术逻辑单元(Arithmetic Logic Unit简称ALU)。它是计算机对数据进行加工处理的部件,包括算术运算(加、减、乘、除等)和逻辑运算(与、或、非、异或、比较等)。

  • 控制器

控制器负责从存储器中取出指令,并对指令进行译码(译码为计算机可识别语言);根据指令的要求,按时间的先后顺序,负责向其它各部件发出控制信号,保证各部件协调一致地工作,一步一步地完成各种操作。控制器主要由指令寄存器、译码器、程序计数器、操作控制器等组成。

  • 存储器

存储器是计算机记忆或暂存数据的部件。计算机中的全部信息,包括原始的输入数据。经过初步加工的中间数据以及最后处理完成的有用信息都存放在存储器中。而且,指挥计算机运行的各种程序,即规定对输入数据如何进行加工处理的一系列指令也都存放在存储器中。存储器分为内存储器(内存)和外存储器(外存)两种。

  • 输入设备

输入设备是给计算机输入信息的设备。它是重要的人机接口,负责将输入的信息(包括数据和指令)转换成计算机能识别的二进制代码,送入存储器保存。

  • 输出设备

输出设备是输出计算机处理结果的设备。在大多数情况下,它将这些结果转换成便于人们识别的形式。

关于计算机和人体部位的比例,参考下图更方便于记忆和理解:

总体上,用户和系统交互方式依照如下方式进行。

2.3 计算机架构与接口设备

以通常消费者X86架构的计算机为例因为两大主流x86开发商(Intel, AMD)的CPU架构并不兼容,而且设计理念也有所区别,所以两大主流CPU所需要的主板芯片组设计也就不太相同 先来看下旧的架构设计,

新的架构设计,种类繁多,随着技术的发展CPU的可集成度也越来越高,所以现代的有些主板已经将南桥北桥集成到CPU里,如下面的这幅图就没有南北桥,也有些主板只有北桥没有南桥,科技发展飞速,未来如何还需多关注,做为PC市场的先驱者,有兴趣的同学也可以研究苹果MAC主板。

QPI总线技术,这里需要额外提下的是

  • CPU

CPU的频率是指CPU每秒钟可以进行的工作次数,Intel的Core 2 Duo型号E8400的CPU频率为3.0GHz,表示这个CPU在一秒内可以进行3.0x10^9次工作。

CPU有外频和倍频是因为CPU需要较强大的运算能力,因为很多判断与数据都是在CPU内处理的,因为希望各部件的步调一致,因此CPU开发商就在CPU内再加上一个加速功能,所以CPU有所谓的外频与倍频。所谓的外频指的是CPU与外部组件进行数据传输/运算时的速度,倍频则是CPU内部用来加速工作性能的一个倍数,两者相乘才是CPU的频率。我们以刚才的Intel Core 2 Duo E8400 CPU来说,它的频率是3.0GHz,而外频是333MHz,因此倍频就是9倍(3.0G=333Mx9, 其中1G=1000M)。

  • CPU的32位和64位

关于32位和64位系统的差别,那真是说来话长,这里我们首先要了解一下CPU的架构技术,通常我们可以看到在计算机硬件上会有X86X64的标识,其实这是两种不同的CPU硬件架构,x86代表32位操作系统,其代表规范有i386,i586,i686等;

x64代表64位操作系统。那么这个32位和64位中的“位”又是什么意思呢?相对于32位技术而言,64位技术的这个位数指的是CPU GPRs(General-Purpose Registers,通用寄存器)的数据宽度为64位,64位指令集就是运行64位数据的指令,也就是说处理器一次可以运行64bit数据。举个通俗易懂但不是特别准确的例子:32位的吞吐量是1M,而64位吞吐量是2M

  • 南桥,北桥

再来看看南桥,北桥。北桥的总线称为系统总线,因为是内存传输的主要信道,所以速度较快;南桥就是所谓的输入输出(I/O)总线,主要用于“联系”硬盘、USB、网卡等接口设备。目前北桥所支持的频率可高达333/400/533/800/1066/1333/1600MHz等不同频率,支持情况依芯片组功能而有所不同。北桥所支持的频率我们称为前端总线速度(Front Side Bus, FSB),而每次传送的位数则是总线宽度。那所谓的总线频宽则是“FSB x总线宽度”,亦即每秒钟可传送的最大数据量。目前常见的总线宽度有32/64位(bit)。以1600MHz频率为例,32位的总线频宽是:1600MHz x 32bit = 1600MHz x 4Bytes = 6400MB/s = 6.4GB/s;64位的总线频宽是:1600MHz x 64bit = 1600MHz x 8Bytes = 12800MB/s = 12.8GB/s。

与总线频宽相似,CPU每次处理的数据量称为字组大小,字组大小和CPU的设计息息相关,32位系统为2^32=4096MB=4GB;2^64=17592186044416MB=17179869174GB=16777216TB=16336PB. 早期的32位CPU中,因为CPU每次能够解析的数据量有限,因此由内存传来的数据量就有所限制了。这也导致32位的CPU最多只能支持最大到4GB的内存。而64位系统在人类可预见的未来不会出现类似限制。

  • 内存

前面提到CPU所使用的数据都是来自于内存(Memory),不论是软件程序还是数据,都必须要读入内存后CPU才能利用。个人计算机的内存主要组件为动态随机访问内存(Dynamic Random Access Memory, DRAM),随机访问内存只有在通电时才能记录与使用,断电后数据就消失了。因此我们也称这种RAM为挥发性内存。

内存除了频率/频宽与型号需要考虑之外,容量也是很重要的。因为所有的数据都得要加载到内存当中才能够被CPU读取,如果内存容量不够大的话将会导致某些大容量数据无法被完整加载,此时已存在内存当中但暂时没有被使用到的数据必须要先被释放,使得可用内存容量大于该数据,那份新数据才能够被加载。通常内存越大表示系统越快,这是因为系统不用常常释放一些内存内部的数据。对服务器而言,内存的容量有时比CPU的速度还重要。

  • 显卡

显卡又称为VGA(Video Graphics Array),它对于图形影像的显示扮演相当关键的角色。一般对于图形影像的显示重点在于分辨率与色彩深度,因为每个图像显示的颜色会占用内存,因此显卡上面会有一个内存的容量,这个显卡内存容量将会影响到最终你的屏幕分辨率与色彩深度。

3D game游戏为了画面优美占用大量的CPU资源,但原本CPU就已经非常忙碌,所以后来显卡厂商直接在显卡上面嵌入一个3D加速的芯片,这就是GPU称谓的由来。因为没有渲染展示性的需求,所以服务器对于显卡的要求非常低。

  • 硬盘与存储设备

计算机总是需要记录与读取数据的,而这些数据不可能每次都由用户键盘打字。所以就需要有存储设备了。计算机系统上面的存储设备包括硬盘、软盘、MO、CD、DVD、磁带机、U盘(闪存)等,乃至于大型机器的局域网存储设备(SAN, NAS)等,都是可以用来存储数据的。而其中最常见的就是硬盘。现代流行的硬盘多为3.5寸和2.5寸,现今流行有SSD、混合硬盘等。根据应用场合的不同,硬盘接口又分为IDE接口(理论133MB/s),SATA接口(300MB/s),SCSI接口(主工作站上使用)。当前主流的硬盘转速也有5400转/min、7200转/min、10000转/min。

  • 主板

刚谈及的所有组件均安装在主板上,而主板上面负责通信各个组件的就是芯片组,如前面介绍,芯片组一般分为北桥与南桥。北桥负责CPU/RAM/VGA等的连接,南桥则负责PCI接口与速度较慢的I/O设备。所有的芯片组几乎都是参考CPU的能力去规划的,而CPU能够接受的内存规格也不相同。

  • 电源

稳定的电源供电对计算机来讲非常重要,电源的价差非常大,便宜的300W电源200、300块,贵点的上千块。

电源转换率:主机系统耗电300W,电源功率400W,则转换率为300/400=0.75,数值越高代表转换率越高,损耗越少。

  • FSB前生今生

FSB:是Front Side BUS的英文缩写,中文叫前端总线,是将中央处理器(CPU)连接到北桥芯片的系统总线,它是CPU和外界交换数据的主要通道。Inter的产品,前端总线的数据传输能力对计算机整体性能影响很大,如果没有足够带宽的前端总线,即使配备再强劲的CPU,用户也不会感觉到计算机整体速度的明显提升。这个名称是由AMD在推出K7 微架构系列CPU时提出的概念,但是一直以来都被大家误认为是外频的另一个名称。

我们所说的外频指的是CPU与主板连接的速度,这个概念是建立在数字脉冲信号震荡速度基础之上的,而前端总线的速度指的是数据传输的速度,由于数据传输最大带宽取决于所有同时传输的数据的位宽和传输频率,即数据带宽=(总线频率×数据位宽)÷8。目前PC机上主流的前端总线频率有800MHz、1066MHz、 1333MHz几种,前端总线频率越大,代表着CPU与内存之间的数据传输量越大。虽然前端总线频率看起来已经很高,但与同时不断提升的内存频率、高性能显卡(特别多显卡系统)相比,CPU与芯片组存在的前端总线瓶颈仍未根本改变。例如,64位、1333MHz的FSB所提供的内存带宽是1333MHz×64bit/8=10667MB/s=10.67GB/s,与双通道的DDR2-667内存刚好匹配,但如果使用双通道的DDR2-800、DDR2-1066的内存,这时FSB的带宽就小于内存的带宽。更不用说和三通道和更高频率的DDR3内存搭配了。

HT总线:HT是Hyper-Transport的简称,是AMD为K8平台专门设计的高速串行总线。它的发展历史可回溯到1999年,原名为“LDT总线”(Lightning Data Transport,闪电数据传输)。2001年7月这项技术正式推出,AMD同时将它更名为Hyper-Transport。随后,Broadcom、Cisco、Sun、NVIDIA、ALI、ATI、Apple等许多企业均决定采用这项新型总线技术,而AMD也借此组建Hyper-Transport技术联盟(HTC),从而将Hyper-Transport推向产业界。

Hyper-Transport本质是一种为主板上的集成电路互连而设计的端到端总线技术,目的是加快芯片间的数据传输速度。Hyper-Transport技术在AMD平台上使用后,是指AMD CPU到主板芯片之间的连接总线(如果主板芯片组是南北桥架构,则指CPU到北桥),即HT总线,类似于Intel平台中的前端总线(FSB),但Intel平台目前还没采用。在基础原理上,Hyper-Transport与目前的PCI Express非常相似,都是采用点对点的单双工传输线路,引入抗干扰能力强的LVDS信号技术,命令信号、地址信号和数据信号共享一个数据路径,支持DDR双沿触发技术等等,但两者在用途上截然不同—PCI Express作为计算机的系统总线,而Hyper-Transport则被设计为两枚芯片间的连接,连接对象可以是处理器与处理器、处理器与芯片组、芯片组的南北桥、路由器控制芯片等等,属于计算机系统的内部总线范畴。Hyper-Transport技术从规格上讲已经用HT1.0、HT2.0、HT3.0、HT3.1。

第一代Hyper-Transport的工作频率在200MHz—800MHz范围。因采用DDR技术,Hyper-Transport的实际数据激发频率为400MHz—1.6GHz,可支持2、4、8、16和32bit等五种通道模式,800MHz下,双向32bit模式的总线带宽为12.8GB/s,远远高于当时任何一种总线技术。 2004年2月,Hyper-Transport技术联盟(Hyper Transport Technology Consortium,HTC)又发布了Hyper-Transport 2.0规格,使频率成功提升到了1.0GHz、1.2GHz和1.4GHz,双向16bit模式的总线带宽提升到了8.0GB/s、9.6GB/s和11.2GB/s,而当时Intel 915G架构前端总线在6.4GB/s。

2007年11月19日,AMD正式发布了Hyper-Transport 3.0总线规范,提供了1.8GHz、2.0GHz、2.4GHz、2.6GHz几种频率,最高可以支持32通道。32位通道下,其总线的传输效率可以达到史无前例的41.6GB/s。超传输技术联盟(HTC)在2008年8月19日发布了新版Hyper-Transport 3.1规范和HTX3规范,将这种点对点、低延迟总线技术的速度提升到了3.2GHz,再结合双倍数据率(DDR),那么64-bit带宽可达51.2GB/s(即6.4GHz X 64bit/8)。

与AMD的HT总线技术相比,Intel的FSB总线瓶颈也很明显。面对这种带宽上的劣势,Intel要想改变这种处理器和北桥设备之间带宽捉襟见肘的情况,纵使在技术上将FSB频率进一步提高到2133MHz,也难以应付未来DDR3内存及多显卡系统所带来的带宽需求,Intel推出新的总线技术势在必行,所以,QPI总线就应运而生了。

QPI总线:是Quick Path Interconnect的缩写,译为快速通道互联,它的官方名字叫做CSI(Common System Interface公共系统界面),用来实现芯片之间的直接互联,而不是再通过FSB连接到北桥,矛头直指AMD的HT总线。

QPI是一种基于包传输的串行式高速点对点连接协议,在每次传输的20bit数据中,有16bit是真实有效的数据,其余4位用于循环校验,以提高系统的可靠性。由于QPI是双向的,在发送的同时也可以接收另一端传输来的数据,这样,每个QPI总线总带宽= QPI频率×每次传输的有效数据(即16bit/8=2Byte)×双向。所以QPI频率为4.8GT/s的总带宽=4.8GT/s×2Byte×2=19.2GB/s,QPI频率为6.4GT/s的总带宽=6.4GT/s×2Byte×2=25.6GB/s。

此外,QPI另一个亮点就是支持多条系统总线连接,Intel称之为multi-FSB。系统总线将会被分成多条连接,并且频率不再是单一固定的,根据各个子系统对数据吞吐量的需求调整,这种特性无疑要比AMD目前的HT总线更具弹性。 在处理器中集成内存控制器的Intel微架构,抛弃了沿用多年的的FSB,CPU可直接通过内存控制器访问内存资源,而不是以前繁杂的“前端总线——北桥——内存控制器”模式。并且,与AMD在主流的多核处理器上采用的4HT3(4根传输线路,两根用于数据发送,两个用于数据接收)连接方式不同,英特尔采用了4+1 QPI互联方式(4针对处理器,1针对I/O设计),这样多处理器的每个处理器都能直接与物理内存相连,每个处理器之间也能彼此互联来充分利用不同的内存,可以让多处理器的等待时间变短。

在Intel高端的安腾处理器系统中,QPI高速互联方式使得CPU与CPU之间的峰值带宽可达96GB/s,峰值内存带宽可达34GB/s。这主要在于QPI采用了与PCI-E类似的点对点设计,包括一对线路,分别负责数据发送和接收,每一条通路可传送20bit数据。QPI总线可实现多核处理器内部的直接互联,而无须像以前那样还要再经过FSB进行连接,从而大幅提升整体系统性能。

DMI总线:是Direct Media Interface的缩写,中文叫做直接媒体接口,是Intel公司开发用于连接主板南北桥的总线,取代了以前的Hub-Link总线。DMI采用点对点的连接方式,具有PCI-E总线的优势。DMI实现了上行与下行各1GB/s的数据传输率,总带宽达到2GB/s。

在Intel的Nehalem架构发布之初,由于集成了内存控制器,需要一个更为快速的数据传输接口来进行处理器数据和内存数据的传输,同时还要保证与主板上的其他芯片和接口如PCIE2.0和ICH南桥芯片之间的连接速度,所以当时采用了QPI总线技术,然而到了Lynnfield核心的Core i7/i5系列,其核心内部完全集成了内存控制器、PCI-E 2.0控制器等,也就是说将整个北桥都集成到了CPU内部,还稍有加强,在数据传输方面的要求自然要更高,所以Intel在CPU内部依然保留了QPI总线,用于CPU内部的数据传输。而在与外部接口设备进行连接的时候,需要有一条简洁快速的通道,就是DMI总线。这样,这两个总线的传输任务就分工明确了,QPI主管内,DMI主管外。

3. 程序开发与执行过程

程序的开发和执行涉及计算机系统的各个不同层面,因而计算机系统层次结构的思想体现在程序开发和执行过程的各个环节中。下面以简单的hello程序为例,通过其执行过程深入理解计算机系统层次结构概念的认识。

编写程序并让其在计算机上运行最终是为了解决用户的应用问题。因此,程序有时被称为用户程序(User Program)或者应用程序(Application Program)。

3.1.从源程序到可执行程序

如下为hello.c程序代码:

# include <>
int main()
{   Printf(“hello,world\n”)
}

为了让计算机能执行上述应用程序,应用程序会按如下步骤进行处理:

  • 预处理阶段:

预处理程序(cpp)对源程序中以字符#开头的命令进行处理,例如,将#include命令后面的.h文件内容嵌入到源程序文件中。预处理程序的输出还是一个源程序文件,以.i为扩展名。

  • 编译阶段:

编译程序(ccl)对预处理后的编译程序进行编译,生成一个汇编语言源程序文件,以.s为扩展名,例如,hello.s是一个汇编语言程序文件。汇编语言与具体的机器结构有关,所以对于同一台机器来说,不管什么高级语言,编译转换后的输出结果使用的都是同一种汇编语言。

  • 汇编阶段:

汇编程序(as)对汇编语言源程序进行汇编,生成一个可重定位目标文件的二进制文件,其中的代码已经是机器指令,因为是机器语言,所以文件不可读,打开也是乱码的。

  • 链接阶段:

链接程序(ld)将多个可重定位目标文件和标准库函数合并成一个可执行目标文件(executable object file),可执行目标文件可简称为可执行文件。如hello程序中将hello.o和标准库函数printf所在的可重位目标模块printf.o合并后生成可执行文件hello。

最终生成的可执行文件被保存在磁盘上,可以通过某种方式启动一个磁盘上的可执行文件运行。

3.2.可执行文件的启动和执行

对于一个存放在磁盘上的可执行文件,可以在操作系统提供的用户操作环境中,采用双击对应图标或在命令行中输入可执行文件名等多种方式启动执行。在Linux系统中,可通过shell命令行解释器来执行一个可执行文件。

[root@blog ~]# ./hello

如图所示:

  1. SHELL程序将用户从键盘输入的每个字符逐一读入CPU寄存器中(对应线1),
  2. 然后再保存到主存储器中,在主存的缓冲区形成字符器“./hello”(对应线2),
  3. 等接到[Enter]按键时,SHELL将调出操作系统内存内核中相应的服务例程,
  4. 经控制器协调处理,由内核来加载磁盘上可执行文件hello到存储器(对应线3)。
  5. 内核加载完可执行文件中的代码及其所要处理的数据(这里是字符串“hello,world\n”)后,将hello第一条指令的地址发送到程序计数器(Program Counter,简称PC)中,
  6. CPU将PC的内容作为将要执行的指令地址,
  7. 随后处理器开始执行hello程序,将CPU寄存器中的字符送到显示器上显示出来(对应线5)。

从上述的过程可以看出,用户程序的启动执行,必须依靠操作系统的支持,包括外壳程序和内核服务。如SHELL命令行解释器是操作系统外壳程序,它为用户提供了一个启动程序执行环境, 对用户从键盘输入的命令进行解释,并调出操作系统内核来加载用户程序。

此外,键盘,磁盘,显示器等外设设备的不能被程序用户直接访问,此时,也需要依赖操作系统内核服务的支持。如用户程序需调用 内核的read系统调用服务读取磁盘文件,或调用内核的write系统调用服务把字符串写到显示器中等。

此外,程序的执行过程就是数据在CPU、主存储器和I/O模块之间流程的过程,所有数据的流动都是通过总线、I/O桥接器等进行。数据在总线上传输之前,需事先缓存在存储部件中,因此,除了主存储器本身是存储部件以外,在CPU、I/O桥接器、设备控制器中也有存放数据的缓冲存储部件,如CPU的寄存器堆、设备控制器中的数据缓冲寄存器等。

3.3.指令的执行过程

从如上内容可以看出,每条指令的执行过程包括:

  • 从存储器取指令并计算下一条指令的地址;
  • 对指令进行译码;
  • 取操作数;
  • 对操作数据进行运算;
  • 送运算结果到存储器或寄存器保存

从计算机的系统层次讲可以用如图-不同层次语言之间的等价转换表示:

  • 不同层次语言之间的等价转换
lw(Load Word)
sw(Store Word)
(控制信号)ALUop=add
(控制信号)RegWr=1

4 计算机系统的层次结构

如前方伊始所介绍,传统计算系统采用分层方式构建,也即计算机系统是一个层次结构的系统,通过向上层上层用户提供一个抽象简洁的接口而将较低层次的实现细节隐藏起来。计算机解决应用问题的过程就是将不同抽象层进行转换的过程。

4.1 计算机系统抽象层的转换

如图显示顶层用户希望计算机完成的应用到电子工程师使用元器件完成基本电路设计的整个转换过程:

步骤1: 将应用转化为算法描述,使应用问题求解变成流程化步骤,并确保步骤是有限的。任何一个问题可能有多个求解算法,需要进行算法分析以确定哪种算法在时间和空间上能够得到优化。

步骤2: 将算法转换为编程语言描述的程序,这个转换通常是手工进行的,也就是说程序员进行程序设计。编程语言自然语言不同和的是,其具有严格的执行顺序,不存在二义性,能够唯一确定执行指令的顺序。这里需要扩展的是编程语言又分为高级编程语言和低级编程语言。这里所谓的高级编程语言并非指语种的好坏高低,而是离硬件底层的远近,普通用户使用最多的是高级编程语言,低级语言则是和运行程序的计算机的底层结构密切相关,通常指机器级语言。所谓的机器语言就是二进制进行编码的机器指令,再简单而言是0/1的序列。

因此,低级语言可读性差,也不易记忆,程序员的编写和阅读都有极大的困难。因此,人们引入 机器语言的符号表示语言,通过简短的英文符号和二进制代码建议对应关系,以方便程序员编写和阅读机器语言程序,这种语言被称为汇编语言,因为高级语言的可读性比低级语言可读性要好很多,所以绝大多数程序员使用高级语言编写程序,编写好后的程序通过汇编成低级语言供计算机识别。

步骤3: 将高级语言转换为计算机可理解的机器语言,这个过程通常由系统自动完成,这项工作由翻译程序完成,被翻译的语言和程序分别称为源语言和源程序,翻译生成的语言和程序分别为目标语言和目的程序,整个翻译过程称为编译。

4.2 计算机系统的不同用户

按照计算机使用者的不同角色,可以把计算机的用户分为如下四类:最终用户、系统管理员、应用程序员、系统管理员。

  1. 最终用户
  2. 系统管理员
  3. 应用程序员
  4. 系统程序员

最终用户: 如在座的各位就是最终的用户。通过键盘鼠标等外设设备和计算机交互,通过操作系统提供的用户界面。

系统管理员: 相对普通的计算机最终用户,系统管理员作为管理和维护计算机系统的专业人员,需对计算机有深入了解,安装、配置、维护系统的软硬件,维护业务正常运行,适时备份恢复处理业务等。

应用程序员: 大多使用高级程序设计语言编写程序,常见的高级编程语言如,C/C++/C#,Java、go、Python、PHP、Ruby、Perl等等

系统程序员: 开发操作系统,编译器,和实用程序系统软件,需熟悉计算机谨慎的相关硬件和系统结构,甚至需要直接和计算机硬件和指令系统打交道。比如,直接对各种控制寄存器、用户可见寄存器、I/O控制器等硬件进行控制和编程。

本文分享自微信公众号 - 运维部落(linux178),作者:松鼠尚学堂

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Docker镜像竟然也是容器?!Docker 到底为什么这么快!?

    Docker虚拟化技术是基于容器化,容器化技术的本质其实是基于内核资源调度的再分配! 并不是什么新技术,只是近年Linux内核更加成熟,在资源调度隔离更成熟,所...

    运维部落
  • CA数字签名的由来

    上一次内容我们介绍了TLS加密原理,为什么要加密通信呢?是因为我们不希望我们的个人信息被明文传播,任何一个人只要截断我们的物理线路或者入侵到我们网络中,就能获取...

    运维部落
  • 分布式系统的时间问题

    1 什么是时间? 2 物理时间:墙上时钟 3 逻辑时钟:为事件定序 4 Turetime:物理时钟回归 5 区块链:重新定义时间 6 其他影响 6.1 NT...

    运维部落
  • 关于JVM内存的N个问题

    JVM的内存划分中,有部分区域是线程私有的,有部分是属于整个JVM进程;有些区域会抛出OOM异常,有些则不会,了解JVM的内存区域划分以及特征,是定位线上内存问...

    Tencent JCoder
  • Java虚拟机内存管理(三)—内存异常

    Java 虚拟机作为运行 Java 程序抽象出来的计算机,具有内存管理的能力,像内存分配、垃圾回收等这些相关的内存管理问题,Java 虚拟机都会帮我们解决,所以...

    Wizey
  • 关于JVM内存的N个问题

    了解JVM的内存区域划分以及特征,是定位线上内存问题的基础。那么JVM内存区域是怎么划分的呢?

    Tencent JCoder
  • 腾讯云:2019年云服务器秒杀活动20元起

    腾讯云服务器,也叫“良心云”,在秒杀活动的时候价格那是一跌到底,诚意十足;需要购买国内云服务器的大兄弟们,可以在秒杀的时候买入,账户都是自己的,安全系数高;不用...

    用户2416682
  • 《机器学习》笔记-规则学习(15)

    如今机器学习和深度学习如此火热,相信很多像我一样的普通程序猿或者还在大学校园中的同学,一定也想参与其中。不管是出于好奇,还是自身充电,跟上潮流,我觉得都值得试一...

    机器学习算法工程师
  • Java排序之快排

    假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的...

    赵哥窟
  • [linux][memory] 内存回收

    前言: 前文《内存映射技术分析》描述了虚拟内存的管理、内存映射;《物理内存管理》介绍了物理内存管理。 本篇介绍一下内存回收。内存回收应该是整个Linux的内存管...

    皮振伟

扫码关注云+社区

领取腾讯云代金券