Java架构师成长之道之计算机组成原理概述篇

Java架构师成长之道

1.1 计算机的发展简史

1.1.1 计算机发展的四个阶段

自从1945年至今,计算机经历了电子管计算机,晶体管计算机,集成电路计算机以及超大规模集成电路计算机。

  • 电子管计算机(1945年-1957年)
    第二次世界大战是电子管计算机产生的催化剂,而最著名的电子管计算机是来自美国的埃尼阿克(ENIAC),这一时期的计算机有如下特点:

    • 集成度小,占用空间大
    • 功耗高,运行速度慢
    • 操作复杂,更换程序需要接线
  • 晶体管计算机(1957年-1964年)
    1948年,贝尔实验室的三个科学家发明了晶体管,相比电子管而言,晶体管有着更小的体积,更低的功耗以及更高的运算效率。而全世界第一台晶体管计算机TX-0诞生于麻省理工大学的MIT林肯实验室,而当时性能最高的计算机是PDP-1,它具备4K的内存,每秒可以执行20W条指令,同时配备了512*512的显示器,晶体管相对于电子管计算机而言:

    • 集成度相对较高,占用空间相对较小
    • 功耗相对较低,运行速度较快
    • 操作相对简单,交互更加方便
  • 集成电路计算机(1964年-1980年)
    集成电路计算机出现的背景是德州仪器的工程师发明了集成电路(IC),

    • 计算机变得更小
    • 功耗相对较低,
    • 运行速度较快
    • 具备进入千家万户的条件
      在集成电路计算机阶段,IBM有两款畅销的计算机 IBM 7094和IBM 1401 ,但是这两款计算机主打的功能不同,并且相互无法兼容,而且企业购买IBM 7094和IBM1401后也不愿意投入两组人力开发,在此背景下IBM推出了兼容的产品System/360,也就是操作系统的雏形,它的出现使得不同的电子元器件,不同电路的计算机都能在同一个操作系统下运行。
  • 超大规模集成电路计算机(1980年-今)
    CPU就是超大规模集成电路的典型产品,一个芯片可以集成上百万的晶体管。
    而且超大规模集成电路计算机速度更快,体积更小,价格更低,更能被大众接受,同时在此阶段计算机用途也变得丰富起来,可以用于文本处理,表格处理以及高交互的游戏和应用。
    而乔布斯在这个阶段推出了Apple,Apple二代。

  • 未来计算机
    随着计算机的发展,未来会出现生物计算机和量子计算机。

生物计算机是以蛋白质分支作为主要原材料,和人体结合起来进行相关的运算。而且生物计算机体积小,不易损坏,提供生物级别的自动修复以及不受信号干扰和无热损耗。

量子计算机是遵循量子力学的物理计算机。
目前量子计算机已经有相关的研究成果

  • 2013年5月,谷歌和NASA发布了D-Wave Tow
  • 2017年5月,中国科学院宣布制造出光量子计算机。
  • 2019年1月,IBM展示了世界首款商业化量子计算机
    而且目前国内的阿里和腾讯在量子计算机领域进行相关的研究。

1.1.2 微型计算机的发展历史

微型计算机主要是计算机发展你的第三个阶段集成电路计算机开始。
微型计算机的发展主要是从计算能力区分的,在早期微型计算机是使用的单核CPU,而单核CPU的发展也经历了如下几个阶段

  • 1971年-1973年 500KHz频率的微型计算机(字长8位)
  • 1973年-1978年 高于1M频率的微型计算机(字长8位)
  • 1978年-1985年 500MHz频率的微型计算机(字长16位)
  • 1985年-2000年 高于1GHz频率的微型计算机(字长32位)
  • 2000年-今 高于2GHz频率的微型计算机(字长64位)
    而关于CPU性能,还有一个著名的定律-摩尔定律:当价格不变的情况下,集成电路元器件每隔18-24个月会提升一倍,性能就会提升一倍。
    但是到21世纪,单核CPU逐渐出现了性能的瓶颈。而多核CPU的出现是为了解决单核CPU的性能瓶颈
  • 2005年CPU产商Intel发布了奔腾系列CPU
  • 2006年CPU产商Intel发布了酷睿四核CPU
  • 目前在个人电脑可以选配Intel酷睿系列16核CPU,而服务器领域可以选择Intel至强系列56核CPU

