00:00
各位朋友们啊,大家好,我是维克,这一节课啊,我们就开始来讲解这个Linux内核啊,物理虚拟内存。那么通过上一次课,我们就将内存管理的一个技术面试题。常用的。我已经给大家讲五个方面啊。这个小例子全部都讲解完毕了。那上节课呢,我们首先讲的是系统调用v malo和k malo map的一个讲解。这是第一大点,包括它的一些相关数结构啊。那第二大点的话呢,我们讲了虚拟内存管理,就是进程地址空间。啊,这就是第二大点。第二大点呢,同时我们讲MM_charter是不是。好,讲完第二大点之后呢,那么现在我们要通过什么,通过将刚刚我们所讲过的。
01:00
Linux内核当中的一个什么呢?内存描述符。MM啊,下划线。它的一个什么数据结构的视图。那么我们要注意这么几个点。那首先啊,我们通过图形进行进一步来描述。那第一大点的话呢,大家必须要知道的就是说你这个内存描述符啊,MM下划线这个圈是不是我们叫做内存描述符对吧。好,那这个内存描述符的话呢,基于这一块的话,那么内存描述符它的什么,它的下面啊,有很多很多是吧,里面有很多个成员,大家注意啊。这个叫内存描述。啊,这个字我就把它改大一点是吧,这样的话我们看起来啊,嗯,看好看一些是不是。看的清楚一点啊,通过图形来描述,这样的话,我们就更加容易去理解知道啊,它到底是怎么一回事是吧。
02:04
啊,这个我们就解决了啊。这个解决之后呢,那接下来我们来看一下。那么通过上一次的学习。我们已经知道什么,我们已经知道这个内存描述,对吧,那在哪里呢?在这个。啊,Linux下面啊,有一个什么MM_table。两个M啊。啊,这地方。双击之后CTRLF。来找到啊,就是这个。MM下划线,这个看到没有。这个就是我们所讲的内存描述符,看到没有?那么在这个内存描述里面。专门有一个什么,有一个m map这个指针。
03:00
来指向我们虚拟内存区域的一个链表,所以说我们现在就可以看到啊,比如说第一个成员是吧。啊,接着他就对着什么呢。第二个层面。这是第一个啊,我多掏几个出来啊。等,下面看每个成员它指向不同的地方。再来一个啊。OK。啊,这就出来了,那么第一个部分,你像这个部分啊。这个structure vm_XR那么这个指针是专门什么呢?专门指向内存区域。内存区什么意思?好,那现在我就把这个啊给大家发出来,你看啊,比如这个里边它有什么添加,比如它有五个成。
04:00
那我看一下C是不是它就分别指向这个。大家不要着急,是不是来看这个部分啊。第一个是吧。啊,接着我们来看第二个。哎,它就这么一种什么,这种子向关系啊,这种子向关系。就像什么呢?就像你这个指针是指向上面这一块区域的。这块区域叫什么呢?这块区域我们叫做v ma对不对V啊。它比如VIM,第一个VII,那么第二个v mi,那每个VII里面你看啊,它有一个什么,有两个指针对不对啊,一个是什么,一个是end,对不对,你看一个end啊。啊,一个N。还有一个什么呢?还有一个是vm start。哎,新域的一个起始弟子,还有一个什么,还有一个是。这个看到没有。
05:03
一个是。啊。是吧,还有一个什么呢,Next。嗯,看到没有,其实他后面啊。他后面还有是不是。就是前面我就将这个指针。把它。好的类型是不是只不过什么呢?只不过你现在啊,这是第一个是吧,这仅仅是第一个,那么接着他就来第二个。那么它们之间呢,是通过这个指针来指向它,看到没有?它也是一样。它也通过指针来指向右边,这边它还有是不是还有很多个啊,在这的话,我就不不在一列几了,所以说后面还有,所以说你这里有什么呢?就相当于两个VMN。那两个v mi这个部分,我们就把它叫做什么叫做这个v mi链表,就取链表内存区链表进行管理。
06:08
好,现在我们就把它抛起来,你看,所以这个内存描述符。那它这个部分我们就搞定了是吧。把它这个。改一下就行了是吧。改红色你看。OK。好,那现在看到这个部分。我们就很容易的什么将它标出来了是不是。它就叫做什么,就叫做v ma。外卖,外卖链表。呃,通过这个部分进行进一步的管理。是不是大家注意啊,通过这部分来管理。好,那么通过这个来管理的话呢,那接着什么,接着你看这个内存描述符里面,它除了什么呢?它除了这个。
07:04
虚拟内存区域,刚刚我们所讲那个部分啊。看,我们退回刚才那一步看。除了虚拟内存区链表以外,它还有一个什么?还有一个这个RB_root是不是这么一个产业。这个成员MM_RB它是干什么呢。它是专门用来什么,用来指向我们这一个。对应的什么?对应的一个红黑数是不是就相当于v m ma红黑数了,那v mi红黑数各位同学们注意啊,我们可以什么呢?我们可以统一看上面我就画了一个看。这我就可以把这个当做什么v mi的一个恒配数。看一下C是不是。把它移过来啊。卡v mi、红黑素。好,他的一个管理方式就在这里了。
08:03
等一下啊。就这个指针。它就分别指向这个部分啊,注意是不是啊,所以现在大家所看到这里这个地方。它表示的是什么呢?它表示的是v mi混分数。你把它这个调一下啊。啊,这个。好,V ma。红黑素。是吧?乘除我们的节点啊。啊,那这个就搞定了是吧。这个可能空间不够啊。好,空间不够的话。把它变宽一点啊。
09:04
啊,这里来一个什么来一个。4000。就完全足够了。嗯,没问题,好,还有什么呀。还要注意啊。因为什么?因为这个内存描述符,那么内存描述它如何产生?其实它是进程地址空间。就是我们所讲的一个什么呢,有一个成年你看啊。哪个城呢?C的H。看这能不能找到啊,CTRLF。专门一个task下环线就这个。就这个成,看到没有,这个叫进程,PCB执行之后是不是对应的内存描述。所以这里面它有个成年呢,看到没有。这些。那现在的话呢,你看啊。
10:01
这边比如一个进程是吧,我就直接把这个复制了啊。它有这么一个指针。刚刚我们讲啊。这个指针是什么呢?比如MM下划线,它有一个什么,有个task。刷。这个叫什么进程描述。有的时候我们叫做PCB是吧,进程描述符,那么这个进程描述符里面。比如他这个成员啊。比如第一个产业。是吧,还有一个填再写一个啊。专门有一个叫做。照明指向那个成年的照明指向面,这个内存描述看啊,别着急啊。啊,就这一方有个MM看到没有。
11:02
那MM这个指针。要注意啊。MM这个指针进程描述符里面,MM这个指针是指向我们整个这个这一块区域的,大家知道啊。损伤这块区域的,嗯,他除了这些,他其实还有很多成年。它不止于这个成面是不是,你看这个问题我们就解决了是不是,所以说啊,这个这个内存要舒服的话,我们把这个颜色改一下是不是。背景颜色改一下,不然的话不好区分啊。背景颜色改为这个颜色好。这个指针我就可以改颜色了,是不是。嗯,它有这样指向是吧,好,那么其中啊,这个我要改一下颜色。改为这个颜色。那你这个指针就好,仔细看到没有。嗯,它指向这边。
12:04
这个改什么颜色?换一个颜色啊,用这个黄色。黄色对白色有点刺眼是吧。把它搞一个虚线是吧,好这就可以,你看这样的话,它就分开指向,就是说我们对应的一个什么内存描述符要注意啊。内存描述符里面的什么呢?每一个。成岩,它都指向自己不同的部分啊。啊,除此以外我们再看啊,你比如说什么呢,内存要舒服,里面它有什么有占。我们回到这个源码分析里面是吧,嗯。内存描述符。有个stack。它在什么呢?在进程地址空间里面,它如何描述?在后面啊。看这地方看到没有。
13:01
它有个start。T。Start stack这么一个指针,除了start stack呢,还有MBA。MS啊。在上面。啊,这个地方。就这个是指向什么内存映射区域的。这个指针除了这个指针的话呢,还有什么呢?还有没对的什么,比如BRK啊start br k刚刚讲了。的起始地址,解除地址BK。边开子下面的空间这一块啊BRK。还什么四大DK?除了start,表现什么呢?比如说start date。Start date那里,在这里啊。Start date。啊,数据区这个指针,它是每个指针啊,还有什么,还有这个什么啊,Start code代码方这一块。Start cold。
14:01
穿到课的时候呢,还有很多了,你比如说还有这个什么,嗯,Pgd啊,你看啊。指向那个页目录嘛,就PD。像这个看没有。Pgd_T这个是指向什么?指向这个页全集目录就是一级目录。历史中间还有很多个。乘以对吧。哎,这些成员在这里的话,我就不在列解了,那时选A,那么这个pgd,它指向什么?指向用户进程列表。大家注意啊。用户进程列表。好,把它移过来一点。OK是吧?嗯,这样的话我们就更加的容易形象把这个内存描述和它的一个关联,所以学习这个内核源码分析,你从这些你可能一步一步来学是不是。
15:06
这样不就可以搞定了是吧?好,那这个搞定之后,这个是进程描述符啊,进程描述符它就有一个什么呢。有除了这个,你除了这个进程描述符这个操作以外,是吧,你还有一个什么,还有一个叫做这个,我们把它叫做这个用户进程pgd这个指向这个页强行目录。一页全景目录。我们可以。其实它就是个。用这个来表示的。这里面是吧,页前集目录就相当于我们要插入一个表格一样。哎,我比如这个几行几列,五行五列。嗯,五行五列了是不是。哎,五行五列。再变小一点啊。
16:04
不听话。好,里面的每一行啊,每一列是不是我们找一个填充的颜色,把它填充进去。填充也没关系啊,没关系。好,我就把这个作为。还是用颜色填充不填充。底纹颜色。第一种。第二种。好,第二种的话,我们再来一个第三种是吧。我只是表示一下啊,实际上呢,不这个颜色来表示的啊。
17:01
然后这样让大家看的清楚一点是吧。第四。好,第五。好,那现在我们大家啊。我跳到这来是吧。现在我们所看到这个。哎,就把它叫做什么呢。叫做这个。
18:04
哎,这个指针啊,这个指针就指向它是不是。哎,你指向他的话。哎,我们就把它叫做什么呢。叫做这个pgd。叫做用户进程。就是P。GD。用户进场。它就这么一个啊格式。那这些现在我们全部就弄清楚了是吧。好,那这些弄清楚之后,我们还注意因为什么。因为刚刚我们所讲的这个什么呢。你这个内存描述符是不是其他还有很多成因,所以它也有哪些呢?你看啊。
19:01
比如它所对应的。内存的哪一些部分?等一下哪些空间啊。那么通过一个图形把它画出来也可以。嗯,可以了,那么比如我们右边是不是右边我就画一块内存。这块内存就分别是什么呢,分别比如这个用户站啊,对啊,还有什么其其实。右边我所画这块地址,它就相当于什么,相当于我们这个用户地址就是。进程地址空间的一个视图。就这么个意思。好,那么接下来的话,我们就一个一个来放啊。一个去理解是吧,你从这画下来。那首先我们看这上面这一方是吧。比如第一个部分。
20:02
哎,我们把它叫做什么呢?叫做这个内核空间啊。好内空间下面。再给你来一个。叫什么呢?叫做这个非啊。非规范期是不允许使用的。回归换区,再给我们来一个什么用付账。好,再来个应付状啊。啊,用户账。用户账呢,有I map v mh。嗯,可以了。好,接着啊。
21:00
第一个。内核空间,非用户区域。英虎站。I map啊。把它标上去是吧。这是应付藏。下面来一个。A map。啊,VMH。接着。就是什么呢?其实它就是I map空间了。好,到下面这个地方来。它是什么呢?是我们I map空间。好接着MF空间呢,用户空间你再往下面嘛。对不对,就往下走,你把这个空间给画出来,再把它标出来是不是。好,那么现在我们掌握啊,这个空间食物的信息之后,那么接下来我们看啊。还有一个什么,还有一个两个区域是吧。你比如A的区域。
22:01
别这个堆啊。C v mi。好对外面的话呢,下面就是什么数据段了。哎,下面就数据到v mi。哎,数据到外面呢,再往下面就是。代码段。VMM。啊,代码上VM的话,再往下面啊,它有一个什么呢。有个对应的这个。空格部分。啊,这什么都没有是吧。那么它的一个地址表示它电脑啊,地址表示它怎么表示啊,要注意啊,地址表示你比如说它从最一开始。这个地方。最下面它是一个什么?是一个0X。
23:00
零它的一个地址是吧,0X0最下面啊,那么它这个0X0最下面这个地址的话,那么接着到上面什么。这个到上面它就有什么,比如说FFF最大的。好,我们把可能把这个往这边移一点啊。OK。好,把它移到这来。多少个呢?就0X16个F看啊。可以了。这就上面这一块,那你怎么去标注它这个部分呢,你看啊。比如这里面我用个灰色来表示,用颜色来填充啊。这一块是不是啊。这里。再加一个。大一点的颜色啊。深一点。深的颜色的话,这就换一个颜色了。
24:02
用这个颜色是吧。把I map再往下面。再到这个部分给他个空啊。啊,基本差不多了。但是我们在划分地址的时候,你看啊。怎么去划分呢?用个发过把它括起来,你看如何括起来。怎么扩啊?你比如应付账。对不对,I map空间是从什么呢?I map空间是从这个地方开始。到什么呢?到我们下面地方结束了。啊,我们把它叫做。Map。I map这段空间。就是这个地方。那你除m map空间对的地方的话,你还一个堆空间,堆空间是从这个地方。到下面这个外面对站来。
25:01
就这个部分。说明在痱子的时,你应该是套到这个上面。乙下面走到堆下面地方来。到等下面地方来啊。它这个地方才是什么呢?才是我们所讲这个堆的一个空间,看到没有。独立空间就这么得来了。所以我们全部都搞定了啊。搞定之后它有一个什么呢。那么你比如我们刚刚讲了。还有一个什么,还有一个这个部分上面它是多少。上面这段区域。是内核空间,内核空间是256TB,要注意啊,256TB是吧,那下面这个地方。看到没,这个地方小小的这一段。看到没有?小小这段,小小这段是什么?是非规范区域?
26:03
非规范区域。就可以了是吧。好,再往下面就是用户空间。下面这一段很多很多的这个地方。挨到一块的啊。啊,这里叫做用户空间。用户空间的话,它也是什么256TB。你看像他全部表示,把这部分我就全部表示完毕了是吧。啊,解决了是吧。嗯,可以了啊。啊,那么他怎么去指向呢,在左边这里。
27:03
你看啊,它就有这个子正其指向对应的地方,你比如用用户在是不是你take。他就指向这个块来。啊,这时候你这个线。再把你歪起来了啊。用一个直线啊有直线。嗯,灰色啊。看到没有,就只剩这一块了。所以第一个我们就解决了啊。好,那么第一个解决之后,那还有什么,还第二段呢?第二段你这个m best对不对,M f best m f的话,它是指向什么,谁用户空间这一段。在这个发块地方啊。在这个位置。
28:00
Come。嗯,他就这么这么一个操作啊。然后接着什么呀。接着你再往下,再往下,你比如这个啊。堆是不是堆,是从哪里开始啊?可从这个地方开始。对齐是吧。BRK。B就等于什么B等我的数据段。啊,然后你这个地方start code。Date就对数据的。你这个。In the cold。代码段。啊,这个大写错了啊。这个地方应该是start。哎,从下面开始是不是。
29:00
你看现在立方我们就全部啊。把它弄出来是不是好,那么下面弄好之后每个地方啊。你把它这个颜色改一下。BK。给他做一个这个颜色是吧。向这一块。然后接着什么,接着这个start。第二,收据单。嗯,就这一块,然后接着什么。Start date。数据大啊。啊,收集他们这个颜色。还是一段,还有一个什么。最后一个是不是。用这个颜色。紫色是吧。你看。
30:01
现在基本上啊,整体内存的这个分布啊。我全部是不是全部都给他讲了啊,我把这个地方。移到这来是不是?就这样子向啊,这样子向它这个指针要反过来指算,就这样子啊。好,可以了。那么现在。各位朋友们啊,所以大家所看到的整个。注意啊。整个图形架构。它就是一个什么呢。就是一个。内存描述符的一个什么,数据结构的一个关系,你看。全部都弄出来了是吧。好,我们通过一个图形把它造出来啊。
31:02
可以了。OK。你看现在大家啊,整体都看到了,是不是,所以每个部分啊,你比这个,如果你要标红色的话,那地方你就给他什么。你给他标个红色,那如果这个是蓝色,你就标个蓝色。啊,这跟它对应关系是吧。差不多了。解决了是吧。OK。好,那现在啊,我就将这个图形。嗯,内存描述符啊,它这个视图。放到我们笔记里面去。就可以了,算。
32:07
好,这个图我们画出来了啊,这个已经搞定了是吧。那么搞定之后呢?那么接下来什么?接下来我们就看下一个问题是不是。下一个问题是什么?就是我们经常讲的。第三大点对不对。第三大点是什么?是系统调用的一个实现。系统调用实现是什么呢?前面我们已经讲过了,比如k ma干什么啊?V这两个函数干什么?那首先我们来看第一个啊,大家来注意了。现在我们就来看第一个。这是第三个啊。第一个。那么第一个这个K。Mac这个函数。那么它这个函数主要啊是用来做什么的。
33:04
所以说当我们用到这个函数的时候,你首先要知道它这个函数的功能是不是功能,是做什么功能就是分配啊。就是在什么呢?就是相当于在物理就分配在。在物理上分配联系的一个内存。在物理上啊。就。在物理上分配连续的一个内存。要注意了是不是?所以说这个什么呢,这个虚拟地址,它自然呢。也是什么也是连续的。但是啊,它是什么。它是基于什么呀。基于我们这个level对应啊,分配的一个实际上存在的一个什么。连续的一个内存地址。
34:00
哎,他主要是做这个事情。那所以这个问题我们就搞清楚了,是不是搞清楚了,但是这个函数怎么去用呢。这还怎么用呢,注意啊。首先你要找到内核源码,分析架构的设计,然后再知道它怎么去用啊。能找到什么?Slave。他急死了,你找死吧。这地方。好找到之后。那就CTRLF是吧,能找到K。Mo。找这个函数啊。转数很多是吧。再写再加一点啊。
35:02
型号。就这个函数看到没有。说我们用这两个函数啊,当我们用到这个K这个函数的时候。那么它有两个参数。第一个参数是size对不对,那第二个参数是什么呢?Flag,那size就是表示什么,就指定你要分配的一个内存的自己数是多少,自己个数嘛,Flag就是它的一个分配标志是不是。你看现在我们就。全部都把这个啊。他就摸清楚,就是它内核掩码的一个设计。你就搞清楚了,是不是就是。机体啊。内核,野马的一个。设计。如下。就是你这个函数啊,它具体页码函数设计设计在这方。
36:01
这样的话,我们就很容易去知道这些。程序是怎么做出来的,是不是?他如何进行实现,它设计思想是怎么样,在野码分析的时候,这个我已经给大家讲过了,是不是?在这里的话我就不再列举了,是不是?好,那么接下来什么?接下来我们要实现的是这两个。你怎么去用这个,是不是怎么去用它。现在我们打开这个虚拟机是吧。把那个程序跑一下看怎么样是吧。OK。好,开始执行啊。启动之后注意啊,那现在你写代码的话,你直接在那建一个文本就可以等一下。啊,你在这写代码也可以,是不是你到那边写也可以啊。先下面进行进一步的保存。
37:00
嗯,把它保存桌面上。那这个是什么,这个是K啊。Mac。test.c。这个就写完了。应该可以了吧。好,那么现在我们的实现。要注意是这样的啊。首先第一步是吧,我们将这什么将对应的这个头文件Linux,它下面有一个什么,有对应一个level,那么写这些存的时候,Level这个口径肯定要写上啊。点H第一个。嗯,第二个呢。就是Linux下面有一个什么,有个init.h。还没得了。
38:06
OK。好,完了之后你写两个啊,我就先把这个model的写上来了。嗯,Model下划线它有一个什么,有一个license。GT算。啊,还有一个是结束是吧。就是你调用啊,调用那个模块,调用初始化配置模块。摸到了下划线。IIT。通过这个来调呢啊。Exit。好,这就写好了,这两个我们就放在后面是吧。好,接着这两个放到后面的话呢,那现在我们做什么呢?现在你要实现两个注意啊。现在嘛,定两个。定两个什么呢?定两个这个函数。一个是初始化我们这个模块。
39:01
Mac。IIT。Test VO的第一个。好,接着。第二个。我的是吧。为的我们有个什么exit吗?Kloit下划线。Test。也是这么写的。这两个写完之后注意啊。这两个写完之后主要是啥,这个是应。啊,这两个写完之后有一个什么呢?这个函数。初始化模块是放到这个位置。用它来调用呢。那么退出这个模块的实现是在这里调用。你看,所以这两个之间的关系我们就写好了。那么这两个之间的关系我们全部写好之后是吧,那么接着我们就来实现下面这两个。怎么去实现呢?嗯,第一个就出来了。接着啊,我们就来看第二个。
40:03
好,但是你要分配多少个啊,多大的一个什么呢?多大的一个空间呢。我们要分配多大空间,那么具体怎么分配,那就通过在这里面我定啊,比如我定一个井号的方MM。内存啊。内存的一个大小。Sides。大小写什么写这个。嗯,1024003。就写这么大是吧?好,写完之后呢,再定一个指针。这个指针。就是MMEM这个PVM。存P代表质量嘛,VM代表虚拟内存,是不是我们分配这个物理连续的一个内存啊。好,那这个地方我们全部写完了,是不是完全没问题了。那么当我们完全没问题之后,那接着什么,接着你就要看测这这个是分配的。
41:01
这个是施放是吧,所以说我们这个施放就比较简单了。实况是这么设计的,首先通过E负极来判断一下,你看MMPM。只要它不等于空是不是?它不等于空,证明什么呀?证明你可以释放的空间,那么K。MPVM就出来了。然后后面就打印个信息出来,告诉我们用户是不是。Real。释放成功。就可以了。成功。就可以了。放行。这个是什么呢?现在我们所看到这个就是。你删除内核模块的时候,它会。啊,释放你刚刚所分配的这一块空间,这个指针所指向那一块分配的空间。
42:00
但是你分配失败它就不能执行啊,但是你print for,这是打印什么,你删除模块时候,它必定会显示这句话。大家一定要注意这一点就可以了。好,接着上面我们就实现分配了,是不是你这具体怎么分配呢?分配这个东西比较简单,那MPVM就等于什么呢。等于这个强制转换嘛,那K麦lo就行了。括号。那MM这个size大小是不是?啊,GPF。啊,Gfp下划线颗了是不是。可以呀。GP啊,这个内核呃,N写完之后,那么接着你就判断,判断什么呢?你必须不能等于空啊,如果你这个指针它等于空了。等于空,那证明什么?证明你分配失败。打双引号是不是。这个函数。
43:05
该函数失败。分配失败啊。就可以了。这是分配失败。啊,否则是吧。否则的话,你分配成功。对不对,就L。Else,就是成功。这个函数最后。他要返回的是瑞吉南。Ing。就出来了,那现在怎么做呢?现在你分配成功之后。干什么,分配成功之后,我要把刚刚那个什么呢。刚刚我们所分配这块地址。把它输出来告诉我们用户。那就printer双引号。这个函数啊,分配成功。啊,接着啊。
44:01
他就输出一条什么地址。G是等于百分。0X开头啊,百分之LD。把D字打出来。On什么呢?On side。点什么log?就这个子针。写好了是吧,写好之后,那现在干什么。先要将这个程序保存了。看见S来保存。保存这钢材门放哪里去了?刚才门放到桌面。所以我们将刚刚那个程序。把他轰到这儿来。嗯,这时候进来了啊。啊,你创建个文件夹是不是啊。SS。哎,将这个文件夹里面。就刚刚写那个代码。
45:01
然后怎么做呢?然后你就将这个麦文件。放栅栏,修改麦克文件。好,你进这个左面啊,啊CD这个。KMSS。那么这个麦克文件写的就跟刚才那个是一样的test是不是?保存。保存完之后啊。保存完之后怎么办呢?那保存完之后我就麦克一下。是吧?我迈一下。写错了我们再改是不是啊。没有错,是不是?没有错的话,这里生成这个文件了,看到没有。好,那么生成完这个文件之后呢,那接着我要将这个模块。
46:04
将这个啊。执行的内存插入模块里面去。好,In mode,再来一个什么?来一个这个。K。啊,权限不足是吧。必须要高级权限管理员权限。可以了吧。没问题。没问题的话,那就是。杠C,看到没有,现在在这里已经告诉我们了。就是你K了这个函数啊。分配成功是不是分配成功的话呢。那我们就知道了,对不对,你这个分配成功之后。那么它的地址是多少?
47:01
地址就是我们m me p vm那个指针所指向的这块地址。对不对。OK,嗯,然后如果你要删除的话,这个例子有个负数是吧,你要减啊。太大了,是不是你把它改小一点啊,自己搞它改小。啊,那么比如I'mod你删除刚才那个什么呀,这个klo KO是吧。然后你再次查看。哎,它这个结果就出来,看到没有。就显示什么,你释放就成功了,是不是这就是整个操作。那么大家在实现的过程当中。一定要什么呢?一定要。多啊,思考一下这个系统调用它是如何进行实现的。所以本节课啊,这个Linux内核掩码分析。啊,这个课程。啊,我全部啊都给大家讲到这里是不是。
48:00
啊,有任何问题啊,大家可以通过什么呢?通过QQ和微信啊,跟我们进行沟通交流,那么直接找这个秋香老师啊。QQ和微信同号是吧,207032995嘛,找他领取我们往期的一些啊视频以及回放资料。那这节课我就给大家讲到这里。那就是说我们除了这个VIP免费公开试听课以外,我们呢,铃声教育还有对应的一个什么呢?应纳克斯内核研码分析课程。那我们这个课程还是针对具备一定的工作经验,从事嵌入式啊啊交啊,如果你要深入研究底层的啊,这部分的这个朋友们是吧。那我们的课程分为这几大模块进行讲解。第一大模块是进程管理专题啊,第一大模块。第二大模块是内存管理专题。第三是网络协议章。第四的话是设备驱动管理专题,以及什么文件系统的一个什么。
49:04
内核与组建啊这个专题。好,那这些每个专题里面都有配套的一些相关那个啊项目实战程序。浅红色所标注的啊,所以啊,这就是我们的课程题,那如果大家深入研究要讨论学习的话呢,也可以找秋香老师啊来领取这个。课程的这个体系进行进一步的学习。那我们的课程报名之后啊,它可以什么呢?立刻马上可以学习,那这个课程的话,它是在什么呢。在腾讯课堂里面啊,啊,这个目录是不是,比如我们的这个所有的课程,我们就全部啊都给大家做好了,你看内存管理专题,你看我们每一个课时,各位朋友啊,每个课时你看到没有。每个课时都是在两个小时左右,是不是,你像这个是补充路的话,至少也是一个小时是不是。
50:03
一直到后面啊,你看到没有。啊,里面的100多,100多是不是一两百多啊,到一直到后面啊,后面这个有一个什么呢?后面这些有这个补充,看到没有。补充是什么意思啊,补充比如十三二十一十七二十是不是三十九九这些补充就是什么呢?就针对就是说某一个知识点,是不是大家在学的过程当中啊,不太清楚,是不是或者我们啊讲的过程漏掉了,我们就在后面这个补充我补上来。OK,那所以啊,今晚的课程我就全部啊都给大家讲完了啊,大家在学的过程当中有任何问题,到时候我们再进行进一步的沟通与交流。那我们下一次课啊,再见。这就是内核网络形状相关的啊。好,那我们下课了啊,再见。
我来说两句