当前位置: 首页 > news >正文

CPU的起源与发展历程

CPU的起源与发展历程

文章目录

  • CPU的起源与发展历程
    • 前言
    • 指令概念
    • 电子管(真空管)
    • 体系结构
      • 冯·诺依曼架构
      • 哈佛架构
    • 晶体管
    • 集成电路
    • 指令集与微架构
    • 微处理器
      • x86架构
      • CISC与RISC的提出
      • MIPS架构
      • ARM架构
      • RISC-V架构
      • FPGA
    • 总结

前言

​ 从古至今,人类为了更好地适应和管理世界,不断发展和完善数学运算。各地的先驱们相继发明了各种计数工具,提出数学定理。从最基本的数数到复杂的数学模型,每一步都反映了人类社会科技和文化的进步。

​ 文艺复兴和工业革命的到来,使计算方式从原始计算过渡到机械计算。机械计算设备开始在社会中广泛应用,随着社会生产水平的提高,电子时代悄然来临。人类智慧的结晶——集成电路应运而生。伴随集成电路的出现,作为计算机核心运算和控制中心的大脑——中央处理器也随之诞生。

指令概念

​ 1804年,法国人约瑟夫·玛丽·雅卡尔(Joseph Marie Jacquard)发明了使用打孔卡纺织图案的提花编织机,控制设备自动化纺织的那张打孔卡纸上便打下了指令初期的烙印。

​ 1834年,英国数学家、发明家查尔斯·巴贝奇(Charles Babbage)在之前设计的差分机基础上,开始设计名为"分析机"的计算设备,分析机采用雅卡尔发明的打孔卡进行数据的输入和输出,提出了最初的算术逻辑单元概念“磨坊(Mill)”,能够执行四种算术运算,执行过程中提出了条件分支和循环形式的控制流思想,不仅能执行特定的运算,还能按照给定的数据顺序执行一系列操作;巴贝奇还提出了齿轮式 存储器“存贮仓库”(Store)“的概念,使这台机器能够保存1000个50位的十进制数字,至此,巴贝奇构想的这台机械式通用计算机为未来计算机的发展提供了近乎完整的方案。

​ 值得一提的是,此前巴贝奇的差分机就初步具有时序的概念,在他的设计中,机器运算时需要人工摇动差分机的曲柄带动主轴转动,机器主轴每旋转一圈,就进行一次加法和进位运算的迭代,每转动四圈便完成一个完整的循环。

​ 精健日月,星辰度理,阴阳五行,周而复始,从宏观的角度来看,时间主宰着一切,人类如同繁星点缀其间,自古至今,从晨曦微光至夜幕低垂,时间的脚步从未停歇,它赋予了四季更替、日月运行以秩序,以一种无形却至关重要的力量编织着万物生长、更迭往复。

​ 在电子的维度中,时间不再是自然的流逝,而是通过抽象逻辑转化为一种精确到纳秒级的脉动——时钟脉冲,它以恒定、均匀的节奏跳动着,为电子世界提供了一个统一的时间基准,使得硬件之间能够按照这个节奏执行指令和进行不同的计算控制活动,让数据得以有序流动,加以记忆,搭建出数字世界与现实世界的桥梁。而在微观角度审视,时间,又何尝不是大脑的一种无形暗示,将生命赋予意义,将宇宙赋予灵魂。

电子管(真空管)

​ 随着时间的推移,电子元件开始流入市场,计算机主体也从机械向电子进行转变,电子元件的快速开关和逻辑门电路的引入,使得计算机开始具有复杂逻辑运算的能力,并逐步实现了自动化的数据计算和处理。

​ 1883年,美国发明家托马斯·爱迪生(Thomas Alva Edison)在研究灯泡时多放了一个带有箔片的电极进去,他因此发现了一个奇特的现象,第三极通正电时,箔片毫无反应;但通负电时,箔片随即翻腾漂浮。当时的爱迪生不知道此现象的缘由,直到1901年,英国物理学家欧文·理查森(Owen Richardson)证明电子的激发态可以引起箔片漂浮,提出了著名的理查森定律。由于这一现象是爱迪生第一个发现的,因此被称为“爱迪生效应”。

​ 1904年,约翰·弗莱明(John Fleming)在爱迪生效应的基础上通过灯泡内的金属板来控制电流的方向,可以将交流电转换为直流电,实现了单向电流的整流功能,从而发明出二极管。

​ 1906年,美国发明家李·德·福雷斯特(Lee De Forest)在二极管的阴极和阳极之间放置了一个控制栅极,使得电流可以通过栅极电压进行调节,从而实现了信号放大,发明出了真空三极管,由此正式拉开了电子工业革命的序幕。

体系结构

​ 1937年,英国计算机科学家、数学家、逻辑学家、密码分析学家、理论生物学家、哲学家艾伦・麦席森・图灵(Alan.Mathison. Turing)发表了一篇论文《论可计算数及其在判定问题上的应用,On Computable Numbers, with an Application to the Entscheidungsproblem》,文中提出一种抽象化的通用计算模型,他将人们使用纸笔进行数学运算的行为由一个虚拟的机器来替代人类进行数学运算。把人们使用纸笔进行数学运算的过程看作两种动作:

  • 在纸上写上或擦除某个符号;
  • 将注意力从纸的一处移动到另一处;

​ 为了模拟人类的这种运算过程,图灵假想出一台由一条无限长的纸带、一个可以读写纸带的操作头、一个控制操作头移动的规则表、一个状态寄存器组成的机器,这个机器模型被后人称为“图灵机(Turing Machine)”。图灵机进一步描述了计算过程中的控制流和时序的概念,那个控制操作头移动的规则表被视为最早计算机指令集的抽象形式,具有条件分支、存储机制、循环或递归的特性也被称为图灵完备。

​ 1938年,美国科学家、爱荷华州立大学教授约翰·阿塔那索夫(John Vincent Atanasoff)和他的研究生克利福德·贝瑞(Clifford E. Berry)设计出能解线性代数方程的计算机,两人分别取姓氏的第一个字母A、B,与“Computer”的首字母C进行组合,将这台计算机命名为"ABC"(Atanasoff-Berry Computer)。ABC是第一台自动电子数字计算机,它使用电子管作为算数逻辑单元,用再生电容作为主存储器,打孔卡片作辅助存储器,两组电容每秒绕主轴转动一次,时钟频率为60Hz,使用二进制进行运算,完成一次加法运算用时一秒,它不可编程,仅仅设计用于求解线性方程组,使用重复加法和减法、符号感知、移位和自动顺序控制作为从一对方程中消除指定变量的主要步骤,ABC计算机提出了类指令概念,通过控制面板上的按钮和开关执行指令,开创了现代计算的重要元素,尽管ABC计算机相比早期的计算机有了重大进步,但它无法全自动地解决整个问题,运行过程中仍然需要操作员通过前面板的开关和跳线进行操作。