1.2 计算机的分类

计算机可以按照不同的用途分为超级计算机,大型机,小型机,个人计算机。

  • 超级计算机
    超级计算机是功能最强,运算速度最快,存储容量最大的计算机,主要用于国家高科技领域尖端技术研究,我们使用每秒一万亿浮点数计算(1TFlop/s)指标来衡量超级计算机的性能。
    如果想要了解超级计算机的排名,可以访问网站 https://www.top500.org/。

  • 大型计算机
    大型计算机又称为大型机、大型主机、主机等等,大型计算机具有高性能。可处理大量数据与复杂运算,应用场景通常是银行、证券等金融机构。在大型机市场领域,IBM占据着很大的份额。
    由于大型机造价高昂,不够灵活,伸缩性弱,目前很多企业替换成小型机。
    阿里巴巴在2008年发起去IOE行动,I就是IBM大型机,O就是商业数据库Oracle,E就是EMC存储,IOE代表了高成本,高维护费用的存储系统。去IOE就是将大型机换成了普通的服务器,将Oracle替换成了分布式的MySQL,去IOE行动直接驱动了阿里云的诞生。

  • 服务器
    服务器也被称为小型机,普通服务器,相对于大型机而言,不要特殊的空调场所,同时也具备不错的算力。常见的服务器厂商包括戴尔,联想,IBM。
    普通服务器已经替代了传统的大型机,成为大规模企业计算机的中枢纽,比如国内的阿里云、腾讯云、华为云都是基于服务器构建的。

  • 工作站
    工作站是高端的通用微型计算机,可以提供比个人计算机更强大的性能,类似于普通台式电脑,体积大,性能强劲,例如Mac Pro。

  • 微型计算机
    微型计算机又称为个人计算机,是最普通的一类计算机,可以分为台式机、笔记本电脑、一体机,微型计算机是成本最低的,但是从构造本质来讲,个人计算机与超级计算机、大型机、小型机、工作站没有区别。

平常开发人员通常接触的比较多的是微型计算机,例如笔记本、台式机,而运维人员通常接触的是服务器。

1.3 计算机的体系结构

1.3.1 冯诺依曼体系

冯诺依曼体系就是将程序指令和数据一起存储的计算机设计概念结构。

早期的计算机仅能运行固定用途的程序,如果想要运行别的程序,必须要更改计算机结构、重新设计电路。而冯洛伊曼是把程序存储起来,并设计通用的电路。存储程序指令,设计通用电路

冯诺依曼体系由以下部分组成

  • 必须有存储器,存储运行的程序和数据,长期记忆程序、数据、中间结果和最终结果的运算能力
  • 必须要有控制器,控制程序的流程以及数据的流转
  • 必须要有运算器,负责完成数据的算数、逻辑运算
  • 必须要有输入设备,负责完成程序指令和数据的输入
  • 必须要要输出设备,负责完成程序的处理结果输出
    现代计算机都是属于冯诺依曼机。
    CPU是由运算去和控制器组成,而冯诺依曼结构是将存储器和CPU分开,会导致冯诺依曼瓶颈:CPU和存储器速率之间的问题无法调和,CPU经常空转等待数据的传输,这样无法充分利用CPU。

1.3.2 现代计算机的结构

现代计算机结构由冯诺依曼结构基础之上进行修改,主要是解决CPU和存储器速度差异的问题:存储器、运算器和控制器集中在一块芯片上。

现代计算机结构

现代计算机结构以存储器为核心的结构。而CPU是由运算器、控制器和存储器(寄存器)组成

1.4 计算机的层次与编程语言

1.4.1 程序编译和程序解释

由于高级编程语言和计算机底层语言是互不相通的,计算机最底层只能识别01010这种二进制的机器指令,因此需要使用工具进行语言之间的转换。这个就是程序编译或者解释的由来。

为了理解程序编译和程序解释,这里引入两种语言,分别是高级计算机语言L1,以及低级计算机语言L0。

  • 程序编译
    开发人员使用高级编程语言L1编写的应用程序通过编译器生成成计算机底层能够识别的低级语言L0,L0就是计算机实际执行的语言,而编译器生成的计算机底层识别的二进制机器指令过程就是程序编译。常见的编译型语言有C/C++/Objective-C/Go

  • 程序解释
    首先使用L0语言实现另外一个程序,也就是解释器,然后将开发人员使用高级语言L1编写的应用程序作为输入,每一句L1编写的程序都会在L0中作为等价的转换然后执行,解释的过程就是由L0编写的解释器去解释L1程序。常见的解释型语言有PHP,Python,JavaScript。

