Chinaunix

标题: linux内存大小的管理 [打印本页]

作者: liuweifeng168    时间: 2012-03-25 22:31
标题: linux内存大小的管理
各位高手,
linux内存大小是怎样管理的?在uboot中进行内存大小的分配,在kernel中还需要对内存的大小管理吗?kernel怎么知道有多大的内存可以使用呢?
作者: GFree_Wind    时间: 2012-03-26 07:21
这个找一本不错的Linux的书,都会有内存管理的介绍。
内存管理可是kernel的重头戏,三言两语谁也说不清楚
作者: 瀚海书香    时间: 2012-03-26 07:48
回复 1# liuweifeng168
linux内存大小是怎样管理的?在uboot中进行内存大小的分配,在kernel中还需要对内存的大小管理吗?kernel怎么知道有多大的内存可以使用呢?

linux最基本的内存管理方法是伙伴系统和分页。
kernel对memory的了解是通过uboot传递的参数获知的。关于uboot传递参数给内核可以参考这篇博文http://blog.chinaunix.net/space. ... blog&id=3148005

   
作者: liuweifeng168    时间: 2012-03-26 10:45
回复 3# 瀚海书香


    非常感谢瀚海书香,这个俺的好好的研究研究。
作者: cuibixiong_cu    时间: 2012-03-26 11:43
你可以看kernel目录下有一个Documents/arm/Booting,里面的东西不长,但是很有用,我写bootloader的时候也遇到了向kernel传参的问题,就参考了这个文档。很有帮助
作者: cuibixiong_cu    时间: 2012-03-26 11:47
还有可以建议楼主看看arch/arm/kernel/setup.c arch/arm/mm/init.c其实就是初始化一下变量,比如max_low_pfn等等,这些变量就限定了你内存的大小,也可以看看ULK3中的内存管理这章,有比较详细的说明
作者: liuweifeng168    时间: 2012-03-26 11:56
回复 6# cuibixiong_cu


非常感谢cuibixiong_cu。坛子里的好人牛人真多啊,俺以后也要经常来了。
作者: whwwhh    时间: 2012-03-26 12:33
回复 5# cuibixiong_cu


    的确很有用,还有这个目录下的其它文档,都很不错.
作者: whwwhh    时间: 2012-03-26 12:40
回复 1# liuweifeng168


    内存管理,最终都是由内核来做的. 内核不仅管理自己的(内存管理),也管理用户空间进程的(进程地址空间).
对于进程: 采用的是页式虚拟内存技术,每个进程都拥有独立的32位/64位的平坦地址空间.
作者: liuweifeng168    时间: 2012-03-26 23:33
瀚海书香 发表于 2012-03-26 07:48
回复 1# liuweifeng168

linux最基本的内存管理方法是伙伴系统和分页。


俺看了你的博文,非常的好。只是俺的水平有限。想问下,“大家都知道U-Boot启动的时候会将启动参数的地址放入R2中,然后再启动内核。”,这个参数是在哪里定义的?怎么放进去的?
作者: cuibixiong_cu    时间: 2012-03-27 13:28
.global _branch_kernel
_branch_kernel
        mov        r0, #0
        ldr        r1, machine
       
        adr        r2, tag_list
        add        r2, r2, #TEXT_BASE
        ldr        pc, kernel_addr
       
kernel_addr:
        .word        CPU_0_KERNEL_ADDR
       
tag_list:
#ATAG_CORE        (length = 2, empty)                       
        .word        0x2
        .word        TAG_CORE_POINT
#ATAG_NONE
        .word        0x2
        .word        0x0
       
machine:               
        .word        TAG_MACH
        .word        0
        .end

这是我的bootloader中写的一段code, 其实就是讲一个string的地址放在R2中,看看对你有没有帮助
作者: moniskiller    时间: 2012-03-31 18:47
linux内存大小是怎样管理的?在uboot中进行内存大小的分配,在kernel中还需要对内存的大小管理吗?kernel怎么知道有多大的内存可以使用呢?
回复:
1. uboot 中进行内存大小的分配: 其实uboot中的内存分配和Kernel没有任何关系,uboot 只是个bootloader ,跳转到kernel 之后, uboot 就没有一点意义了,kernel 不需要也无法意识到uboot 的存在。  kernel 有自己的一套内存管理机制,kernel 内存的管理主要需要理解:启动时内存分配(bootmem),基于页的物理内存分配(buddy),以及 slab 。以及用户空间的虚拟内存管理(vm_area_struct 结构的管理) 和内核空间的虚拟内存管理vm_struct 结构的管理, 以及ioremap 的理解,任何问题可以加我QQ 752070534
作者: moniskiller    时间: 2012-04-01 07:59
内存大小是通过ATAG 传给内核的。如果没有任内存参数,内核默认有一个关于内存的尺寸。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2