导图社区 计算机组成
这是一篇关于计算机组成的思维导图,计算机由主板,总线,内存,IO,CPU,指令集架构和微架构组成。适用于大学计算机复习,备考。
编辑于2023-02-16 19:04:44 四川省这份思维导图主要按照《python从入门到实践》的大纲来做出来的,并在相关内容的解释处加入了相关代码,欢迎大家一起学习!
职能地图-Java,干货分享~Java语言技术,java技术扩展,数据结构,维优,个人职能,技术面试知识点总结。
当今大型软件系统的开发多采用企业级的开发模式,而Java语言也是目前较为流行的企业级开发语言之一。针对Java企业级开发,涉及的知识点和技术栈较为丰富,包括但不限于Java EE、Spring框架、Hibernate框架、Maven、Git、Jenkins等等。这份思维导图以Java企业级开发为主题,通过图解的形式将涉及的知识点进行了梳理和整理,从Java EE体系结构、Servlet、JSP、Spring框架、Hibernate框架、Maven等基础知识开始讲解,逐步深入到SpringMVC、
社区模板帮助中心,点此进入>>
这份思维导图主要按照《python从入门到实践》的大纲来做出来的,并在相关内容的解释处加入了相关代码,欢迎大家一起学习!
职能地图-Java,干货分享~Java语言技术,java技术扩展,数据结构,维优,个人职能,技术面试知识点总结。
当今大型软件系统的开发多采用企业级的开发模式,而Java语言也是目前较为流行的企业级开发语言之一。针对Java企业级开发,涉及的知识点和技术栈较为丰富,包括但不限于Java EE、Spring框架、Hibernate框架、Maven、Git、Jenkins等等。这份思维导图以Java企业级开发为主题,通过图解的形式将涉及的知识点进行了梳理和整理,从Java EE体系结构、Servlet、JSP、Spring框架、Hibernate框架、Maven等基础知识开始讲解,逐步深入到SpringMVC、
Computer
CPU
1. 电脑的分类一般都是对CPU架构的分类,比如80X86架构的电脑 2. 计算机的可编程性指的是对CPU的编程 中央处理器的性能和速度取决于时钟频率(一般以赫兹计算,即Ghz )和每周期可处理的指令(IPC)
控制单元
指令控制逻辑
取指令、分析指令和执行指令的操作
寻址方式
直接寻址
间接寻址
变址寻址
指令集
指令(Instruction)是计算机规定执行操作的类型和操作数的基本命令。指令是由一个字节或者多个字节组成,其中包括操作码字段、一个或多个有关操作数地址的字段以及一些表征机器状态的状态字和特征码。有的指令中也直接包含操作数本身。
复杂指令集 (CISC指令集)
Complex Instruction Set Computing 每个指令可执行若干低阶操作,诸如从内存读取、储存、和计算操作,全部集于单一指令之中 复杂指令集的特点是指令数目多而复杂,每条指令字长并不相等。 复杂指令集的设计原理是是使单条指令完成尽可能多的工作,从而节约存储器,并使指令对应到高级语言的功能。 这导致单个指令做全部的工作: 读入两个加数,相加,并将计算结果直接写入内存;另一个例子是从内存读取两个数据,但计算结果存储在寄存器内;第三个例子是将从内存和寄存器各读取一个数据,其结果再次写入内存 复杂指令包括: 1. 将许多暂存器存成堆栈的形式。 2. 移动内存内大笔的资料。 3. 复杂或是浮点数运算(正弦,余弦,平方根等等) 4. 执行test-and-set指令。 5. 执行数字存在内存而非寄存器的运算
x86指令集
向量指令(SIMD指令集)
Single-Instruction Stream Multiple-Data Stream, 单一指令、多重数据。 向量(Vector)指的是一维数组。 SIMD指令集包括例如MMX,3DNow!以及AltiVec。
字节码转换成的机器指令集
将Java虚拟机等生成的字节码转换成机器指令集
精简指令集(RISC指令集)
Reduced Instruction Set Computing RISC设计的根本原则——针对流水线化的处理器优化,而且还在遵循这种原则的基础上发展出RISC的一个并发化变种VLIW(包括Intel EPIC),就是将简短而长度统一的精简指令组合出超长指令,每次运行一条超长指令,等于并发运行多条短指令。 RICS的一些特征: 1. 统一指令编码(例如,所有指令中的op-code永远位于同样的比特位置、等长指令),可快速解译: 2. 泛用的寄存器,所有暂存器可用于所有内容,以及编译器设计的单纯化(不过寄存器中区分了整数和浮点数); 3. 单纯的寻址模式(复杂寻址模式以简单计算指令串行取代); 4. 硬件中支持少数数据类型(例如,一些CISC电脑中存有处理字节字符串的指令。这在RISC电脑中不太可能出现)。
PowerPC
SPARC
ARM
Advanced RISC Machine。 是一个32位精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。由于节能的特点,ARM处理器非常适用于移动通信领域,符合其主要设计目标为低成本、高性能、低耗电的特性。
指令越短,单位时间处理的指令越多,而且在缓存队列中的指令就越多
指令类型
数据处理与存储操作
1. 设置寄存器的值 2. 将数据从存储空间中送至寄存器,反之亦然。将数据取出进行计算,并保存计算结果 3. 从硬件设备中读取或写入数据
算术逻辑单元
1. 对两个储存于寄存器的数字进行add,subtract,multiply,divide, 将结果放到一个寄存器内,一个或是更多的状态码可能被设置在状态寄存器中 2. 执行位操作,藉对两组数字(为两串的数字,都由零与一构成,分别储存于两个寄存器)执行逻辑与和 逻辑或,或者对寄存器的每一位执行逻辑非操作 3. 比较两个寄存器中的数据(例如是大于或者相等);
控制流
1. 分支,跳跃至程序某地址并执行相应指令; 2. 条件分支,假设某一条件成立,就跳到程序的另一个位置; 3. 间接分支,在跳到另一个位置之前,将现在所执行的指令的下一个指令的位置储存起来,作为子程式执行完返回的地址;
时序控制逻辑
为每条指令按时间顺序提供应有的控制信号。 一般时钟脉冲就是最基本的时序信号,是整个机器的时间基准,称为机器的主频。 执行一条指令所需要的时间叫做一个指令周期,不同指令的周期有可能不同。一般为便于控制,根据指令的操作性质和控制性质不同,会把指令周期划分为几个不同的阶段,每个阶段就是一个CPU周期。 CPU周期是最小的时间单元 CPU周期
时钟
总线控制逻辑
CPU内部总线和外部总线。 外部总线又叫系统总线,前端总线(FSB)
中断控制逻辑
中断是指计算机由于异常事件,或者一些随机发生需要马上处理的事件,引起CPU暂时停止现在程序的执行,转向另一服务程序去处理这一事件,处理完毕再返回原程序的过程。 由机器内部产生的中断,我们把它叫做陷阱(内部中断),由外部设备引起的中断叫外部中断
运算单元
算术逻辑部件 (ALU)
ALU:Arithmetic and Logic Unit ALU主要完成对二进制信息的定点算术运算、逻辑运算和各种移位操作
与门
非门
CPU体系架构的二进制以补码系统表示
补码之所以叫“补”码,是因为一个n 位正码 + 补码 = n位0,所以叫补码 补码系统中,正数的值等于它的正码, 负数的值等于它对应的正数的补码 1. 0和最大绝对值的负数1000的补码是其本身。 一种较简单的方式,可以找出二进制数字的补码: 先由最低比特开始找。 若该比特为 0,将补码对应比特填 0,继续找下一比特(较高的比特)。 若找到第一个为 1 的比特,将补码对应比特填 1。 将其余未转换的比特进行比特反相,将结果填入对应的补码。 还有一种方式求补码: 正码取反加1
1. 补码系统只在有符号数中使用
补码系统: 1. 正数和0的值等于正码 2. 负数的值等于它对应的正数值的补码
2. “补”码相当于负号(-)操作
数字 a (正负数皆可)的补码即为 -a。“补码”就是取负号 8 + (-8) = 0 n位正码 + n位补码 = n 位0 = 0, 所以 n位正码 = (-) n 位补码 补码值的计算方法: 1. 11001100 = (-)00110001 = -52 负号操作 2. 11001100 = 204 % 256 = -52 有符号数 = 无符号数 mod 256
3. n位无符号数与有符号数的转换=n位无符号数 对 2^n 取模操作
4. 使用正码系统和补码补码进行加减法运算只需要一种相同的加减法电路
8位无符号数与有符号数的加减法都相当于模256的加减法 取模运算的值是:被除数-(被除数/除数)*除数 计算的结果。其中有一个重要规律就是,余数的符号与被除数永远保持一致。 所以当我们遇到负数的取余和取商运算时,首先判断商数的符号,然后将数字都转化为正数,进行取商取余运算。 如计算:5%-2,首先可以肯定结果的符号与5相同,即必然是正数。然后计算5%2的结果,显然5%2=1,所以5%-2=1.同时,也可以根据取余的计算公式:5%-2=5-(5/-2)*(-2)=1. 同理,-5%2=-1,-5%-2=-1.
用补码表示的原因
5. n位加数 + n位被加数的值为n位i,左端前两位相同则正确,不同则溢出
即左端前两位求异或为1时溢出,为0时正确
6. 无符号数采用正码系统
右移1位相当于除2, 不改变符号位
左移1位相当于乘以2,不改变符号位
当高权值位有值时再左移会导致溢出,比如 1100,0000 ==》 1000,0000 溢出 1001,000 ==》 1010,0000 不溢出
寄存器组
通用寄存器组
通用寄存器组是用来保存参加运算的操作数和运算的中间结果
状态寄存器
程序中,状态位通常作为转移指令的判断条件
累加器
路径转换器
数据总线
存储单元
缓存
高速缓存
二级缓存
三级缓存
寄存器
位于CPU中,少量且快速
指令寄存器
程序计数器
累加器
数据寄存器
8个整数寄存器
8个浮点数寄存器
地址寄存器
物理组成部分
内存
RAM
DDR
ROM
BIOS
IO
键盘
鼠标
硬盘
磁盘阵列RAID
RAID分成了不同的等级,每种等级都有其理论上的优缺点,不同的等级在两个目标间取得平衡,分别是增加数据可靠性以及增加存储器(群)读写性能
RAID0
将多个磁盘合并成一个大的磁盘,不具有冗余,并行I/O,速度最快。RAID 0亦称为带区集。它是将多个磁盘并列起来,成为一个大磁盘。在存放数据时,其将数据按磁盘的个数来进行分段,然后同时将这些数据写进这些盘中,所以在所有的级别中,RAID 0的速度是最快的。但是RAID 0没有冗余功能,如果一个磁盘(物理)损坏,则所有的数据都会丢失,危险程度与JBOD相当。
无冗余,速度最快
RAID1
两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,另外写入速度有微小的降低。除非拥有相同数据的主磁盘与镜像同时损坏,否则只要一个磁盘正常即可维持运作,可靠性最高。 RAID 1就是镜像。其原理为在主硬盘上存放数据的同时也在镜像硬盘上写一样的数据。当主硬盘(物理)损坏时,镜像硬盘则代替主硬盘的工作。因为有镜像硬盘做数据备份,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。但无论用多少磁盘做RAID 1,仅算一个磁盘的容量,是所有RAID上磁盘利用率最低的一个级别。
镜像,可靠性最高,磁盘利用率最低
RAID5
RAID Level 5 是一种储存性能、数据安全和存储成本兼顾的存储解决方案。它使用的是Disk Striping(硬盘分区)技术。RAID 5 至少需要三颗硬盘, RAID 5不是对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,可以利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。 RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但保障程度要比镜像低而磁盘空间利用率要比镜像高。RAID 5具有和RAID 0相近似的数据读取速度,只是因为多了一个奇偶校验信息,写入数据的速度相当的慢,若使用“回写高速缓存”可以让性能改善不少。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较便宜。
一个奇偶校验系统,使用最多的阵列方式
RAID6
两个奇偶校验系统
RAID50
AID 5与RAID 0的组合,先作RAID 5,再作RAID 0,也就是对多组RAID 5彼此构成Stripe访问。由于RAID 50是以RAID 5为基础,而RAID 5至少需要3台硬盘,因此要以多组RAID 5构成RAID 50,至少需要6台硬盘。以RAID 50最小的6台硬盘组态为例,先把6台硬盘分为2组,每组3台构成RAID 5,如此就得到两组RAID 5,然后再把两组RAID 5构成RAID 0。 RAID 50在底层的任一组或多组RAID 5中出现1台硬盘损坏时,仍能维持运作,不过如果任一组RAID 5中出现2台以上硬盘损毁,整组RAID 50就会失效。 RAID 50由于在上层把多组RAID 5构成Stripe,性能比起单纯的RAID 5高,而容量利用率则与RAID 5相同。
先做RAID5,再做RAID0
光驱
固态硬盘
固态硬盘(solid-state disk) 和传统硬盘相比,固态硬盘具有低功耗、无噪音、抗震动、低热量的特点。 目前固态硬盘普及的三大问题:成本、写入次数和损坏时的不可挽救性
总线
系统总线系统
数据总线
地址总线
控制总线
CPU 内部总线
前端总线
高的前端总线速率意味着计算机的高处理性能
后端总线
连接二级缓存和三级缓存
主板
芯片组
芯片组(通常由南桥和北桥组成)是和系统中其他总线的连接节点。PCI、AGP和内存总线均和芯片组相连,以使设备间数据能相互传送。
北桥
连接CPU于内存
南桥
处理低速信号。 南桥包含大多数周边设备接口、多媒体控制器和通信接口功能。例如PCI控制器、ATA控制器、USB控制器、网络控制器、音效控制器。
BIOS
BIOS用于计算机开机时执行系统各部分的的自检,并启动引导程序或装载在内存的操作系统。此外,BIOS还向操作系统提供一些系统参数。
BIOS是个人电脑启动时加载的第一个软件
CMOS
BIOS为只读存储器(ROM或EPROM),而CMOS为随机存储器(RAM);BIOS中存储的是程序,而CMOS中存储的是普通信息
PCI 卡槽
指令集架构和微架构
指令集架构
指令集架构包含execution model,寄存器,地址以及数据格式
指令周期
1. 读取指令并将其解码 2. 找到需要用到的资料以执行指令 3. 执行指令 4. 将结果写回 指令周期将会不断循环,直到电力用尽。
微架构
微架构包含处理器内部的构成以及这些构成起来的部分如何执行指令集架构。 微架构通常被表示成图,以描述机器内部元件的连结状况,从一个闸或是暂存器,到算术逻辑单元(ALU)。图上分布著数据路径(可以显示数据在微架构的位置)以及控制路径(显示数据该被什么指令所处理)。 每个微架构的的元件都被表示成藉数个逻辑门所建构而成的工具。 每个逻辑门都被表示成藉晶体管建构成的零件。 拥有不同微架构的机器可能拥有相同的指令集架构,因此可以执行相同的程式。由于半导体科技的进步,新型的处理器可以以较快的速度执行相同的指令集架构。
管线化
在目前,能够最有效的提升效能的方法就是管线。 早期的处理器是等一个指令执行完所有步骤后,然后才轮到下一个指令执行。大部分的电路在某一个步骤结束后就处在闲置的状态,例如, 对指令进行解码的电路在指令进入执行阶段后就处于闲置状态。 管线化的电路借由允许多个指令在同一时间,在电路上不同的位置进行不同的工作。例如,处理器可以在最后一个指令等待结果写回时对另一个指令解码。这使得处理器在同一时间可以处理四个指令,使处理器的效能增加了四倍。
提升CPU性能的方法
增加寄存器的大小
增进内部的平行性
增加高速缓存大小
加入其它功能,如I/O和计时器
加入矢量处理器
SIMD, 图形,3D技术需要矢量计算
即单条指令多个数据
避免附加。使朝向省电化(battery-constrained)或小型化的应用
集成多个核心
硬件多线程技术
超线程技术
并发
指令管线
指令管线化
按序/乱序执行
预测执行
寄存器重命名
冒险
并行层次
位级并行
指令级并行
数据并行
任务并行
线程
多线程
同步多线程
超线程
超级线程
费林分类法
单指令流单数据流
单指令流多数据流
多指令流单数据流
多指令流多数据流
编程语言
第三代语言:高级语言
高级语言有两种执行方式: 1. 使用编译器编译成中间码,然后运行在运行时上 2. 使用解释器解释执行
编译器 Compiler
编译器将高级语言编译成机器指令。 针对不同的指令集有专门的编译器。 编译器的发展使汇编语言的使用越来越少 编译器将原始程序(Source program)作为输入,翻译产生使用目标语言(Target language)的等价程序。源代码一般为高阶语言 (High-level language), 如 Pascal、C、C++、C# 、Java 等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)。 一个现代编译器的主要工作流程如下: 源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 汇编程序 (assembler) → 目标代码 (object code) → 链接器 (Linker) → 可执行文件 (executables)
整体编译后才能执行
解释器 Interpreter
能够把高级编程语言一行一行直接转译运行。解释器不会一次把整个程序转译出来,只像一位“中间人”,每次运行程序时都要先转成另一种语言再作运行,因此解释器的程序运行速度比较缓慢。它每转译一行程序叙述就立刻运行,然后再转译下一行,再运行,如此不停地进行下去。 解释器运行程序的方法有: 1. 直接运行高级编程语言 (如 Shell 自带的解释器) 2. 转换高级编程语言码到一些有效率的字节码 (Bytecode),并使用字节码解释器运行这些字节码。比如 Perl,Python,MATLAB,与Ruby 3. 以解释器包含的编译器对高级语言编译,并指示处理器运行编译后的程序 (例如: JIT), 可以优化虚拟机,Java使用了JIT技术来执行编译后的中间吗
实时编译 JIT
即时编译,又名JIT,是指一种在运行时期把字节码编译成原生机器码的技术;这项技术是被用来改善虚拟机的性能的。该技术在近几年来才开始获得重视,而它后来模糊了直译、字节码直译及编译的差异性。在.NET和Java的平台上都有用到JIT的技术。大约在1980年代Smalltalk语言出现的时候JIT的技术就存在了。
字节码解释器
字节码解释器相当于一个虚拟机,字节码相当于这个虚拟机能识别的机器码 例如,用Emacs Lisp所撰写的源代码会被编译成一种高度压缩且优化的另一种 Lisp 源代码格式,这就是一种字节码(bytecode),而它并不是机器码(因此不会被绑死在特定的硬件上)。这个"编译过的"码之后会被字节码直译器(使用C写成的)转译。在这种情况下,这个"编译过的"码可以被说成是虚拟机(不是真的硬件,而是一种字节码解释器)的机器码。
按行解释
使用解释器来达到较快的开发速度和使用编译器来达到较快的运行进度之间是有许多妥协
面向用户
第二代语言:汇编语言
汇编语言写的代码通过汇编程序转化为机器语言。 汇编语言不能被CPU直接执行,需要转化为机器语言。 汇编语言是符号化的机器语言
第一代语言:机器语言
CPU可以直接执行机器语言。 机器语言使用指令集来执行,使用二进制来表示
面向机器
不同CPU架构有不同的机器语言和汇编语言
逻辑
真值表
文氏图
卡诺图