​ 1940年,阿塔那索夫在美国科学进步协会的年会上结识了宾夕法尼亚大学的教授莫奇利(John W.Mauchly),两人相谈甚欢,于是阿塔那索夫盛情邀请莫奇利到他所在的爱荷华州立大学计算机研究所参观他设计的那台专用电子计算机ABC,等莫奇利来了之后,阿塔纳索夫毫不保留的把自己制造电子计算机的核心技术都讲解给了莫奇利。五天后,莫奇利因为要参加美国国防部为宾夕法尼亚州立大学莫尔电气工程学院举办的研究生培训班,也没好好道个别就匆匆离去。此时的莫奇利对ABC计算机的关键技术已了然于胸,并在心里开始暗暗决定制造一台更完美的计算机。

​ 1942年,ABC计算机顺利完工并成功进行了测试,可重复使用的内存、逻辑电路、基于二进制运算、电容存储器等设计为后来计算机的发展奠定了坚实的基础。

​ 1944年,IBM根据哈佛大学博士霍华德·艾肯(Howard Hathaway Aiken)的设计制造出一款求解微分方程机械式电子计算机,命名为自动顺序控制计算机(Automatic Sequence Controlled Calculator,ASCC),同年移交给哈佛大学后改名为哈佛Mark I,机器主体由开关、继电器、旋转轴和离合器组成。使用了 765,000 个机电元件和数百英里的电线,体积为23 立方米,重量约为4.3 吨。基本计算单元必须并以机械方式同步供电,驱动15 米的驱动轴,因此采用了 3.7 千瓦的电动机作为主电源和系统时钟。机器本身无需人工介入,可以全自动运算。这台计算机的设计包含了分离的存储系统,用于存储程序指令和数据。这种设计使得计算机可以同时读取指令和数据,从而提高了效率。

冯·诺依曼架构

​ 1945年,在第二次世界大战的推动下,真空管被大量应用于军事方向的数据计算设备,美国宾夕法尼亚大学莫尔电气工程学院的莫奇利(John W.Mauchly)埃克特(J.Presper Eckert)为首的小组研制出一台数字电子计算机ENIAC(Electronic Numerical Integrator And Calculator,电子数字积分计算器),它隶属于美国军方,于1943年开始研制,总共花费48万美金,主要用于为美军的弹道研究实验室给陆军提供火力弹道表的非线性方程运算,ENIAC重30吨,占地约140平方米,使用了约18800个真空电子管作为基本运算元件,1500个继电器,功率达174千瓦,使用十进制运算,每秒能运算5000次加法,是手工计算的20万倍,使用了基于物理机制的机械旋转鼓来产生时钟信号。1946年,ENIAC正式交付军方使用,ENIAC是继ABC计算机后的第二台电子计算机,也是第一台图灵完备的通用计算机。

​ 在ENIAC正式投入运行的那年,此前曾参与曼哈顿计划的匈牙利美籍犹太人数学家,理论计算机科学与博弈论的奠基者约翰 · 冯 · 诺依曼(John von Neumann)发表了《关于离散变量自动电子计算机的草案,First Draft of a Report on the EDVAC》,文中提到了计算机的基本原理和体系结构:

1. 由二进制替代十进制
2. 在结构上分为运算器(ALU),控制器(CU),存储器,输入设备,输出设备五大部件,以运算器为中心,输入输出设备与存储器的数据都传送至运算器计算
3. 核心内容是采用存储程序思想,指令和数据以二进制形式存于同一存储器,指令由操作码和操作数组成,通过控制单元从存储器中按地址取出指令,并根据指令的操作码执行相应的操作,数据总线和指令线是共用的,但取指令和取数据不能同时进行,所以指令运行速度会受到限制

​ 这种架构的优势在于其简洁性、通用性和灵活性,使得计算机能够执行不同类型的任务,并支持存储程序的概念,使得程序可以被修改和更新,后来冯诺依曼带领 ENIAC 的原班人马开始采用新架构重新设计了整个通用电子计算机架构,研制了 EDVAC(Electronic Discrete Variable Automatic Computer),后来这一设计被称为冯·诺依曼架构,因为完成这篇论文时冯诺依曼在普林斯顿高等研究院工作,所以也称为普林斯顿架构。

哈佛架构

​ 还有一种架构就是之前IBM移交给哈佛大学的哈佛Mark I计算机所采用的指令和数据完全分离存储的架构:

1. 采用并行结构将指令存储器、指令总线 和 数据存储器、数据总线进行相互分离。这样执行指令的时候,取指令和取数据可以同时进行,安全和稳定性高
2. 一般指令线宽于数据线,执行效率更高,速度也更快
3. 指令大多是字节指令,大大提高了程序存储器的空间利用率,有利于实现超小型化,但是会增加成本和软件设计的复杂度,需要统一规划连接地址等

由于当时最初的设计在哈佛Mark I上体现,所以被称为哈佛架构。另外还有一种所谓的改进型哈佛架构, 即将数据总线和指令总线等两组系统总线合为一组, 使用分时复用的方式进行访问, 节省了总线资源, 而且没有改变哈佛结构数据和程序指令分开存储的本质。

​ 就目前的微型计算机而言,人们已经在哈佛架构和冯·诺依曼架构的基础上, 在处理器内部增加了缓存(Cache)结构, 分为 D-Cache 和 I-Cache。 分别用于存储数据和程序指令; 外部则使用 RAM 存储数据和指令。 只有需要改变数据时, 处理器内部缓存才会到 RAM 中加载新的数据。 这种方式就比较复杂一些。实际上,这是一种混合式架构,从内部看属于哈佛架构, 从外部看则属于冯·诺依曼架构,已经不再是纯粹的冯·诺依曼架构或者哈佛架构了。

除了冯·诺依曼架构和哈佛架构,还存在其他一些计算机架构。这些架构可以是基于不同的原则和设计理念,用于满足特定的应用需求。

数据流架构(Dataflow Architecture):在数据流架构中,指令的执行是由数据的可用性来触发的,而不是按照传统的程序控制流顺序执行。这种架构在并行计算和数据密集型应用中有优势。矢量架构(Vector Architecture):矢量架构通过执行矢量操作,即同时对多个数据元素执行相同的操作,来提高计算性能。它主要用于科学计算和高性能计算领域。流水线架构(Pipeline Architecture):流水线架构将指令执行划分为多个阶段,并在不同的阶段同时执行多条指令。这样可以提高处理器的吞吐量,加快指令的执行速度。多核架构(Multi-core Architecture):多核架构将多个处理核心集成在同一芯片上,每个核心可以独立执行指令,从而提高计算机系统的并行性和性能。SIMD架构(Single Instruction, Multiple Data):SIMD架构允许在单个指令下同时对多个数据元素执行相同的操作,适用于处理大规模数据并行计算。MIMD架构(Multiple Instruction, Multiple Data):MIMD架构允许多个处理器或处理核心独立执行不同的指令,适用于并行处理多个独立任务。DSP架构(Digital Signal Processor):DSP架构专门用于数字信号处理,具有优化的指令集和硬件支持,适用于音频、图像处理等应用。