而Java和C#属于编译+解释型语言,以Java为例子,Java程序在运行之前首先被编译成Java字节码,然后在JVM虚拟机上解释运行。

1.4.2 计算机程序和编程语言

计算机的层次由上到下可以分为如下几个层次:

  • 应用层

  • 高级语言层
    高级语言就是用来开发日常应用的计算机语言,常见的高级语言有C/C++/Java/Python/Go等等。

  • 汇编语言层
    汇编语言也是一种编程语言,汇编语言可以编译成直接执行的机器语言,而完成编译的过程就是汇编器,从汇编语言开始使用的语言就是人类比较容易理解的语言。

  • 操作系统层
    操作系统主要是用于给应用软件提供运行平台,同时管理和调度硬件资源。位于软件和硬件的适配层。

  • 传统机器层
    编程语言主要是CPU指令集(机器指令),而开发人员使用机器指令编写的程序可以交由微程序直接进行解析,指令集存储在CPU内部,对CPU的运算进行指导和优化应用程序。CPU可以通过指令集运行程序以及进行相应的逻辑处理。
    传统机器层的编程语言和硬件直接相关,但是由于不同架构的CPU使用的是不同的CPU指令集,也就是英特尔的CPU上运行的程序不能在AMD的CPU上运行。

  • 微程序机器层
    编程语言主要是微指令集,微指令所组成的微程序直接交由硬件执行。主要由硬件厂商的开发人员编写。一条机器指令对应一个微程序,一个微程序对应一组微指令,微程序=机器指令。

  • 硬件逻辑层
    硬件逻辑层主要有门电路、触发器等逻辑电路组成,所属电子工程领域。

传统机器层、微程序机器层和硬件逻辑层属于实际机器层,和物理设备相关。
操作系统层、汇编语言层、高级语言层和应用层称为虚拟机器。而操作系统层、汇编语言层、高级语言层统称为系统软件,应用层主要是完成日常任务的各种程序,例如Office,微信等等。

1.5 计算机的计算单位

1.5.1 容量单位

在购买电脑时,通常会选择高配置的内存、硬盘。例如最新款(2019)15寸的macBookPro已经可以选配32G内存和4T的固态硬盘,而这里的32G和4T就是常用的容量单位。

在物理层面,我们使用高低电平来记录信息,通常使用高电平表示1,低电平表示0,因此在计算机底层只能认识0,1两种状态。而0,1能够表示的内容太少了,迫切需要更大的容量表示方法,因此诞生了字节(Byte),千字节(KB),兆字节(MB),吉字节(GB),太字节(TB),拍字节(PB),艾字节(EB),它们之间的换算关系如下所示

1EB=1024PB
1PB=1024TB
1TB=1024GB
1GB=1024MB
1MB=1024KB
1KB=1024B
1Byte=8bit

位(bit)是最小的计算机容量单位,通常用于门电路。
而字节(Byte)表示网络传输,文件大小,是最基本的容量单位。
兆字节(MB)表示网速的容量单位
吉字节(GB)通常用于表示计算机内存、磁盘的容量单位
太字节(TB),拍字节(PB)通常是用于表示云硬盘的容量单位
艾字节(EB)通常是用于表示数据中心的容量单位

现在通常笔记本的内存通常是8G,16G,32G,64G等等,而运行在笔记本之上的操作系统普遍都是64位的,因为32位系统只能使用4G内存,下面是4G的内存换算

4G=2^2 * 2^10 * 2^10 * 2^10 =4*1024*1024*1024=2^32

在购买内存或者买移动硬盘时,通常使用的存储单位就是GB或者是TB,
但是在买4T的移动硬盘时,实际的可用容量却只有3T多,因为计算机的存储单位是以2的10次方(即1024)换算,而硬盘厂商们是以1000为换算单位。

4T的硬盘换算成位如下所示

4T=4*1024GB*1024MB*1024KB*1024B*8bit

而硬盘厂商的实际容量

4T=1000*1000*1000*1000*8

因此实际的可用容量是

4*1000*1000*1000*1000/1024/1024/1024/1024≈3.63T

