CPU架构相关到操作系统
本文目录 10 个章节
CPU架构相关到操作系统
创建时间:2020/9/28 17:19
X86架构
x86泛指一系列英特尔公司用于开发处理器的指令集架构
较早期的处理器名称是以数字来表示80x86(包括Intel 8086、80186、80286、80386以及80486),因此其架构被称为“ x86 ”。现时英特尔将其称为 IA-32 ,全名为“Intel Architecture, 32-bit”,一般情形下指代32位的架构。由于数字并不能作为注册商标,因此Intel及其竞争者均在新一代处理器使用可注册的名称,如 Pentium ,来描述x86架构下的处理器产品。
8086是16位处理器;直到1985年32位的80386的开发,这个架构都维持是16位。接着一系列的处理器表示了32位架构的细微改进,推出了数种的扩展,直到2003年AMD对于这个架构发展了64位的扩展,并命名为 AMD64 。 后来英特尔也推出了与之兼容的处理器,并命名为 Intel 64 。
两者一般被统称为 x86-64(64-bit extended) 或 x64 ,开创了x86的64位时代。 x86-64向后兼容于16位及32位的x86架构。
CPU,指令集与OS的位数
CPU的位数 是CPU一次能够并行处理的数据宽度,一般就是指数据总线宽度。也指CPU能一次同时寄存和处理二进制数码的位数,这和CPU中寄存器的位数对应。
指令集 和CPU的位数是有联系的。如Intel 8086 CPU 是16位,其指令集也是16位;Intel 80386DX CPU 是32位,其指令集也是32位,但它也保持原16位指令集,这是为了向上兼容。
操作系统的位数 操作系统位数 = 其所依赖的指令集位数 <= CPU位数
操作系统位数应该是根据 指针类型的位数 来定的。整数类型不一定跟位数相等。
计算机字长取决于数据总线的宽度,是指一次能传输的数据的位数,通常就是CPU一次能处理的数据的位数,所以字长就是取决于数据总线。像平时我们买电脑说的64位的处理器,指的就是字长为64的CPU。
32 vs 64位
32位CPU只有8个32位通用寄存器 x86_64把这8个通用寄存器扩展成了64位的,并且比x86增加了若干个寄存器
对于普通程序来说,CPU位数的扩展、寄存器数量的增加不会带来明显的性能提升,比如IE浏览器、Office办公这类的软件。特定的程序很能够充 分利用64位CPU、更多的寄存器带来的优势,比如MMX除了能提升多媒体程序的性能,对矩阵、多项式、向量计算都能带来提升,更多的MMX寄存器、更大 的寄存器字长都有利于SIMD指令的执行,能够提升CPU对数据的吞吐量(RISC指令集的CPU动不动就有数百个寄存器,可以有效的缓存中间计算结果, 不需要把中间结果写入内存,从而减少内存访问次数,显著提升性能)
内存容量与操作系统位数的关系
地址总线
在早期的PC机中,采用的是三总线结构:数据总线,地址总线和控制总线。在现在的PC机中,一般使用了总线复用功能。如在PCI总线中,地址总线和数据总线总是分时复用的。
地址总线 的数目决定了CPU的 寻址范围 ,这种由地址总线对应的地址称为 物理地址
32根地址总线:一般情况下32位的CPU的地址总线是32位,也有部分32位的CPU地址总线是36位的,比如用做服务器的CPU。提供的可寻址物理地址范围 为 2^32=4GB。( 所以在32位CPU和32位的操作系统中,理论上最大支持的内存为4G ,实际上只有3.2G左右)
64位CPU地址总线一般采用的是36位或者40位。(即CPU能够寻址的物理地址空间为64GB或者1T)
物理地址,线性地址,逻辑地址
物理地址(Physical Address): 刚刚讲过了,由CPU地址总线的位数决定
线性地址(Linear Address): 如果没有开启分页机制,线性地址就等于物理地址。如果开启了分页机制,线性地址到物理地址需要经过二级地址转换。线性地址可以很大,但最终要运行在物理地址上,而缺页机制和进程挂起等,就是为了让远比物理内存大的程序,运行在如此小的物理内存中。
逻辑地址(Logical Address): 指分段机制提供的地址,由段部分和一个便宜部分构成。段机制是虚拟地址到线性地址的基础。线性地址 = 段基址 + 偏移地址。
逻辑地址经过段式映射(Segmentation Translation)到线性地址。线性地址经过页面映射(Page Translation)后,得到物理地址。
C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是 逻辑地址 ,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。
AMD 与 Intel
Intel先是自己搞了个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
到目前为止intel和amd的x86架构cpu虽然指令集上有很大差别了但是还是相互兼容的,所以软件可以直接用。
ARM与Intel (X86)架构及其他
早期的cpu有两个设计思路,1是把cpu内的逻辑电路做的非常复杂,这样可以直接用cpu硬件实现复杂指令,这个叫复杂指令集cisc;另一个思路是尽可能把cpu做的简单,依靠简单指令的组合迭代完成复杂指令,这个叫精简指令集risc。
Intel - 复杂指令集(CISC) 早期的x86是cisc的代表,后来的发展中逐步引入了risc的部分理念,将内部指令的实现大量模块化,准确来说是一个cisc外加risc部分技术的架构。
ARM(Advanced RISC Machines)- 精简指令集(RISC) arm是risc的典型代表,不过在arm的发展过程中引入了部分复杂指令(完全没有复杂指令的话操作系统跑起来异常艰难),所以是一个risc基础外加cisc技术的cpu。
mips是一个学院派的cpu,授权门槛极低,因此很多厂家都做mips或者mips衍生架构。我们平时接触到的mips架构cpu主要用在嵌入式领域,比如路由器。
ARM从来只是设计低功耗处理器,Intel的强项是设计超高性能的台式机和服务器处理器。 目前无论mips还是arm,性能和主流x86差距都很大,不过arm贵在便宜低功耗,mips则纯计算能力很强
手机处理器
目前ARM架构占据手机处理器90%的市场份额
Ref
https://www.cnblogs.com/little-YTMM/p/5058354.html https://zh.wikipedia.org/zh-cn/X86 https://www.zhihu.com/question/63627218 https://zhuanlan.zhihu.com/p/21266987 https://blog.csdn.net/u012861978/article/details/51871315 https://www.cnblogs.com/little-YTMM/p/5058354.html https://baike.baidu.com/item/%E6%89%8B%E6%9C%BA%E5%A4%84%E7%90%86%E5%99%A8