00:00
好。色标基本组成包括哪些个呢?包括这些第一个呢叫PC,其实呢,这个PC啊,那个好,英特尔CPU呢,称之为csip啊呃,指令寄存器,就是你可以认为它叫,它全称呢叫program。Program program program有没有,有没有意义,Program有没有意义,忘了。Program counter这个怎么拼来着?Program program program。OK,好,Program counter,呃,叫程序计数器,这是一个逻辑上的称呼啊,它在那个,呃,各种CPU里面呢,都有对应的不同的寄存器,像英特尔的话可以对应,认为它对应csip就可以了。
01:16
这个是什么呢?记录当前指令地址好,为什么要记录当前指令地址啊,内存啊,就是一块特别特别特别大个的字节数组。就是个数组。这个位置叫零,这个位置叫一,这个位置叫二,叫三叫四,一直排,排到好多1万汪汪好大一串数字就是一个数字,好这个指令,这条指令位于内存中什么位置?先听我说一句啊,我跟你说,我在讲JVM的时候,你应该要理解JVM相当于什么。
02:01
相当于Java的模拟的硬件计算机。OK,所以JVM就是一台小计算机,所以我讲完JVM其实有好多的那个底层的原理,它都相通的啊。你这么一讲,你应该明白内存地址,这是个地址,好,这个地址存哪存到PC里面,因为大家你想想看大哥。我下一步指令要执行哪条指令?你得告诉我那个指令的地址在哪里吧,不然我去哪儿找啊?所以这里是进度指令地址的,注意这个指令地址,执行完这条指令之后,它会切换成下一条指令地址,那有同学可能会说,老师,我哪知道下一条指令到底是在地址是在哪儿啊?是让他加一吗?来,你们想想,我执行完一条地址指令之后。在执行下一条指令地址的时候,是不是让这个简单的。
03:02
Counter加一。对,这是不一定的,因为指令的长度不是固定的,如果指令长度是固定的,那就简单了,你加个一就行了,但是指令长度不是固定的,所以得看当前指令占了多少个字节,如果占了五个,我就要加个五,如果要占了三个,我就要加个三。好吧,啊,这就程程序计数器干的事,然另外一个呢,叫寄存器,叫registers,寄存器的数量非常多,暂时存储。计算需要用到的。注意,寄存器就算器数量非常多,如果你学汇编的话,你必须得了解每一个寄存器到底用来干什么用的。呃,现在几十个存器啊,有的CPU会达到上百个寄存器。
04:08
如果你写汇编的人,你得了解每一个寄存到底有什么用,我记得我们最开始学汇编的时候,不是八个就是16个,只有只有不是八个,要不就是16个寄存器,现在的寄存器数量多了去了啊,现在不太清楚到底有多少,我我我们最开始那会儿啊,就只有我记得是16个计算器。就只有16个啊,当然有一些特别入门级的CPU只就只有八个寄存器,呃,寄存器这概念呢,其实也非常非常的简单,就是说把那个数字读进来,先存到由,由于我要做计算嘛,所以我肯定得存在某个地方来做计算,我不能放到内存里,内存对我CPU来说太远了,太慢了,所以我放在我CPU内部,好,这个就是暂时存放数据用的计算机,从内存里头把数据拷贝一份过来。拷贝拷贝会过了。
05:00
然后我做计算用,算完了之后再给它输出回去,好这个寄存器。OK,这些东西的数量非常多啊,然后每一个还有不同的作用,比如说像英特尔里面的这种存,呃指令地址的,它也叫寄存器啊。IP嘛,是吧。CS呢,是多少地址也也也得要存上,就是各种各样的我们内部CPU用到的一些临时数据啊,这些东西都放在寄存器里,所以寄存器对于计算单元来说,对于CPU来说,它就是它的一等公民。是离CPU最近的,是存取速度最快的,因为我拿出来之后就马上要做计算的。啊,这个叫寄存器,刚我看刚才有同学说老师是八个还是八位,注意我说的是八个。现在的寄存器64位的。一个寄存器装64位的,66 64位数字没有问题,最开始的时候,你比如说寄存器里有常用的AXBX这些数据的寄存器,呃。
06:10
AXBX,每个计算器起了个名嘛,一个存储单元起了个名。这个在硬件上叫锁存器啊,这个这个这就不多说了,AXBXCXDX好起了个名,这种的就叫八位的啊,Sorry,这种的是16位的,还是多少16位的。那么32位的前面加了个EEXEBX,好,这种的就是32位的。64位的前面加r rax r BX,好,这种就是64位,这是英特尔CPU的叫法,当然你就知道它有什么,各种各样的寄存器就行了,Axbx cx DX,各种各样的寄存器啊,至于它是几位的,那你前面该加什么加什么。啊,我刚才所说是什么?我刚才所说的是我们那个年代的计算机,我们那个年代计算机只有16个寄存器,听懂了吗?
07:08
就那会儿,如果我没记错,应该是16位或者八位的。现在的计算,计算机有几十个,你们自己去查好几十个,64位计算机也可以当32的用,这是肯定的,当然可以用,你用一半不就行了。基本上对,刚才小白说的非常对啊,就是基本上现在所说的64位的CPU。指的就是你的寄存器。一次性的可以存储60。是的。CPU内部的总线。好,这叫寄存器的基最基本的一个概念,好吧,寄存器,那么在寄存器的基础之上呢,还有一个最核心的单元叫做a Lu,它全称叫什么呢?叫ari me。
08:12
A RI me。The me又拼错了。Arithme me an logic unit叫逻辑运算单元,运算和逻辑单元就是做运算用的,好吧。ARU运算单元就是做算做算运算用的,那么具体要怎么做运算,他的运算是这子的,他运算非常的笨,我给你举个最简单的例子。啊,你比如说你要把二。
09:03
你比如说你要把二和三,它是放到内存里的两个位置,一个二,一个三,你要把这两个数字做一个加法,怎么运算呢?它是这样的,首先把二移到某一个寄存器,比如说AX。把三移到另外一个寄存器,比如说BX。移完了之后。读这条指令,这条指令指令的计算器,你看它叫什么,叫addd,好,A一看你叫addd ADD怎么办?它就会去固定的AX这里面读个数字二,BX里面读个数字二三,然后经过电路的一系列的运算,噼里啪啦,噼里啪噼啪啦,运算完了之后再输出给另外一个寄存器。这个寄存器叫DX。好,最后再把这个DX通过指令写到内存之中的某个位置,这个叫做完成了一次运算。
10:08
OK,刚才讲的这个过程啊,能get到同学老师扣一。计算机系的小伙伴们听起来比较简单,我还是那句话啊,这个课呢,是要讲给咱们转行的,或者对计算机没有最基本的认识的这些小伙伴们听的啊。啊,第二个多少寄存器。Sorry啊,我这个汇编语言好长时间了,那个寄存器的名称不一定对,给大家讲清楚的是基本逻辑过程。如果大家要到底是在哪个计算器里存的数字。打开汇编语言去翻一翻,好吧,Java的站。对微指令啊,Java的站,对你们我看,因为因为有同学是听过GM课的,对不对,Jam课里头呢,讲的是站运算,就两个站。
11:05
JVM里面没有寄存器的概念,但其实啊,作为JVM的它有一个。呃,那个本地变量表你还记得吧,叫本地变量表,那个就相当于JVM的寄存器了啊,就是你任何东西拿出来不放到本地变量表里吗?本地变量表不就是相当于放到寄存器里了,操作数占啊。对,这个是操作数占它占之后呢,会有一个本地变量表对应的,如果你还你你回想一下我讲过的啊,还有印象的话。实际上也是,它就相当于它的寄存器了啊这个意思,呃,只不过呢,这种软的寄存器,它的速度跟那个你在站里面的速度是一样的,没有任何区别,但是硬的不一样,硬的内存器的话,它的速度比内存比你存储数据的这个地方可要快得多得多了。OK,好,其实呢,这里面还有两个单元。
12:06
这两个单元呢,你了解一下。后面其中有一个,我还后面还会讲到两单元分别叫做CU,这叫control unit啊,叫控制单元,控制单元呢是对那些中断信号啊,就是别人的一些中断信号啊,还有其他的一些需要控制的东西做控制,知道有这么回事儿就行了。另外一个呢,我希望你能记住这个面试的时候有的人被问到过一次,问到这是和内存管理相关的,叫做memory management unit啊,这叫做内存管理来源最早的,最早的内存管理全是操系统软件实现的。
13:02
现在。都是硬件加操作系统实现,我讲到内存管理的时候再来说。作为最后的基本组成。作为咱们Java的成员来说,了解这几个基本够了。我再说一遍,里边的各种电路,各种逻辑模块啊,多了多了去了,太多太多了,作为咱们的最基本的来说,先了解这几个。当然还有一个就是我们的catch catch呢,在我呃讲那个GMM的时候啊,讲已经讲过了,所以你是。对catch不太了解的话呢,可以翻回头去看JVM的课程,就是这面JVM里面的JMM那一节,呃,为了保持这个课的完整性,我再稍微给大家复习一下,或者再过一遍。而且呢,它的例子程序我稍微修改了一下,所以我再重新给大家再过一遍,好吧,好,能够继续的同学来给老师扣一。
14:13
OK,我们继续。呃,在这呢,一个基本的小概念就是超线程了,超线程呃,讲过很多次啊,也也比较简单,就是那个也有的时候你们去市面上买CPU,有CPU说我靠,我这CPU叫线程撕裂者,我牛牛刀了,听听上去就特别牛刀啊,我能够进行超线程,嗯,啊,我别人一个核只能运行一个线程啊,我这一个核运行俩线程,四核八线程,两核四线程,这个这个呢,其实特别特别特别特别的简单。哎,这个特别简单的概念,就在于很简单。一个Lu,一个运算单元对应多组寄存器。就行了,平时我们要有一个线程要运行的时候,这个线程相关的一些数据和指令存在,数据存寄存器,指令地址存PC里面。
15:12
这很容易理解。如果这里面只有一组吸尘器和PC。那么我要另外一个线程要运行,我就得得把原来这个线程里面的PC和计算机的值拿出来存到缓存里,存一边放一边。然后把这个新的放进去,哎,我再继续运行,什么时候我要这块时间片够了。你执行够了,把你拿走,把它拿走存一边去。然后再把另外一个线程的再恢复回来,继续运行,这个呢就叫做线程切换,叫做context Switch上下文的切换,Switch现成的上下文切换。
16:00
切换呢,就包括把上一个正在运行的线程里面的寄存器的东西和地址全都存储好,把下一个再放进来。好,这个叫做线程切换。这就是内核线程,这跟内核线程没有半毛钱关系,内核线程是操作系统的概念,是操作系统内核支持线还支持线程,还是不支持线程,那个是操作系统的概念,这个就是CPU,本质上它就执行不同程序的时候是怎么执行的,有一个程序来了,我就执行你一段,把你拿就把你放一边去,然后再另外一个再拿进来,再执行一段时间。中间这个过程就叫做切换。那么大家你可以想象一下,这个切换一定是要消耗我们的汽车资源的。需要消耗我们时间,系统的比较比较效率比较低,那如果说啊,我假如我们有。特别牛的一个CPU,这个CPU是干嘛呢?这个CPU里边啊,能装好多好一次性的装进好多好多线程的,那这个线,那这个效率不就就提高了吗?这是肯定的。
17:05
所以所谓的多线程指的就是什么?所谓的就是几何多线程指的就是什么呢?回头看这个图,我相信都不用我解释你就应该明白了。就是我一次性的可以装俩线程进来。那我们在切换这个线程的时候,我就不需要把原线程拿出去或者怎么样,我没必要,我这个L1单元要想切换线程的时候,嘣直接把头摇过来就行了,把头摇过来就行了。对吧。你。这是你。你原来只有一个老婆?你们屋就能装一个老婆?那你要?要想换人的话,你得把这人请出去,把另外一个人装进来,虽然你有俩,但是你切换起来特别不方便,后来你们家房子大了。
18:00
两室一厅。这样你换起来是不是非常的非常简单,你从这屋走到那屋就换了是吧。这是你。你原来只有一个老公?你要是用想用另外一个老公的话,那你怎么办?你你得把这个切换出去,把他踢走,把另外一个弄进来啊,中间情况不好的话,还容易出问题,俩人容易打架。所以。如果说你两室一厅两层楼。切换起来非常方便,OK,从这屋走到那屋,你就切换了,好,这就是所谓的。单核两线程。四核多四核八线程,两核四线程的概念啊,不知道大家get到没有,OK get到同学给老师扣一啊。OK。这个图呢,我讲过很多次了,在原来课程也讲过,还是那句话啊,为了保持线程的保保持线程,保持课程的完整性,再来简单给大家过一遍。
19:15
刚开始,呃,我们讲这个CPU的层次结构里面,我们并没有讲缓存的结构,缓存为什么会存在缓存,是因为CPU速度太快了。内存的速度太慢了,我要去你里边取数据的话,我取一次我得等半天。我能不能够,你能不能够你的速度稍微加快一点,怎么办?中间加好多层缓存。这个很容易理解,学过一点计算机知识的就容易理解啊,这个缓存呢,就形成了一个缓存的层次结构,呃,这个图我是原。原原,原版照搬的深入业计算机系统的第421页这个图。你要感兴趣可以进去翻一翻啊,一模一样的。好,在这个里面呢,为什么要有缓存,为什么要有缓存?很简单,因为从CPU到不同的部件,它的速度是不一样的。
20:11
如果说你要是到寄存器,就是我们自己家内部的,哎,这就是在我卧室里头,我们家一抽屉拉开就行。这个速度是小于一的。去它里面存取一个数据的话,但是你要是进那个第一层缓存叫L1,也是在我CPU内部的,好大大概就需要一个纳秒,如果是要到L2,大概就是需要三个纳秒,如果到L3的话,大概需要15个纳秒,如果你是是内存取数据,那可就慢了,大概需要80个纳。我们一般说啊,从CPU的最核心的这个速度到内存的话,差不多需要100倍的时间,所以它和内存的速度比是100:1 CPU做100次的运算,内存只能做一次。
21:01
啊,这个概念很简单,正是因为这样,所以才中间加了很多很多这个缓存,我觉得缓存的概念应该不需要我解释了,有需要老师解释缓存概念了吗?有没有?有的话给老师扣二没有就我没有就算了啊,没有你就不要动缓存,非概念非常简单对不对,多存两份。拿的时候呢,我我先找那个最近的拿看有没有,没有的话我就再找那个远一点的,这样来拿。好,缓存有一个最基本的原理。我们先来我们来看这个原理啊,我们先来看这个缓存的这个结构上的物理,物理结构到底什么样,这个图呢。给大家详细的解释了,呃,所谓的L1L3呢,它到底位于什么位置上。看这里。
22:00
外面的这个大方框是一颗CPU,一颗啊一颗CPU。一颗CPU。现在CPU里面有很多核。好,里面比如说有两个核双核CPU,那么这颗CPU有两个核,核一核二。每一个和里面有自己的L1L2。两个盒封装在一颗CPU里面的。共享L3,所以L3级缓存是在CPU里面,当然有的是在那个主板上和这个CPU离得非常近的位置,这个东西的话,你们去查它不太一样,反正总而言之,L1每个核有一个,L2每个核有一个,很多个核共享L3。好和一和二,L1L2L1L2,如果有两颗CPU,那么每颗CPU都有自己的L3。这两颗CPU共享我们的。
23:03
还有这块内存,当然主存呢,有不同的结构,一会儿我给大家讲有。呃。Numa结构,还有numa结构这种东西是会牵扯到我们的垃圾回收器的啊,一会儿一会儿再说。
我来说两句