天天看点

Linux内核内存区域包含哪些

作者:嵌入式Linux内核

第二点,内存区域。它所包括的什么,包括的内容有哪些?

那么它包括什么内容?第一个,比如代码段映射。代码段映射什么意思?就说可执行文件当中,它包含只读或者并且可以执行的程序头部。你比如一些代码段或者初始化段等等。

就在这个地方,还有一个就是数据段映射了。内存区里面有数据段,数据段的映射。数据段的意思就是说可执行文件,它只可读,包含可读可写的程序头对不对?

Linux内核内存区域包含哪些

但是这个数据档或者BSS端等等是不是?还有我们所讲的一个用户进程的栈。一般是在用户空间的最高地址,它从上往下进行延伸。那么包含这个什么?或者里面的一些局部变量,或者一些参数对不对?这个你不能和内核栈混淆是不是?因为这个进程进程内核栈它独立,并且在并由什么?内核去维护是不是?它主要是用于上下文的切换。除此以外还有什么?还有堆的映射区了。还有这个堆,堆映射区。堆映射什么意思?就说堆映射。其实就是我们经常用那一个函数,这个malloc()这个函数,就用在这里了。它用来分配,就是通过这个函数来分配什么?

Linux内核内存区域包含哪些

进程虚拟地址就在堆映射这个位置,用户空空地为区。还有一个就是MMAP,这个映射区域。mmap映射区什么意思?它是用户进程栈下面的,那用户进程栈下面我们经常用,那叫什么?

Linux内核内存区域包含哪些

第三点,MMAP函数。这个系统调它就用在什么?用在MMAP这个映射区域。大家要明白,但是要知道进程的进程的一个地址空间,里面的每个内存区域,你不能重叠,两个进程都使用MMAP这个函数来分配这个内存,对不对?但是你分配新内存地址是一样的。是不是?但是你不能说明它们两个重叠。就说如果我们理解这个进程地址空间,就很容易了。因为进程地址空间是每个进程可以,可以访问的一个虚拟地址空间,每个进程运行的时候都都拥有整个CPU资源。所以它这里有一个叫CPU的一个虚拟化,进程就是每个进程,它都有一个都有一套这个页表。是不是?那这样每个进程地址空间它就相互隔离起来了。是不是?使它们这个进程的一个什么?地址空间虚拟地址是相同的,但是经过两套不同页表进行转换之后,它们就各自是各自的物理地址了,这就是必须用户必须要了解的这个点。所以我们第一个问题,我们就解决清楚了。

Linux内核内存区域包含哪些

继续阅读