对linux内存空间管理的理解
2014-06-24 12:27
218 查看
分为两个层面来看:
1、虚拟内存空间的管理
2、实际物理空间的管理
1、虚拟内存空间的管理
每个进程都有自己的4G空间可用,对于这4G的空间,需要进行管理。如哪一个范围的空间用来存代码,哪一段的用来存数据,哪一段用来做内存映射等。这些是通过一个个的vm_area_struct来表达的。每个vm_area_struct就描述了一段虚拟空间范围。这样,进程就知道哪些空间还可用。
2、实际物理空间的管理
机器实际具备有多少的物理空间,这个是定的,以每4K为一页,将它们管理起来。由页面描述符page来描述每个物理页框的状态。这样,内核就可以知道,还有实际多少物理内存可用。
分配了线性地址空间后,并不一定就马上分配物理页框,到用的时候再分配。
给定一个线性地址(虚拟空间里的地址),通过寻找vm_area_struct来确定是否合法,如果不包含在任何一个vm_area_struct里,说明这个虚拟地址还没有启用,是一个无效地址。如果找到对应的vm_area_struct,说明起码是被启用的线性地址,至于是否允许操作,则由权限来定。
如果是可以使用的,那么就会根据页目录表的起始地址,找到页目录表,进而找到页目录项,进而找到页表,再找到页表项。如果页表项表示实际没有物理页对应,那么就要进行系统调用,在实际的物理空间里找到一个可用的页框,映射到这个页表项。这个物理页里面应该放什么内容,由实际情况决定。如果是映射了某个文件的,那么就要结合vm_area_struct里记录的文件信息和相应的偏移量,将文件的相应内容装载到这个物理页。
1、虚拟内存空间的管理
2、实际物理空间的管理
1、虚拟内存空间的管理
每个进程都有自己的4G空间可用,对于这4G的空间,需要进行管理。如哪一个范围的空间用来存代码,哪一段的用来存数据,哪一段用来做内存映射等。这些是通过一个个的vm_area_struct来表达的。每个vm_area_struct就描述了一段虚拟空间范围。这样,进程就知道哪些空间还可用。
2、实际物理空间的管理
机器实际具备有多少的物理空间,这个是定的,以每4K为一页,将它们管理起来。由页面描述符page来描述每个物理页框的状态。这样,内核就可以知道,还有实际多少物理内存可用。
分配了线性地址空间后,并不一定就马上分配物理页框,到用的时候再分配。
给定一个线性地址(虚拟空间里的地址),通过寻找vm_area_struct来确定是否合法,如果不包含在任何一个vm_area_struct里,说明这个虚拟地址还没有启用,是一个无效地址。如果找到对应的vm_area_struct,说明起码是被启用的线性地址,至于是否允许操作,则由权限来定。
如果是可以使用的,那么就会根据页目录表的起始地址,找到页目录表,进而找到页目录项,进而找到页表,再找到页表项。如果页表项表示实际没有物理页对应,那么就要进行系统调用,在实际的物理空间里找到一个可用的页框,映射到这个页表项。这个物理页里面应该放什么内容,由实际情况决定。如果是映射了某个文件的,那么就要结合vm_area_struct里记录的文件信息和相应的偏移量,将文件的相应内容装载到这个物理页。
相关文章推荐
- linux(3)磁盘与文件系统管理/查看硬盘、内存空间/文件系统的操作/ 文件的压缩和打包
- Linux用户空间与内核空间(理解高端内存)
- 深入理解Linux内核之内存管理
- Linux用户空间与内核空间(理解高端内存)【转】
- Linux磁盘与文件系统管理 - 内存置换空间(swap)建置
- Linux用户空间与内核空间(理解高端内存)
- Linux用户空间与内核空间(理解高端内存)
- Linux用户空间与内核空间(理解高端内存)
- linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解?
- linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解?
- 通过一个小例子来简单理解C语言中的内存空间管理
- 深入理解Linux内核个人小结8---内存区管理
- 通过 free 命令理解linux 内存管理
- LINUX内存管理
- Linux内存管理机制研究
- Linux内存管理机制研究
- 全面介绍Windows内存管理机制及C++内存分配实例(一):进程空间 zz
- Windows内存管理机制及C++内存分配实例(一):进程空间
- LINUX2.6内核中用户空间向驱动程序传递的内存大小最大为多少?
- linux内存布局的内核实现--用户空间的映射方式