-
问题
硬件操作系统构成是怎么样的?
从编写高级语言代码,到正式执行经过了哪些流程?
CPU 和 GPU 的分工是怎么样的?
平时电脑卡顿有哪些可能的原因?
内存越大,电脑执行速度就一定越快吗?
固态硬盘为什么比机械盘速度快?
苹果M1芯片做了哪些优化?
arm64 / x86 架构是如何设计的?
32位和64位操作系统有什么区别?如何实现兼容?操作系统的位数对我们平时开发流程有什么影响?
显卡和内存有什么关系?
微机是如何读取二进制的?我输入一串00010101010101000101,计算机是怎么知道什么含义的?
二进制和汇编有什么关系?为什么汇编可以翻译成二进制?
微机系统里如果有GPU,那么运行的流程是什么样的?深度学习中使用GPU做并发运算,流程是什么样的?
iOS 的卡顿掉帧和CPU、GPU是什么关系,可以怎么优化?
微机中的总线是什么东西?怎么实现数据传输的?用电信号吗?
既然内存条是个好东西,为什么不提供1T的内存条?
一、微处理器结构
汇编语言是直接在硬件之上工作的编程语言,我们首先要了解硬件系统的结构,才能有效地应用汇编语言对其编程。
(一)微型计算机的系统组成
1. 微处理器(CPU)
整个微机的核心是微处理器,它是采用大规模集成电路技术做成的芯片,芯片内包含:
- 控制器
- 运算器
- 寄存器
2. 系统总线
所谓总线,是指传递信息的一组公用信号线。这里的系统总线,是指从 CPU 引出的若干信号线,CPU 通过系统总线与存储器和I/O设备进行信息交换。
总线的作用:将电气信号转换为数字信号
(1)地址总线
传送地址信息的总线称为地址总线,即 AB(Address Bus)。CPU在AB总线上输出将要访问的内存单元或I/O端口的地址,该总线为单向总线。
地址总线的位数决定了CPU可直接寻址的内存空间大小,比如8位微机的地址总线为16位,则其最大可寻址空间为216=64KB,16位微型机的地址总线为20位,其可寻址空间为220=1MB。一般来说,若地址总线为n位,则可寻址空间为2n字节。
(2)数据总线
传送数据信息的总线称为数据总线,即 DB(Data Bus)。在CPU进行读操作时,内存或外设的数据通过DB总线送往CPU;在CPU进行写操作时,CPU数据通过DB总线送往内存或外设,该总线为双向总线。
数据总线的位数是微型计算机的一个重要指标,通常与微处理的字长相一致。例如Intel 8086微处理器字长16位,其数据总线宽度也是16位。需要指出的是,数据的含义是广义的,它可以是真正的数据,也可以指令代码或状态信息,有时甚至是一个控制信息,因此,在实际工作中,数据总线上传送的并不一定仅仅是真正意义上的数据。
(3)控制总线
传送控制信息的总线称为 控制总线,即 CB(Control Bus)。其中有些信息线是将CPU的控制信号或状态信号送往外界;有些信号线将外界的请求或联络信号送往CPU;个别信号线兼有以上两种情况。
控制信号中,有的是微处理器送往存储器和I/O接口电路的,如读/写信号,片选信号、中断响应信号等;也有是其它部件反馈给CPU的,比如:中断申请信号、复位信号、总线请求信号、限备就绪信号等。因此,控制总线的传送方向由具体控制信号而定,一般是双向的,控制总线的位数要根据系统的实际控制需要而定。实际上控制总线的具体情况主要取决于CPU。
二、微型计算机系统
(一)8位微处理器结构实例
(二)寄存器和存储器是什么关系?
主要区别就是硬件电路的实现了。
寄存器是静态存储器SRAM,一个存储单元由6个晶体管构成,读写速度是最快的,CPU中的cache、寄存器都是使用SRAM电路,读写速度快,但是成本贵,所以一般容量都不是很大。
跟SRAM相对的,是SDRAM ,一个存储单元由一个晶体管和一个电容组成,价格便宜,因为是使用电容充放电的高低电平表示0和1,因此需要不断刷新。
后来SDRAM技术不断发展,工作电平不断降低,从2.5V降到目前的1.2V,而且是双通道的,有数字电路基础的都知道,每一次时钟周期可以读取一次数据,而Dual Data Rate SDRAM可以在每个时钟周期的上升沿和下降沿分别读取一次数据,因此速度理论上提升了2倍。这就是我们常常看到的DDR内存条,包括后续的DDR2、DDR3、DDR4其实都属于SDRAM。内存一般都是使用SRAM或SDRAM。
而存储器一般称为外存,磁盘、NAND Flash等,这些都属于ROM范畴,跟上面的RAM是不一样的,RAM断电后数据会消失,而ROM存储器的特点是断电后数据不会消失,因此主要用来存储安装的软件、数据文件、电影、图片等。而内存SRAM主要用来存放运行的程序。
-> 所以平时说的磁盘大小指的是外存),内存大小指的是主存
(三)主存、辅存、内存、外存、存储器是什么?
现代计算机硬件由五大部件组成,分别是运算器、控制器、存储器、输入设备和输出设备。
而存储器的存在对于计算机来说起着不可或缺的作用。在CPU的内部,存在着许多的存储器,这些存储器叫做寄存器,用来暂时存放数据或者指令。正是因为有了这些寄存器,CPU才能快速高效地处理计算机中复杂地工作。而与寄存器并称为内部存储器的还有内存。内存也被称为主存,而辅存指的是计算机的外部存储、例如,硬盘、U盘、软盘以及光盘等等。
1. 内存
内存又称主存,是CPU能直接寻址访问的存储空间。在计算机工作的时候,所有的数据都要先经过内存,然后才能交由处理器去处理,内存也被称为,CPU与外存通信的桥梁。它的特点是读写速度快。
内存一般是由半导体器件组成,可分为RAM(随机存储器)、ROM(只读存储器)、Cache(高速缓存)。
(1)RAM(Random Access Memory),随机访问存储器
表示既可以从中读取数据,也可以从中写入数据,但是断电后数据就会消失。我们现在所使用的内存条,其实就是RAM集成块集中在一起的一块小电路板,它插在计算机的内存插槽上。而RAM又分为两种,DRAM(动态随机存储)和SRAM(静态随机存储)。
DRAM
动态随机存储,存储单元是由电容和相关元件组成的,电容存在漏电现象,电荷不足会导致存储单元数据出错,所以DRAM需要周期性刷新,以保持电荷状态。DRAM结构较简单且集成度高,通常用于制造内存条中的存储芯片。
SRAM
静态随机存储,存储单元是由晶体管和相关元件做成的锁存器,每个存储单元具有锁存“0”和“1”信号的功能。它速度快且不需要刷新操作,但集成度差和功耗较大,通常用于制造容量小但效率高的CPU缓存。
(2)ROM(Read Only Memory),只读存储器
在制造ROM的时候,信息(比如数据或者程序)就被永久写入并永久保存。这些信息只能读入,不能写入。即使处于停电状态,这些信息也不会丢失。ROM一般用于存放计算机的基本程序和数据,如BIOS芯片。
现在比较流行的只读存储器是闪存( Flash Memory),它属于 EEPROM(电擦除可编程只读存储器)的升级,可以通过电学原理反复擦写。现在大部分BIOS程序就存储在 FlashROM芯片中。
(3)Cache,高速缓冲存储器
Cache,介于CPU与内存,平时我们经常看到的是,一级缓存(L1 Cache)、二级缓存(L2 Cache)、三级缓存(L3 Cache),它处于CPU与内存之间,是一个读写速度比内存更快的存储器,当CPU向内存读取或者存入数据时,这些数据也会被存储进Cache中。当CPU再次需要访问这些数据时,CPU就从Cache中读取数据,而不是去访问速度较慢的内存,当然了,如果Cache中没有需要的数据,CPU会去访问内存,读取需要的数据。
原来微机的架构设计里有就3级缓存。。
2. 外存
外存又称为辅存,是指除计算机内存及CPU缓存以外的存储器,此类存储器断电后仍能保存数据。常见的外存有硬盘、光盘、U盘等。我们现在笔记本所使用的SSD固态硬盘,机械硬盘等等就是外部存储器。CPU如果想访问外存中的数据,必须先把外存的数据保存到内存中,CPU再去读取内存中的数据。
(四)CPU和寄存器有什么关系?
寄存器
不知道什么是寄存器?那见过太监没有?大家应该都看过古装戏,那些皇帝们要阅读奏章的时候,大臣总是先将奏章交给皇帝身边的小太监,小太监呢再交给皇帝同志进行处理。这个小太监只是个中转站,并无别的功能。
好,那我们再联想到我们的CPU。CPU不就是我们的皇帝同志么?大臣就相当于我们的内存,数据从他这拿出来。那个小太监就是我们的寄存器了(这里先不考虑CPU的高速缓存区)。数据从内存里拿出来先放到寄存器,然后CPU再从寄存器里读取数据来进行处理,处理完后同样把数据通过寄存器存放到内存里,CPU不直接和内存打交道。这里要说明的一点是:小太监是主动的从大臣手里接过奏章,然后主动的交给皇帝同志,但寄存器可没那么自觉,它从不主动干什么事。一个皇帝可能有好些个小太监,那么一个CPU也可以有很多寄存器,不同型号的CPU拥有的寄存器的数量也不一样。
为啥要这么麻烦呢,速度!就是因为速度。寄存器其实就是一块一块小的存储空间,只不过其存储速度要比内存快得多。近水楼台先得月嘛,它离CPU很近,CPU一伸手就拿到数据了,比在那么大的内存里去寻找某个地址上的数据是不是快多了?那有人问既然它速度那么快,那我们的内存硬盘都改成寄存器得了,我要说的是:你真有钱。
寄存器属于硬件层面,比如需要设置编码器的编码速度,设置CPU的通信速率或者摄像头的曝光等等,这些其实都是通过操作硬件来实现的,需要参考寄存器手册。但是不是只有CPU才有寄存器,好多东西都会有,比如传感器、编码器等等。
(五)8086 是 16位微处理器,这里的16位指的是什么?为什么8086CPU的地址总线是20根?
就是 同时执行 16位的运算。
8086处理器引入了一个重要概念–段。8086处理器的寻址目标是1M大的内存空间,于是它的地址总线扩展到了20位。但是,一个问题摆在了Intel设计人员面前,虽然地址总线宽度是20位的,但是CPU中“算术逻辑运算单元(ALU)”的宽度,即数据总线却只有16位,也就是可直接加以运算的指针长度是16位的。如何填补这个空隙呢?可能的解决方案有多种,例如,可以像一些8位CPU中那样,增设一些20位的指令专用于地址运算和操作,但是那样又会造成CPU内存结构的不均匀。又例如,当时的PDP-11小型机也是16位的,但是其内存管理单元(MMU)可以将16位的地址映射到24位的地址空间。受此启发,Intel设计了一种在当时看来不失为巧妙的方法,即分段的方法。
为了支持分段,Intel在8086 CPU中设置了四个段寄存器:CS、DS、SS和ES,分别用于可执行代码段、数据段、堆栈段及其他段。每个段寄存器都是16位的,对应于地址总线中的高16位。每条“访内”指令中的内部地址也都是16位的,但是在送上地址总线之前,CPU内部自动地把它与某个段寄存器中的内容相加。因为段寄存器中的内容对应于20位地址总线中的高16位(就是把段寄存器左移4位),所以相加时实际上是内存总线中的高12位与段寄存器中的16位相加,而低4位保留不变,这样就形成一个20位的实际地址,也就实现了从16位内存地址到20位实际地址的转换,或者叫“映射”。段式内存管理带来了显而易见的优势,程序的地址不再需要硬编码了,调试错误也更容易定位了,更可贵的是支持更大的内存地址。程序员开始获得了自由。
技术的发展不会就此止步。intel的80286处理器于1982年问世了,它的地址总线位数增加到了24位,因此可以访问到16M的内存空间。更重要的是从此开始引进了一个全新理念–保护模式。这种模式下内存段的访问受到了限制。访问内存时不能直接从段寄存器中获得段的起始地址了,而需要经过额外转换和检查。为了和过去兼容,80286内存寻址可以有两种方式,一种是先进的保护模式,另一种是老式的8086方式,被成为实模式。系统启动时处理器处于实模式,只能访问1M空间,经过处理可进入保护模式,访问空间扩大到16M,但是要想从保护模式返回到实模式,你只有重新启动机器。还有一个致命的缺陷是80286虽然扩大了访问空间,但是每个段的大小还是64k,程序规模仍受到限制。因此这个先天低能儿注定寿命不会很久。很快它就被天资卓越的兄弟–80386代替了。
80386是一个32位的CPU,也就是它的ALU数据总线是32位的,同时它的地址总线与数据总线宽度一致,也是32位,因此,其寻址能力达到4GB。对于内存来说,似乎是足够了。从理论上说,当数据总线与地址总线宽度一致时,其CPU结构应该简洁明了。但是,80386无法做到这一点。作为X86产品系列的一员,80386必须维持那些段寄存器的存在,还必须支持实模式,同时又要能支持保护模式,这给Intel的设计人员带来很大的挑战。Intel选择了在段寄存器的基础上构筑保护模式,并且保留段寄存器16位。在保护模式下,它的段范围不再受限于64K,可以达到4G。这一下真正解放了软件工程师,他们不必再费尽心思去压缩程序规模,软件功能也因此迅速提升。
从8086的16位到80386的32位处理器,这看起来是处理器位数的变化,但实质上是处理器体系结构的变化,从寻址方式上说,就是从“实模式”到“保护模式”的变化。从80386以后,Intel的CPU经历了80486、Pentium、PentiumII、PentiumIII等型号,虽然它们在速度上提高了好几个数量级,功能上也有不少改进,但基本上属于同一种系统结构的改进与加强,而无本质的变化,所以我们把80386以后的处理器统称为IA32(32 Bit Intel Architecture)。
(六)为什么换了固态硬盘电脑会快?详解硬盘与内存的关系
source:https://zhuanlan.zhihu.com/p/39567224
前言:
不少人说电脑卡顿,我的推荐都是换个固态,把系统安装到固态里就不卡了,很多人不信啊,觉得换个硬盘电脑就能变快了?这么神奇么,所以今天我们就来详细了解一下,为什么换了固态硬盘系统会变快,以及把软件放到固态和机械里有啥区别。
声明:
此文面向用户为小白,不是那些研究很久的大佬,所以文章的内容为了更好理解,我会用一些例子来说明,有可能与真实情况不符,但是目的只是用于理解,希望业内大佬不要评论区开撕。
正文部分:
首先我们需要先梳理一下内存与硬盘的关系,这里的内存和手机的有很大的区别,所以从这里开始你需要把对于手机内存认知的那一套全部抛到脑后,否则你会被干扰。
####【人类的思考】
我们的大脑需要思考某件事,就需要把这件事从记忆里提取到思维里,然后我们的大脑针对思维里的数据去运算,也就是说,思维是我们的大脑临时存储数据的地方,记忆是我们长期储存数据的地方。
####【电脑的运算】
我们的电脑需要运算某软件,就需要把这个软件从电脑的记忆,提取到电脑的思维,然后芯片对电脑的思维去运算,这里的电脑的记忆就是我们常说的硬盘,电脑的思维就是我们所说的内存。这里的内存又叫运行内存。
上面那个例子还不明白那我就再举个例子,你吃饭需要把菜从锅里夹到碗里,然后你再对你的碗里的饭执行“吃”这个操作。电脑一样的,你吃饭这个动作=电脑运算数据,菜=数据,锅就是硬盘,你的碗就是内存,你吃饭需要夹菜到碗里,电脑算数据需要把数据从硬盘拷贝到内存里。
相信通过上面两个例子你应该明白了CPU,内存,硬盘的关系了。那么这里你应该就能推测出来:
- 内存容量的大小直接决定了你能同时开多少/多大的软件。
- 硬盘容量的大小直接决定了你可以存放多少/多大的数据。
【为什么换了固态会流畅?】
一句话:提升了内存读取硬盘的速度。
举个例子,你打开一个QQ,这时候你的鼠标变成了沙漏或者圆圈,过了几秒QQ打开了。这里电脑里完成的操作就是把CPU需要的QQ数据从硬盘里拷贝到内存里,然后CPU针对内存里的QQ运算,当拷贝这个过程完成了,CPU才能开始算数,你这软件才被标记为“已打开”。
同样的你玩游戏的时候过图或者加载的时候那个loading界面,电脑执行的操作就是把硬盘的数据拷贝到内存,因为CPU直接连接的是内存,CPU只能针对内存的数据去处理,所以加载地图的时候硬盘就会把地图这个数据打包传递给内存,当数据传输完成,地图也就读取完成了,这时候loading过程结束。
CPU与内存之间的带宽是非常快的,随便一个内存都是30GB/S,所以CPU到内存这个来回通路不存在速度瓶颈,但是传统机械硬盘连续读写速度只有200MB/S,远远低于内存速度。
假如硬盘不能及时把数据传输给内存,那么CPU只能空闲等着,比如你打开QQ,系统花了1分钟把QQ从硬盘传递给内存,那么在你看来很直接的感受就是卡,你也许会觉得是电脑性能不够了,实际上是硬盘传递给内存这部分花费了大量时间。就好像你忘记了某个公式,你就是再聪明,你也算不出来对应的数学题。电脑性能再强,数据不能及时传递给他运算,他也只能歇菜,Linus白嫖王说过,硬盘几乎是目前电脑里最慢的部分,所以你感受到的卡顿绝大多数是硬盘的锅。
换了硬盘后内存到硬盘之间这条通路的瓶颈就解决掉了,所以你的电脑就会如丝般顺滑。所以换固态解决的问题在这里。
三、8086/8088 微处理器
Tips:这里的”指令队列缓冲器”,类似我们业务里写的下载队列管理
Tips:地址加法器将逻辑地址
转成物理地址
的方式也非常精彩,可以用16位的寄存器(数据)访问20位的地址寻址。