晶体管

​ 随着电子管计算机开始正式进入公众视野,它的诟病也就被发现出来,体积大且故障多,能耗高又价格贵,于是找到一种体积小且故障少,能耗低又价格贱的计算机方案成为新的研究目标。

​ 1947年,当时在贝尔实验室(AT&T)的威廉·肖克利(William B. Shockley)小组内的两位科学家约翰·巴丁(John Bardeen)沃尔特·布拉顿(Walter H. Brattain)根据此前肖克利通过三极管和PN结提出的半导体放大信号功能的场效应设想,用几条金箔片,一片半导体材料和一个弯纸架制成一个可以使电流传导、放大和开关的小模型。他们把这一发明称为“点接晶体管放大器”(Point-Contact Transistor Amplifier)。但是离谱的是,由于肖克利与人交往能力较差,后来他俩在申请专利时,没把提出理论的肖克利加上去。肖克利心想这叫什么事,吃劳资的饭还砸劳资的锅?于是他憋着一股气开始自己搞,去球!不跟你们玩了!

​ 1949年,肖克利将他提出的将这些功能都集中在半导体内完成,发明了双极结型晶体管(Bipolar Junction Transistor,BJT),这可比他俩的强多了,至少不会门一关就把导线给震下来,于是结型晶体管开始逐步取代笨重的电子管,成为真正有用的晶体管,正式开启了微电子时代的新纪元。

​ 在同一时期,随着铁幕落下,冷战正式开启,世界被撕裂为东西两极,为了在军备竞赛中压过彼此,小型化、高可靠性的计算机需求开始增强。随着时间的推移和各领域科学家的贡献,晶体管本身也在不断进化,体积越做越小,成分上逐步从锗元素向更为常见的硅元素靠拢,比起锗晶体管,硅晶体管可以承受更高的温度和电压。

集成电路

​ 1952年,英国的电子工程师杰弗里·达默(Geoffrey Dummer)在美国的电子元件研讨会上宣读了一篇论文。他在最后说道:“随着晶体管的出现和半导体研究的普遍开展,现在似乎可以设想电子设备被制成一个没有连接线的固体块。该块可以由多层绝缘、导电、整流和放大材料组成,电子功能通过切割各层的区域直接连接”,他的核心目标是采用一定的工艺,取消杂乱的导线设计,将原有电路中所需的晶体管、电阻、电容、电感等各类元件连接在一小块半导体芯片上,这一概念被称为——集成电路(Integrated Circuit,IC)。

​ 1956年,肖克利因发明了晶体管获得了当年的诺贝尔物理学奖,眼看着德州仪器公司靠自己发明的晶体管赚得盆满钵满,他瞬间气就不打一处来,你们行?诺奖在手的祖师爷我就不行?于是他回到了家乡美国加州圣克拉拉山谷的山景城,结识了当时发明了PH表的阿诺德·贝克曼(Arnold Beckman)俩人都觉得半导体市场大有“钱”途,于是在贝克曼的资助下,创办起肖克利半导体实验室股份有限公司,并招揽了八位才华横溢的青年进行培养。起初他们八人准备用硅代替当时较为昂贵的锗来制造晶体管。再加上诺奖老板的神之一手,攻占市场那指定是洒洒水啦,可相处一段时间后发现,他老板虽然技术上有点东西,但纯纯就是个疑神疑鬼的倔驴,抛开人品不谈,在硅材料已经成趋势的大背景下,他把硅晶体管项目撇了,发誓要带着锗半导体一起入土。这八个人可直接傻眼了,老板倔一下带公司入土还好说,万一要是心一横,带着他们八人一块入土可咋整?

1957年,他们八人选择集体离职,这八人分别是罗伯特·诺伊斯 (Robert Noyce)④,戈登·摩尔 (Gordon Moore)①,尤金·克莱纳 (Eugene Kleiner)③,谢尔登·罗伯茨 (Sheldon Roberts)②、杰伊·拉斯特 (Jay Last)⑧、维克托·格林尼奇 (Victor Grinich)⑤、朱利叶斯·布兰科克(Julius Blank)⑥、吉恩·赫尔尼 (Jean Hoerni)⑦

​其中的罗伯特·诺伊斯(Robert Noyce)戈登·摩尔(Gordon Moore)开始合伙创业,他们来到纽约,找到了一家叫做仙童的摄影器材公司,并向公司创始人谢尔曼·费尔柴尔德(S. Fairchild)寻求合作,在抠唆了费尔柴尔德3600块养老金和答应给他两年的购买特权后。仙童摄影器材公司摇身一变,成为大名鼎鼎的仙童半导体公司,肖克利得知消息后气得低压比高压还高,痛骂他们八个人是“八叛逆”,他的发财梦破灭了,贝克曼看到公司这样的光景后也不由得对肖克利感叹,于是两人大吵一架,不欢而散,后来贝克曼卖掉了公司,肖克利也只能回归到学术领域,接受斯坦福大学的邀请去当电气工程专业的教授去了。

同年,美国陆军钻石军械引信实验室的杰伊·拉斯罗普(Jay Lathrop)詹姆斯·纳尔(James Nall)发明了一项光刻技术并申请了专利,该专利可用于沉积薄膜金属条,从而用于连接陶瓷板上的分立晶体管。它还用于在二氧化硅层中蚀刻孔以微加工二极管阵列。后来,在 1959 年,拉斯罗普去了德州仪器公司工作,而纳尔则加入了仙童半导体公司。

​1958年,世界上第一块集成电路由德州仪器公司新聘的工程师杰克·基尔比(Jack Kilby)完成。这是一块长11.1mm、宽1.6mm的“锗”半导体,上面集成了晶体管、电阻和电容等多种元件。在全人类的共同见证下,这项划时代的伟大发明被时间沉淀出不可估量的价值。

​1959年,八叛逆之一,仙童半导体公司的吉恩·霍尔尼(Jean Hoerni)发明了关键性的平面工艺,1960年,仙童的创始人之一罗伯特·诺伊斯(Robert Noyce)以平面工艺为基础,用“硅”发明了更为实用的集成电路。因为那时德州仪器公司基尔比的集成电路并不完善,在电子元件的连接过程中仍然用到了导线,所以诺伊斯说:“我大仙童的集成电路才是真正意义上的集成电路!”。于是两家公司在整个60年代都为集成电路的发明专利吵得不可开交,最终法院判定,你俩也别争了,这玩意我们反正也不懂,你俩就好商好量的共享“集成电路之父”这个称号吧。

