内存管理通常有:[b]页式管理和段式管理、段页式管理等等。
1.[/b]页式管理的基本原理将各进程的虚拟空间划分成若干个长度相等的页(page),页式管理把内存空间按页的大小划分成片或者页面(page frame)。
优点: 没有外碎片,每个内碎片不超过页大小
缺点:程序全部装入内存。需要硬件支持。
[b]2.[/b]段式管理把程序按内容或过程(函数)关系分成段,每段有自己的名字。
段式管理程序以段为单位分配内存,然后通过地址影射机构把段式虚拟地址转换为实际内存物理地址。通过分段(segmentation)把程序划分为多个模块,如代码段、数据段、共享段。其优点是: 可以分别编写和编译。
[b]3.[/b]段页式管理一个进程中所包含的具有独立逻辑功能的程序或数据仍被划分为段,并有各自的段号s。这反映相继承了段式管理的特征。其次,对于段s中的程序或数据,则按照一定的大小将其划分为不同的页。为了实现段页式管理,系统必须为每个作业或进程建立一张段表以管理内存分配与释放、缺段处理、存储保护相地址变换等。
在段页式管理系统中,要对内存中指令或数据进行一次存取的话,至少需要访问三次以上的内存:
第一次是由段表地址寄存器得段表始址后访问段表,由此取出对应段的页表在内存中的地址。
第二次则是访问页表得到所要访问的物理地址。
第三次才能访问真正需要访问的物理单元。
总之,因为段页式管理是段式管理的页式管理方案结合而成的,所以具有它们二者的优点。但反过来说,由于管理软件的增加,复杂性和开销也就随之增加了。另外,需要的硬件以及占用的内存也有所增加。更重要的是,如果不采用联想寄存器的方式提高CPU的访内速度,将会使得执行速度大大下降。
windows的内存管理和linux一样,使用内存必须首先分配,然而windows的严谨在于它将分配的过程分为保留和提交两个阶段。其中保留的含义就是在进程的虚拟地址空间保留一块空间,保留的概念是针对虚拟地址空间的,而提交的含义是将刚才保留的虚拟地址空间的虚拟内存块映射到物理内存,这里windows扩展了物理内存的含义,提交的概念其实就是一个映射。
linux的内存管理是一种绝对的懒惰,访问内存其实就可以被看做内存提交。
windows之所以采用这一种的方式来管理内存其实是为了用一种更加统一的方式去管理所有的内存,只要内存提交了,那么内存管理器就要跟踪这块内存,不管它在物理存储器还是在磁盘页文件。linux的方式看来更加不规范,[b]linux使用页表来充当双面角色,既可以查找物理存储器又可以查找交换分区内存的位置[/b],并且linux中没有一种机制来统一管理物理存储器和交换分区的空间,靠强大的文件系统功能和高效的内存管理和文件管理数据结构就可以轻易做到内存的高效换入换出,解除了物理存储器和交换分区的耦合。
1.[/b]页式管理的基本原理将各进程的虚拟空间划分成若干个长度相等的页(page),页式管理把内存空间按页的大小划分成片或者页面(page frame)。
优点: 没有外碎片,每个内碎片不超过页大小
缺点:程序全部装入内存。需要硬件支持。
[b]2.[/b]段式管理把程序按内容或过程(函数)关系分成段,每段有自己的名字。
段式管理程序以段为单位分配内存,然后通过地址影射机构把段式虚拟地址转换为实际内存物理地址。通过分段(segmentation)把程序划分为多个模块,如代码段、数据段、共享段。其优点是: 可以分别编写和编译。
[b]3.[/b]段页式管理一个进程中所包含的具有独立逻辑功能的程序或数据仍被划分为段,并有各自的段号s。这反映相继承了段式管理的特征。其次,对于段s中的程序或数据,则按照一定的大小将其划分为不同的页。为了实现段页式管理,系统必须为每个作业或进程建立一张段表以管理内存分配与释放、缺段处理、存储保护相地址变换等。
在段页式管理系统中,要对内存中指令或数据进行一次存取的话,至少需要访问三次以上的内存:
第一次是由段表地址寄存器得段表始址后访问段表,由此取出对应段的页表在内存中的地址。
第二次则是访问页表得到所要访问的物理地址。
第三次才能访问真正需要访问的物理单元。
总之,因为段页式管理是段式管理的页式管理方案结合而成的,所以具有它们二者的优点。但反过来说,由于管理软件的增加,复杂性和开销也就随之增加了。另外,需要的硬件以及占用的内存也有所增加。更重要的是,如果不采用联想寄存器的方式提高CPU的访内速度,将会使得执行速度大大下降。
windows的内存管理和linux一样,使用内存必须首先分配,然而windows的严谨在于它将分配的过程分为保留和提交两个阶段。其中保留的含义就是在进程的虚拟地址空间保留一块空间,保留的概念是针对虚拟地址空间的,而提交的含义是将刚才保留的虚拟地址空间的虚拟内存块映射到物理内存,这里windows扩展了物理内存的含义,提交的概念其实就是一个映射。
linux的内存管理是一种绝对的懒惰,访问内存其实就可以被看做内存提交。
windows之所以采用这一种的方式来管理内存其实是为了用一种更加统一的方式去管理所有的内存,只要内存提交了,那么内存管理器就要跟踪这块内存,不管它在物理存储器还是在磁盘页文件。linux的方式看来更加不规范,[b]linux使用页表来充当双面角色,既可以查找物理存储器又可以查找交换分区内存的位置[/b],并且linux中没有一种机制来统一管理物理存储器和交换分区的空间,靠强大的文件系统功能和高效的内存管理和文件管理数据结构就可以轻易做到内存的高效换入换出,解除了物理存储器和交换分区的耦合。