Intel CPU简介

2023-05-16

现在Intel已然成了CPU的代名词,但当年的Intel并没有现在这么风光。从1978年发布的8086到2013年的四代i7,整整35年,她见证了从PC到互联网、移动互联网的几次巨变;这些年的变化实在太多。本文不打算对这段历史及引领这段历史的风云人物做多少描述和评价(这些内容足够写好几本书的了),你若对这些内容更感兴趣,请移步。本文只对Intel CPU家族中几位名声显赫的人物做简要介绍,并对比他们区别。


简要历史

接下来,对Intel的几个划时代的CPU产品做简要介绍。


Intel ® 8086(16位,1978年)

这是一款1978年发布的CPU产品,算得上是Intel家族的长老了。20世纪70年代的东西了,为什么要介绍它呢?因为我和很多同学一样,大学还要学这种古老的东西。我上这门课的时候就在想为什么要学这么老的东西呢?后来查了Intel的其他CPU才知道,越往后的CPU越强大,当然也越复杂,一个学期也学不完;当然这些都是后话了。

在8086之前,还有一款小有名气8位的CPU产品——8088,但它对后来产品的影响远没有8086大,所以本文就不介绍他了。

来瞻仰一下8086的“新特性”吧:



看看几个“值得一提”的:

  • 直接内存寻址能力达1MB
  • 时钟频率为5M, 8M, 10MHz
  • 最后一个说的是:有40引脚陶瓷和塑料两种封装

最后一段的最后一句值得注意的是:8086可以通过多个处理器来实现高性能。

IA-32系列架构发展自8086这样的16位处理器。8086有16位的寄存器,16位的外部数据总线,和20位数据总线,它提供了1M字节的寻址能力,1M=2^20。

8086将“段”的概念引入了IA-32架构。由于段的引入,一个16位的段寄存器容纳了一个指向64K字节内存的指针。20位地址可以经由一个段寄存器和一个附加的16位指针,来提供1M字节的寻址能力。


Intel ® 286 处理器 (1982)

Intel286处理器将“保护模式”引入了IA-32。保护模式使用段寄存器的内容作为选择器或指向描述符(descriptor)表格的指针指针。Descriptor提供了24位基地址,使得物理内存寻址能力提高到了16M字节(16M=2^24),并支持了基于段交换的虚拟内存管理,以及一些列的保护机制。这些机制包括:

  • 段边界检查
  • 只读和只执行段选项
  • 四种特权级别

时钟频率由6MHz到20MHz。


The Intel386™ Processor (1985)

Intel386处理器是IA-32架构家族的第一个32位处理器。它包括即可存放操作数也可用于寻址的32位寄存器。每个32位寄存器的低半截保留有此前系列的16位寄存器的功能,允许后向兼容(兼容过去的可执行代码)。该处理器同时提供了虚拟8086模式,以允许有效地执行为8086/8088创建的程序。

另外,Intel386处理器还支持:

  • 32位的地址总线,最高支持4G物理内存
  • 分段(segmented)内存模式和平坦(flat)内存模式
  • 分页,大小固定为4k的页提供了一种“虚拟内存管理”的方法
  • 支持parallel stages(应该指的是指令执行几个阶段可以并行)

时钟频率为12.5MHz


Intel ® 486™ 处理器 (1989)

Intel486处理器通过扩展386处理器的指令译码器(instruction decode)和执行单元(execution uint)为5个排队阶段(pipelined stage)提升了指令的执行能力。每个阶段的操作与其他指令的不同阶段是同时执行的。

另外,该处理器还引入了:

  • 8k片上一级缓存,它提升了单位时间的指令执行数量。
  • 集成的x87浮点计算单元(FPU)
  • 省电模式和系统管理能力

时钟频率从25M到50M.


Intel® Pentium® 处理器 (1993)

因特尔奔腾处理器加入了第二个执行管线(pipeline),以实现更强劲的性能(两个管线,广为人知的u和v管线,可以在同一个时钟周期执行两个指令)。片上一级缓存加倍(16K),8k用来缓存代码,8k用来缓存数据。数据缓存通过Intel486处理器使用MESI协议来支持更高效的缓存回写。一个片上分支表和被加入,以提升循环的执行性能。

