打印机驱动之家(驱动之家天梯图)干货分享
超长文超多图这是一篇只讲知识的文章,不玩梗不辱法不讲黄段子。
超长文超多图这是一篇只讲知识的文章,不玩梗不辱法不讲黄段子一台普通的电脑由以下几个基本元件组成:CPU (Central Processing Unit);随机存取记忆体,也就是内存 (Random Access Memory, RAM);
外部存储器,包括只读存储器(Read-Only Memory, ROM) 和硬盘;基本输入/输出系统(Basic Input/Output System, BIOS)或UEFI(统一可扩展固件接口,Unified Extensible Firmware Interface);
芯片组;其它的交互式硬件设备(如无线网卡,以太网,显卡,声卡,显示器,键盘,鼠标等等);各种各样的接口(USB, PS/2, HDMI, VGA, PCIE, M.2, etc)以及供应电源_____________________________________________________________________________。
中央处理器(CPU)- 人类迄今为止的最强科技中央处理器是一台计算机的大脑CPU 负责向计算机的各种硬件设备发出二进制指令,并且同时接收其他设备发送回来的数据/指令,并运算/执行CPU的主要功能由算术逻辑单元(ALU)
和程序计数器(PC)完成算数逻辑单元(Arithmetic-Logic Unit)是CPU的执行单元,主要负责二进制的算数和逻辑运算(加减法,乘法,与或非),在物理层面上由“与门”和“或门”组成(与门:逻辑电路的一种。
当输入两个1时,输出1当输入两个值不同或皆为0时,输出0或门:当输入的两个值不同或皆为1时,输出1,输入的皆为0,则输出0这里的0和1也可以用“假”和“真”, “低电压“和“高电压”来表示)
AND gate:与门;OR gate:或门程序计数器(Program Counter)是CPU中的寄存器,用以存放“下一条指令”的指令地址CPU执行来自操作系统的指令时,指令会暂时存放在RAM中这条指令会先进入到“数据寄存器(Data Register)”中,随后进入指令寄存器(Instruction Register),再由CPU执行。
而等待执行的下一条指令在内存中的物理地址,由程序计数器保存CPU准备执行下一条指令时,只需从程序计数器中读取下一条指令在内存中的位置,再重复上述步骤即可CPU还有许多高速缓存,用来暂时存储来自RAM的指令,从而减少CPU在RAM中寻址的时间。
CPU的高速缓存分成很多级(L0,L1,L2...),级别越高(数字越小),其存取速度越快,而容量也就越小
Intel i5 2500k CPU,搭载在技嘉(Gigabyte)主板上CPU会执行各种各样的指令把这些指令集合起来,就叫指令集(Instruction Set)在计算机发展早期,程序员编写的大都是由CPU指令排列而成的程序(汇编代码),而在不同的机型和不同的CPU上,所能执行的指令不尽相同,有很高的开发难度。
于是,CPU生产厂商把处理器用于控制计算机的各种各样的指令做成“指令集”,以此作为一种标准,使市面上的CPU同质化目前市面上最常用的指令集有英特尔的x86指令集(及其架构);AMD的amd64指令集(x86-64)和ARM指令集(及其架构)。
英特尔的x86架构,起源于1978年面世的Intel 8086及其家族8086家族均使用这一套汇编指令集,故称之为x86AMD的amd64指令集支持64位寻址(可在2^64比特的内存空间寻址)由于其可向后兼容16位或32位的x86,也被称为x86-64。
(所以支持Windows 64位系统的电脑一定能装32位系统,而只支持32位的一定不能装64位系统)ARM架构的CPU广泛应用于智能手机(市面上98%的智能手机均使用ARM架构的处理器),物联网设备(POS机),和其它嵌入式设备上。
ARM指令集相较x86(x86-64)而言显得较为小巧精简,但也同时支持32位和64位寻址微软的Surface Pro也使用了ARM架构的处理器,配合专门用于ARM架构的Windows系统
早期的x86指令集选购CPU时,有三项重要参数需要进行考量,相信大家对此并不陌生:主频,核数,功率或者 单核性能,超线程性能,以及是否支持超频主频(Clock Rate,亦称时脉速度)指的是CPU运作时,。
晶体振荡器(Crystal Resonator)的振荡频率CPU的晶体振荡器会产生电磁脉冲,通常呈稳定的正弦波形从这个固定的正弦波中,取两个相邻的波峰,为一个周期而每秒所产生的电磁脉冲形成的正弦曲线中含有的周期数量,为此晶体振荡器的频率(单位为Hz)。
以二进制的概念来解释,电磁脉冲正弦曲线的波峰为1,而波谷则为0,则晶振的频率也可解释为,一秒内晶振进行了多少次从逻辑1到逻辑0的切换
晶体振荡器(CR)的电路符号(上)以及其等效电路模型(下)CPU的主频是稳定的若其它条件不变,主频越高,CPU单位时间内进行的运算次数越多核(Die)指的是CPU的运算核心,由单晶硅制作“核”这个概念严格意义上并不等同于“核芯”。
这个问题我接下来会解释CPU的运算核数量直接决定了单位时间内,CPU可以同时并行计算的数量双核CPU就像双向车道一样,可以在同一个时间内同时处理两个方向的车流理论上,在其他条件相同的情况下,核数越多,能同时处理的事情就越多,单位之间内进行的数据处理量就越大。
世界知名的两个CPU大厂,AMD和Intel,对于多核CPU的理解和实现方案上有一些不同点AMD的多核CPU是在一颗CPU上面,集成了数个相互配合的运算核心这些运算核心相互配合,协同计算,使用相同的系统接口,连接至不同的系统总线,从而确保不会对系统总线进行争抢。
AMD的平台架构可以总结为,多个运算核心使用相同的系统接口,通过不同的总线对硬件进行通信
AMD双核CPU - 平台架构简化图AMD的平台架构也可以比喻成一个城市的几个收费站(总线接口),接收来自不同地方(运算核心)的车流,使用不同的道路将车流(指令)发送至不同的目的地(硬件)但是,这些收费站(总线接口)的收费制度和效率是一样的。
(我们上期讲过系统总线,不知大家还记不记得系统总线包括数据,地址和控制这三条总线使用相同的总线接口可以确保多个核心处理不同问题时,可以依照次序使用不同的总线,不会造成混乱)英特尔的多核CPU则封装了数个完整的CPU,这些CPU均直接连接到同一个。
前端总线(Front Side Bus,特指中央处理器的数据总线前端总线负责CPU和北桥的数据传递)上由于多个运算核心占用同一个前端总线,很容易产生争抢,对于CPU性能的提升有负面影响,而且为后来更多的核心集成埋下了隐患。
不同于AMD将多个运算核心封装在同一个晶圆上的方案,英特尔在不同的晶圆(Wafer,集成电路中以硅晶体制成的圆片,用来刻录极微小的电路)上放置运算核心,再封装这两个晶圆,故英特尔的运算核心可以理解成小型CPU。
为了和AMD的运算核心区分开,英特尔将自家的运算核心称为核芯(Core)。这也是“酷睿”这个名字的来源。
Intel双核CPU - 平台架构简化图(英特尔在多线程平台架构上做得不如AMD,但是在过去10年中销量遥遥领先一个重要的原因是英特尔有优秀的晶圆片生产链,而AMD投资的晶圆工厂格罗方德(GlobalFoundries)的技术有限,故性能上不及英特尔。
近年AMD抛弃了格罗方德,转而请台积电代工,在制作工艺上有了很大的提升自AMD Ryzen系列开始,AMD的销量很有可能再次赶上英特尔)
众所周知,酷睿娘和Ryzen娘是地球上仅存的硅基生物,不接受反驳(呆蛙虽然有熊三飞弹和地摊级战列舰,但是人家的台积电真不是吹的)
台湾积体电路制造公司(Taiwan Semiconductor Manufacturing Corp)有全球最大的晶圆片代工厂,公司的图标上画了一颗单晶硅圆片
2020年第一季度全球十大晶圆片代工厂营收排名排名第一的台积电超过后九位的总和图片来源:摩尔芯闻所以,我国想要在科技上超越美国,打破美国半导体公司在中国大陆市场长达20年的垄断,得先在技术层面超越台积电。
毕竟台积电只是晶圆片代工厂,而美国的英特尔和高通(Qualcomm,手机CPU界的英特尔)则是业内巨头科技水平的进步,依旧任重而道远,不是在微信朋友圈里口嗨几句就能做到的跑题了英特尔睿频加速技术(Intel Turbo Boost Technology)。
(鉴于这两者涉及的知识点过多,精力有限,本文只对其进行简单介绍以后我会专门出一期,详细讲解关于CPU和内存超频,英特尔睿频和AMD HyperTransport技术的知识)引用维基百科对英特尔睿频加速技术。
的介绍:Intel睿频加速(英语:Intel Turbo Boost)是英特尔的对其CPU中央处理器的时钟频率自动加速技术的商业名称当程序对CPU资源利用增加时,睿频加速技术自动开启,提高CPU频率,以满足算力需求。
启动后,处理器将尝试提高处理器的时钟频率;具体频率的提高,由处理器的功率、电流、温度限制、需要提高频率处理器核心数量,(Intel为处理器设置的)最大睿频频率所决定,此外,若睿频加速期间,处理器的温度,功率等超过限制,则处理器的时钟频率会下降,以保护处理器。
英特尔允许CPU在一定的频率范围内,对CPU的主频进行合理的加速,从而实现不同环境下的不同工作需求比如,当你的电脑处于省电模式或电源功率不足时,就会关闭睿频加速,降低处理器频率以减少耗电量反之,睿频会默认开启。
酷睿i7-6700的基础参数红框中的是睿频加速的频率上限(单位:GHz)超线程(Hyper Threading)和模拟同步(Thread Sync Simulation)引用维基百科对“线程”的解释:线程
(英语:thread)是操作系统能够进行运算调度的最小单位它被包含在进程之中,是进程中的实际运作单位一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务超线程
是英特尔研发的一种技术,于2002年发布通过此技术,英特尔实现在一个实体CPU(Core运算核心)中,提供两个逻辑线程单位时间内,一个单运行管线的CPU只能处理一个线程,以这样的单位进行,如果想要在一单位时间内处理超过一个线程是不可能的,除非是有两个CPU的实体单元。
双核心技术是将两个一样的CPU放置于一个封装内(或直接将两个CPU做成一个芯片),而英特尔的超线程技术是在CPU内部仅复制必要的资源、让两个线程可同时运行;在一单位时间内处理两个线程的工作,模拟实体的双核心、双线程运作。
CPU中可实际看到的运算核芯,称为物理核,而物理核内部使用超线程技术模拟出来的两个线程,每个线程为一个逻辑层面上的逻辑核比如,酷睿 i5 3470有2个物理核(CPU内部封装了两个运算核芯),但是单个物理核可以“同时”处理两个线程,所以i5 3470有4个逻辑核,也就是我们常说的“双核四线程”。
如图,运算核芯(Core)有6个,逻辑核(Logical Processors)有12个这意味着CPU内部封装的6个物理核芯,每个核芯都模拟出了两个逻辑核心,加起来共有12个逻辑核,也就是6核12线程一个单线的物理核芯一次只能处理一个线程。
若想要其同时处理两个线程,则需要使用模拟同步(Thread Sync Simulation)想要让一颗运算核芯同时处理两个线程,需要让这个核心在两个线程快速来回切换,达到模拟双线程的效果,于是在单位时间内,运算核芯可以同时处理完两个线程。
一般情况下,CPU每两万个时钟周期切换一次线程以一颗2.0GHz的CPU(运算核芯)为例,其每秒大约能切换110次线程间隔时间非常短,是无法被人类感知到的,所以宏观感觉上,一个运算核芯一秒内能同时完成两项工作。
还有一个进程同步(Process Sync)技术,是操作系统层面对于进程(多个线程的集合)的管理方法在这里不多赘述,我把关于进程同步的内容单独拿出来,链接就贴在下面感兴趣的可以去看看Itaru Otaku:哲学家就餐问题:操作系统的进程优先级管理。
zhuanlan.zhihu.com
单核性能和多核性能的区别顾名思义,单核性能就是指单个运算核心工作时的性能,多核性能就是所有运算核心在一起工作时的总体性能(注意,为了严谨,我把“核心”和“核芯”区分开了“核心”包括“核芯”,当我使用“核芯”或“运算核芯”的时候,特指英特尔CPU内部封装的小型CPU)。
一般英特尔CPU标注的频率,指的就是单个核芯的主频,也就是单核频率单纯地以这个频率来判断CPU的总体性能是不对的,还要参考CPU的物理核数比如,一颗双核四线程的3代i3,单核性能为2.90GHz,高于六核十二线程的9代i7,其单核频率只有1.80GHz。
但是,要是简单地根据“2.90>1.80"来判断是不对的我们都知道这两块CPU谁的性能要好多核性能则代表了多个核心在并行处理问题时的性能表现如果一颗CPU单核性能好,就好比一群壮汉每个都能单打独斗而多核性能优秀则好比是一群老鼠。
单个拿出来并不起眼,但是架不住它们多,配合得好就能拆你家就好比有些人对线solo起来一套一套的,但是顶多算是个路人王真正的职业选手可能在单挑打架的方面并不出众,但是人家看小地图多核性能就是这么简单粗暴的道理。
目前民用市场上少有单核性能核多核性能都非常优秀的产品然而单核性能仍然是这个“核大战”时代中不可忽视的一个参数可以参考下面这篇文章:猎鹰萌新:为何多核CPU的单核性能依然重要?阿姆达尔定律和古斯塔夫森定律是什么?。
zhuanlan.zhihu.com
如果想看单核和多核性能哪家强:桌面CPU性能天梯图www.mydrivers.com
CPU的扩展知识到这里就讲得差不多了有什么其它的实用知识,等我想起来再更新CPU几乎涵盖了所有关于科学的学科知识其制造涉及电学(逻辑电路结构),材料学(半导体),机械工程物理学(制造光刻机,光刻机可以在纳米尺度上对晶圆片进行烧录)以及数学,是这些学科在过去数百年积累下来的智慧结晶,代表了人类迄今为止的最强科技。
—————————————————————————————————随机存取记忆体(RAM)以下简称“随机存取器”或RAM也叫主存,是直接和CPU交换数据的内部存储器我们更喜欢称之为内存内存记录数据的物理方法,就是将内存通电。
内存的存储芯片中有上亿个电容(Capacitor)当一个电容充满电后,则代表二进制的1,未充满的时候代表0当内存的供电消失后,电容就会释放电荷,记录的二进制数据也就不存在了“随机存取记忆体”的“随机存取”,意味着访问该段数据的时间,与其所在的物理位置无关。
意思就是,处理器可以在任意一个时间对随机存取器上的任意一个地址上的数据进行访问与之相对的存储设备便是磁带处理器访问磁带开头的数据只要不到0.1秒,而访问磁带末端的数据则需要将磁带先转到末尾再访问,所需要的时间和数据的位置有关。
内存的存储设备(内存条)是极为精细的电子设备,对静电十分敏感。静电会干扰电容,导致电路烧坏。故更换内存条之前,应把手触摸金属接地。
DDR3接口的内存条RAM分为DRAM和SRAM两种DRAM(Dynamic RAM),动态随机存取器它的特点是在通电的情况下,可以对RAM中存储的内容进行周期性更新(比如打开一个程序再关掉,同一个位置储存的数据可以被替换)。
SRAM(Static RAM),静态随机存取器这种RAM的特点是,只要保持通电的状态,其内部存储的数据便不会变化更改数据的方法只有先断电,再重新写入数据CMOS芯片就是SRAM的典型例子CMOS芯片需要靠CMOS电池持续进行供电,来保存用户设置。
一旦CMOS电池停止供电,CMOS芯片便会在下次通电时恢复默认设置还有一种SDRAM(Synchronous Dynamic RAM),同步动态随机存取器相对于DRAM而言,SDRAM多了一个“同步接口”,这意味着DRAM在更新数据时所需要等待的时间(Latency,延迟),SDRAM的同步接口可以取消这段时间。
CPU读取SDRAM中的指令时,无需等待这段延迟的时间,可以直接通过同步接口执行“下一条指令”SDRAM也是现代使用最广泛的内存类型(DRAM更新指令有延迟,主要是因为要保证指令发出的时间要和系统总线在时间上是同步的。
DRAM更新数据时会等待接收来自CPU的时钟信号,以保证同步SDRAM则通过“同步接口”取消了这段等待的时间,所以在宏观感受上,SDRAM会比DRAM要快)现在的计算机使用的内存条,容量一般在2~32GB之间,大都使用DDR3和DDR4接口。
DDR3/DDR4接口的RAM,绝大多数都是SDRAM买内存条时,总会看到这样一个标签:
Samsung笔记本内存条那我们就从这个标签入手,对内存的各项性质进行讲解。
注意,“随机存取器”是RAM,不是REM!不调皮了,正文开始内存的存储单元:Memory Bank内存中的Bank一词,概念和涵义比较复杂,涉及到CPU的进程调度和内存结构之类的知识,我们这里就蜻蜓点水地一笔带过。
对于SDRAM(同步动态RAM,上期讲过了)来说,“Bank数”的大小(4~16)一般指SDRAM中物理存储单元的数量的多少你可以理解为,Bank数越大,内存的存储容量越大DDR3 和 DDR4第三代双倍数据率同步动态随机存取存储器(Double-Data-Rate 3 SDRAM)。
可简写为DDR3 SDRAM,或直接简写成DDR3,属于SDRAM家族的存储器产品,提供相较于DDR2 SDRAM(顾名思义,第二代DDR)更高的运行性能与更低的电压,是DDR2 SDRAM(四倍数据率同步动态随机存取存储器)的后继者(增加至八倍)。
(DDR一代的数据率为双倍,DDR2则增加到四倍,DDR3为DDR2的二倍,所以DDR3 SDRAM也称为八倍数据率同步动态随机存取存储器)由此可见,DDR3的性能相较于DDR2有很大的提升类比到DDR4也是一个道理。
DDR4就是第四代DDR购买内存条时,应尽量考虑购买DDR4规格的内存颗粒,以及RANK本节开头的内存条图片(在蕾姆那张图片的上面),标签上的第二行标注了“4GB 1Rx16”4GB表示内存容量,那么“1Rx16”表示什么呢?。
在内存条的正面和反面,我们可以看到一个一个黑色的矩形小黑块,称为内存颗粒(Memory Chips),是内存条上进行数据存储的设备每个内存颗粒拥有相同的规格RANK(也称内存位宽),表示CPU在一个时钟周期内能存取内存数据的位数。
一个RANK(1R)为64比特(64 bit),2R就是2 x 64bit = 128bit在给出的范例中,标注了1Rx16,说明此规格的内存条的内存位宽为64bit,即CPU一次性能存取64位的数据“x16”表示
单个内存颗粒输出数据的最大位宽,为16 bit(16位)所有内存颗粒的最大输出数据位宽之和,等于内存位宽所以我们可以根据这个数据计算出内存条的颗粒个数(假如只有标签的话)所以,“1Rx16”表示的含义是,此内存条最大可接收1个RANK的数据宽度(64 bit),单个内存颗粒(内存芯片)的最大输出位宽为16 bit,内存条上有64/16 = 4个内存颗粒。
内存位宽越大,代表CPU单位时间内能存取的数据长度越长内存带宽(Bandwidth)和内存频率内存带宽和位宽不是一个概念内存的带宽表示内存的容量和速度换句话说,就是内存在单位时间内能吞吐多少数据内存带宽的单位是MBps,而我们常说的网络带宽的单位是Mbps。
关于MB和Mb的区别,上期已经讲过了(B是Byte,b是bit,1Byte = 8bit,1MB = 8Mb)再次回到蕾姆上面那张图片,在“1Rx16”的左边可以看到“PC4-2666”的字样“PC4”指支持双通道(接下来就会讲到),而“2666"指内存条的带宽为2666MBps,即每秒钟可以吞吐2666MB(2.7GB)的数据。
所以“PC4-2666”指“带宽为2666MBps的DIMM(通常为DDR4)规格的内存条所以,图示标签的第二行“4GB 1Rx16 PC4-2666"的含义就非常清晰了内存存取数据的速度,还取决于内存频率(属于计算机时脉频率的一种)
内存频率决定了CPU单位时间内可以对RAM进行的访问次数假设内存条的频率为100MHz,内存位宽为1 RANK,则CPU每秒钟可以向RAM输入/取出一亿次长度为64位的数据频率越高,内存的吞吐速度越快DIMM(Dual In-line Memory Module,双列直插式存储器模块)
DIMM还有一个更为人熟知的名字:双通道(Dual Channel)内存双通道指在北桥芯片里设计两个内存控制器,这两个内存控制器可相互独立工作,每个控制器控制一个内存通道在这两个内存通CPU可分别寻址、读取数据,从而使内存的带宽增加一倍,而理论上数据存取速度也相应增加一倍。
支持此技术的内存条规格,就是DIMM结合之前的内容,如果将单通道内存比喻成单核CPU,那么多通道内存就好比双核两个内存控制器可以同时控制两个内存通道,从而在单位时间内可以完成更多工作双通道主要靠北桥的内存控制器实现,所以DIMM内存需要配合支持双通道的主板。
—————————————————————————————————外部存储(External Storage)外部存储的“外部”指的不是外接硬盘或U盘这类的东西,而是指“不直接与中央处理器交换数据”换句话说,暂时不被使用的数据/指令,将会进入外部存储器储存起来。
常用的外部存储器分为只读存储器(ROM)和可擦写的ROM(硬盘,软盘)ROM(Read-only Memory)的载体比较多样早期的ROM芯片中有大量可熔断的导线ROM芯片在出厂的时候由生产厂商对其进行通电,通过内部电路导线的熔断与否记录二进制数据(熔断代表0,未熔断代表1),数据一旦写入便无法被更改。
60年代,美国航空航天局(NASA)在发射阿波罗1号的时候,航天器上搭载的计算机就安装了这种容量不到1KB的ROM芯片,用以储存计算飞行航线的数据。
阿波罗导航计算机(AGC)上的ROM芯片(阿波罗一号搭载的计算机的性能仅相当于我们今天使用的计算器,所以会有“老美拿计算器登月,我拿苹果玩游戏”这个梗)随着存储技术的发展,ROM的载体也开始变得多样化上世纪70年代出现了很多以磁带为载体的软件/电子游戏,而这些磁带是只读的,也属于ROM。
当代使用最广泛的ROM是光盘(CD-ROM)光盘记录数据的方法是光刻:光盘上涂满光敏化学涂层,在激光照射的时候会改变颜色,形成小型的颜色点,从而记录0和1(评论区指正ROM芯片不一定是外存如果ROM芯片中的指令直接被CPU执行的话,则ROM是内存。
非常感谢 @ghjbn125478 )如果ROM的范围不仅限于电子设备,最早储存数据用于计算的ROM可追溯到由 约翰·文森特·阿塔纳索夫(John Vincent Atanasoff)和克里福德·贝瑞(Clifford Berry)在1937年于爱荷华州立大学设计并于1942年成功测试的“阿塔纳索夫-贝利”计算机(简称ABC)。
该种计算机使用磁鼓记录初始数据,使用IBM80系列的纸质打孔卡记录十进制数据作为用户输入,来求解线性方程组ABC是公认的世界上最早的电子计算机。
位于爱荷华州立大学(ISU)的ABC复制品相对于ROM的不可擦写性,可擦写的ROM就显得尤为好用:记录全新的数据不需要再买一块ROM芯片烧录但是由于其可擦写性,存储数据的稳定性肯定不如直接烧录的ROM芯片。
极具代表性的可擦写存储设备:硬盘硬盘(Hard Disk Drive,HDD)硬盘靠磁性盘片记录二进制数据硬盘盘片的物理结构磁道当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道(Track)。
柱面在有多个盘片构成的盘组中,由不同盘片的面,但处于同一半径圆的多个磁道组成的一个圆柱面(Cylinder)扇区磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区(Sector)硬盘的第一个扇区,叫做引导扇区。
Track Sector:磁道扇面;Head:磁头;Actuator Arm:悬浮磁臂硬盘片的盘面上有一层涂得很薄的磁性材料写入数据时,通电的磁头会形成磁场,在磁性材料层上留下一个一个小磁化区,每个被磁化的区域代表二进制的1。
读取数据时,磁头扫过磁化区的时候能感受到微小的磁场变化,将数据传回磁盘的主控芯片(磁盘的CPU),经过放大信号后将数据传入RAM,再由CPU访问并执行如果盘片上只是单纯的0和1的组合,会增加操作系统读取数据时的难度。
比如某个文件只包括3000个0和13000个1,那么操作系统该从哪里找到这些数据呢?硬盘盘片的逻辑结构操作系统内核中的文件管理系统会将硬盘的扇区组合成簇(Data Cluster)也叫数据分配单元(Allocation Unit),由一个或多个扇区组成。
操作系统会记录文件所在簇的编号(文件数据分布在哪几个扇区),方便查找并读写机械硬盘通过磁头读取旋转的盘片来传输数据,而盘片的转速RPM(Round Per Minute,每分钟的转数)直接决定了硬盘读取和写入数据的速度。
目前主流的机械硬盘,转速在6000~7500RPM左右磁盘在写入数据时,会使用磁盘缓存暂时存储数据磁盘缓存(Disk Cache),也称磁盘缓冲区(Disk Buffer),实际上就是将下载到的数据先保存于系统为软件分配的内存空间中(这个内存空间被称之为“内存池”),当保存到内存池中的数据达到一个程度时,便将数据保存到硬盘中。
这样可以减少实际的磁盘操作,有效的保护磁盘免于重复的读写操作而导致的损坏目前主流的500G机械硬盘大都装载64MB的缓存磁盘的主控芯片(Disk Controller)硬盘的主控芯片可以理解成硬盘的CPU。
其主要负责:控制磁头的读取(机械硬盘)温度检测为操作系统的文件管理系统提供逻辑接口(上期我们讲过的“逻辑簇”的概念)负责纠错(磁头读写时会使用磁信号,而磁信号的误码率非常高,大约每记录0.6KB的数据就会出现一个bit的错误,而主控芯片负责纠错编码)
负责将数据从RAM/硬盘缓存写入,或者将硬盘读出的数据写回RAMRAID(Redundant Array of Independent Disks)独立硬盘冗余阵列(RAID),简称磁盘阵列利用虚拟化存储技术把多个硬盘组合起来,成为一个或多个硬盘阵列组,目的为提升性能或。
数据冗余,或是两者同时提升。
老式服务器使用RAID硬盘阵列技术简单来说,RAID把多个磁盘组合成为一个逻辑硬盘,因此,操作系统只会把它当作一个实体硬盘RAID常被用在服务器电脑上,并且常使用完全相同的硬盘作为组合由于硬盘价格的不断下降与RAID功能更加有效地与主板集成,它也成为普通用户的一个选择,特别是需要大容量存储空间的工作。
—————————————————————————————————Windows:exe程序运行的基本原理结合之前所讲的关于CPU和RAM的知识,我们来简要讲讲程序是怎么运行的以Windows操作系统为例,可执行文件(Executable files),也就是.exe文件,其内部储存了各种各样的汇编指令。
可执行文件在不用的情况下安安静静地呆在硬盘的某些簇里,一动不动当你点击这个exe文件时,操作系统开始在硬盘上依照簇的编号寻找这个文件然后,磁头感受到了磁场的变化,将文件数据通过主控芯片放大信号之后,将数据传给了RAM。
RAM将这些exe文件中的汇编指令放在数据存储器,通过指令存储器把exe文件中的第一条指令传给程序计数器,再由算术逻辑处理单元进行处理紧接着,exe文件中的第二条汇编指令的物理地址也已经传给了程序计数器,但是要先等待CPU执行完当前的指令。
执行完指令后,算术逻辑处理单元从程序计数器中找到了第二条指令在RAM中的位置,于是在重新经历了上述过程之后,指令被一条一条地执行完了
RAM将指令地址发送给程序计数器 - 指令被发送给CPU - 算术逻辑单元执行指令 - RAM将下一条指令的地址提前发送给程序计数器
静态反编译工具W32dasm - 反汇编exe程序之后,可以看到编译之后的汇编代码(CPU指令)每条指令的开头的十六进制数代表该指令在内存中的虚拟地址(W32dasm这玩意BUG太多,且无法反编译VB或C#程序,全是乱码)。
微软于2002年发布了.NET框架此框架下使用C#/Visual Basic语言编写的程序较多和C/C++这类语言不同,C#/VB程序编写完之后,编译器不会像C/C++编译器一样把代码编译成上图所示的CPU汇编指令,而是转换为中间代码,由.NET Framework虚拟机执行。
不同操作系统储存CPU汇编指令的方式不同,不过指令从读取到被CPU逐条执行的过程基本大同小异——————————————————————————————————基本输入/输出系统(Basic Input/Output System)。
BIOS的作用是在电脑开机的时候检查主板并初始化硬件,是计算机开机之后运行的第一个软件。BIOS芯片在主板出厂的时候已经被主板搭载,记录主板上的各硬件信息,以及测试,引导并初始化各硬件的小型系统。
早期的BIOS芯片,由AMD制造BIOS在计算机启动之后的工作流程:1. 上电自检检查主板有无短路,如果有,立即关闭电源确认主板状况良好之后,会对计算机的重要组件进行检查如RAM和CPU是否连接如果CPU未连接,BIOS会关闭主板的电源。
如果RAM未连接或者损坏,则不会进行下一步操作2. 从CMOS芯片中读取硬件设置,并初始化硬件CMOS(Complementary metal–oxide–semiconductor),互补式金属氧化物半导体,
是一种集成电路制作工艺这里指用CMOS材料制成的CMOS芯片前面我们讲过,CMOS芯片属于SRAM,需要靠CMOS电池供电来保存数据CMOS芯片记录了用户对于各硬件的设置(禁用以太网,开启英特尔虚拟化技术,优先从USB启动等)。
BIOS会从CMOS芯片中读取用户对于硬件的设置,再根据CMOS中的设置对计算机各硬件进行初始化BIOS首先检查CPU和RAM的运作情况,同时为其他硬件提供抽象层硬件抽象层提供了一个给操作系统直接访问硬件资源的接口,保证操作系统的内核代码不必为不同的硬件而改写,提高程序的可移植性和兼容性。
比如,不同型号的键盘和鼠标可以正常工作在同一台电脑上如果提供的硬件抽象层无法兼容操作系统(无法使用),则需要进入系统之后安装对应的驱动程序,由驱动程序给操作系统提供访问接口
主板上的CMOS芯片,需要靠CMOS电池供电来保存数据3. 引导并加载硬盘上的操作系统到主存读取操作系统的引导文件(Windows上的是boot.efi)如果找不到引导文件,BIOS会汇报错误,不执行下一步操作。
读取引导文件之后,由于此时CPU中没有任何程序运行,此时需要BIOS引导硬盘把操作系统的基本服务,进程和组件(操作系统内核)加载到RAM中当全部加载完成之后,操作系统便会启动,CPU开始执行内核代码,这时你就会看到Windows的图标和下面一直转的圈圈。
早期的BIOS芯片由不可改写的ROM芯片搭载最近几年使用的BIOS芯片则使用可以改写的闪存(Flash Memory),方便用户对BIOS进行更新统一可扩展固件接口(Unified Extensible Firmware Interface, UEFI)。
UEFI是BIOS的替代方案,和BIOS大同小异具体差异在哪我也不太明白,这里引用一下维基百科的解释:二者显著的区别就是UEFI是用模块化,C语言风格的参数堆栈传递方式,动态链接的形式构建的系统,较BIOS而言更易于实现,容错和纠错特性更强,缩短了系统研发的时间。
它可以运行于x86-64、IA32、IA64等架构上(在个人电脑上通常是x86-64平台),突破传统16位代码的寻址能力,达到处理器的最大寻址UEFI在概念上非常类似于一个低阶的操作系统,并且具有操控所有硬件资源的能力。
不少人感觉它的不断发展将有可能代替现代的操作系统目前市面上新出的品牌机均使用UEFI模块,而非BIOS芯片。
华硕品牌机的UEFI界面——————————————————————————————————芯片组(Chipset)和系统总线(System Bus)维基百科“芯片组”条目对芯片组的定义:芯片组(英语:Chipset)是一组共同工作的集成电路“芯片”,并作为一个产品销售。
它负责将电脑的微处理器和电脑的其他部分相连接,是决定主板级别的重要部件以往,芯片组由多颗芯片组成,慢慢的简化为两颗芯片(北桥芯片和南桥芯片),现在则只有一颗南桥芯片现代计算机主板的芯片组由南桥(South Bridge)
和北桥(North Bridge)组成南桥和北桥芯片属于I/O芯片(Input/Output Chip)北桥负责管理CPU和高速设备(RAM和显卡)接口之间的数据交换(处理高速信号)北桥芯片集成了内存控制器,和连接高速设备的接口(通过PCI 总线和显卡进行通信)。
自英特尔酷睿1代i7开始,北桥中的内存控制器被集成到了CPU2011年开始,英特尔取消了北桥,并将其功能集成到了CPU中(就是后来的内存控制器,高速PCI Express控制器和英特尔核显),自此北桥在英特尔支持的主板中彻底消失,只剩南桥。
和北桥相反,南桥负责处理低速信号(来自硬盘,以太网接口,无线网卡,声卡等低速设备的信号),通过北桥和中央处理器进行通信南桥集成了SATA控制器(用于硬盘),USB控制器,网络控制器,低速PCIe控制器等。
北桥负责CPU和显卡与南桥的连接,南桥负责将来自SATA接口/USB接口/无线网卡/声卡 的信号发送给北桥,从而和CPU实现通信系统总线(System Bus)系统总线是一种连接计算机各硬件的方法,而早期计算机的系统总线遵循。
冯·诺伊曼构型(Von Neumann Structure)冯·诺伊曼构型最早由美国物理学家冯·诺伊曼设计他提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备)。
冯·诺伊曼构型
当代计算机的简化硬件结构系统总线是控制总线(Control Bus),数据总线(Data Bus)和地址总线(Address Bus)的集合体控制总线是CPU和计算机硬件沟通的管道,通过这个管道接收或发送指令;。
数据总线是CPU接收数据/发送运算结果的管道;地址总线是CPU获得指令所在物理位置的管道CPU通过地址总线寻找指令或数据所在的位置,并进行处理由上图可以看出,CPU和内存可以通过控制总线和数据总线接收或发送指令或数据。
CPU需要通过地址总线在内存或者其它输入设备中寻址(获取指令的位置)————————————————————————————————交互式硬件设备(Input/Output Device,I/O Device)
交互式硬件设备通称I/O设备,包括键盘,鼠标,显示器,无线网卡等这类设备可以接受来自外部的信号,并转码成CPU可识别的指令,通过控制总线/数据总线发送给CPU,同时也可将来自CPU的指令转码成外部可识别的信号。
比如,你在一个word文档中打了一句话:“一个有纸、笔、橡皮擦并且坚持严格的行为准则的人,实质上就是一台通用图灵机”这是计算机之父艾伦·图灵的名言你按下键盘,键盘将数据通过USB接口转码成指令,通过数据总线发送你输入的字段,同时通过控制总线,经过RAM,发送给CPU“将这些字打印到屏幕上,并写入Word文档”这条指令(不止一条指令,为了简化我就这么写了)。
CPU将这些数据收集起来,发送信号给你的显示器,同时下令将你打的这句话存入硬盘里的这个Word文档中经过Unicode解码,你写的这句话被存储了下来,同时在显示器上显示在这个流程中,“你按下键盘”这个是来自外部的信号,“显示器显示你打的这句话”是CPU指令转码而成的外部信号。
键盘是输入设备,显示器是输出设备所以,在一个流程中,没有绝对的输入设备,也没有绝对的输出设备严格意义上说,硬盘并不算是I/O设备的一种,因为这个设备不接收来自外部的信号,即便它和CPU有间接的数据交流——————————————————————————————————
各种各样的外部设备接口(Interface)当代计算机使用的外部设备接口主要有以下几种:1.USB(Universal Serial Bus,通用串行总线)用来连接U盘,移动硬盘,键盘,鼠标等USB接口是一种I/O设备接口标准,用来替代计算机繁杂的接口系统。
多媒体电脑刚问世时,外接式设备的传输接口各不相同,如打印机只能接LPT,调制解调器只能接RS232,鼠标键盘只能接PS/2等繁杂的接口系统,加上必须安装驱动程序并重启才能使用的限制,都会造成用户的困扰因此,创造出一个统一且支持易插拔的外接式传输接口,便成为无可避免的趋势,USB应运而生。
USB认证标志USB接口经过20多年的发展,从最初仅能提供12Mbps接口速度的USB 1.1,已经升级到了40Gbps的USB 4.0基于接口速度的大幅度提升,Windows to Go 技术应运而生。
Windows to Go支持将操作系统直接安装进USB存储设备,通过BIOS直接从USB存储设备启动,大大增加了携带电脑的便携性USB接口也已广泛运用于键鼠设备和其它多媒体设备(如MIDI键盘)与计算机的连接。
2. 硬盘接口:PATA,SATA和M.2ATA(Advanced Technology Attachment,先进科技附件)是IBM公司于1986年提出的存储设备接口方案当时市面上各种计算机的外存设备并没有统一的接口。
ATA标准提出后,迅速占领了IBM PC兼容机市场PATA(Parallel ATA,并行ATA)PATA是从上世纪90年代开始,一直到2010年左右,市面上售卖的计算机所使用的主要外存设备接口,包括硬盘,软驱和光驱。
PATA硬盘线与PATA相对应的是叫做IDE(Integrated Drive Electronics,集成驱动电子设备)的硬盘驱动器技术。所以,PATA接口也被称作IDE接口。
华硕生产的PATA数据线PATA设备的价格低廉,且新规格的排线可以兼容旧规格的设备PATA的缺点是其数据连接线面积过大,不利于机箱内部的导线整理(Cable Management)机箱内部的导线整理非常重要,整理的好有助于更换硬件设备,是装机工作者的一个必备技能。
而且,PATA的宽面积导线也不利于机箱内部的通风散热PATA接口的数据传输速度中规中矩,约为130MBps2001年出现了SATA接口,在传输速度和其它方面的性能上迅速打败了传统的PATA接口自此,SATA接口占据了2000年以后的个人计算机市场。
2010年,西数公司宣布停止PATA接口的硬盘供应,标志着PATA接口在服役了20年后正式退役SATA(Serial ATA,串行ATA)SATA于2000年11月由“Serial ATA Working Group”团体所制定,取代旧式PATA接口的旧式外存设备。
SATA接口的排线很细。相较于PATA的排线,SATA排线占据机箱内部的空间较少,有利于机箱内部的通风散热和导线整理,从一定程度上提高了计算机的稳定性。
SATA排线(上)和主板上的SATA接口(下)SATA接口仍然是目前计算机中低端消费市场所使用的主要硬盘接口固态硬盘(Solid State Disk,SSD)技术出现后,在读写速度上打败了传统的机械硬盘。
然而由于当时的技术限制,固态硬盘价格高昂,容量较小且稳定性较差,没能取代机械硬盘近年,固态硬盘在读写稳定性和容量上不断进步,价格也在不断降低越来越多的用户放弃了传统的机械硬盘,转而使用固态硬盘但是,固态硬盘的理论读写速度受到SATA接口的制约(SATA接口的传输速度为600~700MBps,而固态硬盘的传输速度可达1500MBps),于是,为了打破SATA接口对于固态硬盘的传输速度制约,M.2接口标准诞生了。
一块SATA接口的固态硬盘M.2,也称Next Generation Form Factor(NGFF)M.2接口,是Intel推出的一种替代SATA接口的新的接口规范其实,对于大多数PC用户来讲,SATA接口已经足以满足大部分用户的需求了,不过考虑到高端市场用户的存储需求(游戏本和高性能办公本),Intel才急切的推出了这种新的接口标准。
M.2接口不仅用于高速硬盘的连接无线网卡,蓝牙设备,卫星导航等等设备均通过M.2接口连接至主板M.2接口可直接由设备接口接入,不需要导线M.2接口的固态硬盘也没有金属外壳,大大节省了小型设备(笔记本)的厚度。
市面上的高性能轻薄本均使用这种SSDM.2接口分为两种:Socket2 和Socket3Socket2主要应用于无线网卡和蓝牙设备的连接,理论速度约为600MBpsSocket3专门为固态硬盘设计,其理论速度可达32GBps(32000MBps),为SATA接口理论速度的5倍。
M.2暂时不会取代SATA。目前只有高端市场使用这种接口用于SSD。
M.2接口的固态硬盘,直接将其插入主板上的M.2接口即可硬盘尾部圆形的凹用来安装螺丝固定3. 显示器接口:VGA Connector和HDMIVGA(Video Graphic Array,视频图型阵列)。
是一个使用模拟信号的电脑显示器标准,于1987年由IBM公司制定这个标准已对于现今的个人电脑市场已经十分过时即使如此,VGA仍然是最多制造商所共同支持的一个标准,个人电脑在加载自己的独特驱动程序之前,都必须支持VGA的标准。
例如,微软Windows系列产品的引导画面仍然使用VGA显示模式,这也说明其分辨率和载色数的不足而最初针对该标准制定的显示器接口,就是VGA Connector(VGA端子)HDMI(High Definition Multimedia Interface,高分辨率多媒体界面)
是一种传输音频和视频信号的显示器端口,也是一种高清媒体的有线传输方案现广泛应用于高清电视,游戏主机以及电竞显示屏中、HDMI有一个显著的缺点:当连接两个设备的HDMI电缆的长度超过5米时,便能感受到明显地信号衰减。
设备通过HDMI接入投影仪并投放在银幕上的方案可以有效改善这个缺点VGA接口的显示器和VGA电缆现仍被中低端消费市场广泛使用。
VGA 和 HDMI接口,感谢评论区指正4. 显卡接口:PCIe x1~x16我对于PCIe的理解不深,这里贴上维基百科对PCI和PCIe的解释:外部链接(Peripheral Component Interconnect
)标准,或称个人电脑接口(Personal Computer Interface),实际应用中简称为PCI,是一种连接电脑主板和外部设备的总线标准一般PCI设备可分为以下两种形式:直接内置于主板上的集成电路,在PCI规范中称作“嵌入设备”(planar device);或者。
安装在插槽上的扩展界面卡PCI Express,简称PCI-E,官方简称PCIe,是计算机总线的一个重要分支,它沿用现有的PCI编程概念及信号标准,并且构建了更加高速的串行通信系统标准目前这一标准由PCI-SIG组织制定和维护。
PCIe仅应用于内部互连由于PCIe是基于现有的PCI系统,所以只需修改物理层而无须修改软件就可将现有PCI系统转换为PCIePCIe拥有更快的速率,所以几乎取代了以往所有的内部总线(包括AGP和PCI)。
简单地说,PCIe的传输速度比传统的PCI要快目前市面上的主板此类接口只采用PCIe标准PCIe接口位于主板上,用来安装高速设备,通常是显卡PCIe接口按照大小分为四种:PCIe x1 - PCIe x4 - PCIe x8 - PCIe x16。
PCIe x1~x16的大小对比目前显卡的常用接口为PCIe x16不过也有专门用于小型迷你主机的PCIe x4的显卡————————————————————————————————总结你打开电脑,准备写一个Hello World程序。
主板通电,BIOS芯片开始上电自检,对你的内存条和CPU进行检测.BIOS确认你的内存和CPU连接无误,开始为硬件提供抽象层,进行初始化BIOS从CMOS芯片中读取了你的设置,决定从硬盘启动操作系统BIOS找到了你的Windows引导文件boot.efi,依照引导文件将操作系统的内核进程加载到内存,再由内存发送给CPU执行内核进程。
Windows的内核进程执行开始,系统开始加载到你的内存你成功登录系统结合我们之前所讲的内容,我们再来看,一个程序被执行的时候,经过了怎样的过程以Windows环境下的Visual Studio为例,C/C++程序会被编译成exe程序后运行。
我用C++语言写下了这样一段Hello World代码:#includeusingnamespacestd;intmain(){cout<<"Hello, World!"<
;return0;}2. 代码被编译器编译成了类似下面的汇编代码,用于CPU执行:asm{movax,4// (I/O Func.)movbx,1// (Output func)ldscx,"Hello, world"
// (address of the string)movdx,6// (length of the string)int0x21// system call}(上面的这段代码其实是C语言的汇编混编,无论怎样,这个exe程序被编译出来了。
)3. 保存这个exe程序到某个文件夹此时,内核的文件管理程序要求CPU给硬盘发出指令,让硬盘把这个程序记录在盘片上的某个地方指令通过内存进入数据寄存器-指令寄存器之后被CPU的算术逻辑单元执行4. 记录程序”的指令被南桥通过控制总线发送至硬盘的主控芯片。
主控芯片开始控制磁头硬盘的磁头通过快速通断的电流,在磁头上间歇式地产生磁场,磁化盘面上的一个一个小块,形成了二进制的数据5. 你再次点击这个exe,想要运行这个程序你的鼠标作为外部设备,接收了“你点击鼠标”这个外部信号,转码后作为指令再次通过控制总线发送到CPU。
指令传输的步骤和3一样6. CPU再次向硬盘发出“加载exe程序到内存,我要执行”这个命令,由南桥通过控制总线再次发送到硬盘而硬盘的主控芯片也开始根据操作系统提供的簇编号,找到了这个exe程序的位置,在距离盘片旋转轴1cm处的一个小扇区。
7.磁头感受到了轻微的磁场变化,将信号发送给硬盘的主控芯片,主控芯片转码成二进制数据,通过数据总线发送给内存8. 内存加载了exe程序中的所有指令此时第一条指令的位置(比如在内存条从左往右数的第二块存储芯片的第18000号存储单元)报告给程序计数器。
程序计数器告诉CPU指令的位置9. (见步骤2的图)第一条指令“mov ax, 4”经过和之前一样的步骤(数据寄存器 - 指令寄存器 - 算术逻辑单元),被CPU执行与此同时,第二条指令“mov bx, 1”所在的位置也已经提前发送给程序控制器。
控制内存发送指令和地址的,是北桥的内存控制器10. 当最后一条指令“int 0x21”被执行完后,CPU将运算结果由南桥通过数据总线发送到显示器,同时,CPU通过控制总线向显示器发送“显示运算结果”的指令。
11. 显示器收到了数据和指令于是屏幕上出现了Windows特有的黑色命令行界面上面写着:"Hello, World!"往期精选Unity3D游戏开发中100+效果的实现和源码大全 - 收藏起来肯定用得着。
Shader学习应该如何切入?UE4 开发从入门到入土声明:发布此文是出于传递更多知识以供交流学习之目的若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与我们联系,我们将及时更正、删除,谢谢作者:Itaru Otaku
来源:https://zhuanlan.zhihu.com/p/145361297More:【微信公众号】 u3dnotes
免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186