<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>益友网 &#187; 内存申请</title>
	<atom:link href="http://www.1uu2.com/archives/tag/%e5%86%85%e5%ad%98%e7%94%b3%e8%af%b7/feed" rel="self" type="application/rss+xml" />
	<link>http://www.1uu2.com</link>
	<description>Linux之友</description>
	<lastBuildDate>Sat, 07 Jan 2012 09:01:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Linux系统下内存申请应用的方法原理总结</title>
		<link>http://www.1uu2.com/archives/319</link>
		<comments>http://www.1uu2.com/archives/319#comments</comments>
		<pubDate>Tue, 31 Mar 2009 11:36:45 +0000</pubDate>
		<dc:creator>Linux之友</dc:creator>
				<category><![CDATA[Linux安装配置]]></category>
		<category><![CDATA[内存申请]]></category>

		<guid isPermaLink="false">http://www.1uu2.com/?p=319</guid>
		<description><![CDATA[1. 地址空间的管理 物理地址都是有内核管理的， node&#8211;>zone&#8211;>mem_map&#8211;>page, 所有的物理页面都在mem_map数组中的页帧对应， 然后不同的page有分为DMA，normal，highmem三个zone。 内核线性地址空间， 实际上只是低端内存才有线性地址，0&#8212;896MB部分。 内核虚拟地址， 低端内存的虚拟地址与线性地址是一样的。 高端内存只有在映射了以后才有虚拟地址 用户空间地址， tast_struct &#8212;> mmap &#8211;> mm_struct &#8212;> vm_area_struct 2.内存的申请或使用 物理内存的分配， 在内核中最终都要调用__alloc_pages().它是最核心的分配函数，申请大小最大不超过2的MAX_ORDER次幂，在现在好像最大定义为4MB。 线性地址， kmalloc和get_free_pages,线性地址， 对应的物理内存就是低端内存，kmalloc是基于slab的分配技术， 最大不能超过128KB。 虚拟地址， vmalloc申请， 他只是在内核中建立类似与用户空间的vm_area的一个虚拟内存空间到vmlist中， 最终的物理内存分配还是基于缺页的。 用户空间的虚拟内存， malloc之类的， 最终在内核中都是do_map()和do_brk()。实际上也只是建立了一块虚拟空间，最终的物理内存还是在缺页异常时分配的。 3. 内存的交换问题 在page结构和用户层的vm_area_struct结构中， 都包含locked和reserved标志。通过合适的途径设置这些标志， 可以是页面锁存在物理内存中， 不被交换出去。 来源：赛迪网 作者：yan 4. 设备内存可以通过ioremap映射到内核虚拟地址空间， 也可以通过mmap方法映射到用户空间。]]></description>
			<content:encoded><![CDATA[<p>1. 地址空间的管理 </p>
<p>物理地址都是有内核管理的， node&#8211;>zone&#8211;>mem_map&#8211;>page, 所有的物理页面都在mem_map数组中的页帧对应， 然后不同的page有分为DMA，normal，highmem三个zone。 </p>
<p>内核线性地址空间， 实际上只是低端内存才有线性地址，0&#8212;896MB部分。 </p>
<p>内核虚拟地址， 低端内存的虚拟地址与线性地址是一样的。 高端内存只有在映射了以后才有虚拟地址 </p>
<p>用户空间地址， tast_struct &#8212;> mmap &#8211;> mm_struct &#8212;> vm_area_struct </p>
<p>2.内存的申请或使用 </p>
<p>物理内存的分配， 在内核中最终都要调用__alloc_pages().它是最核心的分配函数，申请大小最大不超过2的MAX_ORDER次幂，在现在好像最大定义为4MB。 </p>
<p>线性地址， kmalloc和get_free_pages,线性地址， 对应的物理内存就是低端内存，kmalloc是基于slab的分配技术， 最大不能超过128KB。 </p>
<p>虚拟地址， vmalloc申请， 他只是在内核中建立类似与用户空间的vm_area的一个虚拟内存空间到vmlist中， 最终的物理内存分配还是基于缺页的。 </p>
<p>用户空间的虚拟内存， malloc之类的， 最终在内核中都是do_map()和do_brk()。实际上也只是建立了一块虚拟空间，最终的物理内存还是在缺页异常时分配的。 </p>
<p>3. 内存的交换问题 </p>
<p>在page结构和用户层的vm_area_struct结构中， 都包含locked和reserved标志。通过合适的途径设置这些标志， 可以是页面锁存在物理内存中， 不被交换出去。 </p>
<p>来源：赛迪网    作者：yan<br />
4. 设备内存可以通过ioremap映射到内核虚拟地址空间， 也可以通过mmap方法映射到用户空间。 </p>
]]></content:encoded>
			<wfw:commentRss>http://www.1uu2.com/archives/319/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