另外,该处理器加入了:

  • 一些扩展使得虚拟8086模式更有效率,且允许4M字节或4K字节分页
  • 128位和256位的内部数据路径用于提示内部的数据传递
  • 可增强的外部数据总线增加到了64位
  • APIC( Advanced Programmable Interrupt Controller,高级可编程中断控制器),以支持系统可以使用多核
  • 双核模式,以支持无需胶合(外部控制器协调)的双核系统

另一个重要的阶段性的成果是奔腾家族引入了Intel MMX技术,Intel MMX技术使用单指令多数据(single-instruction multiple-data, SIMD)执行模式来在打包的64为寄存器上实现平行计算。

时钟频率由最初的60Mhz和66Mhz到后来的200MHz


Intel® Pentium® 4 Processor Family (2000-2006)

PS:这六年对于CPU的世界来说,变换是在太快,“日新月异”似乎已经不足以描述这几年CPU的巨变了。

Intel奔腾4处理器家族是基于Intel NetBurst 微架构的。奔腾4处理器引入了SSME2(Streaming SIMD Extension 2)。

奔腾4处理器具有3.4GHz主频,支持超线程技术(Hyper-Threading Technology)。

Intel 64架构是在奔腾4处理器 6xx和5xx系列中引入的。

Intel® Virtualization Technology (Intel® VT) 是在 Pentium 4 处理器 672 和 662 引入的.

奔4系列已经接近了CPU主频技术的极限,它让当年的“摩尔定律”不再有用。


下面的这些,我只作一些简要描述。

Intel® Xeon® Processor (2001- 2007)

Intel至强系列,该家族最初为IA32架构,后来的产品多采用Intel64了,该家族是被设计用于多核高性能的服务器和工作站的。

Intel® Core™ Duo and Intel® Core™ Solo Processors (2006-2007)

这个系列是Intel的被设计为低功耗的CPU产品,主要用于当时的笔记本电脑(当时笔记本市场增长很快,大有取代PC之势)。

Intel® Xeon® Processor 5200, 5400, 7400 Series and Intel® Core™2 Processor Family (2007)

至强的新系列产品,依旧是“高大上”的服务端路线,基于45nm的新架构。

Intel® Atom™ Processor Family (2008)

Atom架构,45nm科技,也是被设计于低功耗,最要用于移动设备(手机、平板等)。当时正是的智能机抬头的时机,虽然市场的老大是诺基亚(S60已经号称智能手机了)。

Intel® Core™i7 Processor Family (2008)

Nehalem架构,45nm。与Atom同时的产品时酷睿i系列,这也算的上是“家喻户晓”的产品了。


Intel® Xeon® Processor 7500 Series (2010)

Nehalem架构,45nm。继续高大上。


Second Generation Intel® Core™ Processor Family (2011)

Sandy Bridge架构,32nm。二代酷睿i系列,我现在用的i2410正是这个这个系列的。


Third Generation Intel® Core™ Processor Family (2012)

Ivy Bridge架构,以及有些的Ivy Bridge-EP架构。


Fourth Generation Intel® Core™ Processor Family (2013)

Haswell架构。


“三个代表”

这里需要指出三个机具代表性的CPU,他们是8086,386(IA32)和酷睿i7(Intel64)。


8086CPU架构

8086相对后来的CPU要简单得多,这也是为什么教材喜欢拿他说事的原因。来让我一睹8086的架构吧(左图)。和架构紧密相关的是它的引脚封装,没错,他和51单片机的40-pin封装长得一样(右图)。



基本执行环境

对于我等程序猿来说,架构和封装都不是我们关心的;我们只关心我们的代码。直到现在,和具体CPU相关的代码仍要用汇编语言编写;自然要关心的是寄存器了;在上面8086

的架构图(左图)中可以看到的有段寄存器(Segment register)和指令指针(instruction pointer)。


8086的寄存器很少,少到一张图就可以概括所有寄存器:


其中IP是指令指针,FLAGS为机器状态字。其中CS,DS,SS,ES为四个段寄存器;SP和BP为数据指针(data pointer),SI和DI为索引寄存器(Index register)。


