00:00
好的,那首先欢迎各位朋友来到铃声教育啊,我是维克。接下来我们主要是学习这个Linux内核里面的液与块的一个缓存。那么这节课的话呢,我们主要是从这三个点进行学习啊。那首先我们来看第一个。这个快返程和液返程啊,它在操作过程当中我们都知道啊。它性能和效率的话呢,它是内核开发当中两个非常重要的一个因素。那么内核呢,它不仅依赖于什么,依赖于整体的这个架构啊。来规范我们各个子模块的一些相互交互。那么还需要什么呢?还需要有个功能啊。干什么呢?缓冲或者是缓程这个框架来提升这个系统的一个速度,就相当于我们CPU里面有一级缓存,二级仿尘药啊,道理是道理是一样的。
01:00
好,那么这个问题啊,我们等一下要进行进一步的研究。但是我们要知道。这个。缓程和缓冲,它是利用什么呢?利用一部分的这个系统物理内存啊。它能够确保什么呢?确保那些最重要的啊,最经常使使用的一些快设备数据啊,在什么呢?在操作的时候可以直接什么直接从主城里面啊进行获取。它不需要从什么呢?从一些低速设备来获取。所以物理内存它还用于什么呢?存储,从这个快设备读取这个数据,这点大家要搞清楚啊。那么当然啊,这项工作操作过程当中是非常的透明,那么应用程序呢,它不会什么呢?不会也不能注意到这个数据来源这方面的差别,所以说数据啊,它并非什么呢,每一次修改之后就立即把它写回就这个意思,所以而且是什么,而且在一定的时间间隔之后,他才进行学费。
02:02
所以时间间隔长度,它主要是取决于什么呢?主要是取决于多种因素啊,你比如空闲的物理内存的一个什么呢?数量啊,或者物理内存数据的一个利用率啊等等。那么单个写请求他会被收集起来,是不是并且打包进行啊?那么总体来讲还在这个什么呢?花费时间是比较少。所以说啊,言辞写操作在总体上它可以改善什么呢啊。这个系统的一个性能。但是我们知道。返程也有一些什么,也许一些负面的这一个啊效果为什么呢。因为我们都知道,就是说内核我们应用的时候必须要什么,必须要非常的谨慎啊。那么你比如说物理内存的这个容量啊,它比这个快设备要小很多。啊,所以说他只能什么呢?只能返程仔细我们挑选那些啊,核心要用到的这个部分数据。
03:08
另外一个就是说它用于缓存的内存期呢,啊,不能分给普通内存这个应用程序数据。这样的话主要是为了什么?为了减少这些实际上可用的一个什么物理内存容量。那第三个就是说,如果系统崩溃了,是不是,那这个缓存包含的这些数据啊。啊,他可能没有什么没有啊,写回到什么底层的一个快设备,所以说这样的话,它可能造成什么,造成数据不能恢复。他就这么个意思啊,所以我们一定要搞清楚这个观点是不是。那么这个缓存它是液交换和夜什么呢?操作的一个什么逆操作,就是说尽管我们这个缓存它牺牲了这个物理内存。而且实现什么,实现这个液交换的时候啊,我们用低速的这个快设备是不是来代替什么代替这个物理内存。
04:06
他可以做到这一点是不是。好,那现在我们来看一下内核,它这个快设备有两种是不是,那现在我们来看第一个。Linux内核是吧,为什么呢?为我们这个快设备。提供什么呢?提供两种的一个。通用缓存的这个方案。哪两种呢?第一种就是我们所讲的一个什么一返程,我们叫做什么配。Page,这是第一个。另外一个呢,是快反船。快缓存是什么B?B catch。啊,这两个啊。什么意思?它原因非常简单。如果你是这个什么呢?一方程。一缓程它是以什么缓存?它是针对什么呢?是针对液为单位的所有操作,叫做一反程。
05:03
那后面这个是同样道理的,后面这个是什么呢?是快缓存,快缓存它就是以什么,就是以快为什么操作单位。快位操作单位。啊,就这么个意思是不是,所以说在什么呢,你比如这个啊。一方程。耶,返程的话就是说。因为什么呢?因为我们考虑一些啊,系统上的一些特殊结构,包括一些液的长度啊啊。等等啊,或者一些内存映射技术等等。那么主要是什么呢?你看因为什么,因为其他类型这个比如文件访问,它也是基于什么,也是基于内核的一种技术实现。所以说这个一返程,实际上它就是负责快设备的一个什么大部分的返程工作啊。那还有一个就是。块返程。快缓存就是说我们在进行IO操作的时候,那你存起来单位设备啊,各个块是不是,而不是整个啊内存页,那么尽管这个页的长度呢,对所有的文件系统都是相同,但是块的长度。
06:12
它取决一些特定的文件系统设置的,所以快缓存它就必须,什么呢?能够处理不同长度的快,就这个意思,它是通过这两方面。那另外一个是什么呢?另外一个是一返程的结构。那么叶缓存结构是什么意思,就是说啊,叶缓存处理的这个内存液啊,就是你这个虚拟内存和物理内存的,根据什么呢?根据液啊进行划分为比较小的一个单位。这个不仅能够使内核啊更加容易什么呢?啊操作比较大的一个地址空间,比如什么掉页,包括加载,比如按照需要进行加载,还有内存映射是不是,所以说这个一缓存任务是干什么的。对不对。那现在我们来看第二个是不是。这个叶啊。
07:00
啊,一返程的一个任务是不是。嗯,它在于什么呢?在于你比如啊获得是吧。我们获得什么呢?我们获得一些物理内层液,就这个意思啊。以加速上来。加速在快设备上我们按照什么,按照业为单位来执行的一些相关操作。执行的这个操作就这么个意思是不是。大家理解啊。这是我们所讲的一个一返程是吧。一返程的运作方式。它是对什么的,应用程序是透明的。那么应用呢,它无法去了解我们这个底层呢,就是了解到底是啊。在以快设备之间交付还是以内存交付这两种情况,所以说啊。我们要通过什么呢?一个是通过这个read是吧。
08:00
还有一个什么呢。通过这个系统调用啊。他们的结果是什么?是相同的?就这么个意思。所以说啊,很自然就是说对内核来讲。内核来讲。就是说你这个啊,情况多少它有一些不一样,但是它为了什么呢?为了支持这个缓存啊,页的一个使用,那就必须在代码各个部分呢,不同进行加入这个啊。标注是不是跟这个一返程进行进一步交付。那么在叶反程搜索一些叶所花的时间,它是什么?必须是什么最小化?确保什么,确保返程失效的一个什么呢?代价尽可能呢,就是降到最低。因为什么?因为我们在返程失效的时候。它进行什么进行搜索计算时间上啊,它可能会被一些浪费,是不是,所以你返程设计的一个关键方面,它就是什么,就对返程进行什么高效的组织。
09:02
他就这个意思啊。所以我们后面就提到了一个问题,就是说从大量数据的集合这个一仿真当中,我们可以快速啊。取单个数据啊。单个数据元素就是我们所讲E的一个问题啊,它并不是Linux内核特有的。他对这个啊,信息技术的所有领域当中都是一个什么呢?共同的一个问题。那么在这个发展过程当中啊。它延伸出很多的一个数据结构啊。那么你看数数据结构是非常流行,索尼那就采用什么呢?采用这种结构是不是来管理这个叶方程啊?包含了一个叶,我们叫什么叫奇数数,就这个意思啊。所以说我们数据结构里面。看它就有一个什么呢,有个数啊,数数据结构啊。数数结构的话,所以说这个Linux它就采用什么呢,采用这种。数据结构来管理什么呢?管理我们这个一缓程当中所包含的一个什么耶,是不是啊,这时候我们就称为什么呀,称为这个极数数啊,就这么个意思是不是。
10:11
就是。它是由这个来组成。好,那么现在我们大家要注意了。我们只要什么呢?现在我们搞清楚这个相关的。内容之后,那后面我们接着就来下一个是不是。改下啊。那下一个是什么呢?下一个我们看一个图形,是不是看一个图形啊。其实数我们今天讲了树,树的根,它是有一个简单的事物结构来描述,是不是?所以说。其中它包含了什么呢?树的高度啊,是不是和一个指针?那么它给指向组成数的第几个啊,第一个节点的那个数据结构,就这个意思,所以说我们节点它本质上它是数组是不是,所以说我们也可以通过一些啊内核野马的实际进行进一步来完成。
11:10
这是一个问题啊,还有一个是,还有一个就是我们所讲的第三个。第三个是什么?是回血?回写什么?回写修改数据。回写修改数据是什么意思?它是由于什么呢?由于这个页缓存的一个什么存在,对不对,所以我们写操作,它不是直接对什么对快设备进行是吧。而是什么?而是在这个内存当中进行的。所以他修改这个什么呢?他修改数据,他首先要什么呢?首先要被什么要被收集起来。就这个意思,然后就被什么,然后就被传输到什么呢?传输到更低的一个内核层里面,所以说啊,在那里的话,它可以写操作,还可以写什么来进行进一步优化。
12:05
主要是完成什么呢?啊,这个利用各个设备啊,机体的功能,它就是做这个事情是不是。大家要搞清楚这点就可。还有就是说我们也可以什么呢,也缓存,它最少的写法也是很少,但是说啊。有的时候呢,这个突然需要跟底层存储介这个介质设备是不是进行平繁的一个同步,所以我们有一种叫做什么叫做pd flash啊。第二种运作模式,还有一种就提供相关的系统调用啊。还有就是内核的一个什么呢?啊,守护进程在后台去执行,就pd flash啊。通过这个去完成。啊,这就是我们刚才讲的一个什么呢?叶相关的。那另外一个是什么呢?另外一个就是我们所讲的一个。快返程的一个结构是不是。那么快缓存这个结构啊,要注意啊,它是怎么一回事。
13:03
这是我们第三第四个了啊。第四个。快返程的一个结构什么意思?在Linux内核当中啊。并非总是使用业务方法。来承担这个返程要注意啊,就是说在什么呢,在Linux这个内核当中是吧。你并非是什么呢?并非你总是什么呢,总是使用这个一的方法。来什么呢?来承担这个什么返程任务,就这个意思。所以内核我们在一些老的版本当中,对不对,它可以什么呢?可以只包含那个快缓存。那么快缓存是用来加速什么呢?要注意啊,这个快缓存。它是来什么,用来加速这个。文件操作和提高什么呢?
14:00
提高系统的一个性能。就这么个意思。所以说。这些操作是不是来自于这个底层快设备,就是快返程的内核啊?内存里面的一个什么缓冲区,那么可以加速的读写操作是不是,比如说FS里面有pd flash啊,buff.c是吧,OK。嗯。啊,这位朋友是吧,就是说啊,学了这个课程可以做驱动开发嘛,啊,你就说首先你具备嵌入式相关的,你再学这个内核,做做这个开发商家,那是没问题的是吧。啊,这就是我们要了解的啊,但是我们知道。这个快返程啊,大家大家们注意,就说你快返程。在结构上,它有两部分组成,就这么个意思,所以说。缓冲区。它用作什么呢?小型的一个数据传输,就是说一般它所涉及的一个什么数据量。跟什么呢,跟快长度啊,就比较相似,就说你文件系统来处理什么呢?处理元数据的时候,它通常会什么,会使用一个什么类的一个方法。
15:08
而且这些裸数据呢,在传输过程当中也是按页进行的,而且缓冲器实现也是基于什么页缓存。所以说我们这里提了一个什么快方程算。快缓存它在什么呢?在结构上有什么?有两个部分。啊,组成是吧。哎,哪两个部分组成的,第一个是反冲的一个头部。是不是?就是我们所讲什么呢B。Head,这是第一个。啊,另外一个什么呢,另外一个要注意啊,除此以外就是有什么呢,有用这个数据啊,就保存在什么呢。专。分配的一个页当中。那么这些液。也可能是什么呢?可能同时在什么同时在在于什么呢?同时存在了。
16:01
同时。存在于这个叶缓存。啊,约访程当中就这么个意思是不是。大家注意啊,所以说液对不对,这个液跟这个返程之间。它有一个什么呢?有一个链接关系。大家可以看到啊。那现在我们就来看一下啊。好,接下来我们看。这是什么呢?这是这个叶啊。第五是。啊叶跟缓冲之间。它的一个什么呢?它的一个链接关系如下算关系啊。画一个图形是吧。你比如啊,这个数据跟页是不是。嗯,比如叶针啊,在操作过程当中,它是怎么进行完成的呢。
17:11
接下来我们看第二个。第三个。第四个。好,这个我们把它叫做这个什么。叶。可以了是吧。好,那么这个液针啊,然后呢,它通过缓冲器的头部看到没有。那你的缓冲器头部可以通过这个来存储。比如第一个。第二个。第三个。第十个。
18:03
那么他们之间是通过这个什么呢?链表方式进行存储。这一块。这个是什么结构啊,这是buff。B就这么个意思啊。大小。还有什么呢?还有就是说你这个液针跟什么呢?跟BD里面的这个数据啊,它一一对应关系,看到没有。这个我们就搞定了啊。
19:03
就这个部分叶针,它是这个部分啊。颜色我给它起的不一样是吧。但是说你这个啊。上面这个。你这个是黄色是吧。然后下面这些呢。你改一下这个填充颜色就可以了,这个线的颜色你看。他们这些之间的关系,我们就全部解决了。这能够使的叶啊更新型进一步的小。因为什么?因为缓冲区它是由什么512个字节组成,要注意啊,缓冲区是不是。
20:05
缓冲区。缓冲区,它是有。枝少多少?512个什么枝节组成对不对?行,但是每一页它最多呢,它包含什么呢?包含我们经常讲叫做什么,包含这个马克斯下划线buff。票里面的什么呀。配几个这个缓冲区,就这个意思啊,所以注意啊,这这个常数。我们定义为什么定义为这个叶长度的一个函数?很怕,主要是做这个东西。好,那么这个叶长度一般我们直接什么呢?直接除这个什么,除512就可以了,除512,但是还知道什么,就说当然啊。在应用程序啊,就是在应用程序访问快的时候。那使用的是快。
21:00
考试页要搞清楚啊,所以我们读写这个文件系统超级快,它就是一个实例了是不是。要注意啊,就是什么意思呢,他思路就说啊。当怎呢,当有这个应用程序啊,在访问。这块设备的时候是不是。那么使用的什么呢?使用的是快,而不是什么,不是叶。啊,你比如读取什么,读取文件系统的一个什么。超级快。它就是一个什么,就是一个实例,就这么简单啊。那么一个独立的快缓存啊。它用于加速啊这一类的相关问题。诶,那你当时你这个快反船。它硬座独立于什么呢?业返程就这个意思啊。而不是建立它的上面。啊,要注意啊,就是快返程。它的一个什么呢?它的一个硬座,它独立于什么呢?独立于这个叶方船。而不是啊。
22:00
在什么呢?在其上面进行进一步建立的,所以说缓冲区的这个缓冲徒步的一个数据结构。这个极情啊,它在什么?在一个长度恒定的数组当中。那么各个数组项,它是各个数组按照项啊,各个数组是不是像按照什么呢?按照这种方式管理,比如按照LRU,就是最近最少使用方式来管理。所以在一个数组项当中啊,我们用过之后,那么它的缩影值就是为零了。后面我们可以对它进行进一步来研究是吧。那我们管理层呢,要注意啊。你比如你管理的这个和查找这个缓存页,是不是我们可以从大量的这个数据的集合当中能够快速的啊。进行什么呢?获取单个数据的一个元素。并不是Linux啊,专门有个激素激素叶是不是。刚刚这个问题我们已经啊。
23:01
解决了是不是。快,缓冲结构我们也弄清楚了。哎,框完乘这几个弄清楚之后呢,那接下来我们就来看下一个了,是不是。下一个是什么,下一个就是我们第二个问题啊。第二问题是什么?地址空间的一个源码解读。地址空间是不是就是说。Linux在整个设计过程当中,就是你不管你是缓程是由什么面向这个缓冲区。还是转为这个什么面向叶。说跟以前的版本相比的话,那么它将能够反射数据结构。跟这个掩码进行把它连接起来。那下面看第一个是不是。什么意思呢?就是地址空间对不对。啊,地址空间的一个。地址空间的一个什么。分配到什么?分配到每一个地址空间。
24:01
那么这些页。这些页的内容啊。可以什么呢?可以由用户进程。或者是内核本身使用各种各样的啊这个方式来操作。这些数据,它就表示这个缓存内容。这是一个点。要要搞清楚啊。什么意思呢?就说地址空间。就是地址空间。他这个什么呀。地址空间页分配到每个地子空间,是不是,那么这些页。他的一个数据内容。是吧?啊,书籍内容它可以有什么呢。可有用户进程。或者是内核本身啊。本身什么呢?本身使用啊。就是啊。各式各样的,就是各种。各样的一个什么方法来。
25:00
操作就这意思,是不是还有一个什么,还有一个就是你针对什么,就是你后备存储器。你后备存储器。它指定的什么,指定的填充地址空间当中这个页的一个什么数据的一个来源,就这个意思,你看。地址空间。它关联什么,关联处理器的一个虚拟地址嘛,就这个意思啊,比如这个地址空间。地址空间。对不对,它就关联到什么,关联到处理器的一个什么。处理器的一个虚拟地址空间。就这意思啊,是不是,它是由什么呢?它是有处理器啊,在虚拟内存当中。管理什么?管理一个区域?啊到什么到盐设备啊。颜设备上对应位置之间。位置之间的一个什么。一个映射是不是,但是要注意啊。
26:03
这个颜设备。对不对。颜设备什么意思?颜设备就是这个使用的一个什么。原设备就使用快设备。就这么简单啊,大家注意这一点就行了。那么你看啊,这个地址空间,它是专门由数据结构来来来来来进行操作的,你看啊。大家注意看啊。第二个是吧,第二个就是说我们要掌握什么呢?我们要掌握这个地址空间的一个什么。地址空间的一个数据结构。啊,掩码数据结构是不是。在哪里呢?打开内核掩码啊,双击这里算。它弹出来是。你看啊。
27:01
能找到一个什么呀。Cloud。嗯,下面啊。fs.h。fs.h下面就有一个什么呢,有个这么一个啊。这是文件操作。空间。超级快操作。CTRLF啊。有个ADR。Address下划线。的结构,看到没有?
28:00
现在我们就发现这个问题,看到没有?嗯,它的每个成员是不是相关的丁啊。全部告诉我们,你看我就挑出什么。我就挑出几个核心点,你比这个。你看I no这个节点的一个host上。Host这个成员。它主要是做什么呢?就是相当于所有者啊,它就是什么呢?就是I knowd对不对啊,或者它是快设备。下面这一个什么呀。下面这个你看它是一个什么。下面这个成岩,比如嗯,有个page,我们找几个核心点啊。Flag。啊,格斯是什么呢?
29:01
Flags,它是一个错误标志啊。就是错误标志位啊,跟什么呢?跟gfp的一个什么。野马。就这么简单,三。好,除此以外它还有什么呢?比如address space,它有个。埋屏操作是不是。除此之外还有一些回血啊,是不是你比如这个。Private是不是private list这个成员?啊,List是什么?是设备的一个什么读操作是不是。大家。啊,要注意这个点就行了啊。嗯,基本上。这些核心成员啊,我们全部都给它整出来了,是不是。啊,你比如这个什么呀,如果你要看这个,你比如这个log是不是,这个是做什么NR这个pages是不是。NR pages在这里它主是表示什么?
30:01
它是什么?是返程?返程页的一个什么总数保存在什么呀。保存在啊。Pages。整个计数器变量当中。就这么一回事,是不是?后面有一个什么,有这个没有。这里面有一个你看啊。专门有一个。Page。这个看到没有是吧。那么他这个成员。它是指向什么呢?指向结构的一个指针对不对。那这个结构指针就是此结构是吧。它就包含什么。包含一组函数指针。对不对,它指向用于什么,用于处理这个地址空间的一些什么特别的一个操作。他就这么个意思啊。
31:03
就这么干。好。除此以外。你看啊,还有一个什么,还有一个你比如啊相关这个block device information啊,啊这些相关。它有个设备嘛,就是后备存储器,是不是就是后备存储器,它只跟我们的地址空间,外部设备进行关联的,就这个地方你看啊。Black device。我们来看这个。啊,就这么干。啊,这就是我们就全部啊就解决了是不是。好解决完之后,嗯,我们来看啊。
32:02
还有什么呢,你比如说低子空间。它跟什么,跟其他地质空间啊,及其跟内核一些主要的数据结构,它是一个什么样的关系。大家一定要摸明白是不是?这是刚才我们讲的第二个。那现在我们就来看第三个。啊,第三个。第三个啊,这个地址空间。地址空间及其什么呢?和这个内核啊。和这个Linux内核。它的一个什么,其他主要数据结构和一些什么呢?和一些子系统的一个什么关联啊。那么具体有哪些呢?大家要注意这个相关性的问题啊。
33:16
我们来看一下。好,这个问题是不是我们来看一下啊。怎么做?对不对。那首先我们来看这个地方啊。这个地方比较小,那现在咱们就把它改化一点是吧。改为这个。180。下面这个这个宽度啊。高度,我们可以把它改为5000。就可以了,你看现在整体这个啊。这个图我们就画好了是吧。把它移动起来啊。
34:03
这个西线是。OK。好,那现在我们来看一下。那现在是什么呢?先就说首先第一个我们有一个什么,比如这个超级快。超级快。超级快跟什么?跟你们后背存出去快设备相关是吧?他就这么一个关系啊。这是这个山。好,另外一个就是对应什么呢?对应那个I know的它那个节点。节点它跟对应的一个什么,比如这个地址空间。地址。空间是吧,地质空间它就专门通过一棵树进行进一步管理。
35:04
他就这么个意思。好,接着。接着什么呢?接着我们到这儿来。它有一个什么,有个存储设备是吧,你看啊。你比如这个这个我们就是快设备了。快设备啊。OK。快设备,快设备呢,你这个存储空间里面,它有一个什么。一个后备存储器。这个后背。存储器的一个什么。信息。显重。后背呈土气。
36:02
那现在我们把这个播音拿起来。我们把这个归纳起来之后呢,你就会发现是吧。现在这一块。当中的这个部分。它对应什么呢?它对你比如这个。你比如这个地址空间,它是怎么进行完成的啊。哎,你抄几块跟哪个呢?跟这个啊。快设备是不是?那你这这个部分啊,快设备里面,你比如定你的地址空间,你跟这个什么跟后备存储器啊。是吧,就这么一个思路啊。然后呢,你这两者之间,你看I know跟地址空间。然后你们这两个它是一个什么,是一个双向的操作。啊,你如何进行同步,就是一读或者页缓存。就这么个意思。
37:01
看大家要注意这个关联关系啊。嗯,差不多了。好,下面,下面它是一个什么?是一个奇数数。奇数数我们叫什么?我们在数据结构啊,这个课程当中啊。我们已经学过了,是不是啊。OK,我们看一下啊。激素数,那比如这个。现在咱们所看到这款啊。第一个是。第二个。第三个。是吧,下面就对了,每一个啊。节点。
38:17
第一个,第二个。第三个。好,第四个。下面这些是叶,要注意下面这些是叶。页,我就用相同这个颜色进行进步填充啊。哎,上面是奇数数,你比如它从这一边是吧。连到这来是不是?这个。它也是一样是吧。
39:00
然后你比如它这个部分跟这个脸看到没有。差不多了。那现在下面这地方。我们所看到的这个。部分。现在我用框框来框起来,是不是,那我把它框起来的话。
40:02
它就是一个什么呢?它就是一个叶。这个叶啊。这地方它是叶。好一。有很多个是吧。这一款啊。好,再往上面。存储的这个部分是吧。它是什么?是我们所讲的一个激素啊,激素素。激素术啊。
41:04
可以了是吧。它这个部分它可以同步啊。他跟这个。进行进一步实现啊。它是一个什么,是一个双向就相当于什么呀。
42:00
相当的地方,它就是一读一读操作啊。比如同步。啊,实现同步。那么它实现同步的话呢,现在咱们所看到这个框框是不是这个框框就是一缓存。红色这里。你看没有。好,这个部分。我们已经明确啊。搞好了,是不是一夜返程就可以了?那基本上全部我们都搞定了啊。你这个地址空间,你要跟这个连到一块。啊,就这么一个思路啊。好,全部存储起来是吧。现在呢,我就将这个图啊放到我们这边来。
43:06
这个超级快。啊,存储设备快设备。后备存储器。地址空间。你看现在我们这个就就做好了啊。好,做好之后,我就将这个放到我们这个笔记当中。那么呢,大家在学的过程当中有任何问题,是不是我们大家再进行进一步的沟通啊?与交流是吧,所以今天晚上。我给大家所讲解内容啊,并不是很多,主要呢,一个是快设备是不是啊,一个是啊,就是页缓存了。啊跟什么呢?跟这个啊快方程它们的个数结构之间的一个关系,我们就全部讲完了,那么我们下一次课啊,再继续讲解别内容。
44:05
啊,各位朋友啊,那我们就再见。
我来说两句