计算机组成原理之概述篇
计算机发展简史
第一个阶段:电子管计算机 第二次世界大战是电子管计算机产生的催化剂(英国为了破解德国海军的密文) 没有计算机前需要人为计算,效率低下,催生出第一台电子管计算机ENIAC. 电子管计算机特点:集成度小,空间占地大;功耗高,运行速度慢;操作复杂,更换程序需要接线。 第二个阶段:晶体管计算机 贝尔实验室的三个科学家发明了晶体管。 第一台晶体管计算机来自于MIT林肯实验室,拥有4k内存,每秒200,000指令. 晶体管计算机特点:集成度相对较高,空间占用相对小;功耗相对较低,运行速度较快,操作相对简单,交互更加方便。 第三个阶段:集成电路计算机 德州仪器的工程师发明了集成电路。 集成电路计算机特点:计算机变得更小,功耗变得更低,计算速度变得更快。最初IBM公司基于此推出了两款计算机7094和1401,但是其主打功能不同,且相互不兼容,IBM不愿意投入两组人力,于是其u后续推出了兼容的产品System/360,这也就是操作系统的雏形。 第四个阶段:超大规模集成电路计算机 一个芯片集成了上百万的晶体管。 超大规模集成电路计算机特点:速度更快,体积更小,价格更低,更能被大众接受。其用途更加丰富,可以处理文本,表格处理,高交互的游戏与应用。 第五个阶段:未来计算机(生物计算机、量子计算机) 生物计算机特点:体积小、效率高;不易损坏,生物级别的自动修复;不受信号干扰,无热损耗; 量子计算机特点:很牛逼就对了。
微型计算机发展历史
摩尔定律:集成电路的性能,每18~24个月就会提升一倍!
计算机分类
超级计算机:功能最强、运算速度最快、存储容量最大的计算机;主要用于国家高科技领域和尖端技术研究。 标记他们运算速度的单位是TFlpos/s 1TFlops/s = 每秒一万亿次浮点计算 大型计算机:又称大型机、大型主机、主机等;具有高性能,可处理大量数据与复杂的运算。 IBM是服务器提供商,ORACLE是数据库软件提供商,EMC是存储设备提供商。因此IOE代表了高维护费用,且其不够灵活伸缩性弱。阿里提出了去"IOE"行动。 迷你计算机(服务器):又称小型机,普通服务器,不需要特殊的空调场所,具备不错的算力,可以完成较复杂的运算。 工作站:高端的通用微型计算机,提供比个人计算机更强大的性能;类似于普通台式机电报,体积较大,但性能较强。 微型计算机:又称个人计算机 ,是最普通的一类计算机;麻雀虽小五脏俱全;从构成本质上而言,个人计算机与前面的分类无差异。
冯诺依曼体系
冯诺依曼提出将程序指令和数据一起储存的计算机设计概念,其概念结构如下:
按照上面的设计结构,必须有一个存储器,一个控制器,一个运算器,一个输入设备,一个输出设备。 现代计算机都是冯诺依曼机。 ①能够把需要的程序和数据送至计算机中; ②能够长期记忆程序、数据、中间结果及最终运算结果的能力; ③能够具备算术、逻辑运算和数据传送等数据加工处理的能力; ④能够依照要求将处理结果输出给用户。
冯诺依曼瓶颈:CPU和存储器速率之间的问题无法调和。
现代计算机的结构
计算机的层次与编程语言
程序翻译(编译)和程序解释 ①计算机执行的指令都是L0; ②翻译过程生成新的L0程序,解释过程不生成新的L0程序; ③解释过程由L0编写的解释器去解释L1程序。 编译型语言:C/C++,Golang 解释型语言:Python,Php,Javascript 编译+解释:Java,C#
补充:
1.编译型语言在编译过程中生成目标平台的指令,解释型语言在运行过程中才生成目标平台的指令。
2.像java中jvm的任务是在运行过程中将中间代码翻译成目标平台的指令。
计算机层次与编程语言
硬件逻辑层:关于门、触发器等逻辑电路组成;属于电子工程的领域; 微程序机器层:编程语言是微指令集;微指令所组成的微程序直接交由硬件执行; 传统机器层:编程语言是CPU指令集(机器指令);编程语言和硬件是直接相关;不同架构的CPU使用不同CPU指令集; 注意: 微指令< 微程序 =机器指令 一条机器指令对应一个微程序;一个微程序对应一组微指令 操作系统层:向上提供了简易的操作界面;向下对接了指令系统,管理硬件资源;操作系统层是在软件和硬件之间的适配层; 汇编语言层:编程语言是汇编语言;汇编语言可以翻译成可直接执行的机器语言;完成翻译的过程就是汇编器; 汇编语言的例子: PUSH DS PUSH AX MOV AX,0040 MOV DS,AX 高级语言层:编程语言为广大程序员所接受的高级语言;高级语言的类别繁多,大致有200+; 应用层:满足计算机针对某种用途而抓门设计。 PS:分层的目的是为了便于理解。
计算机的计算单位
容量单位
速度单位
计算机速度主要分两个方面:网络速度;CPU频率
计算机的字符与编码集
...
习题:
1.计算机的发展历史大概可以分为几个阶段?每个阶段的计算机分别有什么特点?
2.你了解“摩尔定律”吗?“摩尔定律”对现代计算机产生了什么影响? 3.你了解冯诺依曼机吗?你是否可以大概描述冯诺依曼机的基本组成和工作原理?冯诺依曼机相对于之前的计算机有什么重要改进? 4.什么是冯诺依曼瓶颈?冯诺依曼瓶颈对现代计算机产生了什么影响? 5.你了解程序解释和程序翻译吗?什么是编译型语言,什么是解释型语言呢? 6.请你列举十种以上的编程语言,并分别分类他们属于什么类型的语言。 7.你了解计算机的层次结构吗?今天的软件和硬件是怎么界定的。 8.请你尝试说明高级语言、汇编语言和机器语言的区别和联系? 9.请完成常见的容量换算公式: 1). 1G = ( )Bytes 2). 1Byte = ( )bits 3). 一条内存条的容量大约2( ) 4). 一个磁盘的容量大约1( ) 5). 一个SSD的容量大约256( ) 10.CPU的速度一般使用什么做单位?它具有什么物理意义? 11.网络的速度一般使用什么做单位? 12.20世纪80年代以前的计算机是不支持输入中文的,当时的计算机使用的是什么编码集? 13.ASCII编码集占用多少个字节? 14.‘A’, ‘b’, 'C’对应的ASCII十进制数值分别是多少? 15.你可以使用你熟悉的语言将 72、96、108转换为ASCII码吗? 16.你知道Unicode编码和UTF-8编码的区别和联系吗? 17.假设有10000个汉字,6000个日本字,3000个韩国字,1000个特殊字符,如果让你设计一套通用的编码集,请问每个字至少几个比特位?
答案: 1.四个阶段:电子管计算机、晶体管计算机、集成电路计算机、超大规模集成电路计算机。 2.摩尔定律:摩尔定律是由英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)提出来的。其内容为:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18-24个月翻一倍以上。这一定律揭示了信息技术进步的速度。尽管这种趋势已经持续了超过半个世纪,摩尔定律仍应该被认为是观测或推测,而不是一个物理或自然法。 3.冯诺依曼机有五大组成部分:输入设备、输出设备、运算器、存储器、控制器。冯诺依曼机把程序指令和运行数据存储起来,使得计算机从专用电路计算机发展成为通用电路计算机。 4.冯诺依曼瓶颈指的是存储器和运算器之间的访问速率差异巨大,使得计算机性能无法提升。现代计算机以存储器为核心,根据局部性原理设计了存储器的层次结构,大幅提升计算机性能。 5.编程语言可以分为解释型语言和编译型语言,程序解释指的是程序代码在运行时,逐行翻译成较低层次的编程语言去执行;程序翻译指的是程序代码在编译阶段提前翻译成较低层次的编程语言逻辑,在运行时直接运行。 6.编译型语言:C、C++、Go、OC,解释型语言:Php、Python、Javascript、Perl、Lua,翻译+解释型语言:Java、C#、Kotlin等。 7.计算机的层次结构划分是为了方便理解计算机的整一个体系,在不同书籍或领域会有不一样的划分,没有绝对的正确。今天的软件、硬件的划分以硬件电路为界限,从涉及硬件电路逻辑往下的都归为硬件,要注意软件和硬件的划分也是与时俱进的,今天的软件很可能明天就变成了硬件,比如以前编写硬件逻辑代码是软件,而随着高级编程语言的出现和成熟,现在编写硬件逻辑代码已经视为硬件部分了。 8.高级语言是方便程序员描述程序逻辑的编程语言,与人类语言接近;汇编语言时方便程序员描述硬件逻辑的编程语言,与底层硬件接近;机器语言时方便计算机理解和运行的编程语言,一般程序员无法理解。 9.1024^3;8;GB;TB;GB。 10.赫兹,是国际单位制中频率的单位,它是每秒中的周期性变动重复次数的计量。1Hz = 1/s,即在单位时间内完成振动的次数,单位为赫兹(1赫兹=1次/秒)。 11.bps,比特率是指每秒传送的比特(bit)数。单位为 bps(Bit Per Second),比特率越高,每秒传送数据就越多。 12.ASCII编码集。 13.ASCII有128个字符,占用7个比特位,扩展ASCII编码机占用8个比特位,一个字节。 14.65、98、67。 15.Python使用chr函数就可以将十进制数转换为ASCII码对应字符。 >>> chr(72) 'H' >>> chr(96) '`' >>> chr(108) 'l' 16.Unicode全名为:统一码、万国码,是计算机科学领域里的一项业界标准。Unicode标准有不同的编码实现,比如UTF-8、UTF-16、UTF-32,也即是可以有多种规则来实现Unicode标准,比如UTF-8使用的是不定长字节表示Unicode字符,在表示高位Unicode字符时可以自动扩展,UTF-32使用的是定长4个字节表示Unicode字符。 17.10000+6000+3000+1000=20000个字符,最起码使用15个比特位,占2个字节。
做一枚奔跑的老少年!