IA32的寄存器则要多一些:


因为,它除了基本执行环节外,还内置了FPU(浮点计算单元),MMX(多媒体增强)和XMM(与SSE有关)。

IA32的指令指针和机器状态字分别叫做EIP和EFLAGS。

其中,

8个32为寄存器为:EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP

6个段寄存器为:CS, DS, SS, ES, FS, GS




而Intel 64执行环境则与IA32环境类似:

Intel 64的通用寄存器增加到了16个,分别为:RAX, RBX, RCX, RDX, RSI, RDI, RSP, RBP, R8~R15



兼容性

IA32可以与8086兼容,是的8086的程序能够在IA32上运行,这依赖于寄存器和指令上的兼容。这在当时为Intel赢得了很好的市场,试想,如果当时386不兼容Dos,估计也不会有今天的微软了吧。



同样Intel 64也兼容IA32,下面是一个对照表:




内存模型

接下来,简要介绍8086,IA-32和Intel 64的内存模型。

8086的有20位地址总线,但寄存器是16位的,这似乎必然导致了分段内存模型。代码段寄存器(CS)和指令指针(IP)指向当前正在执行的代码;数据段寄存器(DS)或其他段寄存器与索引寄存器联合用于定位内存中的数据。




IA32 内存模型

IA32时代,虚拟内存技术已经得到了CPU的支持,这是出现了三种内存模型:

平坦内存模型, 内存表现为单一的连续的地址空间,这种地址空间也叫线性地址空间。

分段内存模型,内存表现为一系列独立的被成为段的地址空间,代码段、数据段、栈(stack)段是典型的独立的段。程序使用逻辑地址寻址一个字节。系统所有段都会被映射到处理器的线性地址空间,处理器负责逻辑地址和线性地址的互相转换。这种转换对于应用程序来说是透明的。

实地址模式,这种地址模式是用于Intel 8086处理器的。它是为了使得程序可以运行在8086处理器上。

几种模式的示意图如下所示:





分页与虚拟内存

在平坦和分段内存模型中,线性地址空间被直接(或分页)映射到处理器的物理地址空间。

当使用直接映射(关闭分页),每个先行地址都有一个一对一的物理地址与之对应。线性地址直接由处理器的地址总线送出,不需任何转换。

当使用IA-32架构的分页机制(打开分页)时,线性地址空间被划分为一系列的页并被映射为虚拟地址,随后虚拟内存的页会按照需要映射相应的物理内存。当操作系统或可执行程序使用页时,分页机制对于应用程序来说是透明的。所有的应用程序看的都是线性地址空间。

另外,IA-32的分页机制包括一些扩展功能:

  • 物理地址扩展(PAE,Physical Address Extensions)用于寻址超出4G的地址
  • 页面大小扩展(PSE,Page Size Extensions)用于将4M字节的线性地址页映射到物理地址。

扩展阅读

本文只是Intel系列CPU的一个概要(或简介),更多细节内容请阅读Intel的开发者手册【3】。

【1】CPU的发展历程:Intel(英特尔公司),http://web.gxmu.edu.cn/zz/Article/ShowArticle.asp?ArticleID=76

【2】Intel 8086 6-BIT HMOS MICROPROCESSOR 8086/8086-2/8086-1,http://download.csdn.net/detail/xusiwei1236/8373939

【3】Intel® 64 and IA-32 Architectures Software Developer’s Manual,http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

