在内存管理系统中为什么让连续分配方式访问速度快,而 linux内核提供了哪些动态内存分配方式
在内存管理系统中为什么让连续分配方式访问速度快,而
连续分配存储管理方式
连续分配是指为一个用户程序分配连续的内存空间。连续分配有单一连续存储管理和分区式储管理两种方式。
1、单一连续存储管理在这种管理方式中,内存被分为两个区域:系统区和用户区。应用程序装入到用户区,可使用用户区全部空间。其特点是,最简单,适用于单用户、单任务的操作系统。CP/M和DOS 2.0以下就是采用此种方式。
这种方式的最大优点就是易于管理。但也存在着一些问题和不足之处,例如对要求内存空间少的程序,造成内存浪费;程序全部装入,使得很少使用的程序部分也占用—定数量的内存。
2、分区式存储管理为了支持多道程序系统和分时系统,支持多个程序并发执行,引入了分区式存储管理。分区式存储管理是把内存分为一些大小相等或不等的分区,操作系统占用其中一个分区,其余的分区由应用程序使用,每个应用程序占用一个或几个分区。分区式存储管理虽然可以支持并发,但难以进行内存分区的共享。
内存操作系统(RAM
OS)是一种启动后不依赖硬盘的操作系统,其启动后会将所有文件加载到内存运行,运行速度快,绝对不会中毒,还能更好保护系统的核心文件不受破坏。
内存操作系统早在win98时代就已出现,由于硬盘速度的限制和内存条价格的降低,内存操作系统现在已完全突破硬件的限制,在启动后可以将硬盘断电,完全不依赖硬盘运行。但目前其应用范围还较窄,主要应用有学校教学机房等。
linux内核提供了哪些动态内存分配方式
Linux内核运行在X86机器的物理内存管理使用简单平坦内存模型,每个用户进程内存(虚拟内存)地址范围为从0到TASK_SIZE字节,超过此内存的限制不能被用户访问。用户进程被分为几个逻辑段,成为虚拟内存区域,内核跟踪和管理用户进程的虚拟内存区域...
物理内存和虚拟内存的分配?
物理内存太小了,强烈建议升到512或者1G,就因为256太小,所以设置为2G的虚拟内存很合适,不然很有可能会出现虚拟内存不够的提示,正常情况设置为1G,就是1000M就可以了
具体设置为,右键我的电脑,属性,高级,性能,设置,高级,虚拟内存更改,最小设置1000M,最大1500M这样
不过不是办法,256目前真的不够用了
简述内存管理中buddy算法和slab机制的区别
1、Buddy算法
linux对空闲内存空间管理采取buddy算法,
Buddy算法:
把内存中所有页面按照2^n划分,其中n=0~5,每个内存空间按1个页面、2个页面、4个页面、8个页面、16个页面、32个页面进行六次划分。划分后形成了大小不等的存储块,称为页面块,简称页块,包含一个页面的页块称为1页块,包含2个页面的称为2页块,依次类推。
每种页块按前后顺序两两结合成一对Buddy“伙伴”。系统按照Buddy关系把具有相同大小的空闲页面块组成页块组,即1页块组、2页块组……32页块组。 每个页块组用一个双向循环链表进行管理,共有6个链表,分别为1、2、4、8、16、32页块链表。分别挂到free_area[] 数组上。
位图数组
用于标记内存页面使用情况,第0组每一位表示单个页面使用情况,1表示使用,0表示空闲,第二组每一位表示比邻的两个页面使用情况,一次类推。默认为10个数组,当一对Buddy的两个页面中有一个事空闲的,而另一个全部或部分被占用时,该位置1.两个页面块都是空闲,对应位置0.
内存分配和释放过程
内存分配时,系统按照Buddy算法,根据请求的页面数在free_area[]对应的空闲页块组中搜索。 若请求页面数不是2的整数次幂,则按照稍大于请求数的2的整数次幂的值搜索相应的页面块组。
当相应页块组中没有可使用的空闲页面块时就查询更大一些的页块组,在找到可用的页块后分配所需要的页面。当某一空闲页面被分配后,若仍有剩余的空闲页面,则根据剩余页面的大小把他们加入到相应页面组中。
内存页面释放时,系统将其作为空闲页面看待,检查是否存在与这些页面相邻的其他空闲页块,若存在,则合为一个连续的空闲区按Buddy算法重新分组。
2、Slab算法
采用buddy算法,解决了外碎片问题,这种方法适合大块内存请求,不适合小内存区请求。如:几十个或者几百个字节。Linux2.0采用传统内存分区算法,按几何分布提供内存区大小,内存区以2的幂次方为单位。虽然减少了内碎片,但没有显著提高系统效率。
Linux2.4采用了slab分配器算法,该算法比传统的分配器算法有更好性能和内存利用率,最早在solaris2.4上使用。
Slab分配器思想
1)小对象的申请和释放通过slab分配器来管理。
2)slab分配器有一组高速缓存,每个高速缓存保存同一种对象类型,如i节点缓存、PCB缓存等。
3)内核从它们各自的缓存种分配和释放对象。
4)每种对象的缓存区由一连串slab构成,每个slab由一个或者多个连续的物理页面组成。这些页面种包含了已分配的缓存对象,也包含了空闲对象。
操作系统内存管理中的内存分页管理与分段管理的地址结构有何区别。
1。操作系统最大的功能就是管理功能,管理进程调度、管理内存、管理文件系统、管理I/O,...。其中最核心的功能是进程管理,但管理的基础是内存管理,只有把内存管理好了,才能使进程在这个广阔的舞台上自由表演。
2。系统工作模式有三种:实模式、保护模式、虚拟8086模式,其中保护模式又分为:分段保护模式、分段分页保护模式,不同模式下的物理内存管理方式不同。
3。分段保护模式(segmentation):
为了管理好内存,把内存分而治之,划分成小块,这样易于才易于管理。如何划分呢?分段保护模式是把物理内存分段,分成一段一段的区域,每段大小固定/不固定,每段都有不同的用途,这就需要对每个段进行描述,以记录该段有哪些属性或特点,这样在使用该段时才能操作正确。对每个段的描述信息放在“段描述符”中,所有的“段描述符”统一放在一起组成系统的“段描述符表”。“段描述符表”分为“全局描述符表GDT”,“中断描述符表IDT”,“局部描述符表LDT”。当操作系统要访问内存中的某一个段时,先在描述符表中找到该段的描述符,这样就知道了该如何使用该内存段了。简言之,分段是对物理内存分段划分,GDT,LDT,IDT是操作系统使用物理内存的参照依据。
4。段页保护模式(paging):
这是在分段保护模式的基础上,再加上分页功能。把以前的对物理内存的分段改为对虚拟地址空间的分段,把4G的虚拟地址空间分段,段信息仍保存在GDT,LDT,IDT中。然后把物理内存分页,用二级页表结构来描述和记录物理内存分页后的各个页的信息。当使用物理内存时就参照二级页表。
5。使用分页机制的目的:
(1)当系统内存被分成许多凌乱的块时,分页机制可以建立一个大而连续的内存空间映象,程序员不用操心和管理这些分散的内存块。
(2)页地址变换建立在段变换基础上,任何分页机制的保护措施并不会取代段变换的保护措施,而只是进行更进一步的检查操作。
(3)分页机制增强分段的性能。
6。虚拟内存
实现虚拟内存的手段是使用“需求加载Load on demand”和“页换入换出”。所谓的“需求加载”是指:运行一个磁盘上的文件时,操作系统为新进程创建4G线形地址空间,并为其环境参数和命令行参数分配和映射一定数量的物理页,此外并没有给执行程序分配其他任何物理内存页面,也没有从磁盘文件中加载代码和数据。但是,一旦程序从设定的入口点(mian函数)开始运行,就会立刻引起CPU产生一个缺页中断,此时内核中的缺页处理程序才会根据引起缺页异常的具体线形地址把磁盘文件中相关的代码和数据从文件系统中加载到物理内存页面中,并定位到进程逻辑地址中指定的页面位置。这种仅在需要时才加载执行文件中页面的方法称为需求加载技术或需求分页(demand paging)技术。
“页换入和换出”是指:当CPU要寻址的指令或数据不在缓存和物理内存中时,通过需求加载技术把页面加到物理内存,但此时如果物理内存已被全部占用,则必须把物理内存中最近不使用的页面换出到磁盘中,以腾出空间给新页面,这种现在就称为页换入和换出。
7。何时产生GDT,LDT,IDT、二级页目录结构,以及它们位于物理内存的什么位置?
在引导启动程序head.s中初始化GDT,IDT和二级页表,它们放在物理内存从地址0x0开始的地方。