​集成电路的生产制造过程称为光刻随着半导体技术的进步,光刻技术也被引入印刷电路板PCB中的导电路径的制造。早在1936年,奥地利发明家保罗·爱斯勒提出了要把电路板与印刷术结合的想法,研究出了箔膜技术,采用照相印制工艺在绝缘板上形成具有耐酸性掩蔽层的导线图形,然后用化学药品溶解掉未被掩蔽的金属面,电路图就被蚀刻留在了金属板上,就像拍照底片一样,印刷电路板(Printed Circuit Board,PCB)的概念被提出,箔膜技术也给后期的光蚀刻奠定了基础。

​1962年,贝尔实验室的美籍韩裔科学家姜大元(Dawon.Kahng)美籍埃及裔马丁.阿塔拉(M.M.Atalla)等人成功开发了一种相比于BJT更适合集成的新型晶体管,叫做金属氧化物半导体场效应晶体管(Metal Oxide Semiconductor Field Effect Transistor,MOSFET/MOS),简称MOS管,这一发明直接揭开了MOS集成电路的篇章,成为半导体发展史上最重要的里程碑之一,同时为半导体存储器的诞生奠定了技术基础。MOS管问世后,包括BJT在内的其他晶体管几乎被碾压似的赶出了市场,优点在于它的工艺更简单、集成度更高,比如拿一张现在用的256GB的长15mm、宽11mm MicroSD卡来说,内部包含着一万亿个MOS管,比银河系中的恒星还要多。

​1965年,担任仙童半导体公司研发总监的摩尔被邀请为《电子学》杂志三十五周年纪念刊撰稿,主题是预测未来十年半导体元件行业的未来。他提出了集成电路的发展和时间的指数关系:即在价格固定的情况下,每过一年,单个集成电路中的元件数量就会翻一番。到了1975年的时候,他又根据市场的实际情况,将预测修正为每两年翻一番,这也被人们称为摩尔定律。虽然这个定律听上去并没有什么科学依据,但是在未来的日子里却一直在影响着集成电路的发展方向。

​1968年,诺伊斯在仙童半导体公司的一场CEO争夺战中失败,同时他也是一个无拘无束的性格,讨厌日渐官僚化的公司风气,随后,他与戈登·摩尔(Gordon Moore)安迪·葛洛夫(Andrew Grove)离开了仙童,打算再次白手起家开创事业,筹建一家真正属于他们自已的公司。三人一致认为,最有发展潜力的半导体市场是计算机存储芯片,吸引他们成立新公司的另一个重要原因是:这一市场几乎完全依赖于高新技术,你就只管往一个芯片上猛堆电路就行了,谁集成的最多,谁就是这行业里最牛杯的。基于以上考虑,摩尔开始为新公司命名,提出由集成Integrated 和 电子Electronics两个英文单词进行组合,象征新公司将在集成电路市场上飞黄腾达,集成电路公司——英特尔(Integrated Electronics Corporation,Intel)就此成立。

​英特尔公司掀起了半导体工业领域的新浪潮,肖克利或许未曾预料到,他在圣克拉拉山谷播下的半导体种子会产生如此深远的影响。当年在他手下工作的“八叛逆”离开后,将这些种子精心栽培,创办了如仙童、Intel等一系列创新公司。短短几十年间,这些种子如蒲公英般四散开来,繁衍出一片引领世界的茂密森林。这片森林,就是如今的电子王国——硅谷。

指令集与微架构

​直到此时,每台计算机的设计都是独一无二的。没有向上兼容的机器或具有多种不同实现的计算机架构。为一种机器编写的程序无法在其他类型的机器上运行,即使是同一家公司的其他类型的机器也无法运行。客户也就没有理由继续忠于某个品牌,因为他们购买的下一台计算机无论如何都不会兼容。那时,唯一的顾虑通常是价格和性能。

​1951年,时任IBM的总裁的小沃森觉察出市场的变化,聘请冯·诺依曼作为IBM的技术顾问,这个举措帮助IBM的计算机事业提供了极大的发展。

​1955年,IBM使用晶体管启动了IBM 7030 Stretch超级计算机的研发项目,设计人员开始使用一种称为指令流水线的技术,使得处理器在不同的完成阶段能够执行多条指令。几年后,又出现了一个类似的方法,即在单独的算术逻辑单元(ALU) 上并行执行多条指令。处理器不会一次只执行一条指令,而是会寻找几条彼此不依赖的类似指令,然后并行执行它们,这种方法称为超标量处理器设计。

​1961年,小沃森为了进一步对计算机技术进行革新,启动SPREAD计划特别工作组,他先后召集了6万多名新员工,建立了5座新工厂,目的是使用小规模集成电路来代替单个晶体管的设计,并将所有细分市场的技术进行归拢后合成为一台机器,IBM的开发人员认为这个设计几乎涵盖了当时所有细分市场所需的功能,就如同圆一样360度完美无缺。

​1963年,小沃森开始领导IBM进行这场载入史册的“惊天豪赌”,投入50亿美金对当时的IBM 7000系列进行升级,研发出了一款大型机系统,将其命名为IBM System/360,由于它本身的通用化,需要一种能够合理支持处理所有简单的二进制数字和文本、科学浮点数字以及会计系统所需的二进制编码的十进制运算形式的能力,简单理解就是指令与硬件之间的桥梁,这个能力有一个特殊的名词叫做指令集架构(Instruction Set Architecture ,ISA),它构建了计算机世界的底层生态,指令的概念开始具象化。

指令集架构包括:
指令集:数据处理和存储、控制流、系统控制等
寄存器集
存储模型
数据类型
中断和异常处理
外部I/O

​其实处理器执行指令是很简单的一个过程,指令集说白了也就是处理器拥有的能力,比如我们写简历的时候都会写,会唱歌、会跳舞、会Rap还会打篮球,处理器也是同样的道理,不同的指令集也对应着不同的功能,例如会加法运算、会跳转、会比较大小、会向寄存器中搬运数据,程序员在控制处理器执行某个任务时就会从它们对应的指令集表里找对应的操作进行编程,那个时候大部分程序都采用汇编语言编写,什么面向对象、设计模式的概念统统没有。不同类型的指令集架构的除了影响程序员编写程序之外还会影响处理器的硬件设计,厂商会根据不同的指令集去设计指令在处理器内部如何通过电子元件被解析、执行以及管理数据流的过程等 ,这个过程设计出来的硬件结构则被称为微架构。