而在一些互联网巨头(例如国内的BAT,国外的亚马逊、苹果、微软、谷歌,脸书)公司中,可能使用到比TB更大的海量数据,也就是PB或者EB,它们的换算单位如下所示。

1PB=1024TB
1EB=1024PB

1.5.2 速度单位

1.5.2.1 网络速度

网络常用的单位是Mbps
而网络带宽提供商(例如长城宽带)声称的百兆带宽实际上是100Mbit/s,但是100M光纤测试的峰值速度只会有12MB/s,它们之间的换算是100Mbit/s=(100/8)MB/s=12.5MB/s。

1.5.2.2 CPU速度

CPU的速度一般是由CPU的时钟频率所体现的,而时钟频率的单位是赫兹(HZ),目前主流的CPU时钟频率一般都在2GHz以上,而赫兹(Hz)其实就是秒分之一,也就是每秒钟的周期性变动重复次数的计量。
2GHz=21000^3Hz=2100010001000=20亿,也就是说2GHz的CPU每秒可以变化20亿次。

1.6 计算机的字符与编码集

1.6.1 字符集编码

在计算机底层(内存、硬盘)都是使用01001二进制的方式存储数据,而字符编码集是描述了计算机数据(例如字符数据)和底层二进制数据的对应关系,例如在ASC||码中字符a对应的十进制整数是97,字符A对应的十进制整数是65。

1.6.2 字符编码集的历史

1.6.2.1 ASC||码

由于计算机最早是诞生在英美,因此最早的字符集是ASC||,用于表示日常开发中常用的大小写字母以及常用的符号,使用7bits表示,包含95个可打印字符课33各个不可打印字符(包括控制字符),95+33=128,即2的7次方。

1.6.2.2 可扩展的ASC||码

随着计算机的发展以及逐渐普及,ASC||码在很多应用或者国家中的符号无法表示,例如数学符号"≠,≥,≈,π",因此对ASC||进行扩充,由原来的7bit扩充到8bits,因此可以表示256个字符。扩展的运算符增加了数学运算符、带音标的欧洲字符以及其他常用符、表格符等等。

1.6.2.3 Unicode

随着计算机的进一步发展。越来越多的国家开始使用使用计算,而对于欧洲、中亚、拉丁美洲国家的语言多样性,由于语言体系不一样,不以有限字符组合的语言,而中国、韩国、日本的语言最为复杂。

Unicode定义了世界通用的符号集,可以表示世界上所有的国家、所有语言的文字、符号,使用UTF-8,UTF-16,UTF-32实现了编码。

UFT-8:一种变长的编码方案,使用 1~6 个字节来存储;
UFT-32:一种固定长度的编码方案,不管字符编号大小,始终使用 4 个字节来存储;
UTF-16:介于 UTF-8 和 UTF-32 之间,使用 2 个或者 4 个字节来存储,长度既固定又可变。

1.6.2 中文编码集

1980年国内发布了中文编码集 GB2312,一共收录了7445个字符,包含6763个汉字和682个其他符号,但是GB2312不符合国际标准,后来在1995年推出了GBK编码,向下兼容GB2312,向上支持国际ISO标准,GBK收录了21003个汉字,支持全部中日韩汉字。

但是GBK,GB2312都只是本地化的编码集,如果中国人使用GBK或者GB2312开发了一个网站程序,被国外的用户访问了,但是国外的用户不支持GBK或者GB2312,那么看到的网站内容就是乱码。

1.6.2 字符集编码实践

在国内,Windows系统的默认编码是GBK编码,而日常开发中最常使用的是UTF-8字符集。

转载于:https://www.cnblogs.com/ittimeline/p/11142407.html