转载: http://blog.csdn.net/xusiwei1236/article/details/42784539
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Intel CPU简介 的相关文章

  • 尝试在 Windows PC 上禁用处理器空闲状态(C 状态)

    我需要防止处理器进入空闲状态 非C0 C状态 诚然 我对处理器 C 和 P 状态了解不多 所以请耐心等待 我们使用来自第三方供应商的相机 该相机偶尔会提供损坏的帧 供应商已确定 当 CPU 进入空闲状态时 它会干扰通过火线传输帧 为了确认这
  • perf_event_open - 如何监视多个事件

    有谁知道如何设置perf event attr可以通过以下方式触发 PMU 监视多个 类型 事件的结构perf event open Like perf record e cycles faults ls 它有两种不同的事件类型 PERF
  • 如何在 Matlab 中将 PARFOR 与 Core i3 并行 4 工作

    我有适用于 Ubuntu 64 位的 Matlab R2012b 我有一个 Intel Core i3 CPU M 330 2 13GHz 4 我想用parfor同时并行化 4 个循环 因为 Intel Core i3 有 2 个核心和 4
  • 如何使用 bash 命令创建 CPU 峰值

    我想在 Linux 机器上创建接近 100 的负载 它是四核系统 我希望所有核心都全速运行 理想情况下 CPU 负载将持续指定的时间 然后停止 我希望 bash 有一些技巧 我在想某种无限循环 I use stress http linux
  • Tensorflow 相同的代码,但从 CPU 设备到 GPU 设备得到不同的结果

    我正在尝试实现一个程序来测试 GPU 设备上的 Tensorflow 性能 数据测试是MNIST数据 使用多层感知器 神经网络 进行监督训练 我跟着这个简单的例子 http gist github com nishidy 8176548ec
  • 多处理和并行处理之间的比较

    有人能告诉我多处理和并行处理之间的确切区别吗 我有点困惑 感谢您的帮助 多重处理 多重处理是使用两个或多个中央处理单元 单个计算机系统中的 CPU 该术语还指 系统支持多个处理器和 或的能力 在他们之间分配任务的能力 并行处理 在计算机中
  • 使用 C# 识别 CPU 架构类型

    我想检查用户运行的是哪个CPU架构 是吗 i386 或 X64 或 AMD64 我想用 C 来做 我知道我可以尝试 WMI 或注册表 除了这两种还有其他办法吗 我的项目目标是 NET 2 0 让我来到这里的是检查 32 位与 64 位操作系
  • 哪个更快:x<<1 或 x<<10?

    我不想优化任何东西 我发誓 我只是出于好奇而想问这个问题 我知道在大多数硬件上都有位移位的汇编命令 例如shl shr 这是一个单一命令 但移位多少位 从纳秒角度或从 CPU 角度角度 是否重要 换句话说 以下任一选项在任何 CPU 上都更
  • x86_64:IMUL 比 2x SHL + 2x ADD 更快吗?

    当查看 Visual Studio 2015U2 生成的程序集时 O2 发布 模式我看到这段 手工优化 的 C 代码被翻译回乘法 int64 t calc int64 t a return a lt lt 6 a lt lt 16 a 集会
  • DRAM 访问的性能计数器

    我想找回DRAM 存取次数在我的应用程序中 准确地说 我需要区分数据和代码访问之间 该处理器是一个Intel R Core TM i7 4720HQ CPU 2 60GHz Haswell 基于英特尔软件开发人员手册 第 3 卷 https
  • 使用 AMD FX 4100 四核获取 Linux ubuntu 12.10 上的 CPU 温度

    有很多类似的问题 但我还没有找到解决方案 如何在 Linux Ubuntu 12 10 上使用 C 或 C 获取 CPU 温度无需致电 sensors 我当然可以从文件中读取它 但是我找不到它在 12 10 中的存储位置 简单地读取文本文件
  • 当JVM执行Java应用程序时,操作系统的作用是什么?为什么我们需要操作系统?

    我在网上读过一些资料 有人说Java应用程序是由java虚拟机 JVM 执行的 执行 这个词让我有点困惑 据我所知 非Java应用程序 即 用C C 编写 可以由操作系统执行 在较低级别 这意味着操作系统将二进制程序加载到内存中 然后指示C
  • 如何获取 Java7 应用程序的 CPU、RAM 和网络使用情况

    我找到了这篇旧文章如何在 Java 中监控计算机的 cpu 内存和磁盘使用情况 https stackoverflow com questions 47177 how to monitor the computers cpu memory
  • Xcode 9 - CPU 使用率高 - 风扇最大速度

    自从我升级到 Xcode 9 后 当我在 Xcode 上工作时 我的粉丝就变得疯狂了 当我使用 Storyboards 和 Interface Builder 时 尤其会发生这种情况 Xcode有时会占用100 的CPU 并且名为 Inte
  • Linux:如何对系统内存施加负载?

    我正在开发一个小功能 它可以让我的用户了解 CPU 的占用情况 我在用着cat proc loadavg 它返回众所周知的 3 个数字 我的问题是 当我正在开发时 CPU 目前没有做任何事情 有没有一种好方法可以在CPU上产生一些负载 我在
  • 阿迪和苏比之间到底是什么“关系”?

    我应该回答这个问题 经过一番研究后发现 add 和 sub 具有相同的操作码 仅在功能领域有所不同 这是答案还是其他什么 Update Nios II CPU 手册中提供了它 subi subtract immediate Operatio
  • 增加 C++ 程序 CPU 使用率

    我有一个用 C 编写的程序 每秒运行多个 for 循环 而不使用任何会使其因任何原因等待的东西 它始终使用 2 10 的 CPU 有没有什么方法可以强制它使用更多的CPU并进行更多的计算而不使程序变得更复杂 此外 我在 Windows 计算
  • python 进程占用 100% CPU

    我正在尝试运行 python 应用程序并根据指定的时间间隔执行操作 下面的代码持续消耗 100 的 CPU def action print print hello there interval 5 next run 0 while Tru
  • 大师系统要求

    我们将使用 Virtuoso 来存储 RDF 三重计数一开始将为 1 亿 我需要知道典型的 RAM CPU 磁盘等应该是什么 查询将使用 SPARQL 并且查询会有点复杂 请提供您的意见 Virtuoso 版本 6 x 三元组 四元组 的平
  • C++ 中的 CPUID 实现

    我想知道这里是否有人有一些可以从任何托管 net 语言引用的 C CPUID 实现的好示例 另外 如果情况并非如此 我是否应该注意 X86 和 X64 之间的某些实现差异 我想使用 CPUID 来获取运行我的软件的机器上的信息 崩溃报告等