微架构设计特征:流水线(Pipeline):流水线化是现代处理器中最常见的一种技术,它允许多个操作同时在不同的阶段执行(例如,取指、译码、执行、回写等)。通过将这些步骤分解并串行化处理,可以显著提高处理器的吞吐量。超标量和超流水线:超标量架构同时执行多条指令,而超流水线则增加了更多的流水线级来进一步提高效率。这些设计允许处理器在单位时间内处理更多任务。缓存系统(Cache):用于存储频繁访问的数据副本,减少对主内存的访问时间和成本。常见的缓存包括L1、L2和L3缓存,层级越高通常越慢但容量越大。分支预测:处理器通过学习过去的行为来预测指令流中条件转移(跳转)指令的结果,从而提前准备执行路径。错误的预测会导致短暂的停顿或回滚操作。多线程/多核心支持:现代微架构通常包含多个计算核心,每个核心可以同时运行独立的任务,以充分利用并行处理能力。动态电源管理(Dynamic Power Management):通过调整处理器的不同部分在不同负载下的性能和功耗来优化能效。例如,当某些核心或缓存不被使用时,它们可能会进入低功率状态。指令集扩展(Instruction Set Extensions):如SIMD(Single Instruction Multiple Data),允许一个操作指令同时应用于多个数据元素;还有AVX、FMA等现代处理器上的特性。内存管理系统:包括对物理和虚拟内存空间的管理,以及页表转换机制以支持多级缓存和地址映射。异常处理与中断处理:处理硬件或软件异常情况(如除零错误)的流程,确保系统稳定运行。数据路径优化:包括对算术逻辑单元(ALU)、移位寄存器、标志寄存器等部件的设计和优化,以提高计算速度和效率。

现如今常见的几个厂商的微架构;如Intel的

Nehalem(2008年):这是英特尔Core i系列处理器的基础,首次引入了集成内存控制器。
Sandy Bridge(2011年):引入了改进的集成图形和更高效的能耗管理。
Ivy Bridge(2012年):Sandy Bridge的缩减版,采用了22纳米工艺。
Haswell(2013年):显著提升了电池寿命和性能。
Skylake(2015年):支持DDR4内存,进一步提高性能。
Kaby Lake(2016年):Skylake的优化版,增加了对4K视频和HEVC解码的支持。
Coffee Lake(2017年):提供更多的核心数和更高的性能。
Ice Lake(2019年):首次采用10纳米工艺,改进了AI处理和图形性能。

AMD的

K8(2003年):引入了AMD64(x86-64)架构,支持64位计算。
Zen(2017年):显著提升了性能和能效,帮助AMD重新在高性能CPU市场上取得竞争力。
Zen+(2018年):Zen的优化版,进一步提高了时钟速度和能效。
Zen 2(Ryzen)(2019年):采用7纳米工艺,提供更高的性能和更低的功耗。
Zen 3(Ryzen)(2020年):进一步优化了性能和效率,提升了游戏和生产力应用的表现。

ARM的

Cortex-A53:一款高效能的处理器,常用于中低端设备。
Cortex-A57:用于高性能移动设备和服务器。
Cortex-A72:比A57更高效的设计,应用于高端智能手机和平板电脑。
Cortex-A75:进一步提升了性能和能效。
Cortex-A76:专为高性能设备设计,显著提高了计算能力。

IBM基于RISC的Power,Nvidia的Tegra,苹果的A系列(A15)和M系列(M1、M2)

​由于计算机的机器指令并不是人话,程序员们自然想指令集要更为丰富一些才好,这样写程序就会更简单一些,谁不想愉快的摸鱼呢?还有一个原因就是节省指令代码的存储空间,毕竟那时候存储可是很稀罕的,种种因素的导致下,复杂指令集应运而生,但经过一段时间后,人们发现了新的问题,由于单条指令的功能比较复杂,处理器厂商根据指令集去设计微架构时反而成了一件非常麻烦的事情,于是在机器指令和处理器之间加了一层晶体管存储编写的程序,命名为微码(Microcode),硬件再根据对应的指令集规则解析出相应的微指令,但是由于指令的复杂性,使这一设计非常消耗晶体管。

​1964年4月7日,IBM 将 System/360 正式推向市场,它开创了兼容性的新时代,从此计算机不再被视为单个组件的集合,而是平台,它的出现涵盖了大型机、小型机、商业领域、科学研究等,并且可以根据不同客户的需要,在机器上进行针对性的功能扩展。

微处理器

​ 1971年,英特尔(Intel)公司的工程师泰德·霍夫(Ted Hoff)费德里科·法金(Federico Faggin)斯坦利·马泽尔(Stanley Mazor)团队接到一个给日本Busicom(ビジコン)公司的台式计算器开发一套定制设计和制造12块不同功能芯片的项目,身为研发经理的霍夫觉得日本人提出的方案成本太高了,商品的定价大概连成本都包不住,于是他想出了通过外部软件的操纵下,以简单的指令进行复杂的工作,提出了要把方案里的多个集成电路整合成一个的想法,但是这一提议却遭到了日本人的拒绝,但诺依斯觉得这是个好想法,他亲自出面进行支持,最后Busicom管理层同意了这个方案,于是由法金主导,设计开发了四种芯片——4001 ROM存储芯片,4002 RAM存储芯片,4003 移位寄存器组成的输入输出扩展芯片和4004 4位逻辑运算芯片,称为MCS-4 系列,由中央处理器+程序存储器+数据存储器的结构构思了出来,为了显示它的小巧,英特尔给它起名叫做微处理器(Microprocessor),世界上第一款商用4位微处理器——Intel 4004诞生,它由2250支晶体管组成,它的诞生标志着计算机历史上的一个重要里程碑,微处理器的时代正式开启。在此之前,负责执行指令和控制计算机操作的核心部分有多种命名方式,包括控制单元、算术逻辑单元、主处理器、处理单元等。直到Intel 4004微处理器的出现,这些功能才被集成到一个单一的芯片上,从而正式确立“中央处理单元(Central Processing Unit,CPU)”这一名称。

​ 1972年,此时英特尔的主营业务还是半导体存储器市场,Intel 4004的成功促使英特尔可以投入资金继续研发更强大的微处理器,于是趁热打铁的推出了8位微处理器 8008,它实现了CTC(Computer Terminal Corporation)公司的维克多·普尔(Victor Poor)哈里·派尔(Harry Pyle)为可编程计算机设计的通用指令集架构。

​ 1974年,英特尔推出8位微处理器8080,在当时冷战军备竞赛的背景下一度被重用,这款处理器成为早期个人计算机核心运算单元,如微型仪器和遥测系统公司(MITS)公司的 Altair 8800的心脏就选用了8080,从此奠定了个人计算机的基石,成为业界标准。此时正值经济衰退顶峰,英特尔裁掉了大量的员工,年底,焦躁不安的法金离开了英特尔,与拉尔夫·昂格曼 (Ralph Ungermann) 共同创立了 Zilog公司。

​ 1975年,摩托罗拉(Motorola)推出了8位微处理器 MC6800,只需要一个5V电源供电,有16 位地址总线,可以直接访问64KB内存和 8 位双向数据总线。它有 72 条指令,七种寻址模式,总共 197 个操作码,时钟频率最高可达1MHz。

​ 1976年,英特尔推出最后一款 8 位微处理器8085,采用NMOS,由单个5V电源供电,时钟频率3-5 MHz;同年,Zilog推出了法金的心血之作,8位微处理器Zilog Z80,主要就是为了与它的竞争对手们比拼性价比,Z80的兼容性、可承受性和卓越性能使其在 20 世纪 70 年代末和 80 年代初配合CP/M操作系统取代了Intel 8080和8085,在家用电脑中得到广泛应用,推动了个人计算机革命。

