Before Reading:
大三的时候因为去UW-Madison交流了一个学期,而国内的大三上学期恰好需要上计算机网络和计算机组成原理这两门课,所以当时没能上上这两门课。
我自己之前写了一个操作已经对组成原理有了诸多认识,但是还是不妨随着课堂再正是学习一下理论知识
第一章:计算机系统概述
一、计算机发展历程
本节知识结构如下:
1. 什么是计算机系统
计算机系统原理是一门研究计算机系统的课程。因此,我们首先需要了解计算机系统。
计算机系统由软件和硬件两部分组成:
- 硬件指的是计算机的实体部分,就是我们看得见、摸得着的部分,例如:主机和鼠标、键盘这样的外设
- 软件指的是我们看不见、摸不着但是能用的部分,例如:操作系统、微信、微博
硬件是计算机的物理基础,决定了计算机性能的上限;而软件决定了我们能把计算机硬件的性能发挥到什么样的程度,因此决定了计算机性能的下限
因此我们在评判一个计算机系统性能的好坏的时候是需要综合评判软件和硬件
1.1 软件
计算机系统中的软件可以分为两类:系统软件和应用软件
- 系统软件用于管理整个计算机系统,包括对软件的管理和对硬件的管理,例如:操作系统、数据库管理系统、网络软件(TCP/IP等网络协议的实现库)、……
- 应用软件就是针对我们的任务所开发的程序,例如:美图秀秀、抖音、……
计算机组成原理这门课上,我们更加关注的是计算机的硬件组成,所以我们接下来就先看看计算机(硬件)的发展历史。
2. 计算机(软硬件)的发展
2.1 计算机的发展
2.1.1 电子管时代:ENIAC
世界上第一台计算机是1946年的ENIAC计算机。它是第一次世界大战接近尾声的时候所诞生的,其主要目的是为盟军计算炮弹的飞行轨迹。
因为手动计算速度非常慢,所以军方要求能够制造一台能够自动进行数学计算的机器,即ENIAC。
ENIAC的制作聘请了一位资深的计算机科学家,即冯诺依曼,即计算机之父。
ENIAC使用电子管作为逻辑元件来进行运算。而电子管不仅体积大,而且耗电量也大。因此使用了1.8万个电子管的ENIAC占满了一整个房间,而且功耗巨大,运行时发热惊人。
以ENIAC为代表的这一代计算机,我们称其为电子管时代。
在这个时代,程序员都是直接使用机器语言进行编程的,用纸带打孔表示0和1,而后计算机通过纸带机读入程序,进行运行。
这个时代的计算机需要人工手动接线,因此如何有一只虫子卡在内部了,就会造成程序运行异常,即出现了bug
2.1.2 晶体管时代:更小、更快、更强
电子管时代的计算机主要使用电子管来完成计算,而电子管非常笨重,不方便使用。后来在1960年代,大名鼎鼎的贝尔实验室发明了晶体管。
晶体管的
晶体管和电子管的电气特性是一样的,只不过需要的电流电压更低、反应更加迅速。因此使用电子管就可以替代晶体管制造出同样功能,但是体积和运算速度更快的计算机。
因此在这个阶段计算机的体积相比于电子管时代的计算机体积小了很多,只需要一个柜子就可以装下,并且运算速度有了极大的提升
与此同时一些高级的编程语言(相比于机器语言)开始出现,操作系统也有了雏形。
基于晶体管的计算机在制作的时候需要对针脚进行焊接,而一台计算机几万个晶体管,对应的就有几十万个焊点。只要有一个焊点接触不良,那么整个计算机都会受到影响。
2.1.3 中小规模集成电路时代
1970年代,为了更改掉人工焊接晶体管容易出错这个问题,人们就发明了集成电路。所谓集成电路就是将各种逻辑元件集成在一个基片上。基片上通过印刷提前布线,同时给逻辑元件预留了触点。
这样,我们能够使用更小的空间存放更多的原件,使得可靠性提高的同时性能有了提升,同时功耗降低。
在这个时代,高级编程语言开始出现,并且分时操作系统开始出现。但是此时的计算机依旧用于科学计算而非通用计算。
2.1.4 大规模集成电路时代
随着集成电路工艺的不断提升,人们将越来越多的逻辑元件放到基片上。以至于一个指甲盖大小的芯片就能有数十亿个晶体管,从而使得芯片的体积功耗进一步下降,同时运算能力有了极大地提升。
因为有了微处理器,个人PC开始萌芽,走进千家万户,同时个人操作系统开始出现。
2.2 微处理器的发展
说到微处理器,就不得不提到Intel的大名。下面是Intel的微处理器发展表。
- 所谓机器字长的概念就是指计算机一次整数运算所能处理的二进制位数
- 一些经典、具有重要意义的微处理器:
- 8086是Intel最经典的CPU,奠定了整个Intel CPU基础结构(至少是面对程序员的)
- 16位架构:8086是一个16位处理器,意味着它的内部寄存器是16位的,数据总线宽度为16位,可以在一个操作中处理16位数据。
- 20位地址总线:8086有20位地址总线,这意味着它可以寻址到1MB(1024KB)的内存空间。
- 分段内存模型:8086使用了分段内存模型,内存被划分为多个段,每个段可以独立寻址,最大可达64KB。这种设计允许程序员更有效地组织和管理内存。
- 中断和异常处理:8086有一个完善的中断和异常处理机制,可以响应不同的硬件中断和软件异常。
- 从80386开始,Intel CPU进入了32位时代,这个时候汇编的基础结构就成了:段描述符+段内偏移的形式,同时出现了保护模式
- 32位架构:80386是Intel的第一个32位微处理器。这意味着它的内部寄存器、数据总线和地址总线都是32位的,可以在一个操作中处理32位数据,并可以寻址到4GB的内存空间。
- 保护模式:80386引入了保护模式,这是一种新的操作模式,提供了内存保护、多任务支持和虚拟内存等高级特性。保护模式是现代操作系统(如Windows,Linux等)的基础。
- 虚拟8086模式:在保护模式下,80386可以运行一个或多个虚拟8086模式的任务,每个任务就像在一个独立的8086处理器上运行一样。
- 分页机制:80386引入了内存分页机制,允许操作系统将物理内存划分为固定大小的页,这是实现虚拟内存的关键。
- 硬件调试支持:80386引入了一些硬件调试特性,如断点、单步执行等。
- 从奔腾处理器(Pentium)开始,Intel CPU进入了64位时代,同时引入了:
- 64位模式:这是新引入的模式,允许运行64位应用程序。在这种模式下,处理器可以使用64位寄存器,可以直接访问大于4GB的内存。
- 超标量架构:奔腾处理器是Intel首次引入超标量架构的产品。超标量架构允许处理器在一个时钟周期中执行多于一个的指令。
- 双核技术:虽然并不是奔腾系列首次引入,但是在奔腾D和奔腾双核处理器中,Intel开始使用多核处理器设计。
- 分支预测:奔腾处理器引入了更复杂的分支预测机制,以减少由于指令跳转引起的处理器空闲时间。
- 虚拟化技术:在一些奔腾处理器中,Intel引入了硬件支持的虚拟化技术(Intel VT-x)。
- MMX技术:奔腾处理器是第一个引入MMX(MultiMedia eXtensions)技术的Intel处理器,这是一种专门用于加速多媒体和通信应用的指令集。
- 8086是Intel最经典的CPU,奠定了整个Intel CPU基础结构(至少是面对程序员的)
2.3 晶体管的发展
说到晶体管的发展,就不得不提到八叛徒和仙童。
晶体管的发明人是肖克利,他最早在贝尔实验室发明了半导体。后来意识到了半导体广大的市场后选择了从贝尔实验室退出,成立自己的公司专门从事半导体的设计、制造和销售
有着半导体之父的名称,肖克利的公司快速吸纳到了大量的人才,其中有八位才华横溢的年轻人
尽管肖克利做科研很牛,但是却不擅长对公司的管理,所以后来八个人集体辞职,出去自立门户,成立了仙童半导体公司。因此肖克利把它们称为八叛徒。
一开始仙童半导体公司干的还是老本行,也是制造、销售半导体。一直直到后来八个人发明了集成电路,使得计算机步入了集成电路时代。
因为发明集成电路的成功,仙童半导体公司很快被人收购,这八个人就陆续先后离开了仙童半导体,出去创建自己的公司。
- 首先是1968年,摩尔等人离开仙童,创立 Intel
- 然后是1969年,仙童销售部负责人桑德斯离开仙童,创立 AMD
所以到今天为止,大名鼎鼎的Intel和AMD其实都有半导体祖师爷的渊源。
2.4 摩尔定律
八叛徒中最有名的就是摩尔这个人了。作为Intel的创始人,他提出了摩尔定律:
- 集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,整体性能也将提升一倍
实际上除了这个针对处理器的摩尔定律,还有一个针对存储器的摩尔定律:
- 相同价格下存储器的容量每18个月翻一倍,或者相同容量的存储器价格每18个月价格降一半
2.5 软件的发展
软件的发展是伴随着硬件的发展而发展的,这里我们把软件的发展单独拉出来说。
首先是编程语言的发展
- 在计算机发展的初期,即ENIAC时期,所有的程序都是用机器语言直接编写的,编程语言就只有机器语言这一种语言。因为机器语言的可读性很差,所以同一时期诞生了汇编语言,即使用助记符标记的机器语言
- 后来为了更方便的编程,就出现了Fortran、Pascal这类语言,但本质上来说,Fortran依旧是比较原始的语言,例如变量都必须在程序头部声明
- 再后来就出现了C++这样面向对象的语言
- 到2000年左右,互联网的出现是的Java这种面向互联网应用的语言得到了极大的发展
其次是操作系统的发展
- 在计算机的早期,是没有操作系统的这个概念的,计算机读入程序后运行,运行结束后计算机关机
- 然后出现了批处理系统,计算机会读入多个程序,然后这些程序(当时称为任务)之间会排队,分次运行
- 接下来就出现了分时操作系统,操作系统分时间片给每个程序,此时出现了类似于DOS这样基于终端交互界面的操作系统
- 后来出现了图形界面,有了现在的Windows、Linux、MacOS
- 到现在出现了手机上的移动操作系统,例如Android、iOS和
2.6 目前的发展趋势
目前的发展趋势是朝着两极分化的趋势发展:
- 一极是微型计算机向更微型化、网络化、高性能、多用途方向发展
- 另一极是巨型机向更巨型化、超高速、并行处理、智能化方向发展
3. 总结
最后给出这一节的总结
二、计算机硬件的基本组成
本节知识结构如下: