2018年11月8日,闲来无事,决定把自己近20年所学的知识做一个梳理,也把自己从事培训行业近10年的心得整理一下。可能会分为几个部分来写,初步计划会写《程序》、《网络》、《安全》三部分,之后还会写什么要看缘分了。
为什么命名为《啥都玫说》?就是因为什么都想说,也希望说了以后不影响其他人的见解。因为所记所录有的来自学校,有的来自网络,有的来自出版物,有的来自交流。有摘抄,有概括,有教案,有心得。像是随笔,又尽量追求条理和结构。想到哪写到哪,写道哪算哪。
我想再多说一次,内容有的来自网络,有的来自出版物,有的来自交流。有摘抄的部分,也有概括的部分。请不要用抄袭,雷同等问题来质问我,我写的是心得,不是出版物,只是过往的记录。
师者,传道授业解惑也。吾当尽力而为。
他日有幸得您翻阅拙作,敬请斧正。
您阅读本文如果觉得符合大人您的口味,请关注一下本君,点个关注和评论,说一下您的观点。创作不易,还请多多支持!
2.1 什么是CPU
为什么要说道CPU呢?因为程序的最终运行是要用CPU的,机器语言也就是CPU的指令集。所以我们不得不聊聊这个1000多个针脚的东西。
CPU的英文是Central Processing Unit,翻译过来也就是我们所说的中央处理器。除了被人们熟知电脑上所用的Intel的i3、i5、i7等CPU以外,AMD也同样是一个很大的电脑CPU厂商。而手机和平板上同样有CPU,比如苹果iphone的A12,还有国内很多厂商用到的麒麟、骁龙同样也都是CPU。我们后边的讨论,还是基于电脑CPU的。
CPU这个东西,相当于这些设备的大脑,它是什么东西做的我并不很在乎,我更在乎的是如何使用它,这对程序开发、优化、调试、移植才是有意义的。很多人对CPU有误解,认为它非常复杂,其实如果从研制的角度考虑,确实非常复杂,但是立足于了解它的运行机制,还不是很难。
2.2 CPU的那些破事
前边提到过冯·诺依曼体系结构定义了计算机包括了些什么,一般我们讲冯·诺依曼体系结构中定义的运算器和控制器统称为CPU,这也就告诉了我们CPU至少包括两个部分: - [x] Processing Unit(运算处理单元),简称PU - [x] Architectual State(架构状态单元),简称AS
PU就是运算器,一般就是执行运算,比如算数运算加减乘除等等。AS就是控制器,执行一些逻辑和调度方面的操作,比如控制内存访问等。
好了,聊到这里,我们开始说说CPU的那些知道了对编程无用,不知道还觉得不行的知识。比如说多核、超线程等等……
先从简单单核谈起,一般一块传统意义的单核CPU上会有一个PU、一个AS。这就好像一个小饭馆(单核CPU),夫妻店,老板兼大厨负责厨房炒菜,老板娘兼服务员点单。这时,来了一个客人,首先,走到老板娘的收银台前,看菜单准备点单。差不多5分钟后,客人点完了一份盖浇饭。老板娘抄好了单,递给了在后厨的老公。老公开始炒菜。在这个例子中,老板娘可以理解成AS,老板/大厨可以理解称PU(实际干活的)。
然后我们看多核,这里说的多核,是多个物理核,比如i3的2核,i5的4核。这种架构下,每一个物理核都有一个PU和一个AS。所以。对于i3来说,就有一共两个PU,两个AS。对于i5来说,就有就是4个PU,4个AS。接上小饭馆的例子,接上面小饭馆的列子,对于5、6个客人可能还能忙的过来。但是如果一下子来16个客人,估计就要排队了。如果再告诉夫妻二人,每10分种就有16个新客人过来点单,那么估计后来的客人只能等待了。这时,我们就需要一个更大的饭店(多核CPU)。有4个服务生、4个大厨。4个服务生同时点单,4个大厨同时做饭(1号服务生专给1号大厨下单,2号服务生专给2号大厨下单,以此类推)。这样相比小饭馆一个老板娘、一个大厨,一个客人队列,快乐许多。这里成了4个客人队列,效率比小饭馆提高4倍。16个客人,平均分配成4个队列,每个队列就只有4个客人了,情况好了很多。这还是比较容易理解的。
然后我们继续,超线程技术。超线程一般指的是硬件架构方面通过调整AS而模拟出来的“逻辑核"。简单点说,超线程就是一个物理核里面,有两个AS,一个PU。两个AS共享一个PU。具体为什么这么做?我们回去看大饭店。4个服务生,4个大厨,4个队列。会不会效率问题?当然有!每个客人都有看单选单的时间,不能保证每个客人都瞬间点单不浪费时间,有的客人难免会问东问西,点一个菜可能需要15分钟。而假设大厨平均炒一个菜需要要10分种。那剩下的那5分钟呢?大厨在厨房闲着没事干。时间全被服务生为客人点菜这个环节给浪费掉了。那有没有解决方法?当然有,就是增加服务生。这时候,我们给每个大厨多增加1个服务生,从1个服务生变成了2个服务生(AS),服务生1A和服务生1B开2个队列,同时给一个大厨(PU)下单。这样,当出现服务生1A的客人15分钟单子都没有下完的情况下,1B的客人单子很有可能3分钟下好送给大厨了(PU),这样大厨就不会站在厨房傻等1A客人的订单。这样,最大限度地榨干大厨的劳动力。而对于CPU来说,最大限度的提高了CPU的使用率,减少了CPU的(IDLE)空闲时间。有的时候,真不能怪大厨(PU)不卖力,而是你服务生(AS)点单太慢。
除此之外CPU中还有一个时间片的概念。时间片就是CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,也就是该线程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时线程还在运行,则CPU将被剥夺并分配给另一个线程。如果线程在时间片结束前结束,则CPU立即切换。而不会造成CPU资源浪费。在宏观上看:我们可以同时打开多个程序,每个程序都可以正常、同时运行。但在微观上:由于引入了时间片,每个程序是轮流轮流运行的,只是因为时间片分配的时间太短,我们根本察觉不到。这就相当于饭店给增加了一条规定:“每个服务员只能在一桌客人处点单1分钟,若未点完,请等待。”由此服务生可以每1分钟点单1张桌子,每个服务生多开几个队列也不成问题。再多说一句,时间片的计量单位吧,称为时钟信号频率,一般以赫兹(Hz)来表示,现在我们看到CPU上标识的2。GHz指的就是时钟信号频率,1GHz=10亿次/秒。也就是说一秒钟内,CPU会划分10亿个时间片。这个时钟信号频率越高,CPU的运行速度就越快。
这里提到一个线程的概念,这个概念后边会深入挖掘一下。这里不多说。
CPU的物理结构设计上大致如此,可是远远没有我们说的这么简单。后面我们要谈论的CPU,往往是从逻辑上看的,或者是说,我们更关心的是用CPU的时候是如何使用的。
2.3 再拆CPU
CPU内部出了上边提到的部分,还有另外的重要组成部分。就是寄存器,它是用来暂时存放指令、数据等处理对象的,简单点说,寄存器里存储的是要处理的内容。寄存器可以看作是内存的一种,是距离CPU最近的内存。
一般我们所说的32位CPU或者64位CPU指的就是寄存器的二进制位(bit,比特位)有多少个,64位CPU的寄存器就有64个比特位。
根据CPU的种类和厂商不同,一个CPU内部寄存器的数量也不同。CPU工作时,控制器(也就是上边提到的AS)负责把内存上的内容读入寄存器,并根据读到的内容来运行,以控制整个计算机。运算器负责计算从内存读入寄存器的数据。时钟负责发出记时间信号。如果回到大饭店的例子当中,如何看待寄存器呢?很简单,每一个服务员都会有一个点菜用的便签本(什么破饭店,太他妈古老了),这个便签本就是我们所说的寄存器。
到此为止,我们大概就把CPU的主要结构都说明了一下具体到每个部分里边具体包括什么,不在我们的讨论范围之内。
我们来聊聊CPU对程序了些什么?或者程序对CPU做了些什么?
当程序启动后,根据时间片,控制器会把这一时间片内需要运行的内容读入寄存器。通过这些内容加以解释和运行,运算器就会根对其进行计算,控制器会根据运算器的结果来控制计算机。刚刚接触CPU基本结构的时候,都会对“控制”一此产生些许的敬畏,其实所谓的“控制”也不必想像的太复杂,它指的就是除了计算和存储以外的所有处理工作,比如在显示器上显示,从键盘上获得你敲击的字符等等内容都属于“控制”一词的范畴。
本文暂时没有评论,来添加一个吧(●'◡'●)