x86架构

​ 1978年,英特尔推出由曾就职于贝尔实验室、IBM 沃森研究中心的斯蒂芬·摩尔(Stephen P. Morse)担任首席架构师设计的首个16位微处理器 Intel 8086,时钟频率5 -10 MHz,它有20条地址线,理论上可以寻址到1MB的物理内存空间,以复杂指令集、寄存器集、内存管理、中断和异常处理、多模式操作、向后兼容性、指令集扩展、微架构等为中心的设计让8086处理器架构成为了经典,后来IBM PC选择了8086的兄弟型号Intel 8088为核心处理器,开创了个人计算机的黄金时代。

​ 由于后续英特尔的几款处理器型号都是以"80x86"命名,因此统称这一处理器设计为"x86"架构,后来加上各类IBM PC兼容机的出现,使得x86架构的生态进一步丰富起来,也可以说IBM和它的兼容机厂商们是帮助x86架构成为行业标准的大功臣,现如今在微机原理中,x86架构的知识内容仍占有重要地位,在市场中它也仍是主流计算机和服务器的首选方案。

CISC与RISC的提出

​ 1979年,摩托罗拉推出了32位的68000处理器,时钟频率4-16.67MHz,它采用了微码的设计,其中三分之一的晶体管都被设计用在了微码上。但只要是代码这东西吧,它难免会有bug,微码也不例外。但修复和调试微码的bug可要比普通代码困难的多,当时加州大学伯克利分校的教授大卫·帕特森(David Patterson)被委以重任来改善微码的设计,为此他还专门针对这个问题发表了论文,但他后来睡觉前仔细想了想,认为微码设计的复杂性问题很难解决,问题是微码这种设计再去精简改善这个操作本身就很脑瘫,帕特森觉得指令集太复杂了,于是他主张把指令集“瘦身”,让处理器执行得更快、更高效。

​ 1980年,帕特森和他的学生大卫·迪泽尔(David Ditzel)完成了一篇名为《精简指令集计算机概述,The Case for a Reduced Instruction Set Computer》的开创性论文,文中提出了精简指令集RISC(Reduced Instruction Set Computing)的概念。而不遵循论文中提到的精简指令集半导体原则设计的其它指令集计算机则被称为复杂指令集计算机CISC(Complex InstrucTIon Set Computer)。此时的赛道上,CISC/RISC的概念被正式提出,成为两种指令集架构,CISC的核心思想是采用复杂的多时钟周期指令,而RISC架构的核心思想是精简处理器的指令集,一个时钟周期运行一个指令,加快处理器速度。

简而言之,使用两种架构同样编写一条指令:把大象放进冰箱里

CISC情况下编写:把大象放进冰箱里这一条指令就够了,其它具体的操作就不用管了

RISC情况下编写:向前走=>打开冰箱门=>向右走=>搬起大象=>向左走=>放入大象到冰箱冷冻室里=>关闭冰箱门

​ 随后,加州伯克利大学依照此理论基础,设计出了第一颗精简指令集处理器RISC I,这颗处理器的设计远比当时已经相当流行的CISC处理器简单的多,但整体功能上的表现却与CISC处理器不相上下。从此处理器的设计方向便分别向着这两个大方向发展。同年,IBM的约翰·科克(John Cocke)团队推出了基于RISC架构和IBM 801计算机,以低成本的方式实现了高性能。

​ 1981年,Intel在原8086的基础上进行增强,推出80286,采用虚拟内存机制,引入保护模式,支持32位寻址线以达到更大的地址空间,但是由于性能比上不足比下不足,一度成为了业界的笑话

​ 1982年,IBM为了防止Intel进行垄断,开始扶持一家公司,要求英特尔将x86指令集专利授权给这家公司,这家公司在此前一直紧跟英特尔的脚步,Intel做什么,它就仿制推出同样的产品,然后进行低价出售,只因为这家公司的创始人杰里·桑德斯(Jerry·Sanders)曾经是仙童的营销总监,IBM这样做就是恶心Intel,而这家公司的名字叫做——AMD(Advanced Micro Devices)

​ 1985年,Intel在80286的基础上推出了32位的80386,引入保护模式下的内存管理,支持局部中断描述符表(Local Descriptor Table LDT)和系统描述符表(System Descriptor Table SDT),使得操作系统能够更有效地进行任务切换和访问硬件资源,但是当时的IBM太过于保守,觉得32位应该没什么用,还是要延续IBM的全套解决方案的传统,引领标准才是硬道理,于是他们没有采用80386,反而去开发自己的16位操作系统OS/2。与此同时,PC制造商们也不愿意换用这款CPU来更新自己的产品,于是英特尔打出了IT史上最牛杯的“红X”广告,它在286三个数字上打了一个大大的红叉,并在旁边的386三个数字下附上广告语——现在,你可以在286系统的价位上获得386系统的性能(Now, Get 386 system performance at 286 system price)这个广告让消费者对于386的兴趣大增,从而使其开始热销。

MIPS架构

​同年,斯坦福大学约翰·亨尼斯(John Hennessy)研究团队基于精简指令集(RISC)开发出了MIPS(Microprocessor without Interlocked Pipeline Stages,无锁流水线微处理器)架构,推出了R2000处理器,通过简化指令集实现了高性能,成为了计算机科学史上的一个重要里程碑,因其优秀的性能和可扩展性,MIPS架构迅速成为工作站和服务器领域的主流选择。但现如今因为商业运作不敌x86和ARM,已经开始逐步走向没落。

​1989年,英特尔推出80486,在x86架构下首次使用RISC技术,实现了5级标量流水线结构的设计,集成了浮点运算单元,CISC与RISC开始交互发展,这也标志着CPU的初步成熟与传统处理器发展阶段的结束,CISC 和 RISC 这两个术语的意义已变得不再那么重要。

ARM架构

​与此同时,Acorn Computers公司的索菲亚·威尔逊(Sophie Wilson)史蒂夫·弗伯(Steve Furber)也基于RISC设计出了ARM(Advanced RISC Machine)架构。将处理器,内存,外存,输入输出接口做在同一个芯片的结构,因为只使用一个硅片,也被称为单片机。ARM架构则凭借其出色的能效比,在智能手机、平板电脑和物联网嵌入式设备中流行开来。现如今苹果公司的M系列芯片就基于ARM架构。

​1990年,当时的英特尔和微软都在IBM的屋檐下过日子,微软此时推出了Windows 3.0,两个公司一拍即合,成立Wintel联盟,微软宣布Windows 3.0开始全面支持Intel处理器。

