查看“计算机系统”的源代码
←
计算机系统
跳转至:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只对以下1个用户组开放:
用户
。
您可以查看并复制此页面的源代码:
=计算机硬件体系结构= 计算系统(computing system)的计算硬件部分,是负责信息的存储,传输与处理的基本设备。 ==基本设计原则== 设计原则:计算机硬件的组织方式,如计算、存储、通信之间的模式,应该和功用相适应。 ==计算机硬件的主要组件(Components)== 计算机硬件的主要组件(Components)有中央处理器(Central Processing Unit, CPU)、主存储器(Main Memory)、磁盘(Disk)、输入输出外设设备(IO)、传输总线设备(Bus)等等。 ==计算机存储等级(Memory Hierarchy) == 寄存器 Register 缓存Cache 主存RAM(Main memory) 固态盘SSD(Solid-state disk) 磁盘Disk (magnetic) =处理器架构(CPU architecture)= 基本原则: (1)向下兼容原则,或称为向后兼容(backward compatibility)。 (2)效率IPC (Instructions per cycle) 和 能耗(Energy-efficient )。 ==处理器的微架构(Micro-architecture)== 微架构使得指令集架构(Instruction Set Architecture, ISA)可以在处理器上被执行。指令集架构可以在不同的微架构上执行。 处理器的结构设计是研究微架构与指令集两者之间协作的技术。 ===流水线(Pipeline) === 管线化的结构(Pipelined Architecture)允许多个指令在同一时间执行,不同的指令在微架构不同的位置执行。 管线(Pipeline)分为几个不同的阶段(Stage),这些阶段包含取指令,指令解码,执行指令,以及写回结果。管线是微架构其中一项主要的工作。 ===超标量(Super-scalar) === 超标量(Super-scalar)体系结构的CPU在一个时钟周期可以同时分派(dispatching)多条指令在不同的执行单元中被执行,这就实现了指令级的并行。超标量能够在相同的CPU主频下实现更高的CPU吞吐率(throughput)。处理器的内核中一般有多个执行单元(或称功能单元),如算术逻辑单元、位移单元、乘法器等等。超标量体系结构可以视作多指令多数据(MIMD, Multiple instruction multiple data)。 Super-scalar CPUs add the possibility to issue more then one instruction per cycle. As long as these instructions are independent, each of them is dispatched into one of several parallel pipelines. Therefore, a super-scalar CPU can achieve an IPC (Instructions Per Cycle) higher than 1. ===执行单元(Execution Units) === 执行单元(Execution units)也是微架构的基本元件。执行单元包含算术逻辑单元(ALU),浮点运算器(FPU),Load/Store单元(LSU),分支预测(branch prediction),以及SIMD。这些单元在处理器内进行计算。执行单元的数量和时延(latency)(内存存取结果的时间)及吞吐率(throughput)(将结果存到或是读取出内存的速度),影响微架构的效能。 ====算术逻辑单元ALU (Arithmetic Logic Unit )==== 对两个储存于暂存器的数字进行add,subtract,multiply,divide,将结果放到一个暂存器内。 执行位操作,对储存于两个寄存器内的两组数字(由零与一构成)执行逻辑与和逻辑或,或者对寄存器的每一位执行逻辑非操作;(Bitwise logical operations or Bitwise shift operations) 比较两个寄存器中的数据(例如是大于或者相等); ====SIMD (Single instruction multiple data )==== Each core has a SIMD unit in a CPU SIMD execution model (a) Scalar mode: one operation produces one result. (b) SIMD mode: one operation produces multiple results. ===缓存设计(Cache)=== 片内缓存(on-chip cache memory)可以有效加快指令的执行速度。 当处理器发出内存访问请求时,会先查看缓存内是否有请求数据。如果存在(命中),则不经访问内存直接返回该数据;如果不存在(失效),则要先把内存中的相应数据载入缓存,再将其返回处理器。 缓存之所以有效,主要是因为程序运行时对内存的访问呈现局部性(Locality)特征。这种局部性既包括空间局部性(Spatial Locality),也包括时间局部性(Temporal Locality)。有效利用这种局部性,缓存可以达到极高的命中率。 在处理器看来,缓存是一个透明组件。因此,程序员通常无法直接干预对缓存的操作。但是,确实可以根据缓存的特点对程序代码实施特定优化,从而更好地利用缓存。 ===分支预测=== 分支预测( branch prediction )是在分支指令执行结束之前猜测哪一路分支将会被运行,然后投机执行(speculative execution)这一路的指令,以提高处理器的指令流水线的性能。 条件分支指令通常具有两路后续执行分支。即不采取(not taken)跳转,顺序执行后面紧挨JMP的指令;以及采取(taken)跳转到另一块程序内存去执行那里的指令。是否条件跳转,只有在该分支指令在指令流水线中通过了执行阶段(execution stage)才能确定下来。 如果没有分支预测器,处理器将会等待分支指令通过了指令流水线的执行阶段,才把下一条指令送入流水线的第一个阶段—取指令阶段(fetch stage)。这种技术叫做流水线停顿(pipeline stalled)或者流水线冒泡(pipeline bubbling)或者分支延迟间隙。 分支预测器猜测两路分支中哪一路最可能发生,然后投机执行这一路的指令,来避免流水线停顿造成的时间浪费。如果后来发现分支预测错误,那么流水线中投机执行的那些中间结果全部放弃,重新获取正确的分支路线上的指令开始执行,这招致了程序执行的延迟。 ===乱序执行(out-of-order execution)=== 微处理器中来利用指令周期以避免特定类型的延迟消耗的方法。这种方法中,处理器在一个由输入数据可用性所决定的顺序中执行指令,而不是由程序的原始数据所决定。 在这种方式下,可以避免因为获取下一条程序指令所引起的处理器等待,取而代之的处理下一条可以立即执行的指令。 ===寄存器重命名=== 计算机的CPU往往用寄存器(Register)来保存指令的操作数与结果。x86指令集体系结构有8个整数寄存器,x86-64指令级体系结构有16个整数寄存器。 寄存器重命名(renaming)是的微结构(Microarchitecture)中的一种技术,避免了机器指令不必要的顺序化执行,从而提高了处理器的指令级并行的能力。 ===硬件多线程(Multithreading)=== 当处理器的一个程序需要从速度较慢的内存读取数据时,可以将处理器切换到另一个程序运行,避免不必要的处理器停顿(stalling)。多线程技术不会加快单个程序的处理速度,但是可以有效提升整个系统的工作量。 ==处理器的指令集架构 == 指令集架构(Instruction Set Architecture,ISA),又称指令集或指令集体系,是计算机体系结构中与程序设计有关的部分,包含了基本数据类型,指令集,寄存器,寻址模式,存储体系,中断,异常处理以及外部I/O。 指令集架构包含一系列的opcode即操作码(机器语言),以及由特定处理器执行的基本命令。 * 复杂指令集运算(Complex Instruction Set Computing,CISC) * 精简指令集运算(Reduced Instruction Set Computing,RISC) * 显式并行指令集运算(Explicitly Parallel Instruction Computing,EPIC) * 超长指令字指令集运算(Very long instruction word, VLIW) ==英特尔处理器 == ===英特尔处理器的微架构=== Intel Nehalem Intel Sandy Bridge Intel Ivy Bridge Intel Haswell Intel Skylake ===英特尔处理器的指令集=== * x86 x86是一个指令集架构家族,最早由英特尔在1978年面市的“Intel 8086”CPU上开发出来。 * x86-64 x86-64(简称x64)是64位版本的x86指令集,向后兼容于16位及32位的x86架构。x64于1999年由AMD设计,AMD首次公开64位集以扩充给x86,称为“AMD64”。其后也为英特尔所采用,现时英特尔称之为“Intel 64”. * BMI{1,2} BMI(Bit Manipulation Instructions Sets)是x86指令集的扩展,用于加快bit级操作的速度。 Intel 将 POPCNT 指令作为 SSE4.2指令集的一部分, 而LZCNT 作为 BMI1指令集的一部分. * MMX MMX(Matrix Math eXtensions)是由英特尔开发的一种SIMD多媒体指令集,共有57条指令。它于1996年集成在英特尔奔腾(Pentium)MMX处理器上,以提高其多媒体数据的处理能力。其优点是增加了处理器关于多媒体方面的处理能力,缺点是占用浮点数寄存器进行运算。 * SSE {1, 2, 3, 4.1, 4.2} SSE(Streaming SIMD Extensions) 是继MMX的扩充指令集。SSE加入新的8个128位寄存器(XMM0~XMM7)。 * AVX AVX指令集(Advanced Vector Extensions,即高级向量扩展指令集),是Intel的SSE延伸架构,把寄存器XMM 128bit提升至YMM 256bit,以增加一倍的运算效率。 AVX2指令集将整数操作扩展到了256位,并引入了FMA指令集作为扩充。AVX-512则将指令进一步扩展到了512位。 * FMA FMA指令集(Fused-Multiply-Add)是Intel的AVX扩充指令集,如名称上熔合乘法累积(Fused Multiply Accumulate)的意思一样。 FMA3:是一种三元运算指令集。 FMA4:是一种四元运算指令集。 * Intel-VT 英特尔虚拟化技术(IVT,Intel Virtualization Technology)是由英特尔开发的一种虚拟化技术,利用IVT可以对在系统上的客操作系统,通过虚拟机查看器(VMM,Virtual Machine Monitor)来虚拟一套硬件设备,以供客操作系统使用。 IVT不仅需要处理器的支持,也需要芯片组、BIOS的支持,有时也许还需要软件的支持。 VT-d技术,“直接输入/输出虚拟化”(Virtualization for Directed I/O)。 VT-x技术,IA-32的IVT扩展指令集。 ===Intrinsic instructions=== 内置函数是编译器支持的。比如,微软和英特尔的 C/C++ compilers,以及GCC 实现的 intrinsics 内置函数,直接转换intrinsics 内置函数为 x86 SIMD 指令 (MMX, SSE, SSE2, SSE3, SSSE3, SSE4)。 ====Intel intrinsic instructions ==== C语言的风格函数,可以直接在源代码中调用的英特尔处理器指令。(C style functions that provide access to many Intel instructions) [https://software.intel.com/sites/landingpage/IntrinsicsGuide/ Intel intrinsic instructions] 可调用的指令集包括:SSE, AVX, AVX2, FMA. ====Java Intrinsics ==== Java语言的intrinsic函数,由Java编译器 HotSpot JVM,转换为处理器的内置的指令。 Java的intrinsic函数,包括: Long.bitCount , Integer.bitCount Integer.reverseBytes , Long.reverseBytes Integer.numberOfLeadingZeros , Long.numberOfLeadingZeros Integer.numberOfTrailingZeros , Long.numberOfTrailingZeros System.arraycopy ==超微半导体AMD == Barcelona 微架构, Bulldozer 微架构,Zen 微架构 AMD Barcelona-based processors AMD Piledriver-based processors AMD Steamroller-based processors AMD Excavator-based processors AMD Bobcat-based processors AMD Jaguar- and Puma-based processors AMD Zen-based processors ==ARM架构== ARM 高级精简指令集机器(Advanced RISC Machine) ===ARM微架构=== 流水线:较早的设计具备三阶段的流水线:提取指令、解码,并运行。较高性能的设计,如ARM9,则有更深阶段的流水线: Cortex-A8有13阶段的流水线。 Advanced SIMD (NEON) is a combined 64- and 128-bit SIMD instruction set that provides standardized acceleration for media and signal processing applications. VFP (Vector Floating Point) technology is an FPU(Floating-Point Unit) coprocessor extension to the ARM architecture 具体微架构: ARMv8-A、ARMv8.1-A、ARMv8.2-A ===ARM指令集=== ARM指令集: AArch64/A64、AArch32/A32 ===编译器支持=== Most efficient 64-bit ARMv8-A processor with full ARMv7-A compatibility ARMv8.3-A architecture is now supported by the GCC 7 compiler. =计算机软件= ==编程过程(Programming) == 高级编程语言(High level Programming language),如C++, Java, Python 等等,用于创作源代码。 源代码(source code)→ 预处理器(preprocessor)→ 编译器(compiler)(语法检测)→ 汇编程序(assembler)→ 目标代码(object code) 目标代码(object code) → 链接器(Linker)(链接system library)→ 可执行文件(executables) 机器代码(Machine code)或机器指令 (instructions ) ==编程语言(Programming language) == ===硬件编程语言=== 设计处理器等集成电路的硬件描述语言 * HDL (Hardware Description Language) https://en.wikipedia.org/wiki/Hardware_description_language * VHDL (VHSIC Hardware Description Language) https://zh.wikipedia.org/wiki/VHDL * Verilog https://zh.wikipedia.org/wiki/Verilog ===软件编程语言=== * C (https://en.wikipedia.org/wiki/C_(programming_language) * C++ (https://zh.wikipedia.org/wiki/C%2B%2B) * Python (https://en.wikipedia.org/wiki/Python_(programming_language) * Java (https://en.wikipedia.org/wiki/Java_(programming_language) * Java (https://en.wikipedia.org/wiki/Java_(programming_language) * GO (https://zh.wikipedia.org/wiki/Go) https://github.com/golang/go https://godoc.org/ https://golang.org/ You can use go with gore ==编辑器(Editor) == TextEditor 文本编辑器 * Vim / vi * Emac * Notepad++ ==编译器(Compiler) == GCC(GNU Compiler Collection),一套编程语言编译器,以GPL及LGPL许可证所发行的自由软件,也是GNU项目的关键部分,也是GNU工具链的主要组成部分之一。 a.c --->>> a.o ==链接器(Linker) == GNU linker (or GNU ld) is the GNU Project's implementation of the Unix command ld a.o --->a.out ==集成开发环境(IDE)== IDE是指集成了文本编辑器、编译器和链接器的软件。如: * 微软 Visual Studio 2017 community版本 免费下载地址:https://www.visualstudio.com * Eclipse 开源的图形化集成开发环境 免费下载地址:https://eclipse.org/ * IntelliJ IDEA Java开发环境的IDE。 免费下载地址:https://www.jetbrains.com/idea =常用软件 = ==操作系统(OS)== 管理计算机硬件的软件。 操作系统的向下兼容原则,或称为向后兼容(backward compatibility)。 * Linux : 发行版 Ubuntu Linux, CentOS Linux, * Windows : 微软公司推出的操作系统, 如Windows 10。 * Mac OS 苹果公司推出的操作系统,如Leopard。 ==数据库(database)== 管理数据的软件。 * 关系型数据库 MySQL * NoSQL ->NewSQL ==其他工具软件== 办公软件office套件。 =软件工程 = 规划开发软件的项目管理,包括软件需求分析、软件设计、软件开发和实现、软件测试等环节。 ==设计模式 Design Pattern== ===C++ 面向对象编程=== [https://en.wikipedia.org/wiki/Bjarne_Stroustrup Bjarne Stroustrup] 对象(object):是一个自包含的实体,用一组可识别的特性和行为来标识。C++以数据成员(data member)表达属性,以成员函数(member function)表达行为。 类(class):是具有相同属性和功能的对象的抽象集合。 对象实例(instance):是真实的对象。实例化就是创建对象的过程,使用new关键字来创建。 构造方法(constructor):又叫构造函数,其实就是对类进行初始化。在new时候调用。 方法重载(overloading):提供了创建同名的多个方法的能力,但这些方法需要使用不同的参数类型。 public:表示它所修饰的类成员可以允许其他任何类来访问,即是公有的。 private:表示只允许同一个类的成员访问,其它类包括它的子类都不能访问,即是私有的。 封装(Encapsulation):每个对象都包含它能进行操作所需要的所有信息,这个特性叫封装,因此对象不必依赖其他对象来完成自己的操作。 对象的继承(inheritance):代表了一种“is-a”的关系。继承者可以理解为是被继承者的特殊化,不仅有被继承者的特性,还有自己独有的个性。继承定义了类如何相互关联,共享特性。 protected:表示继承时,子类可以完全访问基类。用protected修饰的类成员,对子类公开,但不对其他类公开。 virtual:为了让子类的实例完全代替父类的类成员,父类必须把该成员申明为虚拟的。子类使用override关键字,将父类实现替换为它自己的实现,这就是方法重写(override)。 多态(polymorphism):表示不同的对象可以执行相同的动作,但是要通过他们自己的实现代码来执行。 ===C++ 标准库=== C语言的标准库 <X.h>,定义在std名字空间中<X>. 标准模版库(Standard Template Library, STL) ====Generic Programming 泛型编程==== 模板(Template)指C++编程语言中的函数模板(function template)与类别模板(class template)。 template<class T> 容器(Container):<vector>, <list>, <bitset>, <set>, <map>, <stack>, <queue>, <dequeue>. 迭代器(iterator):<iterator> 算法(Algorithm):<algorithm>, <cstdlib> Boost C++ 库(Libraries)是一组扩充C++功能的经过同行评审(Peer-reviewed)且开放源代码程序库。许多Boost的开发人员是来自C++标准委员会,而部分的Boost库成为C++的TR1标准之一。 "No programming language is perfect. Fortunately, a programming language does not have to be perfect to be a good tool for building great systems" ==敏捷编程 Agile Programming== ==代码管理 == ===Make === 自动化编译链接管理工具。 * CMake CMake是"cross platform make"的缩写,是个开源的跨平台编译链接管理工具。 它用配置文件控制建构过程(build process)的方式和Unix的Make相似。CMake的配置文件取名为CMakeLists.txt。 ===Git === 协同开发代码管理工具。 [[Gitlab系统的安装配置]] [[Gitlab的使用和操作]] ===CI === 自动化连续集成和测试。 ===单元测试=== Unit Test =参考文献= #Shore, James. The art of agile development. " O'Reilly Media, Inc.", 2007.
返回
计算机系统
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
实践教学
个性化3D设计与实现
人工智能实践教学
区块链技术及应用
虚拟现实技术与内容制作
超越学科界限的认知基础课程
电子工艺实习
Nand2Tetris Engine Curriculum
TULLL Creative Learning Group
Wiki上手说明
Wiki账户创建
最近更改
工具
链入页面
相关更改
特殊页面
页面信息