00:00
好的,那首先啊,欢迎各位朋友来到铃声教育啊,我是威克。接下来啊,我们主要是学习这个Linux内核啊,里面这个啊,页面的一个回收这一块。但是我们所肯的这一本啊,这一本书籍是不是就这个体系啊,Linux内核应该是最难啊,最难的一个啊,技术领域点。那么这个点的话啊,一般的人啊,碰到的话就就回头了,是不是,但是我依然坚持啊,走在这条路上是吧。但说啊,根据啊,我们多年的经验是不是自己总结的啊,然后再结合看一些啊,国外的一些专业书籍啊,工作经验是不是。把今天晚上的课程跟大家进行进一步的分享一下。那我们主要呢啊,内核是处于我们用户空间跟硬件层面中间,这是我们画出来的啊。还有什么呢?还有就是内核空间。
01:02
那么内核空间里面,它所画的你比如什么进程调度啊,啊内存管理啊,网络协议站啊,文件系统啊,字符快设备驱动啊,KVM这一块。那么现在我标出的这个五个颜色是我们这个课程要研究的,研究的这个领域,但是其他这么就不在意研究,是不是,如果大家啊,真的要去研究的话呢?那刚刚我带着大家看了专门有这么一个图形,看到没有?你要你要研究的话啊,大家研究的话呢,那你就根据这个图来了。看知道吧,根据这个图来,你比如内核的一个啊LK是吧,Lkm这个图啊。那么这个图的话,你比如你从什么,从用户空间看到没有,它从这几大接口嘛,你看到没有,从这个系统啊,从这个进程调度,从内存呢啊,从的网络啊等等,你看到没有啊,到我们用户空间到虚拟是桥逻辑,再到什么,再到设备控制这一块啊。
02:00
再到硬件接口,然后最后再到达我们的IO相关的设备,对不对,CPU啊,内存啊,磁盘啊,然后网络控制设备啊等等,你看到WiFi啊,以太网是吧。这个硬盘呢,就分为两种,那么比如什么内存里面有什么MMU啊,DM是吧,CPU里面什么寄存器啊,啊apiic piic的话,这个主要是以什么,以这个叉八六啊这个体系架构为主,是不是比如说中档控制这一块。啊,比如IO这一块的话呢,你比如IO内存呢,PCIUSB啊是吧?嗯,还有个IO point是吧,再往这边的话,比如用户这一块,是不是创新这一块,你看键盘啊,摄像头啊,看到没有,这这这个大家能看得清楚不。诶,各位各位朋友们能看得清楚吗?这里面一个你看有键盘有摄像头是吧,有鼠标对不对,有A。还有我们这个啊,接口卡有一些相关的音频啊等等,它就是这根据这方面进行围绕进行研究的。
03:03
你比如我们进程调度的时候是不是啊,那我就执行什么呢?比如我们创建个进程执行这个SSBRK是不是分配内存,那分配内存你点击进去,它再往下分呢,Sys map是不是map,它只线它差来了是不是,那虚拟内存呢?V ma是吧,V ma相关的。啊,这个一步一步下来啊。好,那么我们进行总结的话,我是这么总结的啊。到目前为止是不是前面我们所学过的啊,根据刚才那个图形。那么我们。对于什么呢?对于这个页面回收啊,这个回血技术的一些相关细节。那么做过开发的啊,各位朋友应该知道,所以说我们应该是什么呢?比如这个液交换子系统。啊,它主要有两个方面,一个是你要掌握这个什么呢?掌握这个交换策略是不是。那么这个策略。它是用于确定啊,哪一些页面啊。
04:03
可以进行啊。从这个物理内存。把它放出是不是,而且同时呢,又不会严重的影响我们这个什么呢啊。内核的一个性啊,内核的一个性能。所以因为什么,因为你这个策略它可以什么可以释放这个叶针。它使得有新的一个内存可用于什么呢?可以用于紧急这个需求使用。所以说有的技术,所以并经常把这个叫什么呢?叫配啊claim。就是页面回收,它这个定义就这么得来了,是不是,所以说啊,所以第一个概念啊,这个页面回收就得来了。页面啊回收。那页面回收是什么意思呢?啊,刚才已经讲了啊。什么意思?非常简单。就是我们用的一个什么呢,就是我们直接什么直接向这个什么向叶啊。向叶这个交换子系统是不是。
05:03
他第二个啊,交子系统的一个什么交换。这个策略是吧,交换策略。其实这里所提到的策略是不是策略呢?它用于什么呢?用于啊决策是不是就是决策了。决策啊。哪一些决策这个哪一些页面对不对,哪一些页可以从什么呢,可以从物理的这个内存呢,进行放出啊。并且是不是啊,同时不会什么呢,不会。降低是不是啊。不会降低我们linu克斯。内核性能。但是这个策略是以释放针为主。就是此策略了是吧。它可以什么呢?紫测液可以释放这个液针。
06:01
释释放这个液针就这个意思是不是。验证的话,所以我们就将这个称为一个什么页面回收,你真正去研究的话,那我们可能就要从这方面去入手了啊。啊,各位朋友说。好,那我们现在啊,大致搞清这个关系之后啊,我们了解一个问题,就是说你这个交换策略算法。在内核当中。它是相当的复杂啊。它不仅是因为我们使用这个交换速度的最大化。而且它定为主要的是什么呢?就各种必须解决的这个特殊情况。是不是你比如些什么?嗯,这个叶交换子系团主要工作是不是啊。等等,有可能你是因为什么呢?SMP系统上这个处理器啊,之间它这个交互而导致的,或者你单处理器上出现这个啊随机操作是不是。
07:00
等等,它都会出问题,所以这个页页面交换,它就必须要搞很多很多东西才能够,才能够深入的去体会是不是。那就是说我们根基什么呢?我根据啊这个什么呢,页面回收的实现是不是啊,我们可以通过啊。通过一个图形架构啊,进行一点描述啊,你看啊。大致给你写一下第二个。就是什么呢?就是我们所讲页面回收啊,它实现的一个什么呢?整体流程啊。整体流程。怎么做啊,那刚刚我们看到这些相关的函数,那在这里的话,我就给大家大致啊发一下是不是这个确实啊。不是那么简单是吧,比如直接回收页面是不是还有一种是啊,通过业交换首付进程来回收是吧,它分为这么几个是不是。比如第一个啊。把这个放大一点是吧。OK。
08:00
啊,现在啊,我们这个就出来了是吧。第一个是吧,第一个的话呢,就是我们TRY啊,TRY下划线是吧。Two到什么呢?到六,那么通过这个函数是吧,它就可以进行进一步操作啊,Sha是不是就往下走了,Sha就往下走了啊。到栅栏了就是。Sha。SHSH什么呢?Zones,等一下,我们看一下野马就知道了啊。好,往到这,往到这边之后呢,那么还有什么还要再往下就到薛可纵。它中间那么左边这种啊,刚才我们所看到这个。他是一个什么?它是一个直接回收。哎,我们要搞清楚啊,我们是一个直接回收是吧,这一块是属于直接回收的页面。
09:00
嗯,这个模块啊。啊,这个模块它是属于直接回收。直接。嗯,直接这个啊,页面回收是不是。嗯,可以了啊。啊,就这一个啊。啊,直接页面回收是吧。好,那么直接面回收流程,那么它会什么通过这个啊,它执行到这边来是吧。这个是直接页面回收。但是呢,另外一种是什么呢?另外一种就是说他通过什么开word,我们这个啊调用操作是不是它其实道理是一样的。全部禁用是吧。
10:01
你看比如我们右边是不是。啊,右边再来一个啊。那他就这么一个流程,你看啊。OK。好,比如说他通过什么呢,Password。Swell。Sweep的。是吧,这个。这是第一个是吧,然后再到什么L。下划线pgd是吧。OK,嗯,他就这么一个操作啊,然后我们再把这个拖过来一点是。好,把这个变宽一点啊。18003。下面这个是5000。
11:01
好可以了是吧。好,那现在我们看到第一个是吧,那么除了第一个之后呢,它还有什么呢?还有第二个啊,你看。多个都可以啊。嗯,差不多了是吧。然后最终是不是右边这一块啊,各位朋友是吧,那么右边这一块是什么呢?它是通过什么就是。通过这个。叶是吧,你看啊,这个叶交换是不是。那么越交换啊。守护进城。夜交换啊,守护进城。就相当于什么呢?就相当于每一个啊,Numa这个节点的一个什么实例化。就这个意思。这他最基本的啊。
12:01
好每一个是吧。他就这么一个流程是吧。就这么做啊,然后呢,他执行这边之后,它就会下面。通过什么,通过下面这个函数啊。哎,下面那个函数就往下执行了,就一步一步往下走是吧,走到来就有一个什么啊。Strike。Active。In active是吧?XT,为什么下划线这个list?就这一个是吧,好接着再往下是不是。干什么呢啊,有个page list。
13:02
嗯,接着有个page list,看到没有?在这么一个流程。基本上的思路就这样,但是它有个什么呢?Checklist active是不是它可以接着什么接着这一篇啊。嗯,它可以留到这边来。它也可以同步。就这么干啊?嗯,差不多了。啊,所以左边是不是这个我们已经解决了是吧。啊,左边是一块啊,大家注意啊。啊,左边是一块是吧。
14:01
右边这里是吧,它又是一块。啊,夜交换的一个什么呀,守护进程。这个的话。那么这个啊。哎,就这么一个思路是吧。然后最后。最终啊。到我们下面这样来算。然后再往下是不是。再往下。大致的啊,它整体这个。啊,模块化思路我们就全部走完了是吧。
15:05
好,全部走完之后啊,你要注意了。那么他执行第一步是不是第一步的时候就是说什么意思呢。啊,Try to try to free pages。就是如果这个内存。它检测到啊,我们这个操作期间。它存在什么呢?存在内存不足的情况下。你直接页面回升,内存不足情况下。它就会调用这么一个函数。那么这个函数呢,会检查我们当前这个内存域当中。是否有益啊?如果有啊,是不是并释放啊。没有,经常使用那些液就可以了。这么个六,这么个六是吧。好,这是一个。那我们这个又是什么呢?右边这个k swept。
16:03
它是一个什么。它是一个后台的一个守护进程,就是说就是KS啊k swap的是吧。那么这个后台守护进程。他会定期检查内存情况是不是,并且检查之后啊,他将这个情况啊进行发发生什么呢?如果发生内存不足,就使用这个守护进程放出这个月,它作为一个预防措施,就这个意思。大家也要也要搞清这个最基本的关系啊。就这么干。好,我把它放到这儿来。OK。
17:26
好,这个我们就解决了。我们针对这个图,你要围绕这个图研究啊。他这个流程就出来了,是不是。那首先第一个问题是吧。第一个问题。刚刚提到了啊。就是什么意思呢?如果我们这个内存呢,它检测到什么呢。检测到啊,你操作期间是不是啊内存它会什么呢?会严重啊内存。存在这个啊。
18:00
严重不足是不是?那严重不足的话啊。它就会什么,它就会调用我们这个了啊。电,刚才那个函数啊。掉了一个函数啊,要注意了。哎,它就会调用你这个函数。啊,调用这个函数是吧。啊,调那个函数干什么呢?检查是不是检查当前我们这个内存啊,内存块里面是不是所有。夜当中。啊,所有业啊。并且是不是并且,那么我们要释放什么呢?释放啊。很少使用过的,这个什么呢,也就这个意思,那么他就干这个事情。好,那么除了干这个事情以外,那么第二步是不是右边这个。K swi的是不是sweep的啊第二个。第二个这个什么呢。就是开sweep。它是一个什么swap啊,它是一个什么呢。
19:05
K是一个后台的一个守护进程,对不对。那么他这个首付进程做什么呢?这个守护进程。它会什么,它会定期的啊,它会定期的检查这个内存的一个使用情况,对不对啊,并且呢,它检测将什么呢?将你检测到的这个啊情况检测到这个啊。啊,问题是不是发生,那问题呢,发生什么呢?发生这个。内存不足是不是那么发现内存不足,那这个时候就可以什么呢?可以使用这个守护进程。啊,进行放出这个液就可以了。那么这种操作它仅仅做一个什么呢?就相当于一个预防措施。他主持干这个事情。就是主要是防止我们内核在执行期间。
20:03
发生内存不足。Keyword。就来干这个事情。那我们这个解决是不是。但是我们在多核这个处理器啊,在nui这个,在nui这个机器上面,就是你所有的这个处理器。啊,所的这个处理器对内存的共享并不是一致的啊。那么就是说对于每一个的这个nu ma这个节点来讲,都有一个单独的KS的守付进程,对不对,那每个守付进程它就负责一个nu mi节点上输的内存一,就这个意思。还有什么呢?还有这个就是我们这个非I这个系统了,非mi系统它只有一个什么,只有开的实例,它复制系统所有的内存域是不是啊。你比如比如什么呢?RRI杠三二是不是它最多可以有三个域是不是,你比如什么,嗯d me啊普通内存域啊,还有什么内存啊,那那这个高端内存域,它就有这些东西是不是。
21:02
所以我们要研究出这个问题啊。就是什么意思呢?就对比一下,就是你在什么,你在这个nui在nui机器啊。啊,机器上对不对,嗯。所有的这个。所有的处理器被内存的一个什么共享。对内,内存共享并不是什么,并不是。这个一致性的是不是啊,所以它对于什么呢?对每一个这个numa这个节点来来讲,是不是它都有一个什么都有个单独的caseword嘛。K sword这个什么k sord这个守护进程对不对。但是他每一个守护进程。每个首付进程呢,就负责一个什么呢,负责一个nui的一个节点上啊,所有的内存域就这个意思。就那么简单是吧,但是如果你在什么呢?如果在这个非nu mi这个系统上了,是不是它只有什么,它只有一个这个kord啊。
22:06
这个实例你只有一个实例,所以他就负责什么呢?负责系统中所有的这个什么内存域。就这么简单是不是?所以它其中它可以分为什么,分什么高端普通内存是不是还有。RID内存啊。就就分为这么几个啊。你看这些核心点,我们就全部都都给搞定了,是不是。好,那我们搞定这个问题之后,那还还不还不能解决问题是不是。那么刚刚我们讲到了啊。因为什么内核是不是刚才我们讲了一个什么,这么这么一个函数啊,就是try to fill pages。那么这个函数。当中它处理系统内存严重不足了。以及在什么。在这个k sword。首付进程中定期检查内存使用情况。那么在使用的,在使用的时候,你设计的算法是不是它会确定为我们为向这个系统提供一些空闲空闲内存?
23:07
啊,放出这个液以后。对不对,内核还需要什么,还需要确定这个具体的放出哪一页是不是。所以说并且最终啊,他他会怎么样相关的信息,从这个策略代码里面。传提到负责这个页面,就你将这个页啊啊写回到后备的存储器这个啊历程里面去,以及负责如何修改这个页表上的内存。所以说。这个内核它将什么呢?将这个页分为两类啊,分为两个ARU列表,就这个意思。所以你要研究,我们就要往下走了啊,就下一个了,是不是就。第十个了。第四个是什么呢?就是Linux内核。Linux内核呢,它将什么呢?将这个液啊分啊分为什么呢?分为两个LRU的一个什么链表是不是。
24:01
哪两个链表呢?一个是用于什么,一个是用于活动页啊。另一个呢,是用于什么呢?用于不活动液。就这么简单。那么这些链表是不是这些链表你要搞清楚啊,这些链表呢,它都是按照什么呢?按照内存域的一个什么管理的。内存一管理,那么机体啊,内核的这个源码如下。看一下。就这么研究的是吧。好,那么我们就回到这儿来是吧,你看啊,我打开这Linux内核掩码,我们来看一下是吧。OK,先进来了算了。我们这个是教学研究的是。换一个版本啊。我们有这个公开课的这个版本是吧。好,现在啊,全部进来了。
25:05
好全部进来之后呢,你就要找到这个。Linux是吧,啊。下面。下面有一个什么MMZ。哎,双击。在这个文件里面。看啊,这个地方。它就有这个两个链表。X5啊,X5看啊。我先给你将这个图形截出来啊。
26:17
啊,这个。然后。对应的立方是吧。那么下面他就专门有一段掩码,是不是叫做什么呢,叫做这个。Comes to f。用XT5啊。对,有个head list。Le。
27:07
释放那个区域。好,这是其中一个。那么就说它通过这个链表是不是将这个什么呢?将这个内存这个节点进行把它们全部啊连到一块是不是。但是还有一个什么呢。还有一个就是说。你判定这个叶它属于哪,属于哪一类的,这个内核的一项是不是,你比如说内核的数目是不是,就是你回收液多少页。还有就是说你具体回收哪一些页的策略,就这个意思。那么接下来他就到下面这个接口了,是不是,嗯。那下面再来啊。那么到哪一个接口呢?就跑到这来了。跑到下面一个函数叫做什么呢?叫做SHEZ。其实这个函数。这是第。
28:07
就是通过这个。对不对。通过这个函数,它是从什么,是从我们这个内存当中进行什么移出一些很少使用的一个什么页的一个入口啊。入口点就在这里。但是我们在什么?我们在这个周期性的啊,嗯。它在周期性的这个什么K。S word是不是机制当中进行进一步调用?但是我们在操作这个函数的时候要注意啊,就是我们在调这个函数的。时候,他有两个两个事情要做的。那么他的第一个事情呢?主要是做什么呢?主要是做我们这个啊。通过这个活动链表或啊之间进行移动,这个页就这个意思啊,这是一个。
29:03
还要通过这个check catch啊,选择我们要放出的一个过程,就是在确定这个内存一当中,我们要放出页的一个逻辑和具体放出啊。啊,这哪一页的一个啊,决策是不是就这个意思。那么这个这个函数就充当一个什么中间这个力量。完了之后,那么调完这个轴距下到下面这来看到没有。有个she active list就就就这个地方了是吧。到这来啊。到这地方来了。到这个灰色的了啊。就到回收站来了,看到没有?第六个算。那么我们到灰色这个函数里面来啊。它是一个什么呢。就是active是吧,这个list。
30:02
它是一个什么,是一个综合性,它只是一个什么呢?只是一个辅助函数。但是在Linux内核啊,它使用什么呢?使用该函数啊,在什么呢?在活动页。和什么和这个不活动液。的两个啊。两个链表之间进行进一步的移动,这个页就这个意思,就是说。啊,这个函数会告诉我们需要在两个链表啊之间进行转移这个页,就这个意思啊,转移多少页,那么这个函数它会会测试选择最少的那个页,比如这个列表哪个很少使用,是不是就要哪一个,就这个意思啊。那我们现在啊。
31:05
好,那么在这里的话呢,接着它就接下来往下走了,往下走就到这来了inacive了,看到没有学inact list了,就到下面这个函数啊,到第七步是吧。Shake in。Active list这个函数对不对?那么这个函数是做什么?这个函数。它是什么呢?是从我们给定的这个什么给定的这个。给定的一个内存域是吧。给定内存域是不是内存E的一个什么,它专门有一个什么呢?惰性的一个链表进行移除什么?移除我们选定的一个树木啊,树木的一些不活动,就是没有经常使用的就不活动的叶,是不是将它将它传送到什么呢?传送到这个。下划线这个page list函数对不对?
32:05
弹的这个函数。那么后面这个函数是将。将各个对应的一个什么呢?后备存储器。这个后备存储器把它发出什么来?发出这个回写数据的请求。主要是方便什么呢?方便我们这个物理啊,方便物理内存释放这个空间,就这个意思。猴子啊。他是姜什么呢?后者将相啊,各个什么呢?各个对应的一个什么。后背是不是啊。后备存储器。发出回写的一个什么数据请求,就这个意思啊。方便在什么呢?方便在物理内存当中进行释放空间。且要回收什么呢?释放空间,回收我们所选择。
33:03
嗯,所选择的一个什么呢,也就这个意思。它就这么干,你看到没有,这有调用这个函数派离,你看它整体流程啊,我们我全部都给他讲了是不是,所以你你我们在研究过程当中是不是啊。要多多看一下啊。啊,多练习一下,是不是多思考一下,其实这些问题。它并不是我们Linux内核当中最难的点,最难点在什么?在文件系统这一块是不是?OK,好,这个问题啊,我们就全部解决了。解决之后呢,你要搞清楚。我们呢?什么意思呢?比如液它在操作过程当中。对不对,他将这个液啊,它这个内存域的活动啊。这个活动链表跟惰性链表是不是啊,上的一个什么呢?LRU缓程,其次你比它有什么呢?有内核就定了一个什么。
34:03
将用几个液进行到一个小。到一个非常小的数组进行存储。他可以这么做是不是啊。但是说他在设计的过程当中,是不是有这么几个成年啊。有时候大家要多啊,多多思考一下,那么有一个什么,它专门有一个,第一个是液向量,第二个是LRU的一个缓存。那么就说内核里面,它提供这个LRU缓存是做什么呢?就是说。LRU这个缓存主要是加速向系统I链表的一个什么添加页的操作。那么它可以利用什么?这是第八个啊。第八个是什么呢?就是说LRU是不是LRU啊。嗯,它的一个缓存。ARU缓存是不是就是什么,它是Linux内核提供的另一个什么缓存,对不对,那么主要它是以什么呢?以加速。
35:02
像系统的一个什么。Li ru链表中啊。添加页的一个什么,添加页的一个操作。那么它是利用什么呢?它是利用这个向量。利用向量来收集什么呢?收集这个配置嘛。收集这个配置的一个实力是不是。哎,将其什么呢?将他。将其进行啊,一组一组的是不是啊。主机质疑什么呀,质疑这个系统的一个活动链表是不是啊。或者是这个什么呢,或者是这个啊。路线链表上。就这个意思。那么两个链表就是两个啊,这两个链表。就是这两个。这两个链表在Linux内核。当中。它是一个什么,是一个热点是不是,但是啊。
36:01
他必须通过什么呢?通过这个。自选啊。通过自选锁。来保护它。为什么你需要保护他呢?那么主要是为了降低这个什么,降低这个锁的一个竞争激励啊。因为你刚刚产生的一些新的页面,它不会立即添加这个链表里面是不是还是首先啊。啊,首先缓冲区啊,到各个CPU的一个列表上面。他来干了,就这个事情。所以大家有时间。一定要啊,研究一下这个问题是不是。好。那么在哪里呢?就是我们可以通过这个函数缓冲器添加新液,那你添加新液的话在这里呢。你在这个MM里面啊。
37:00
嗯,在MM下面它有个swap。啊,外点C是吧。那肯定的,LRU看到没有?康FLRU下划线。开启。下划线。这个什么end啊。那这个and,它就是一个添加,是不是添加。那么机体在设计的它还有一个红。叫做什么呢?叫做DeFine_PR_一个CPU看到没有。像这个。CPU括号。在这什么?这个配置啊。VC。啊,VC逗号有一个什么呢?Li像这个。看到没有,像这个函数这第一个成年。
38:02
这个啊。好到这儿来。好,这是其中的一个函数啊,要注意了。嗯,这是其中的一个函数。就是通过缓冲期,是不是你要注意啊。下面这个函数。刚刚我们提到的。IRU下划线。Catch。是吧?
39:07
啊,通过这个函数。这个函数啊。那么它通过这个函数干什么呢?就是通过。通过什么呢?通过这个缓冲区。添加新页啊,添加锌液的函数是不是为多少呢?就刚我们讲了。这个函数就可以了。不行。LRU啊LRU下划线。开启里面什么。绝对给函数去完成是不是?
40:02
那么他提供这种方法是不是?这种方法它是怎么操作呢。它可以什么可以延迟啊。可以延此将这个叶啊。添加到什么呢?添加到系统那个Li ru链表当中,是不是,所以说。直到什么呢?一直直到已经啊。知道什么?直到抄积累达到这个业是不是?直到一斤啊,这个积累多少页呢?积累是吧。多少个页就可以了?那么它有这么一个啊,你看。CTRLF有一个叫做。Page。配机什么VC下划线。这个。就是存多少个,就这个意思,嗯。
41:05
就这个15页啊,这里指的是15啊,15那就15了。这个是有要求的,你看没。15页啊。15个就是15个,你20个就是20个,这个是没什么可讲啊。因为什么,因为这个函数它访问一个特定CPU的结构,它就必须什么呢?必须要阻止CPU处理这个中断,是不是就是中断处理之后,它可能会恢复到什么呢?另外一个CPU上面,所以通过调用这些函数啊进行保护,你看。嗯,其实他他做这一步你看啊。刚才所看到的这个。I。对啊,函数上面有。那为什么这里有一个什么呢。
42:00
这里有个get,看到没有?Get,是不是?Get page对不对?还有一个put,是不是这两个啊?它就这么实现这么一个功能,就是说通过这些函数啊,它可以调用啊来。而饮食提供禁止什么禁止抢占?就这么个意思啊。所以说啊。今天晚上。我只给大家研究啊,这么多是不是。主要是研究什么呢?研究这些相关啊。Linux内核的一个什么页面,回收实现的一个整体流程。具体的细节是不是啊,下一次我们再进行讲解什么呢?这个收缩内存的液的一个原理怎么做。啊,非收不活动页的分析,还有一个什么,还有一个就是啊收回这个活动页列表OK。好,那么今晚的课程我们就到此结束。我们下一次课。再见。
我来说两句