​1991年,英特尔开始了“Intel Inside”品牌推广计划,正是这个广告和这个计划的实行,才彻底改变了人们对于个人计算机的认知,消费者才开始关注机器内部所采用的CPU,如果没有它们,或许今天很多人在购买计算机时,还会把它当作电视、冰箱或其他电器一样,对它们内部的构造和组件缺乏真正的了解。

​1993年,英特尔开始考虑商标注册的事,但是美国商标局有规定,数字不能作为商标申请的名称,那么下一代不能叫80586了,得起个正儿八经的名了。于是Intel正式发布了Pentium处理器,开始从数字命名产品转变为使用Pentium命名,该处理器首次采用超标量指令流水结构,引入了指令的乱序执行和分支预测技术,大大提高了处理器的性能。

​1995 年,英特尔推出专为服务器、工作站设计的CPU Pentium Pro,应用在高速辅助设计、机械引擎、科学计算等领域。英特尔在Pentium PRO的设计与制造上又达到了新的高度,总共集成了550万个晶体管,并且整合了高速二级缓存芯片。

​1997年,英特尔推出Pentium II,内部集成了750万个晶体管,并整合了MMX指令集技术,可以更快更流畅的播放音视频以及图像等多媒体数据。首次引入了S.E.C封装(Single Edge Contact)技术,将高速缓存与处理器整合在一块PCB板上。

​1998年,英特尔对Pentium Pro进行升级,重新命名为至强——Xeon,并发布Pentium II Xeon处理器,产品线面向中高端企业级服务器、工作站市场

​1999年,英特尔发布了Celeron赛扬系列处理器。简单的说,Celeron与Pentium II本质上并没有什么不同,因为它们的内核是一样的,最大的区别在于高速缓存上。随后,Intel针对不同市场的性能需求陆续发布Pentium III和Pentium III Xeon

​2000年,英特尔发布 Pentium 4系列,集成了4200万个晶体管,支持双通道DDR技术,让内存与处理器传输速度也有很大的改进。

​2001年,英特尔联合惠普发布了第一款为顶级、企业级服务器及工作站设计的采用超长指令集架构VLIW(Very Long Instruction Word)的64位处理器——Itanium安腾。其中体现了一种全新的设计思想,完全是基于平行并发计算而设计,主要用于超标量执行。对于最苛求性能的企业或者需要高性能运算功能支持的应用而言电子交易安全处理、超大型数据库、电脑辅助机械引擎、尖端科学运算等,安腾处理器基本是PC处理器中唯一的选择。总的来说,它什么都好,唯一的缺点就是太超前了,英特尔高估了当时软件厂商的开发水平,宣布不再兼容x86架构的32位软件,软件开发商心想我这草台班子总不能再根据它重新写一遍吧,最终,安腾处理器因为软件生态的原因停产了。

​2003年,AMD推出了基于x86扩展指令集的64位处理器,它意味着新的x86架构的64位处理器能够运行旧的32位软件。这一手操作,再次让软件生态重新兼容起来,指令集市场的风向开始倒向AMD,此时的英特尔告到法院想要撤回授权,但是市场已经不允许它这样做了,于是法院判定:”你俩都有特长,相互授权吧!“可以说AMD这波是秦始皇摸电线——赢麻了,在此之后,Intel也不得不采用这个扩展集,由于是AMD推出的,所以称为AMD x86_64。帕特森曾说,“所以尽管Intel统治着这个市场,其他公司也能够改变x86的发展方向。”

​2005年,处理器逐渐向更多核心,高并行方向发展,Intel发布了Intel Pentium Dual-Core奔腾双核系列。

​2006年,英特尔推出酷睿Core系列,推出Core2,自此开始,逐步推出入门级Core i3,主流Core i5,高端Core i7,发烧友Core i9 以及高级别高端处理器的 Core Ultra 5、Core Ultra 7 和 Core Ultra 9等系列处理器。

​2008年,英特尔推出专为低功耗嵌入式、移动设备的x86_64指令集架构的处理器——凌动Atom系列。

​至此,CPU的发展不仅在工艺制程上不断提升,集成的功能也越来越多样化。不同品牌的竞争对手之间,处理器的品类也随之丰富起来,以优化不同用户需求和应用场景。

RISC-V架构

​2010年,加州大学伯克利分校的研究团队发布了一种基于精简指令集计算机(RISC)的开放指令集架构,因为它是第五个版本,所以称为RISC-V,与其他商业架构不同,RISC-V的开放性允许任何人根据需要自由设计、实现和分发处理器内核,从而推动了开源硬件和创新的发展。现如今RISC-V的生态系统在迅速成长。它的开放性和灵活性使其在新兴市场和领域中得到广泛应用,如物联网设备、人工智能、自动驾驶汽车和高性能计算。它的生态系统不断扩展,涵盖了各种工具链、操作系统和开发支持,为用户和开发者提供了强大的自主权和创新空间。

FPGA

​1985年,赛灵思(Xilinx)推出了一种灵活的硬件加速器 XC2064,它允许用户通过编程来定义其内部电路和功能,无需进行物理修改,这项技术被命名为FPGA(Field-Programmable Gate Array,现场可编程门阵列),在早期,FPGA主要用于快速原型开发和验证,随着技术的进步和市场需求的增加,FPGA逐渐被广泛用于通信、图像处理、信号处理和数据中心加速器等领域,以提供定制化的硬件加速解决方案。如今,不断进化的FPGA架构和设计工具,为现代处理器的创新和应用提供了强大的支持和灵活性。两个在FPGA行业赫赫有名的公司赛灵思(Xilinx)于2020年已被AMD收购,阿尔特拉(Altera)现在成为了英特尔的一部分。

​2018 年 6 月 5 日,英特尔为了庆祝英特尔 8086 诞生 40 周年发布了一款限量版 CPU,命名为Intel Core i7-8086K。

总结

​中央处理器CPU作为电子世界的大脑,它的发展历程不仅是人类科技进步的记录,更是一部人类不断探索与智慧交织的壮丽史诗,从机械到电子管、晶体管,再到中小规模、超大规模、甚大或者极大规模集成电路,再到多核异构计算,从几千个晶体管到数十亿个晶体管,CPU的每一次革新都推动了人类计算能力的飞跃。它不仅改变了我们的工作和生活方式,更开启了无限可能的数字时代。

​展望未来,量子计算、神经形态计算等前沿技术正在崭露头角,CPU的发展必将迎来新的篇章。在这段科技的历史长河中,它的发展无疑是一段璀璨的星辰,而它所引领的未来,也必将是光辉灿烂的。我们身处于电子时代的洪流之中,认为这个时代的主体元素无所不能,但是下一个时代的变革,也许正悄然来临。

相关文章:

CPU的起源与发展历程

CPU的起源与发展历程 文章目录 CPU的起源与发展历程前言指令概念电子管(真空管)体系结构冯诺依曼架构哈佛架构 晶体管集成电路指令集与微架构微处理器x86架构CISC与RISC的提出MIPS架构ARM架构RISC-V架构FPGA 总结 前言 ​ 从古至今,人类为了…...