随机推荐

  • MAVLink协议通信分析——(三)消息解析

    第三章 消息解析 分析过消息包的结构后 xff0c 继续向消息包的内部探索 xff0c 开始分析负载信息PAYLOAD 在消息库中 xff0c 每条消息都作为一个类存在 xff08 Java版本 xff09 xff0c 类中的注释文本详细地
  • Linux 加权限命令 chmod +755,chmod +777,chmod +x 的区别

    chmod 43 x 的意思就是给执行权限 LINUX下不同的文件类型有不同的颜色 xff0c 这里 蓝色表示目录 绿色表示可执行文件 xff0c 可执行的程序 红色表示压缩文件或包文件 浅蓝色表示链接文件 灰色表示其它文件 红色闪烁表示链
  • Docker安装Autoware

    使用gitee上的autoware源码包编译遇到的问题非常多 xff0c 主要是依赖很多 使用Docker来安装autoware相对简单很多 1 xff0c Docker用户权限问题 sudo groupadd docker sudo gp
  • cv_bridge与OpenCV版本关联

    1 xff0c ros melodic中通过apt get安装cv bridge xff0c 其pc文件中依赖的opencv版本为3 2 xff0c 如果系统安装其他的opencv版本 xff0c 需要把cv bridge源码下载到系统本地
  • LLVM/clang & lib路径 & 测试代码

    部分转载自 xff1a Ubuntu编译安装llvm clangUbuntu14 04 Linux安装LLVM clang 3 7 xff08 带有标准库 libc 43 43 xff0c libc 43 43 abi xff09 所需即所
  • Flask+python 爬虫制作股票查询、历史数据、股评词云网页

    自学python的数据分析 xff0c 爬虫后 xff0c 花了几天时间学习Flask做了一个简单的股票查询网页 本想着加入其它的分析板块 xff0c 不过发现部署到服务器还要花钱 xff0c 于是先到此为止 xff0c 后面可能会继续加入
  • 海量数据处理总结

    当数据量变大的时候 xff0c 一些适用较小量数据的算法可能不适用了 xff0c 需要重新考虑具体处理措施 何谓海量数据处理 xff1f 所谓海量数据处理 xff0c 无非就是基于海量数据上的存储 处理 操作 何谓海量 xff0c 就是数据
  • 流媒体之DirectShow——视频采集

    文章目录 一 xff1a 介绍二 xff1a 设备枚举三 xff1a Video Graph3 1 视频预览3 2 录制视频到AVI文件3 3 录制视频到Windows Media File ASF 3 4 录制视频到其他文件格式3 5 录
  • Linux 平台驱动程序与 单片机程序 的异同

    不知不觉 xff0c 已经接触Linux 操作系统四年多 xff0c 对于什么是Linux 下的驱动 xff0c 这件事需要说明一下 1 什么是driver 驱动 首先 xff0c 需要有计算机组成原理的知识 xff0c 才方便了解驱动这个
  • STM32移植FreeRTOS无法启动任务的解决方法

    STM32移植FreeRTOS无法启动任务的解决方法 在实验过程中将FreeRTOS源码全部包含在了STM32F103的项目中 xff0c 但是在实验的过程发现创建的任务无法启动 xff0c 任务创建程序如下 xff1a span clas
  • 荣耀V10手机如何在非华为电脑上实现“多屏协同”?

    去年底 xff0c 华为发布了EMUI10版本 xff0c 在mate30系列手机上以及使用麒麟990和麒麟980的华为荣耀手机 xff0c 手机与windows系统华为或荣耀电脑上可实现 多屏协同 功能 所谓 多屏协同 xff0c 是一种
  • docker容器启动时会报 socket permission denied或者listen tcp port failed 等错误的原因

    最近在deepin系统上装了个snap xff0c 应该是给启用了apparmor这个东东 xff0c 导致原本运行正常的docker 容器在在使用socket监听网络端口时会报 socket permission denied或者 lis
  • VirtualBox+CentOS安装增强功能

    VirtualBox 43 CentOS安装增强功能 1 启动安装在 VirtualBox 中的 CentOS 5 5 虚拟机 xff0c 点击 设备 61 gt 安装增强功能 这个时候你就可以看到有一个 光盘 已经挂载到 CentOS 5
  • 设置yum的源为iso镜像文件

    默认的 yum 是以网络来安装的 xff0c 在没有网络或者网速不佳的情况下 xff0c 通过 yum 来安装软件是意见非常痛苦的事情 其实对于CentOSDVD来说 xff0c 里面提供的软件就足以满足我们的需要了 xff0c 而且DVD
  • make: *** /lib/modules/2.6.18-164.el5/build: No such file

    错误显示 没有 lib modules 2 6 18 164 el5 build 这个目录 xff0c 确认当前内核是这个版本么 xff0c 是的话安装 kernel devel kernel headers 软件包
  • centos6下配置softap需关闭NetworkManager服务

    最近在linux上使用了 fast 150us无线网卡 在网上找了一大堆资料 找到了8188eu驱动 安装成功 在配置hostapd服务时 xff0c 老是启动不起来 xff0c 或者是启动之后别的机器连不上热点 xff0c 当我将Netw
  • 不重新编译为PHP安装MySQL模块

    当初安装PHP的源码目录我没有删除 xff0c 直接在此基础上安装 xff1a 1 进入php ext mysql xff1a cd php ext mysql 2 执行phpize命令 xff0c 这个命令一定得在php的模块目录下执行
  • Linux 下 netbeans 字体抗锯齿正解

    在netbeans安装目录找到 etc 目录下的 netbeans conf 文件 xff0c 用你喜欢的编辑器打开这个文件 xff0c 在其中加入这个选项 J Dawt useSystemAAFontSettings 61 on 这里你要
  • 如何在CentOS系统中安装字体

    以linux下安装宋体 xff0c 黑体为例 xff0c 介绍字体安装方法 xff1a 第一步 拷贝 把对应字体的的ttf文件拷到 usr share fonts 的任意目录下 xff0c 假设宋体已拷贝到 usr share fonts
  • Intel CPU简介

    现在Intel已然成了CPU的代名词 xff0c 但当年的Intel并没有现在这么风光 从1978年发布的8086到2013年的四代i7 xff0c 整整35年 xff0c 她见证了从PC到互联网 移动互联网的几次巨变 xff1b 这些年的