当前位置: 技术问答>linux和unix
求内存管理的问题!
来源: 互联网 发布时间:2016-07-30
本文导语: 小弟刚学内核 有个内存管理的问题不懂。。 cpu可以寻址的是4G的地址空间,应该是OS为每个进程分配的 怎么我看书说的是为每个进程64M的空间,总共最多64个进程存在,加起来就64*64=4G,这个4G是给内核寻址的?这...
小弟刚学内核
有个内存管理的问题不懂。。
cpu可以寻址的是4G的地址空间,应该是OS为每个进程分配的
怎么我看书说的是为每个进程64M的空间,总共最多64个进程存在,加起来就64*64=4G,这个4G是给内核寻址的?这样的话就64个进程都可以寻得到?可以互相读写?
这就不懂了,怎么是这样的4G内存,那是0.11内核
有个内存管理的问题不懂。。
cpu可以寻址的是4G的地址空间,应该是OS为每个进程分配的
怎么我看书说的是为每个进程64M的空间,总共最多64个进程存在,加起来就64*64=4G,这个4G是给内核寻址的?这样的话就64个进程都可以寻得到?可以互相读写?
这就不懂了,怎么是这样的4G内存,那是0.11内核
|
关于地址的问题,楼主可以看看《See MIPS RUN 2.8地址空间》,还有就是google一下“程序地址 线性地址 物理地址”,应该有说明的帮助。但是具体使用上,就看看Linux中的I2S CODEC驱动部分,也可以搜索一下。那里面的环形音频队列结构里就包含了一个程序地址和一个DMA读数用的内存地址。
早期linux确实规定最多64个进程,平均每个64M的说法,应该与当时硬件条件和编程便利有关。但是这不是问题的核心。举例来讲,程序地址就是你malloc之类产生的地址,它们大多得数为 0xA0000000~0xC0000000,但是我们没有这么大的memory,将高三位清0,即得到内存地址。程序内存就是在程序中参与地址运算的所有地址,这些地址取值范围4G,但是具体到程序运行时这个地址到底在内存中那个地方就需要转换了。
linux系统我只是看MIPS的应用,在这里面4G空间就是已经分配各自任务,这与windows确实不同。windows给每个进程分配4G的基础在于它的分block和page转换处理,这个地址必须经过运算转换为线性地址,再映射到具体内存。而Linux其实假定了程序和数据最大容量小于4G,顶大个的东西都放得下,所以它认定程序地址和线性地址是相同的,连虚假的块转换都没有。
早期linux确实规定最多64个进程,平均每个64M的说法,应该与当时硬件条件和编程便利有关。但是这不是问题的核心。举例来讲,程序地址就是你malloc之类产生的地址,它们大多得数为 0xA0000000~0xC0000000,但是我们没有这么大的memory,将高三位清0,即得到内存地址。程序内存就是在程序中参与地址运算的所有地址,这些地址取值范围4G,但是具体到程序运行时这个地址到底在内存中那个地方就需要转换了。
linux系统我只是看MIPS的应用,在这里面4G空间就是已经分配各自任务,这与windows确实不同。windows给每个进程分配4G的基础在于它的分block和page转换处理,这个地址必须经过运算转换为线性地址,再映射到具体内存。而Linux其实假定了程序和数据最大容量小于4G,顶大个的东西都放得下,所以它认定程序地址和线性地址是相同的,连虚假的块转换都没有。
|
对!0.11内核前年我比较仔细的读过,你说的没错。