{
  "schemaVersion": "0.11.0",
  "canonical": "https://www.pystone.net/notes/cpu-arch-and-os/",
  "atlas": "https://www.pystone.net/?node=cpu-arch-and-os#knowledge-atlas",
  "markdown": "https://www.pystone.net/notes/cpu-arch-and-os.md",
  "context": "https://www.pystone.net/notes/cpu-arch-and-os.context.json",
  "knowledgeVersion": "224c990773de.5fa8af6e39fa",
  "build": {
    "siteCommit": "224c990773de166d23a886306577dd90379529ce",
    "notesCommit": "5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a",
    "builtAt": "1970-01-01T00:00:00.000Z",
    "version": "224c990773de.5fa8af6e39fa"
  },
  "id": "note:cpu-arch-and-os",
  "slug": "cpu-arch-and-os",
  "title": "CPU架构相关到操作系统",
  "type": "note",
  "visibility": "public",
  "idStability": "rename-stable",
  "author": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "publisher": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "aliases": [],
  "summary": "CPU架构相关到操作系统",
  "contentRole": "unspecified",
  "isMoc": false,
  "mocRecognition": "none",
  "generated": false,
  "attribution": "unspecified",
  "domain": "10-计算机、信息技术与工程",
  "tags": [],
  "mocs": [],
  "contentHash": "bc17c3e730b227411e4c65a588422b4141d2681a6358380b951d04d90102cf80",
  "assets": [],
  "headings": [
    {
      "depth": 1,
      "text": "CPU架构相关到操作系统",
      "anchor": "cpu架构相关到操作系统",
      "citation": "https://www.pystone.net/notes/cpu-arch-and-os/#cpu%E6%9E%B6%E6%9E%84%E7%9B%B8%E5%85%B3%E5%88%B0%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F"
    },
    {
      "depth": 2,
      "text": "X86架构",
      "anchor": "x86架构",
      "citation": "https://www.pystone.net/notes/cpu-arch-and-os/#x86%E6%9E%B6%E6%9E%84"
    },
    {
      "depth": 3,
      "text": "CPU，指令集与OS的位数",
      "anchor": "cpu指令集与os的位数",
      "citation": "https://www.pystone.net/notes/cpu-arch-and-os/#cpu%E6%8C%87%E4%BB%A4%E9%9B%86%E4%B8%8Eos%E7%9A%84%E4%BD%8D%E6%95%B0"
    },
    {
      "depth": 3,
      "text": "32 vs 64位",
      "anchor": "32-vs-64位",
      "citation": "https://www.pystone.net/notes/cpu-arch-and-os/#32-vs-64%E4%BD%8D"
    },
    {
      "depth": 3,
      "text": "内存容量与操作系统位数的关系",
      "anchor": "内存容量与操作系统位数的关系",
      "citation": "https://www.pystone.net/notes/cpu-arch-and-os/#%E5%86%85%E5%AD%98%E5%AE%B9%E9%87%8F%E4%B8%8E%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E4%BD%8D%E6%95%B0%E7%9A%84%E5%85%B3%E7%B3%BB"
    },
    {
      "depth": 4,
      "text": "地址总线",
      "anchor": "地址总线",
      "citation": "https://www.pystone.net/notes/cpu-arch-and-os/#%E5%9C%B0%E5%9D%80%E6%80%BB%E7%BA%BF"
    },
    {
      "depth": 4,
      "text": "物理地址，线性地址，逻辑地址",
      "anchor": "物理地址线性地址逻辑地址",
      "citation": "https://www.pystone.net/notes/cpu-arch-and-os/#%E7%89%A9%E7%90%86%E5%9C%B0%E5%9D%80%E7%BA%BF%E6%80%A7%E5%9C%B0%E5%9D%80%E9%80%BB%E8%BE%91%E5%9C%B0%E5%9D%80"
    },
    {
      "depth": 2,
      "text": "AMD 与 Intel",
      "anchor": "amd-与-intel",
      "citation": "https://www.pystone.net/notes/cpu-arch-and-os/#amd-%E4%B8%8E-intel"
    },
    {
      "depth": 2,
      "text": "ARM与Intel (X86)架构及其他",
      "anchor": "arm与intel-x86架构及其他",
      "citation": "https://www.pystone.net/notes/cpu-arch-and-os/#arm%E4%B8%8Eintel-x86%E6%9E%B6%E6%9E%84%E5%8F%8A%E5%85%B6%E4%BB%96"
    },
    {
      "depth": 3,
      "text": "手机处理器",
      "anchor": "手机处理器",
      "citation": "https://www.pystone.net/notes/cpu-arch-and-os/#%E6%89%8B%E6%9C%BA%E5%A4%84%E7%90%86%E5%99%A8"
    },
    {
      "depth": 2,
      "text": "Ref",
      "anchor": "ref",
      "citation": "https://www.pystone.net/notes/cpu-arch-and-os/#ref"
    }
  ],
  "claims": [],
  "outgoing": [],
  "incoming": [
    {
      "id": "note:systems-and-network-security",
      "title": "系统基础与网络安全",
      "url": "https://www.pystone.net/notes/systems-and-network-security/",
      "atlas": "https://www.pystone.net/?node=systems-and-network-security#knowledge-atlas",
      "label": "系统基础与网络安全",
      "origin": "explicit",
      "humanReviewed": true,
      "context": "计算机与操作系统中的“CPU架构相关到操作系统”导航项",
      "citation": "https://www.pystone.net/notes/systems-and-network-security/#%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%B8%8E%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F"
    }
  ],
  "contentMarkdown": "# CPU架构相关到操作系统\n\n> 创建时间：2020/9/28 17:19\n\n## X86架构\n\nx86泛指一系列英特尔公司用于开发处理器的指令集架构\n\n较早期的处理器名称是以数字来表示80x86（包括Intel 8086、80186、80286、80386以及80486），因此其架构被称为“ **x86** ”。现时英特尔将其称为 **IA-32** ，全名为“Intel Architecture, 32-bit”，一般情形下指代32位的架构。由于数字并不能作为注册商标，因此Intel及其竞争者均在新一代处理器使用可注册的名称，如 **Pentium** ，来描述x86架构下的处理器产品。\n\n8086是16位处理器；直到1985年32位的80386的开发，这个架构都维持是16位。接着一系列的处理器表示了32位架构的细微改进，推出了数种的扩展，直到2003年AMD对于这个架构发展了64位的扩展，并命名为 **AMD64** 。\n后来英特尔也推出了与之兼容的处理器，并命名为 **Intel 64** 。\n\n两者一般被统称为 **x86-64(64-bit extended)** 或 **x64** ，开创了x86的64位时代。\nx86-64向后兼容于16位及32位的x86架构。\n\n### CPU，指令集与OS的位数\n\n**CPU的位数** 是CPU一次能够并行处理的数据宽度，一般就是指数据总线宽度。也指CPU能一次同时寄存和处理二进制数码的位数，这和CPU中寄存器的位数对应。\n\n**指令集** 和CPU的位数是有联系的。如Intel 8086 CPU 是16位，其指令集也是16位；Intel 80386DX CPU 是32位，其指令集也是32位，但它也保持原16位指令集，这是为了向上兼容。\n\n**操作系统的位数** 操作系统位数 = 其所依赖的指令集位数 <= CPU位数\n\n操作系统位数应该是根据 **指针类型的位数** 来定的。整数类型不一定跟位数相等。\n\n> 计算机字长取决于数据总线的宽度，是指一次能传输的数据的位数，通常就是CPU一次能处理的数据的位数，所以字长就是取决于数据总线。像平时我们买电脑说的64位的处理器，指的就是字长为64的CPU。\n\n### 32 vs 64位\n\n32位CPU只有8个32位通用寄存器\nx86_64把这8个通用寄存器扩展成了64位的，并且比x86增加了若干个寄存器\n\n> 对于普通程序来说，CPU位数的扩展、寄存器数量的增加不会带来明显的性能提升，比如IE浏览器、Office办公这类的软件。特定的程序很能够充 分利用64位CPU、更多的寄存器带来的优势，比如MMX除了能提升多媒体程序的性能，对矩阵、多项式、向量计算都能带来提升，更多的MMX寄存器、更大 的寄存器字长都有利于SIMD指令的执行，能够提升CPU对数据的吞吐量（RISC指令集的CPU动不动就有数百个寄存器，可以有效的缓存中间计算结果， 不需要把中间结果写入内存，从而减少内存访问次数，显著提升性能）\n\n### 内存容量与操作系统位数的关系\n\n#### 地址总线\n\n> 在早期的PC机中，采用的是三总线结构：数据总线，地址总线和控制总线。在现在的PC机中，一般使用了总线复用功能。如在PCI总线中，地址总线和数据总线总是分时复用的。\n\n**地址总线** 的数目决定了CPU的 **寻址范围** ，这种由地址总线对应的地址称为 **物理地址**\n\n32根地址总线：一般情况下32位的CPU的地址总线是32位，也有部分32位的CPU地址总线是36位的，比如用做服务器的CPU。提供的可寻址物理地址范围 为 2^32=4GB。（ **所以在32位CPU和32位的操作系统中，理论上最大支持的内存为4G** ，实际上只有3.2G左右）\n\n64位CPU地址总线一般采用的是36位或者40位。（即CPU能够寻址的物理地址空间为64GB或者1T）\n\n#### 物理地址，线性地址，逻辑地址\n\n  * 物理地址（Physical Address）： 刚刚讲过了，由CPU地址总线的位数决定\n\n  * 线性地址（Linear Address）： 如果没有开启分页机制，线性地址就等于物理地址。如果开启了分页机制，线性地址到物理地址需要经过二级地址转换。线性地址可以很大，但最终要运行在物理地址上，而缺页机制和进程挂起等，就是为了让远比物理内存大的程序，运行在如此小的物理内存中。\n\n  * 逻辑地址（Logical Address）： 指分段机制提供的地址，由段部分和一个便宜部分构成。段机制是虚拟地址到线性地址的基础。线性地址 = 段基址 + 偏移地址。\n\n逻辑地址经过段式映射（Segmentation Translation）到线性地址。线性地址经过页面映射（Page Translation）后，得到物理地址。\n\n> C语言指针编程中，可以读取指针变量本身值(&操作)，实际上这个值就是 **逻辑地址** ，它是相对于你当前进程数据段的地址，不和绝对物理地址相干。\n\n## AMD 与 Intel\n\nIntel先是自己搞了个x86架构，然后amd拿到了x86的授权也可以自己做x86了。接着intel向64位过渡的时候自己搞了个ia64（x64架构）但是因为和x86架构不兼容市场反应极差，amd率先搞了x86的64位兼容（32和64的混合架构）也就是后来的x86-64，后来Intel也拿到了生产这货的授权（i和a两家专利交叉的很严重），也搞了x86-64，因为amd先搞出来的所以x86-64也叫amd64\n\n到目前为止intel和amd的x86架构cpu虽然指令集上有很大差别了但是还是相互兼容的，所以软件可以直接用。\n\n## ARM与Intel (X86)架构及其他\n\n> 早期的cpu有两个设计思路，1是把cpu内的逻辑电路做的非常复杂，这样可以直接用cpu硬件实现复杂指令，这个叫复杂指令集cisc；另一个思路是尽可能把cpu做的简单，依靠简单指令的组合迭代完成复杂指令，这个叫精简指令集risc。\n\n  * Intel - 复杂指令集（CISC）\n早期的x86是cisc的代表，后来的发展中逐步引入了risc的部分理念，将内部指令的实现大量模块化，准确来说是一个cisc外加risc部分技术的架构。\n\n  * ARM(Advanced RISC Machines)- 精简指令集（RISC）\narm是risc的典型代表，不过在arm的发展过程中引入了部分复杂指令（完全没有复杂指令的话操作系统跑起来异常艰难），所以是一个risc基础外加cisc技术的cpu。\n\n  * mips是一个学院派的cpu，授权门槛极低，因此很多厂家都做mips或者mips衍生架构。我们平时接触到的mips架构cpu主要用在嵌入式领域，比如路由器。\n\n> ARM从来只是设计低功耗处理器，Intel的强项是设计超高性能的台式机和服务器处理器。\n>  目前无论mips还是arm，性能和主流x86差距都很大，不过arm贵在便宜低功耗，mips则纯计算能力很强\n\n### 手机处理器\n\n目前ARM架构占据手机处理器90%的市场份额\n\n## Ref\n\n<https://www.cnblogs.com/little-YTMM/p/5058354.html>\n<https://zh.wikipedia.org/zh-cn/X86>\n<https://www.zhihu.com/question/63627218>\n<https://zhuanlan.zhihu.com/p/21266987>\n<https://blog.csdn.net/u012861978/article/details/51871315>\n<https://www.cnblogs.com/little-YTMM/p/5058354.html>\n<https://baike.baidu.com/item/%E6%89%8B%E6%9C%BA%E5%A4%84%E7%90%86%E5%99%A8>\n"
}