Java架构师成长之道之计算机组成原理概述篇相关推荐

  1. Java架构师成长之道之计算机组成原理组成篇

    Java架构师成长之道之计算机组成原理组成篇 Java架构师成长之道 2.1 计算机总线 2.1.1 总线概述 以通用串行总线USB(Universial Serial Bus)为例子来理解什么是总线 ...

  2. Java架构师成长之道之浅谈计算机系统架构

    Java架构师成长之道之浅谈计算机系统架构 Java架构师成长之旅 1.1 信息技术发展趋势 目前信息技术主要经历了互联网.移动互联网以及以大数据.云计算.人工智能和区块链为代表的新兴技术三个阶段.而 ...

  3. Java架构师成长之道之Java数据计算

    Java架构师成长之道之Java数据计算 Java架构师成长之道 3.1 Java数据计算概述 计算机最主要的任务就是完成生产生活中的各种数据的运算,在Java中提供了诸多的运算符来完成相关数据的运算 ...

  4. Java架构师成长之道之Java架构师技术栈

    Java架构师成长之道之Java架构师技术栈 Java架构师成长之道 JavaSE篇 Java概述与开发环境搭建 Java数据存储 Java数据运算 Java程序流程控制 Java数组 Java面向对 ...

  5. Java架构师成长之道之Java程序流程控制

    Java架构师成长之道之Java程序流程控制 Java架构师成长之道 4.1 程序流程控制概述 之前编写的绝大多数程序都是顺序执行,也就是从main函数开始,由上到下一行一行的执行,也被称为顺序结构. ...

  6. Java架构师成长之路

    目录导航 前言 一.源码分析专题 1.1 设计模式详解 1.2 Mybatis源码分析 1.3 Spring5源码分析 二.分布式架构专题 2.1 漫谈分布式架构 2.2 分布式架构的基础 2.3 分 ...

  7. Java架构师成长直通车(一):学习指南

    大型网站的特点和设计宗旨 罗马不是一天建成的,对应的,大型网站也不是一来就有的.淘宝诞生在马云的家中,谷歌一开始是在斯坦福大学的宿舍中设计出来的,后面搬到了车库中.任何大型网站不可能一来就设计成能扛得 ...

  8. 阿里 P9 整理出:Java 架构师“成长笔记”共计 23 版块

    阿里巴巴一位 P9 级架构师总结出的共计 23 版块的 Java 架构师"成长笔记",一经发布就受到了众多 Java 程序员同学的追捧,这份"成长笔记"涵盖了: ...

  9. 史上最全最详细的Java架构师成长路径图,程序员必备

    从新手码农到高级架构师,要经过几步?要多努力,才能成为为人倚重的技术专家?本文将为你带来一张程序员发展路径图,但你需要知道的是,天下没有普适的道理,具体问题还需具体分析,实践才能出真知. 架构师的&q ...

  10. JAVA开发(JAVA架构师成长之路)

    从一个最基础的JAVA开发人员成为JAVA架构师,需要经历8层能力的进阶. 第一阶段:熟悉JAVA基础语法,学会写各种if else和流程语句,熟练使用各种数据类型,集合.能依葫芦画瓢,模仿别人的代码 ...

最新文章

  1. NETSTAT日常应用归档
  2. signature=cc0735b80de74e294c47d2b8d527fd10,Fungal Transposable Elements
  3. 第14条:理解“类对象”的用意
  4. 无表头单链表的总结----输出链表
  5. 【计算机网络】wireshark数据流追踪、图像抓取(转)
  6. php公司面试反问,php面试坑集锦
  7. glut编译问题 (程序无法运行)
  8. 浅谈WebView的使用
  9. zTree入门实例(一眼就看会)
  10. python terminal_一个简单、易用的Python命令行(terminal)进度条库
  11. 浏览器CSS hack整理
  12. python编写移位密码实现加密与解密
  13. 2016年5月27日更新后MSYS2的shell用法
  14. 显卡(N卡)内存被占用如何处理?
  15. 小猪佩奇粉红猪 成年人重新拾起英文笔记
  16. Win7更换锁屏和开机画面
  17. Mysql-04-DQL-基础查询-条件查询-模糊查询-UNION和UNION ALL-排序-数量限制-分组查询-子查询
  18. HDLC和PPP协议总结
  19. C#将日期转化成英文
  20. linux如何初始化硬盘,Linux硬盘简易初始化(LVM)

热门文章

  1. cocos creator 游戏框架
  2. nginx 集群部署
  3. 苹果键盘快捷键驱动_如何在Windows中使用键盘快捷键打开光盘驱动器
  4. uv422转换为yuv420_YUV420 Planar 转换为 YUV422 Packed
  5. 推荐系统(7):推荐算法之基于协同过滤推荐算法
  6. 做自媒体数据分析的一些工具
  7. 微信扫一扫门禁开门小程序开发制作
  8. nrf52840合成4合1烧录文件
  9. js获取IP地址的4种方法
  10. 深度学习——PReLU激活