三、CPU

3.1 CPU的分类与指令集

      CPU的内部是集成有指令集的,我们就是通过调用这些指令集来控制CPU的各种操作。而这些指令集的设计理念被分为两种:精简指令集(RISC)和复杂指令集(CISC)。两种指令集的使用造成了CPU的不同。

      1.精简指令集

                “精简指令集(Reduced Instruction Set Computing,RISC):这种CPU的设计中,微指令集较为精简,每个指令的运行时间都很短,完成的动作也很单纯,指令的执行效能较佳;但是若要做复杂的事情,就要由多个指令来完成。

               常见的RISC指令集CPU主要例如Sun公司的SPARC系列、IBM公司的Power Architecture(包括 PowerPC)系列、与ARM系列等。【注:Sun已经被Oracle收购;】 SPARC架构的计算机常用于学术领域的大型工作站中,包括银行金融体系的主服务器也都有这类的计算机架构;

               PowerPC架构的应用,如Sony出产的Play Station 3(PS3)使用的就是该架构的Cell处理器。

              ARM是世界上使用范围最广的CPU了,常用的各厂商的手机、PDA、导航系统、网络设备等,几乎都用该架构的CPU。”

           2.复杂指令集   

           “复杂指令集(Complex Instruction Set Computer,CISC)与RISC不同,在CISC的微指令集中,每个小指令可以执行一些较低阶的硬件操作,指令数目多而且复杂,每条指令的长度并不相同。             

              因此指令执行较为复杂所以每条指令花费的时间较长,但每条个别指令可以处理的工作较为丰富。常见的CISC微指令集CPU主要有AMD、Intel、VIA等的x86架构的CPU。”

        3.X86架构
x86是针对cpu的型号或者说架构的一种统称,详细地讲,最早的那颗Intel发明出来的CPU代号称为8086,后来在8086的基
础上又开发出了80285、80386....,因此这种架构的CPU就被统称为x86架构了。
由于AMD、Intel、VIA所开发出来的x86架构CPU被大量使用于个人计算机上面,因此,个人计算机常被称为x86架构的计算
机,程序员开发出的软件最终都要翻译成cpu的指令集才能运行,因此软件的版本必须与CPU架构契合。所以我们经常能看见
软件安装包后缀有X86的字样。
4. 64位
“cpu的位数指的是cpu一次性能从内存中取出多少位二进制指令,64bit指的是一次性能从内存中取出64位二进制指令。
在2003年以前由Intel所开发的x86架构CPU由8位升级到16、32位,后来AMD依此架构修改新一代的CPU为64位,到现在,
个人计算机CPU通常都是x86_64的架构。
cpu具有向下兼容性,指的是64位的cpu既可以运行64位的软件,也可以运行32位的软件,而32位的cpu只能运行32位的软
件。这其实很好理解,如果把cpu的位数当成是车道的宽,而内存中软件的指令当做是待通行的车辆,宽64的车道每次肯定
既可以通行64辆车,也可以通行32辆车,而宽32的车道每次却只能通行32辆车。”

四、存储器一
RAM(随机存取存储器):也叫主存,是与CPU直接交换数据的内部存储器。它可以随时读写(刷新时除外),
而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。
ROM(只读存储器):以非破坏性读出方式工作,只能读出无法写入信息。信息一旦写入后就固定下来,
即使切断电源,信息也不会丢失,所以又称为固定存储器。
CMOS:它是指制造大规模集成电路芯片用的一种技术或用这种技术制造出来的芯片,是电脑主板上的一块可读写的
RAM芯片。因为可读写的特性,所以在电脑主板上用来保存BIOS设置完电脑硬件参数后的数据,这个芯片
仅仅是用来存放数据的。(由主板电池供电,断电数据会丢失)
五、CPU的工作流程
CPU从内存中取指令->解码->执行,然后再取指->解码->执行下一条指令,周而复始,直至整个程序被执行完成。 
CPU读取的数据都是从主存储器(内存)来的!主存储器内的数据则是从输入单元所传输进来!而CPU处理完毕的数据也必须先写
回主存储器中,最后数据才从主存储器传输到输出单元。

