00:00
好的,那首先啊,欢迎各位朋友来到铃声教育啊。佐斯威克。那么接下来啊,我主要是给大家分享的是Linux内核里面的内存管理架构的一个框架。那么我们做过啊波年应用项目开发的这个工程师是吧。那么在大多数的这个工程视野里面,内层这个概念啊,就是啊内存条或者是说它焊接在我们这个板子上面的这个内层啊,金属颗粒是吧。而且呢,在这个操作系统,在操作系统这个角度来看的话,那么物理内存它是一大块啊,或者是好几大块的这个联系的一个内存。那么究竟我们怎么去管理啊啊进行妥善去使用这些内存。这还需要一套非常专业的一个学问。那么就是说在操作系统的这个角度来看的话,那这个物理内存它是非常珍贵的一个资源。
01:03
那么一旦什么呢?一旦你操作不当,他就会报各种各样的错误,是不是?所以说我们本节课啊,所讲的内容。是专门讨论这个什么呢?物理内存的一个管理。以及什么,包括物理内存管理,比如它的分配和释放。在内核当中。这个分配内存,它没有在进程分配适应这个内存当中那么容易,所以就说有的时候我们需要考虑几个问题。什么问题呢?就说当这个内存不足的时候,那我们应该怎么去分配啊。第二个就是说系统运行的时间非常长,对不对啊,你不是说运行几个小时,是不是运行了一两个月啊,半年或甚至一年,是不是它就可能会产生什么很多这个内存的碎片。那这个时候我们应该怎么办啊,好,各位朋友啊,啊,新年好是不是好,那么就是说,那我们如何去分配几十个比较小比较小的这个内存块呢?比如几十个字节啊,十二十个是不是。
02:07
那我们知道如何去提升这个系统,如何分配这个物理内存效率,这些都是我们这个软件工程师要考虑的一个问题。所以说在这里的话啊,我就给大家画了一个图形,那么第一张图的话是什么呢。就是这个啊,从用程序的这个啊,用户的角度来讲,就是最上面是用户空间。中间内核空间,再往下面是硬件层面。好,接着第二幅图的话呢,那我们针对什么呢?内核空间里面又进行进一步的划分啊,我们归纳成什么呢?比如进程调度跟CPU相关的是吧?啊,内存管理对不对啊,跟我们这个内存条相关的啊,还有网络设备这一块,就是硬件网络接口卡什么,跟这个网络管理子系统的。还有就是虚拟文件系统啊。
03:01
还有什么呢?进程的这个进程之间的一个通信啊,还有这个设备驱动等等啊,这些就是我们要研究的一个问题。好,那么我们大致了解这么几个模块之后,那接下来的话呢,我们重点是研究啊,第二个部分就是内存管理这一部分了。那首先我们来看的是什么呢?这个物理内存和虚拟内存的一个管理方案。那这个物理内存。一般的情况下,我们是这么讲的啊。我们从什么呢?第一个我们首先要了解的是物理页面对不对?那么在什么呢?一般我们是相当于什么呢?比如你32位的这个处理器,就30位的CPU,它寻址,寻址的时候呢,它是按照什么呢?按照数据的一个什么位宽啊,位宽进行决定,有的时候我们也把有的时候啊也称为什么呢?也称为这个字有时候叫word是不是。
04:02
但是它就不一样了,是不是,但是什么呢?但是处理器它在什么,在处理我们物理内存的时候。他却不是什么,不是按照我们这个什么呢字来进行什么,按照字来进行分配的啊,所以说现在啊,就是现在的这些什么呢,啊CPU它都会什么呢。都会采用这个分页机制啊。分页机制来管理什么呢?来理我们这个内存。这就是我们要了解的第一个问题。那么所以说这个处理器。所以这里面有个问题啊,在我们这个CPU里面,是不是它有个缓存,缓存里面又安装了一个什么呢?有一个硬件叫做硬件的一个固件叫做MMU,就是说内存管理单元是不是,那么这个内存管理单元MMU它做什么呢?
05:00
它为什么它会处理我们这个虚拟内存到物理内存之间的一个映射关系,是由这个部分进行来完成的。也就叫有的地方啊,有的这个官方术语,它叫做什么呢?叫做页表翻译工作TLB是不是啊。但是我们站在什么呢?如果我们我们是站在什么,如果你站在这个CPU的角度来看的话,那就不一样了,是不是那么站在CPU角度的话。那么管理这个物理内存,它最小的就是比如你站在角度不一样,它处理问题不一样,是不是?比如我们站在什么,你站在这个。CPU,嗯,它的一个角度啊来看的话,那就相当于什么呢?相当于我们管理这个物理内存,它的一个什么最一小单位,它是什么,是一个液,是不是啊,是一个液啊,所以说在什么呢?在linu内核当中,它就专门有一个结构体来表示我们这个物理液,对应这个物对应这个物理液啊,所以说接下来我们就深入内核掩码分析了,你看好Linux内核啊,这个当中是不是它就用一个什么呢?用一个叫做structure,有一个什么呢?配置啊,用这个啊数据结构来什么呢?来描述一个什么物理页面。
06:24
就这么简单是不是,但是。这个物理页面的话,我们接下来我们还要往下走,是不是啊。物理页面的话要注意了,就是一个物理页面,它大小一般是4KB,这是系统的一个规范,是不是就是大小啊,就是物理页面,嗯,物理页面的一个什么呢?大小为什么呢为4KB。但是啊,要注意了。但是有一些体系结构。有些体系结构这个这这个什么呢?就是有些啊有些这个体系结构不一样,是不是体系结构,体系结构的这个CPU啊,啊,它也可以什么呢?啊,它可以支持更大的是不是啊支持大于什么呢?大于这个4KB。
07:13
大于4KB的这个页面的话,那么就按照这个来了,你比如比如多少呢?比如你8KB,或者是你是16KB啊,或者是什么呢,或者是64KB啊等啊的一些相关的一个什么。页面就这么个意思是不是?所以说目前啊。为什么这个物理页面的大小为4KB,点这个立方它是什么?它是我们linu啊,内核默认的啊,默认的大小,默认大小它是4KB。那么。这个结构体,我们只要了解几个核心成员就OK了。啊,现在我们打开这个内核源码啊,我们来看一下。现在我们是用5.0的版本啊进行了查看一下。
08:03
啊,这比较慢,是不是耐心等待一下啊。在哪里呢?把这个钱关一下。好在哪里呢?一样的啊。从一步一步来是吧。那我就从什么呢?从这个include,我们写代码下面有一个什么呢?专门有第二级目录是吧,Linux。再找到下面专门有一个什么叫做MM。啊,这这这个头文件,双击这个头文件之后你看。我们就会找到有一个什么一个这个是虚拟内存区域啊,我们找到个配置,那就是。Structure。搭配一起,那你找到这个结构看到没有啊。你点它就行了。就跑掉了是吧。
09:00
好,那么这个结构啊。我们在我在VIP的时候已经跟大家讲过了,是不是,那首先我们来看第一个什么意思呢?你看第一个成员啊,我们挑几个核心成员就可以了啊,其他我就不讲了啊,那么outside long flag是不是,那这个flag它是什么?弗莱这个成员,它是一个标志。那么这个标志是什么呢?是页面的标志位集合,是不是页面标志位集合什么意思啊?就是标志位在我们内存管理是非常非常重要的。为什么呢?那么就是说具体这个标志位在哪个地方,在野码里面怎么去设置它一样的。它这里面有个什么,你看MM下划线啊,装了一个配置你看啊,我们找到M。佩奇你看等一下啊,有一个叫啊佩奇flag。啊,这地方双击。双击之后啊,我们再找到就专门一个标志叫page flags。
10:02
啊,就这地方看到没有,这里我都给它做好了啊,你看。你看在哪里呢?在通过这个枚举来定义,是不是就说说明什么呢?说明你这个物理页面的标志,你比如这个页,这个页面已经上锁了,你就不要访问了,是不是,你看里面很多参数啊,你看比如这个什么呢?比这个PG_sla啊,Sla这个分配器就是我们的快分配器等,下面会讲是不是啊,那么它表示什么呢?表示液属于什么呢?由slave分配器所创建的slave。是不是你看下面有个什么呢?Right bank就是我们页啊,就是这个页面啊,正在回写,你看或者用什么呢?Map to Dis,就是在磁盘当中来分配这个块,是不是block,你看这些啊,其实刚刚我们所看到的就是说你通过这个地方所创建的成员变量,那么你这个参数。参数的设置在应用程里面,那么对应这个值,它就会得到什么样的什么样的结果。
11:00
就这个意思。好,那这就是第一个问题啊,第一个第一个标志我们就解决了,是不是好,那么解决完第一个标志之后,接下来啊,我们就来看第二个了是不是。第二个是什么呢?有个非常重要叫做C啊。第二个成眼,这个已经给他标好看没啊?等一下啊,叫做。这个已经找到了啊。嗯,上面还有一个,还有一个是下划线,看你看啊。大家看到没有,我我我看了个F啊,下划线CTRL这个成。在。看到没有?还有一个是。
12:00
别着急啊。下划线,Control。你让他挑走啊,不能让他挑走是不是。Map。就这个地方啊。看一下C是吧。好,就这个,成岩看到没有?那么这个呈现注意啊。你像这个下划线map control这个成员。其实这个成员它是什么呢?是我们这个页面物理页面数据结构当中两个非常重要的一个引用技术。那么这个引用技术的话,它用什么?用auto make_T对不对。
13:04
那么还有一个什么呢?这个成员在应用的时候啊,是相当的重要。比如。这个就比如你表示这个映你看啊,比如这个引用技术呢,它表示这个页面会进程映射的一个个数。就是已经映射了多少个用户的PT这个页表,那么比如在32位的这个系统啊内核当中,那每个进程呢,它有三个GB的一个虚拟空间和一份独立的一个什么页表,是不是,所以说它有可能会出现什么,出现多个用户进程。同时什么呢?映射到一块那个物理内存,所以后面就出现了一个什么,出现r mapp的一个反向映射机制,它就可以用这个原理进行进一步来实现。所以说。注意啊。你比如这个什么,比如这个下划线。
14:00
Map control,如果它的值啊,它可以这么表示的。我再给你备注一下在这里。它还有一种用法,是不是它的判断。它来判断啊,你比如它来判断,如果这个值它等于什么呢?它等于负一,好,如果你这个引用计数,这个值等于负一,那就表示什么呢?表示它没有PT,是不是表示没有这个PT的一个什么映射到这个页面当中,就这个意思,好这是第一个,那么如果它等于零就不一样。等于零是表示什么?等于零。它是表示没有什么表示只有什么呢?只有这个啊,附近层映射到就是映射了这个页面是不是比如说域名映射啊。域名啊。域名页面。域名页面它刚分配的时候,是不是那么刚分就是域名页面。
15:01
他刚分配的时候,那么这个词。这个引用技术啊。引用。哎,计数它的初始化为减为零。嗯,这就是这这一个的应用啊,就是说你在内核源码分析的时候,你要了解清楚,在应用层开发时候可能会用到是吧。就这个。但是说。还有一个点是什么呢。我们经常讲到啊。就是内核代码它不会直接去检查,注意啊,内核这个代码,它不会直接检查这个什么,检查你这个技术。它是采用什么,采用内横专门有两个红来专门有个红啊来进行什么呢?统计这个页面,其实它这个红的设计是不是。那看有没有啊,叫做配置下线。看啊。Map。专门一个红的统计叫做什么,我一下子忘记了啊,就就这个,你要记住啊,就是这个专门一个叫做。
16:07
Page下划线在右层里面啊,有I map。哎,Map什么呢,这个CTRL就通过这个啊,来这个宏进行来计数的。好,那么这个的话啊,但是内存管理的话,在很多复杂的这个代码逻辑当中啊,它主要还是依靠什么,依靠这个引用技术来完成的。你比如啊页面的一个分配机制。或者你反向映射机制。或者你页面回收机制等等啊。因为它是物理管理,就是物理内存,就是物理内存页面的一个什么核心机制。这是一个。那么另外一个的话,我们还有一个什么呢?还除了这个成员以外啊,还有一个叫做map mapping就是I map啊这个成员,诶等一下。要找一下啊。I'm map。
17:06
这个成员在在在下面看啊。啊,就这个沉,看到没,就这个沉。在这里啊,那么。买皮这个成员。这个这这个成业的话。它是当什么呢?当这个页面被用于什么呢?文件缓存的时候,是不是,那么这个m map这个它就会指向。都会指向什么呢?会指向这个文件缓存相关联的一个对象,什么意思?那么像这个成员。它是非常有意思,就是说当你当你这个这个地址空间,就是这地址空间这个对象就是address,这个地址空间对象是属于内核对象。
18:03
内核对象页面集合内核对象,它就是一个什么,就是个索引节点。就是当这个页面用于什么呢?域名页面的时候。这个指针它就会指向一个数据结构啊。主要用于什么呢?反向映射就这个意思啊。除此以外,还有一个非常重要的成年,叫做。LRU。LRU。跑哪去了?哎哟。Ru。啊,这个在这里。啊,这个这个子弹。好,那么像你看head list有个LRULRU这个字段,它主要用于什么呢?注意用页面回收的一个LRU的一个什么链表算法。LRU这个链表算法,它可以定义很多很多个链表,你比如啊活跃链表是不是或者非活跃链表。
19:01
那么在sni机制当中,这个字段它就专门用来什么呢?用来把一个sla添加到什么呢?啊,Sla满的一个链表里面去还内的一个空闲链表,还内部分的一个什么啊满链表等等,这是一个成员啊。除了这个成员,还有一个虚拟的。就虚拟弟子指针叫做微。这个啊。这个指针。在下面啊。就在这里看到没有,就这个成眼。你看那么像这个微这个陈岩。这个也代表我们在C加的时候也是个虚函数,这个关键字是不是,那么这个成员它是指向我们这个写错了,写错了个字是不是。啊,没错没错啊,这个成年它是专门来什么呢?专门用来指向对应的一个什么虚拟弟子的一个指针。就是什么呢,你在高端内存的情况下。那这个高端内存它不会现行映射到内核的一个地址空间,那么在这种情况,那这个子段设置的时候,这个指针就必须为那的子就必须为空,只有需要的时候才会动态映射到这个高端内存里面。
20:16
高端内存的那个页面。所以说这里有一个问题。什么位置呢?内核它就使用什么,使用刚刚我们讲那个structure page来描述一个物理页面。那么我们看到管理这些页面所的信息啊,大家注意啊,那么现在的话我就什么呢。我就直接啊。将这个。将这个这这这个对,我就将这个复制是。把它放到我们的笔记当中啊,那么大家如果要要要深入研究的话,没关系,是不是直接找这个啊贝贝老师来领取就可以了啊,QQ微信号是一样的吗?是602878196啊。那我就把这个笔记放到这儿来是吧?
21:00
下面看啊。这个是什么?就是第二个问题。第二个问题,刚刚我们讲了啊,就是。啊,利纳斯内核。Linux内核什么呢?描述Linux内核里面的这个什么。按描述物理页面。数据结构。粘贴是就这个啊,Page是不是这个问题出来了啊好,那这个我们出来之后,那我们通过啊,大家通过这个结构体是不是我们就可以知道很多东西啊,在哪里呢。在这个地方。就是说内核知道这个当前,就是说内核知道当前这个页面的状态是不是。比如内核啊,我们经常你要你要访问就说内核,他如何知道什么呢?如何知道你这个页面的一个状态,所以他就通过刚刚我们讲过那个什么呢,专门有个成员叫做flags,就这个成员。Flag啊,这个成员,这个成员就知道你这个这个页面是不是这个页面状态是怎么样的,是不是到底被锁还是没被锁,还只读还是不能只读,是不是它就在这个里面。
22:10
啊,有回放异常嘛,这个小李的这位朋友啊,有回放有回放啊,一路繁华的下面来了啊,那么就是说这个这是第一个啊第一个。那么除了这个啊字段以外,还有什么呢?那我们啊。我们内核它需要知道一个页面是否空闲,有没有被分配出去,有多少个进程,或者是说这个内存路径使用这个页面,所以我们通过引用计数器来判断的。要搞清楚啊,就是内核是不是,嗯,内核如何知道,知道什么呢?如何知道你这个页面啊。是否为空闲是不是啊,有是否是否为空闲,是否为啊,分配出去是就是会有没有分配出去,是不是就是有多少个。
23:08
有多少个进程使用啊这个页面。等等是吧,那么他就通过什么呢?就通过这个了,刚才我们讲了是不是下划线map什么CTRL这个引用技术,其实现在我讲这个第一个第二个啊,我讲这两个的话呢,主要是什么呢。主要是给大家总结一下,刚刚我们讲那个页面啊,这个page的一个核心成员是不是好,那就是第二个是吧,那么第三个的话,我们还是什么呢?就说内核,他怎么知道你这个你是内核啊,就是内核如何知道。这个页面是谁在使用?被谁使用是不是,是谁在使用这个页面是不是,所以我们就通过什么呢?通过这个字段叫做什么叫做I map是不是。
24:03
通过这个字段啊,有还有一个是什么呢?嗯,Page catch也可以,是不是mapmp mapingg是吧,通过这个字段。好,那么除了这个子弹以外,除了这个以外,那么内核怎么知道这个页面是否被什么呢?是否被这个内集资使用,它也是一样的啊。要要是有能够回放就好了,是不是有回放啊,嗯,大家注意啊,现在我这个已经录制了24分钟了,是不是那么大家啊,如果需要这个视频的话,就直接找这个贝贝老师就可以了啊。加上来领取是吧,免费领取啊,这个是不要钱的啊好内核它是如何什么呢?如何知道知道这个页面啊这个页面。他是否被什么,是否被这个。什么呢?机制使用,那么它是通过哪个字段呢?刚才我讲过了,通过这个LRU是不是,嗯,除了LRU之后啊,它还有一个叫什么呢?叫S_memory通过这个字段。
25:09
就是目前我们了解的还有什么呢?除此以外还有一个什么呢?除此外就是说你比如你怎么知道它通过这个线程是不是是否属于线性映射。内核。内核,他如何知道这个页面啊。是否属于什么呢?属于这个线性映射。那么他就直接通过哪个成员通过这个虚拟这个关键字是吧。就这个字段啊,所以基本上你了,你了解这个什么叉车配置这个结构体,你知道这么几个基本上就差不多了,嗯,就基本上能够掌握是不是。那么掌握这几个之后,后面就很好办,内核。其实啊,我们可以通过这个。配置这个结构体这个字段可以知道很多很多东西,是不是就是说我们会发现很多问题什么呢?就是这个内核,它每个物理页面它就分配,就是每个物理页面它自然就会有一个什么,有一个配置。
26:11
那么这个配置它是采用什么,采用这个数组啊,从数组进行存储的是不是,那存况我们这个什么呢?啊,Structure page就这个意思是不是。是的啊,那么就是说,并且它们和物理页面是一对应关系。这点你要搞清楚,那就说什么意思呢,就是配置这个数,配置这个数据结构里面。就不需要专门有一个成员来描述这个物理页面它的一个起始地址了。所以说你通过现在你看啊,我们可以通过一个图进行进一步的描述,大家注意啊,你比如物理内存对不对,它跟我们对应的一个什么,物理内存所对应的一个。相关数组你配置一配置二配置三配置四,以此类推啊,大家注意这个点就行了。那我们通过图形来表示啊。
27:02
嗯,通过啊,通过什么呢?通过如下图是吧。如下图所示。描述什么呢?描述这个物理页面。物理页面,物理页面和什么呢?物理页面和这个对应的一个描述套啊。配置的一个什么。数据结构。数据结构其实很简单啊。描述物理页面处理结构通过如下图所示放到后面啊,它不通顺是吧?啊,我画一下啊,大致画一下你比如啊左边是不是物理内存。我就这么画了啊,看一下C是。
28:10
有的时候没画好,他就不好接上去,是不是?第一个。第三个啊。看第四个。我就这么画是吧,好,右边。就这么描述啊,好,左边。左边这个。是物理内存。20是吧。
29:01
左边物理内存右边。对应的结构。就是什么,就是一个map数组嘛。就派挤啊,专门通过一个。Map这个速度来存储的。那么这里面有很多很多是吧。比如这个。配。配一啊配从零开始了。发小。20好,这边也是一样啊。主要是描述形象一下是不是啊,这是第一个是吧。接了第二个,第三。第四。第五。第六,第七是。这有很多个。
30:01
左边这个就能描述啊零。一是吧。二。三。是。六你知道N啊。可以了。好,左边这个是存储我们这个物理页面啊。标上一下是不是右边这个我就不要那么多了啊,我就放到这儿来就行了。太多了不好写,不好对应啊,啊右边这个地方那么注意啊,Linux内核它默认的是不是刚才我们已经讲过了啊,就是它默认的是什么呢?默认是4KB。怎么怎么去搞啊。这样搞吧。这样啊,用这个来表示。它的一个什么,就是刚才讲过Linux内核默认的是4KB。
31:05
大小。啊,4KB的一个存储空间是吧。那这一方针的什么,相当于我们对应的物理页面了,对不对,这个是物理页面零。物理页面零一。三四。六。啊,制定很多个。就这么写啊。第一页。三。七是吧。好,现在我们就把它表示出来了啊,但是。我们所表示出来的部分,它左边跟我们什么呢?跟右边就是它们是一对一关系,比如物理液面零就对应什么呢?Structure page0,那么你物理页面一就对应structure page1,它就是一对一的一个关系啊。
32:14
加上去。就轰炸来吧。嗯,这个是。1 : 11 : 1对应关系。不好,对是不是。算了是不是?用个箭头来说快一些是不是。这个是1 : 1对应。好一边对应关系。大小。我们设一下就行了。1 : 1的关系。
33:00
他见他回头过来啊,不回头就不行是吧?好,那现在我们这个啊,弄完之后,那么你这个大小,你这个大小的话,它也可以描述出来了。你大小才可以这样描述呢,看到没有你这一边的大小。你这一边的大小是不是。我们可以通过什么呢?就是我们经常用那个。Off这个函数吗?再求这个结构体大小就可以了。里面存多少有多少是吧。大侠啥子?好,这就是他们之间的一个对应关系啊。这就很很容易去理解了,是不是,所以说每一个啊,每一个物理页面。它都有一个对应的一个什么呢?叉车配件这个数据结构。所以说是串车配置这个数结构的大小,这个大小在社区研发的官方里面,它的大小。
34:08
控制是相当严格,嗯,这个是用什么软件啊。这个在线官方网站这个软件。这个了。在鲜花的呢?这地方干嘛?你可以可以下是吧,可以再注册一个会员是吧,好,那么这个我们就全部做好了,是不是,所以说一般啊假设。假设你一个物理页面,这个配体是不是你在40个字节或者50个字节?那么就是说就相当于浪费了很多内存,是不是一般情况假设系统是十个GB内存,那就需要浪费,至少是需要浪费。十兆左右,是不是十兆左右,这也可以计算,你可以计算得出来。现在我就直接把这个放到这儿来了。
35:04
这个配结构体限制,因为是内核内内核他们设计的时候要求是这样的,嗯。他有要求啊,你不能太大,是不是你太大肯定不行啊。它的话,它分比如这个什么呢?这个碎片内存有时候他也需要,是不是也需要这个配结构去进行存储嘛。不然的话,他就扛不住了,是不是?啊,那这个地方我们就解决了是吧,好解决之后,接下来我们看下一个。下一个是什么呢?我们经常讲到有一个问题,是不是什么问题啊,就是。我们所提到的一个。内核里面就是Linux内核,它是什么呢?它把这个物理内存。把它分成两个部分,是不是,一个是什么呢?一个是线性映射对不对,那就是如果他用一个内存。你如果用一个用一个什么呢?用一个内存管理区来描述的话,那么这个管理器就是这normal的这个区域啊。
36:05
要注意啊,那么剩下部分就高档内存的memory啊。那么同样还有一个什么Z和memory,就是它有个对应关系,那比如叉八六体系结构,是不是叉八六体结构的话,一般是按照32位来算啊,或者叉八六_六四体系结构,那么它的内存就更大了,所以它就不需要考虑什么呢,不需要考虑这个高端内存。要注意啊,这这这里有个区别要注意啊。什么区别在哪地方呢?就是可能你看有的系统不一样,是不是比如叉八六它这个体系。叉八六体系结构跟什么呢?跟这个差。八六_六四是不是。他们俩之间这个体系结构在什么呢?对于内存这块来讲啊。它的一个区别,区别在于什么呢?区别在于就是说。因为什么?因为就是。
37:02
X86是吧,它有什么呢?有X86,它有这个高端内存要注意。X86叫做高端,有高端内存。但是。这个就没有。X86。下划线六四。六四。这个结构里面是不是。它就没有什么呢,没有高端内存。为什么?因为什么因为。它这个体结构里面内核空间映射是相当大的啊,为什么没有这个要搞清楚啊,就是因为什么呢?因为叉8664这个体系结构,它有足够大的这个内核空间可以什么呢?可以现行映射这个什么物理内存,所以它不需要高档内存。要注意这点啊,所以它们俩的区别就在这个地方。
38:02
OK是吧?我们就清楚了是吧。好清楚之后呢,那现在啊,我们来注意一下了,刚刚又提到一个问题,那么基于什么呢?基于这个叉八六的这个体系啊。它的体系。体系结构是不是?那么这个体系结构,它的管理区域,它可以分为什么呢?你比如它有什么有作。Z。任什么下划线DMMA这个部分是用于什么?用于DM来操作内存访问嘛,那么注意啊。要搞清楚了这个。这个。好,这个叉八六的这个体系结构。它是什么呢?它只适合也要注意啊。
39:06
他只用于只能只用啊,只用于什么呢?只用于。叉八六啊,英特尔你要搞清楚啊,你要。标明。只能用英特尔。叉八六的这个体系结构。是不是ARM体系构没有啊,ARM体系结构就没有这个。没有这个内存管理区巴,这个意思。啊,这是第一个啊。好,那么第二个是什么呢?第二个的话,在这里面它有一个什么,还有一个是我们所讲用于线性物理映射内存是吧。Z,下划线有个什么呢?Normal了这个区域,那么这个区域是什么呢?就是用于什么,用于线性映射物理内存。就这个三。好,那么除了这个以外呢,它还有一个什么。
40:01
还这个啊,还有一个是高端内存的。高端内存。下划线。H啊。Hi me,这个内存啊。这个是。啊,用于管理高端内存。注意啊,高档内存。是不能现行映射到内核地址空间,这个要搞清楚。高档内存。就是这些高端内存。是不能现行映射到内核地址空间,但是要注意64位体系结构里面,它不需要64位,不需要这个高度内存只有32位才需要。那么它这些对应关系指哪些呢?我们可以看这点啊。我们在哪里啊?你看这里面就有一个结构,你看啊。
41:02
就是。接下来就是相当于什么,相当于我们这个第几个了。第三个是。啊,接下来就第三个了啊,第三个是什么?内存管理的一个什么内存管理区,它的一个什么内存管理区的一个描述符。其实它这个内存管理区叫做内存管理区描述符啊。嗯,它这个结构体是ZZ就这个啊。这个数据结构。就这个。数据结构。那么他这个内河野马在哪里呢?在这个地方。你找到MM开头Z就行了。好在。
42:00
没有啊。啊,在这里双击。啊,双击之后。这里面专门有一个叫做。自。啊,这刚我们讲了,看到没有。对席。DNA是吧,三二。这个是吧,还有这移动的。好在这里。这个结构体看到没有。好,那么这个内存节点啊,我们也叫做什么呢?叫做内存管理区域的一个描述,叫内存区域。这个内存区里面有几个成年,你比如第一个,比如页分配线使用的一个什么流水线,叫什么下划线,What mark看到没有。这里面啊,那你再点击这里面,它又可以分成看分为123低水线是不是高水线什么的啊。
43:02
啊,这这些我们后面会讲啊。还有一个呢,还有一个再往下面专门有一些什么相关,你比如这个成年是什么呢?就是液分配析使用的啊,保留多少页借给这个高啊高的一个区域内存。相关每一个成员我们都讲了,还有什么呢?还有就是。比如这个分配,你看麦积的这个配置是是不是这个伙伴分配器管理什么物理页面数量,比如当前区化器的总页数是多少,还是什么呢?还有就是当前区域啊,它存储的一个物理液的一个数量,它不包括空洞是不是。还有内存区的名称,用这个指针进行进一步啊来存储,所以说针对这些问题啊。他可以总结出来一个问题,就是说第一个读它有个敏感期,写一个敏感期,还有一个什么,还有一个是统计技术啊,相关的是不是它都是相当重要啊,刚才我们讲了。有一个present,那这个刚才我们讲了它是什么,这个配置是它什么,就是内存管理区域的一个,实际管理的一个什么,实际管理的一个这个页面的数量。
44:10
但是。再往后面啊。上面这个是不是,上面这个的话,这个spend的这个pages是不是就是内存管理区,它包含了一个啊页面的一个什么页面的数量,就跨期的页的总数嘛,这个是一样的啊,一样的描述是不是。上面是被伙伴分配析使用的一个物理页面。这几个点。好,那现在我就将这个。掩码啊,放到我们的笔记里面,大家在学的时候多多研究一下,你看这个VM_T是不是还有什么呢?VM下划线是它什么意思啊,这个是LRU链表的一个集合。IRU链表集合啊,大家注意。就是内存管理区域的一个统计啊,你说白了,这个地方。它就是什么呢?就是内存管理,内存管理区的一个技术。
45:03
就这么简单。我们看这边啊。啊,这个大小就出来了。好,那我们现在啊,理解这个之后还注意两个点。一个是什么呢?一个就是说比如说分配啊。你分配和释放这个页面。这点我们也值得大家去去研究一下啊,你看。这是第几个了?第三个吧。啊,这是第三个啊。下面我们看第四个。啊,第四个。第四个是什么呢,就分配。
46:01
分配和释放这个什么。分配和释放。诶。释放这个物理页面。他怎么做啊?所以说分配。分配物理页面也是我们内存管理的一个什么最核心的一个事情。那么Linux内核呢,这个内存啊,页面的分配啊,它产生什么。它是基于伙伴系统算法来管理的。啊,这一点我相信大家啊都了解过,是不是就是利达内核。它这个内核的一个什么内存页面啊。内存页面的分配啊。内存页面的这个。分配是不是啊,它是基于什么呢。内存页面是基于这个火光系统。算法来管理的。但是说。
47:00
这个伙伴算法啊。他并不是利拉克斯内核单独独唱的,是不是?他是从哪里从so雷斯里面过来的?啊,如果大家弄过这个潮系统你也知道啊。那么呃,这个伙伴系统呢,啊,这它是什么?是操作系统的一种动态管理的一个方法。就是说当我们用户提出申请内存的时候。那伙伴系统就分配一块大小合适的内存给我们这个用户。那么反而就说用户释放的时候,它也是回收啊。那么在伙伴系统当中啊。内存块是二的二的次方,二的二的二的次方米啊,就是说linu呢,它最大是MA2的来表示,就一般是11啊。就是说也是什么意思,就是说也就是说把所有的空闲页面分别组成什么呢。啊,这个页面给它直接组成一个11块的这个什么呀,11块的这个链表是不是,所以说这些链表里面可以比如12468。
48:06
十六三十二一直到1024,它可以分配这么多,你超过这就可以报错,就这个意思啊。所以大家注意这个这个问题啊,嗯。他这个伙伴系统它是怎么怎么进行弄的。好,我们大家进行进一步来研究一下是吧。是这样的。想到什么?相当于就是说。嗯,得在虎棒啊。在伙伴系统当中。啊,内层。内存块它是二的什么。And orders。All me。所以说你要注意啊,离那是内核是不是。当中的这个什么。A,它最大值是用什么?用马克思A。
49:02
进行来表示。就这个来表示啊,但是这个大小是不是这个大小。就是大小为多少。值为11。滋味失意。那也意思啊,他意思是什么呢。意思是把什么呢,把所有的这个。空闲的一个页面啊,直接分成什么,分成11个块。就是一十一一十一个内存块这个链表。就这个意思好。那么这些内存链表啊。就是这个内存块链表。它就分别可以包含什么,比如一呀。二四。八。16。再到什么32。乘二的啊。
50:01
意识到。很多。到什么到10021024个连续的一个什么。页面就这个意思啊,一直到后面。但是说。这些啊,就是一千一千零二十四个页面。1024个页面。它就对应什么呢?对应着什么呢,它就对应着。一块什么一块四兆嘛。4MB4兆大小的一个什么。八小的一个连续的一个物理内存。是这么个意思啊。基本上思路啊,大家展开就行了。那就是说这个伙伴系统空闲页面它管理比较简单是不是,那么内存管理这个数据结构,它也有一个数组来存储嘛,叫做free艾斯特,是不是通过它来存储啊。大家有时间的时候可以去研究一下,可以研究这个东西啊。
51:02
比较好玩是不是?好,那么我们啊。看清这个之后啊,那现在我们就来看下一个问题是不是。下个问题是什么意思呢?你比如业分配啊。页面分配函数我们经常用到了,是不是用到这么几个啊,你看。页面。页面。分配函数是吧,那就直接用什么,有几个接口,是不是lo_一个什么配置,你像这个。里面很多参数啊。OK,这是其中一个,还有一个什么呢?还有一种非常常见。这个函数要注意啊。它这个函数是专门用来分配什么。专门用来分配这个。二的,二的是个联系的物理页面。要注意这个问题啊,就是因为这个函数的时候。
52:00
大家注意啊,就是页面分配函数。页面分配函数这个接口。如下。那比如这个是吧。这个是什么呢?你备注一下啊。这个是专门用来分配。Odd。二叫什么呢?爱的次。连续的。物理页面是吧。它返回的,它返回值是一个什么。返回。此时。第一个物理页面的什么?这个配奇。数据结构。这第一个函数。那么它除了这个函数以外呢?还有一个什么?
53:01
还有一个啊,非常重要的是不是。Get。那么这个盖什么意思呢?你看啊。叫做。下划线,Get。Get下划线里面什么pages?这个函数它是专门什么?专门用来什么呢?来分配这个专门用来分配内存的一个什么,内核空间的一个虚拟地址。要注意啊,比如你现行映射的这个物理内存。它直接什么,直接返回这个线行映射区域的一个内核空间的虚拟地址,那如果是32位高端内存的话啊,高端映射内存的话,那么就返回一个动态映射的虚拟地址。那这里的话,那有可能你要用到另外一个函数去去操作它啊。这这个要注意还有一个什么。还有一个就是释放那个页面啊。
54:00
释放页面,它有好几个函数啊,还有一个释放页面。你比这个。叫什么叫real?下划线。Pages。第一个是吧,还有一个什么。啊,在这个页面注意啊,通过这个函数。哎,这个是页面视化函数是不是。页面是函素,就用这个。那就说。参数啊,有的时候它这个是可以承载的,这个注意啊,它有多个这样的函数是不是。每个参数不一样啊。还有一个就是分配相关的掩码。是不是还有一些相关的标志?比如水位,我们以前讲过,比如水位修饰符,包括液面的一个什么修饰符。还分配源码的组合啊等等这些我们都会用到,那么比如后面我们可能还会用什么,还会用这个,关于这个内存碎片,是不是内存碎片化啊。
55:04
这个也会讲啊,也会去研究。那除了内存碎片化的话,你比如分配什么,比如你分配这个小块内存。就是当什么呢?就是分配小块内存的话要注意啊。当内核它需要分配啊,几十个字节小块内存的时候。他就专门有一个页面分配器啊,进行了分配一个页面。那么这个页面分配器的话,使用进就比较浪费,所以它就采用一种比较小块内存管理机制,就是我们经常讲那个上一公司啊,这个超,So这个公司里面,他们这个超系统研发后面移植到Linux内核里面,它就有一个内机制要注意啊。很多很多,可能可能大家不了解,是不是就是相当于什么,就相当于我们这个。要注意就意思就是说。看怎么怎么处理就分配,分配就是这个管理成本。
56:02
那另外一个什么呢?另外一个就是说在嵌入式系统里面当中,这个label就是这个啊,你比如在嵌入式里面领域里面,它用来比较好了,是不是。关键是这个啊,但是我们在用的时候,它有一些相关的一个函数呢,你比如内部的分配接口它也有啊。大家可以查阅一下相关的专业文档,嗯,比如啊,怎么创建列描述。怎么创建,怎么释放内怎么分配缓存对象,还有什么呢?还有这个释放缓存它怎么做的啊,你看啊。就是说。的一个什么分配接口。好内部分配接口的话有哪些呢?你比如。你创建。创建什么呢?创建。你怎么创建就用这个啊。
57:01
专门有个函数叫做。KM。下划线。开启。开启里面什么。这些啊。第一个创建。除了创建,还有一个什么释放?四方的话就是这个。K。MM下划线。有一个什么开启里面的。This。释放,还有一个是分配。分配缓存对象。就这一样什么?下划线。Catch。还有一个就是释放缓存对象。
58:18
那么只要掌握这么几个核心点就行了,是吧,一般就用这几个啊。好,那这些我们基本上搞清楚之后,是不是,那么还有一个什么呢?你比如我们怎么去创建,怎么去应用是不是。大家就可以看一些相关的一个核心片,你比如说呢,内部的一个分配思想,就他的一个分配思想你要搞清楚啊。他的一个分配思想,你可以注意一下。那么它有哪一些重要的一个分配思想呢?那如果大家听说过的话,应该了解啊,如果没听说过是这样的,就是说。内部机制啊,它最核心的一个分配思想是什么呢?就在空闲的时候建立缓存对象池。
59:06
要注意这个问题,就是说它包括什么,包括本地对象缓存池和共享对象缓存池。这也是未雨绸缪的一个体现,就是说当用到的时候就用,没用到时候就放那里,这个不管这这不不影响是不是不影响啊。我们来看一下就是什么呢,就像这第几个了。第六个是。啊,第六个。第六个什么啊。来什么?这个的一个分配。基本思想。他基本思想就是说。的一个什么机制,它的一个。
60:00
核心啊,在于什么呢?在于啊,核心为。是什么呢?核心是这样的。在什么?在空闲时?我们就创建什么呢。我们就创建这个。缓存对象词对不对,那么这个缓存对象词里面它包括什么?包括本地对象缓冲词。啊,第一个本地对象缓冲词,还有一个什么,还是共享对象。方程。两个是不是这两个啊。那么为什么它成这两个呢?原因比较简单。对不对。那这个是做什么?那本地对象缓冲池就是在做什么呢?是不是还有一个,一个是本地。我们先看第一个是吧。还是共享?
61:03
本地对象缓冲时,它就是在什么,就是在我们创建每一个什么,每一个slave这个描述符的时候,是不是为什么为每一个CPU。给他创建一个什么呢?创建一个本地对象啊。这个返程词就这个意思。那么你创建了缓存词,这样的话呢,它就需要从这个LA里面啊。从内这个描述符当中来分配共享对象手。那么优先从当前,优先从当前CPU要注意啊。为什么这样做?是不是这样,就是他这样。这样当时呢,当我们需要从什么呢?当需要你从这个label啊,这个描述服务。当你需要从STEM描述当中。来分配什么分配空闲?哎,你分配空想对象的时候对不对,那么我们就会优先啊。
62:00
优先从什么,优先从当前这个CPU的一个什么本地。对象。缓程词当中进行分配,这样就比较方便是不是?它的核心点就在这里啊。那么就是说。本地本地返程时。啊,就是本地CPU可以访问的一个缓冲词。他给每一个CPU。建立一个什么,建立一个缓程词。它是一个非常好,就是说这样的话可以减少什么,减少我们多核CPU的一个什么之间的一个锁的一个竞争问题。本地缓冲时,它就属于本地自己的CPU。所以其他CPU你不可能过来啊,到这边来竞争,就这个意思。他思维方式就是这样的。那另外一个是什么。另外一个是这样的。另外一个就是我们所讲的一个什么共享。共享对象的一个什么缓冲词?
63:02
共享对象缓冲值它就是什么,就是说你所有的这个CPU是不是,哎,它是共享的。那么当时呢,当我们这个本地。当本地这个缓存池里面,它没有什么呢。没有这个空闲对象史对不对。他就会从什么,就会从这个共享对象。缓冲池当中直接取一批,取一批,取一批空闲对象直接。同学对象啊。把它什么呢?把它搬移到什么,搬移到本地的一个。缓冲词当中。进行使用,就这个意思。所以说。这个内部机制啊。描述符是不是还有这个对象?缓冲词是不是还有他们三个?都是非常重要的S内描述符,是不是它就专门有个结构体进行表示啊,到这么一个结构体catch嘛。
64:06
就是我们抽讲的描述符是不是。大家可以看一下啊,可以看一下。可以研究一下是吧,你看啊。研究一下了是吧,你看这地方。这两个是一样的。嗯,你们看啊。什么意思呢?就是slave描述符的一个什么数据结构了?怎么描述啊?应该是。这个分配器。分配器的。当中的数据,当中的数据结构。
65:02
喂。We structure。是有这个啊。什么意思呢?那我这个地方啊。我们以。也把什么呢?也把它直接称为什么,称为这个slave的什么描述符就可以了。我们也可以啊,也可以把这个,也可以把这个称为描述符。嗯,它机体啊。机体,这个什么机体。内核的这个盐码啊,如下我们来看一下。
66:02
DF。看到没有?那现在我们就找到了什么呀,你看CP。好,那现在我们找到啊,这个相关之后,你看什么意思。我们首先来看第一个。就是每一个内描述符。就是每一个啊,嗯,刚才我们讲S列元素符,它都有一个对应的数据结构。这个。哎呀。好,我们看啊。
67:03
就是每一个。这个。描述符。它有什么?有如下这个数据结构。抽象。就这个啊。那首先我们来看第一个啊,它有一个什么。这边看到有structure,这个every catch啊,两个下划线是吧,这个PE,每一个CPU后面有个CPU catch。那么这个是什么意思?就是相当于什么呢。一个。CPU。他这个什么呢?Act的一个什么呢?A,这个catch是不是这个数据结构就是每一每一个CPU一个。表示本地CPU的缓存。对的,就是对象缓存词,就这个意思。
68:00
就是怎么回事呢?就是每一个就是每一个处理器嘛。嗯,每个CPU一个就这个意思,表示什么呢?描述我们这个本地。CPU的一个什么呢?对象缓冲值。是这个意思。好,第二个你看catch by be是吧,好,第二个的话你看control。什么意思呢?它是表示当前CPU本地对象缓冲池。当它为空的时候,是不是,那么从共享仿程池里面是不是。这个列表当中获取这个对象的一个数目。他去做这个事情。来表示当前这个CPU。对象缓冲词是吧,上面讲了啊。下划线。catch启。为空的时候是不是?
69:00
啊,或者是什么呢,为空时,那就从什么呢,从共享的这个缓冲词。对不对。获取什么?获取对象的一个什么,数目是多少?好,再往下面有个limit。Limit这个成年对不对?它表示什么意思呢?就是。当什么当本地对象缓冲词,它空闲数目啊,它大于limit的时候,没主动释放,就这个意思,主动释放上面这个这个对象。就是当本地。这个这个这个吞岩啊。当本地对象。缓冲时的这个空闲对象大于什么呢?大于这个limit。的时候。那么系统呢,会主动。四方上面那个啊。Bench counter。就这个意思啊。
70:00
多少个就释放多少个对象,对不对。为什么这么做呢?就是方便内核回收和消费内部。后面这个是share的。泻药的,其实它这个成语很简单。它主要啊。它是用于什么呢?用于多核系统,如果单核系统,你这个东西就不起作用了,就这意思。只有多核的情况下才是起作用,单核不起作用啊。好,那么。除了这个以外,后面还有一个什么size。塞字什么意思?Size就是对象那个长度了,对象的大小了。都以相当当小。嗯,对象大小啊,就是这个长度啊,加上这个,那这个对齐的字节是不是。这还有些flag是不是?Flag是什么?就是对象分配的一个掩码。这里是对象分配的一个什么掩码?
71:01
还有一个nu是不是nu这个number它是。就相当于什么呢?就相当于一个。一个当中最多它可以有多少个这个对象,有这个变量啊,进行进一步统计。那下面你看二的N次方,看到没有GFP2的。那这个GP是什么意思,就是相当于你一个label当中对吧。哎,他占用什么,占用二的什么。次方。爱的gfp。个四方,多少个页面,就这个意思。好,再往下面。他有个什么呢,有什么。啊,这个洛克弗莱格啊,还有这个卡啊,是不是啊。的cover什么意思呢?他这个就相当于什么。就是。海克,是不是啊,弗利斯?这off的地方就是那个了。
72:03
他就适合,对对。他跟那个。Color。它的它的长度。就是跟我们一级返程的这个行大小是相同。后面还有一个free。这就说这个成年。它是什么呢?就是每一个对象,它要占用一个自己。那存放弗瑞斯特。后面这个是。Name嘛,Name是什么意思?Name是LA的一个描述名称嘛。注意啊,这个是。描述符的一个名称。下面一个。Object。啊,这个是对象的一个实际大小。来了是不是?下面这一个是什么?对齐的一个长度是多少?
73:03
还有一个什么。重要的啊。闹的是吧,这个。哎,闹的这个宿主。No的这个数组。它是一个什么?就是内部的一个节点,说白了这个意思。这个啊。是节点。就是说在什么呢?在numa这个体系架构啊,这个系统当中,对不对,就是你每一个节点。他就有一个什么,有一个k memory。开启。No。漏斗的一个什么数据结构是不是。但ARM平台里面只有一个节点啊,这个要注意。啊,这个成年。
74:00
这些比较多。好,接下来我们来分析下一个是吗?下来。好的掉了之后呢,那后面还有一个什么呀。还有一个就是说刚刚我们用到的那个。那几个成员呢,就是这个。叫做什么?这个L。点它每个CPU吗。就这几个,看到没有。啊,这几个是什么呢。首先,第一个成年。你看啊。这个是什么意思?就是说。相当于什么呢?相当于内部这个描述符。
75:02
他给什么?给我们每一个?每一个CPU啊。提供一个什么呢?提供一个对象的一个缓存词。所以说内相反,就叫艾瑞下方先什么呢?Catch。这个对象缓存词要注意啊,嗯。这就是CPU提供对象,缓存值就通过这个结构体来存储的。那么第一个成员是吧?A,第一个成员是什么意思呢?它是表示对象返程时当中可用的一个什么呢?对象数。那limit跟下面这两个啊。这个跟这个是不是它是一样的。下面两个啊。什么意思呢?他这个。他和什么和我们这个。
76:03
嗯,和这个。下划线。开启这个数据结构。啊,中啊。他这个。是同样的功能。的。这个是什么呢?这个成岩。他是从这个反。从这个返程词当中。删除一个对象的时候。他就将将这个。他的。把它。设为一是不是?那设为一啊。而且你收缩这个收缩缓程的时候。就会必须将将这个touch的。把它设为几年,设为零。下面这个这个是实体,那这个实体其实是什么,就专门。
77:03
这个实体是专门用来保存。保存对象的一个什么对象的一个实体。基本上。他整体的思路就是这样的啊。哎,这就是一个部分。这个。差不多了是吧。好,那么这个啊,我们基本上理解之后。那一般我们用这个函数的时候怎么用呢?比如第一步做什么,是不是啊,第二步去做什么。这个大家搞清楚啊,就是说。他的刚才我们讲了啊,它这个内部一个原理机制啊,刚才我们提了一个啊。第几个?讲这个分配思想是吧,第七个。第七个是什么,第七个这个机制。
78:03
内部机制的眼里啊。就是它的一个运行机制,是不是,嗯,它怎么运行呢?运行它这样的第一步是不是就是第一步他要使用什么呢?使用k memory下划线专门给开启里面的什么create。诶,客气。通过这个函数。它就必须要通过这个函数来创建一个什么呢?创建一个内这个描述符,至少思路你要搞清楚啊,然后呢,它使用什么呢?就直接使用这个。Instructor。Memory,什么catch?啊,通过这个数据结构进行了描述,就这个意思。但是这个数据结构里面刚才讲了啊,有指向,就是一个是指向本地的缓存的这个指针。另外一个是指向节点,那个no的这个节点是不是。
79:02
那每一个内存节点,它就有一个内部的一个节点啊,这个这个大家要搞清楚啊。这个。还有什么呢?还有就是刚才你讲那个共享缓程词嘛,是不是还写子程子向另外一个共享缓程词。第一步。好,第二步。第二步是什么呢?第二步就是说。他必须要什么,第二步就是从什么呢?第二步就是从这个从刚刚你这个啊,从这个从。从内这个描述符中啊。当中来分配什么,分配这个空闲的对象就可以了。你分配空闲对象,说白了就是什么意思,就是说一个CPU要从这个level描述符当中来分配对象。首先要去什么呢?要去访问啊,当前这个CPU对应那个的一个本地缓存值。那如果本地返程器里面有空闲对象,就直接取就可以了。
80:02
如果他没有。如果如果啊,没有其没有其他这个CPU过来竞争那个资源的话,那么如果本地返程这面没有这个对象,那么就直接到什么,那就直接需要去那个共享缓程池里面查询是否空气内项,如果有就从共享缓程池里面。把这个。把这个对象直接把它搬迁到,搬迁到共享对象,就搬迁到自己的一个缓存池里面去。他思就这样干了是不是?就这么个意思啊。就是这个问题是不是。那么刚刚你创建那个slave这个描述符,比如本地缓程词啊。和那个什么呀。共享这个反程式里面都是空的是不是,那么怎么建立呢?所以要申请是不是,所以说建立这个,所以说建立个slave是不是这个物理页面,它需要向什么,需要向那个页面分配器去申请,否则是不行的啊。
81:02
嗯,大家注意这一点。就说你要申请,那么整个过程是不是大家可以看一下,比如说建立一个level之后。他会把室内部添加到室内部节点的一个空闲列表里面去用,到时候就直接用是不是。还有一个就是你操作完之后,你要你你还有一个什么,还有一个是回收,你十内部你怎么去回收。内回收就是内部的一个应应用机制,就说。当然当然什么呢?就是说内他不能。不能什么,不能只分配。不能用还是什么呢。不用的内部啊,还是什么,还是会用那个回收是不是,那如果内中有很多空闲这个对象的话,系统它是否要。回收一些空闲的缓存对象。这样的话啊,缓存了,否则否则的话,你不回收一部分,它就有很多很多的这个内描述服务,所以每个内描述啊,这个用处又不大是不是。
82:05
还有一些空闲的,所以你没什么用啊。所以内回收。系统,它有两种方式来回收。第一种就使用什么什么的开启,刚才们讲过那个函数吗?啊,什么这个函数啊。就使用什么呢?Catch通过它来释放一个对象。那么释放对象时就什么意思,就是说。当什么?当发现本地和这个共享对象缓存池当中空闲的箱数木。大于这个什么呢?或者等于缓程对象极限的时候。这个系统就会主动释放。这个不要门考虑是不是。得要搞清楚啊,还有一个什么,还有一个就是内系统还注册一个定时器,是不是是他通过这个定时器啊定时。定时扫描实物的十来描述啊。回收一部分空闲的对象到达条件,那我就将来时内部把它销毁掉是不是?
83:04
那么就通过一些相关的API函数进行进一步完成。到时候啊,我们再进行给大家分析讲解是不是,所以说今天晚上我们主要是给大家研究的是什么呀。Linux内核掩码分析里面的一个什么啊。物理内存啊,这个后面的管理,那么下次有时间我们再进行,进不了分享什么呢?这个虚拟内存管理方面啊。好,那么今晚啊,这个内存啊,这这个内容我就给大家讲到这里啊,我们啊下一次课。
我来说两句