【C语言】 二叉树创建(结构体,先序遍历,中序遍历,后续遍历)

二叉树的创建:首先先定义一个结构体,里面包含数据(data),指向左子树的指针(L),指向右子树的指针(R)三个部分 在创建树的函数中,首先先输入…...

【和相同的二元子数组】python刷题记录

R2-前缀和专题 目录 前缀和哈希表 双指针 ps: 第一眼过去,这题应该能用双指针解出来,应该也能用前缀和解题。 前缀和哈希表 适用于 nums[i] 值不固定为 0 和 1 的其他情况 class Solution:def numSubarraysWithSum(self, nums: List[int], goal: i…...

【单片机毕业设计选题24087】-基于北斗系统的智能路灯

系统功能: 系统操作说明: 上电后OLED显示 “欢迎使用智能路灯系统请稍后”,两秒后显示Connecting...表示 正在连接阿里云,正常连接阿里云后显示第一页面,如长时间显示Connecting...请 检查WiFi网络是否正确。 系统分为四种模…...

[Docker][Docker常用命令]详细讲解

目录 1.帮助命令2.镜像命令3.容器命令4.卷命令5.常用命令 1.帮助命令 docker version # 显示docker的版本信息 docker info # 显示docker的系统信息,包括镜像和容器的数量 docker 命令 --help # 某条命令的帮助命令2.镜像命令 查看所有本地的主机上的镜像…...

onlyoffice用nginx反向代理

我对于onlyoffice的需求就是当个在线编辑器使用。在集成react的时候之前都是写的绝对路径的地址,这样在需要迁移应用的时候就造成了巨大的麻烦,所以我决定用nginx做反向代理,这样我集成的时候就不用每次都修改源码中的地址了。 一开始写的代…...

JavaScript字符串转换成base64编码方法

// base64编码表 const base64EncodeChars ref<string>("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789/" );/*** base64编码* param {Object} str*/ const base64encode (str: string) > {let result "";// 循环遍历字符串…...

25.惰性队列

介绍 消费者由于各种原因而致使长时间不能消费消息造成堆积。比如有一百万条消息发送到mq中&#xff0c;消费者这时宕机了不能消费消息&#xff0c;造成了消息堆积。惰性队列就有必要了。 正常情况下&#xff0c;消息保存在内存中。消费者从内存中读取消息消费&#xff0c;速…...

ControlNet on Stable Diffusion

ControlNet on Stable Diffusion 笔记来源&#xff1a; 1.Adding Conditional Control to Text-to-Image Diffusion Models 2.How to Use OpenPose & ControlNet in Stable Diffusion 3.ControlNet与DreamBooth&#xff1a;生成模型的精细控制与主体保持 4.Introduction t…...

源码编译安装,及nginx服务控制、监控块

1.源码编译安装&#xff1a; [root17dns ~]# wget https://nginx.org/download/nginx-1.27.0.tar.gz 2.解压&#xff1a; [root17dns ~]# tar -zxvf nginx-1.27.0.tar.gz 3.安装gcc等工具 [root17dns ~]# yum -y install gcc gcc-c [root17dns ~]# yum -y install make lrzsz …...

在react中使用wangeditor富文本

官方文档 wangeditor5在线文档 依赖安装&#xff08;react框架&#xff09; yarn add wangeditor/editor # 或者 npm install wangeditor/editor --saveyarn add wangeditor/editor-for-react # 或者 npm install wangeditor/editor-for-react --save在React 中使用wangEditor …...

拉提查合创5步玩转git工具协作代码开发

1 工具使用场景 开发团队使用git版本管理工具&#xff0c;进行协作代码开发过程中&#xff0c;最常用的场景为&#xff1a; &#xff08;1&#xff09;拉取代码 将git远端仓库最新代码拉取到本地。 &#xff08;2&#xff09;提交代码 将本地新增修改的代码提交至git远端仓库中…...

React特点

React 是一个用于构建用户界面的 JavaScript 库&#xff0c;由 Facebook 开发并维护。React 的特点主要体现在以下几个方面&#xff1a; 声明式&#xff08;Declarative&#xff09;&#xff1a;React 使你能够以一种声明的方式来描述你的 UI&#xff0c;这使得代码更加容易理解…...

鸿蒙(HarmonyOS)自定义Dialog实现时间选择控件

一、操作环境 操作系统: Windows 11 专业版、IDE:DevEco Studio 3.1.1 Release、SDK:HarmonyOS 3.1.0&#xff08;API 9&#xff09; 二、效果图 三、代码 SelectedDateDialog.ets文件/*** 时间选择*/ CustomDialog export struct SelectedDateDialog {State selectedDate:…...

学习008-02-04-08 Localize UI Elements(本地化UI元素)

Localize UI Elements&#xff08;本地化UI元素&#xff09; This lesson explains how to localize an XAF application. It describes how to translate UI elements into German and create a multi-language application. 本课介绍如何本地化XAF应用程序。它描述了如何将U…...

如何系统的学习C++和自动驾驶算法

给大家分享一下我的学习C和自动驾驶算法视频&#xff0c;收藏订阅都很高。打开下面的链接&#xff0c;就可以看到所有的合集了&#xff0c;订阅一下&#xff0c;下次就能找到了。 【C面试100问】第七十四问&#xff1a;STL中既然有了vector为什么还需要array STL中既然有了vec…...

typescript 定义类

/* js class 和 ts class 的区别 ---------------------------- | 语言 | js | ts | ---------------------------| | 公有 | 有 | jspublic | ---------------------------| | 私有 | 无 | private | ---------------------------| | 静态 | …...

认证授权概述和SpringSecurity安全框架快速入门

1. 认证授权的概述 1.1 什么是认证 进入移动互联网时代&#xff0c;大家每天都在刷手机&#xff0c;常用的软件有微信、支付宝、头条、抖音等 以微信为例说明认证的相关基本概念。在初次使用微信前需要注册成为微信用户&#xff0c;然后输入账号和密码即可登录微信&#xff0c…...

docker常用命令集锦

目录 一、查看版本信息 1.1 查看 Docker CLI 版本&#xff1a; 1.2 查看 Docker 详细版本信息&#xff1a; 1.3 查看 Docker 系统信息&#xff1a; 二、进入和退出容器 2.1 进入容器&#xff1a; 2.2 退出容器&#xff1a; 2.3 查看容器日志&#xff1a; 2.4 查看容器的…...

学习Java的日子 Day56 数据库连接池,Druid连接池

Day56 1.数据库连接池 理解&#xff1a;池就是容器&#xff0c;容器中存放了多个连接对象 使用原因&#xff1a; 1.优化创建和销毁连接的时间&#xff08;在项目启动时创建连接池&#xff0c;项目销毁时关闭连接池&#xff09; 2.提高连接对象的复用率 3.有效控制项目中连接的…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...