六、CPU的内核态与用户态

       内核态:操作系统运行程序,可调用控制硬件的指令集和运算相关的指令集。

       用户态:应用程序运行,不可调用控制硬件的指令集,只能调用运算相关的指令集。

       所以,一个应用程序运行时,CPU的内核态和用户态是不断切换的。同时,我们也可以发现,应用程序是通过调用操作系统的控制程序来控制电脑硬件的。

七、多线程与多核芯片

       这是CPU的基础工作流程:

       Python全栈开发之路 Day 02_内核态

 

 

       人们为了提高CPU运行效率,在一个CPU内核中,加入了多个这样的流程,同时设立了缓冲区,多个指令被取出、解码并存入缓冲区,只要有执行单元空闲,就可以从缓冲区中读取指令执行,这样,超变量CPU就诞生了:

       Python全栈开发之路 Day 02_多线程_02

 

      在这之后,CPU又经历了3次增强:

      “

      I.第一步增强:在cpu芯片中加入更大的缓存,一级缓存L1,用和cpu相同的材质制成,cpu访问它没有时延

      II.第二步增强:一个cpu中的处理逻辑增多,intel公司首次提出,称为多线程(multithreading)或超线程(hyperthreading),对用户来说一个有两个线程的cpu就相当于两个cpu,我们后面要学习的进程和线程的知识就起源于这里,进程是资源单位而线程才是cpu的执行单位。

      多线程运行cpu保持两个不同的线程状态,可以在纳秒级的时间内来回切换,速度快到你看到的结果是并发的,伪并行的,然而多线程不提供真正的并行处理,一个cpu同一时刻只能处理一个进程(一个进程中至少一个线程)

      III.第三步增强:除了多线程,还出现了傲寒2个或者4个完整处理器的cpu芯片,如下图。要使用这类多核芯片肯定需要有多处理操作系统

      ”

      Python全栈开发之路 Day 02_指令集_03Python全栈开发之路 Day 02_内核态_04

 

 

 八、存储器二

        不同存储器的读写速度不同

Python全栈开发之路 Day 02_多线程_05

 

        磁盘低速的原因是因为它一种机械装置,在磁盘中有一个或多个金属盘片,它们以5400,7200或10800rpm(RPM =revolutions per minute 每分钟多少转 )的速度旋转。从边缘开始有一个机械臂悬在盘面上,这类似于老式黑胶唱片机上的拾音臂。

        信息卸载磁盘上的一些列的同心圆上,是一连串的2进制位(称为bit位),为了统计          方法,8个bit称为一个字节bytes,1024bytes=1k,1024k=1M,1024M=1G,所以我们平时所说的磁盘容量最终指的就是磁盘能写多少个2进制位。

        磁盘的结构:

        Python全栈开发之路 Day 02_ios_06

 

九、IO延迟

      平均寻道时间:机械手臂转到数据所在磁道需要花费的时间,受限于物理工艺水平,目前机械硬盘可达到的是5ms。

      平均延迟时间:转半圈需要花费4ms,受限于磁盘的转速

      IO延迟:平均寻道时间+平均延迟时间

      优化程序运行效率的一个很有效的方法就是尽量少的读写硬盘。

十、总线

      北桥即PCI桥:连接高速设备

      南桥即ISA桥:连接慢速设备

 

      Python全栈开发之路 Day 02_指令集_07

 

 

 

 

 Python全栈开发之路 Day 02_数据_08

 

 

 

 十一、BIOS(Basic Input Output System)

           BIOS是厂商为主板安装的基本操作系统,可以进行最基本的输入输出工作,包括读键盘,写屏幕,进行磁盘I/O,该程序存放于一非易失性闪存RAM中。

十二、计算机的启动流程

           1.计算机通电

           2.BIOS启动,运行硬件检查,检查CPU、内存、硬盘等硬件是否运行正常

           3.BIOS读取CMOS中的参数,选择启动设备。

           4.从启动设备上读取第一个扇区的内容(MBR主引导记录512字节,前446为引导信息,后64为分区信息,最后两个为标志位)。

           5.根据分区信息读入bootloader启动装载模块,启动操作系统。

       6.操作系统启动,检查并运行各硬件驱动程序(也就是硬件的控制程序)。