`
waterlife
  • 浏览: 67886 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Linux内核之物理内存管理

阅读更多

Linux内核对于内存的管理摒弃了i386复杂的段式管理,而是采用了页式管理。Linux把整个的物理内存空间化为成一个个单独的页面,每页占4K空间大小。Linux把所有页面链接到一个全局的数组mem_map[]中,mem_map的每一个元素都是一个指针指向page数据结构。系统中的每个物理页面都对应着一个page数据结构,并根据需要把这些页面划分为不同的管理区:ZONE_DMA,ZONE_NORMAL和ZONE_HIGHMEM(用于物理内存超过1G空间的地址)。

 

typedef struct page {
	struct list_head list;		/* ->mapping has some page lists. */
	struct address_space *mapping;	/* The inode (or ...) we belong to. */
	unsigned long index;		/* Our offset within mapping. */
	struct page *next_hash;		/* Next page sharing our hash bucket in
					   the pagecache hash table. */
	atomic_t count;			/* Usage count, see below. */
	unsigned long flags;		/* atomic flags, some possibly
					   updated asynchronously */
	struct list_head lru;		/* Pageout list, eg. active_list;
					   protected by pagemap_lru_lock !! */
	struct page **pprev_hash;	/* Complement to *next_hash. */
	struct buffer_head * buffers;	/* Buffer maps us to a disk block. */

	/*
	 * On machines where all RAM is mapped into kernel address space,
	 * we can simply calculate the virtual address. On machines with
	 * highmem some memory is mapped into kernel virtual memory
	 * dynamically, so we need a place to store that address.
	 * Note that this field could be 16 bits on x86 ... ;)
	 *
	 * Architectures with slow multiplication can define
	 * WANT_PAGE_VIRTUAL in asm/page.h
	 */
#if defined(CONFIG_HIGHMEM) || defined(WANT_PAGE_VIRTUAL)
	void *virtual;			/* Kernel virtual address (NULL if
					   not kmapped, ie. highmem) */
#endif /* CONFIG_HIGMEM || WANT_PAGE_VIRTUAL */
} mem_map_t;

 

 

DMA管理区是单独进行管理的,不经过MMU映射,而一般的外设都对地址空间有一定的限制。地址空间不能太大,而且要求地址连续。

 

每个管理区都对应着一个zone_struct结构,这个结构体中有一组空闲队列free_area_t。这些队列中要有一个队列保持一些离散的物理页面,另一个队列要保持长度为2的指数的连续物理页面。

 

 

typedef struct zone_struct {
	/*
	 * Commonly accessed fields:
	 */
	spinlock_t		lock;
	unsigned long		free_pages;
	unsigned long		pages_min, pages_low, pages_high;
	int			need_balance;

	/*
	 * free areas of different sizes
	 */
	free_area_t		free_area[MAX_ORDER];

	/*
	 * wait_table		-- the array holding the hash table
	 * wait_table_size	-- the size of the hash table array
	 * wait_table_shift	-- wait_table_size
	 * 				== BITS_PER_LONG (1 << wait_table_bits)
	 *
	 * The purpose of all these is to keep track of the people
	 * waiting for a page to become available and make them
	 * runnable again when possible. The trouble is that this
	 * consumes a lot of space, especially when so few things
	 * wait on pages at a given time. So instead of using
	 * per-page waitqueues, we use a waitqueue hash table.
	 *
	 * The bucket discipline is to sleep on the same queue when
	 * colliding and wake all in that wait queue when removing.
	 * When something wakes, it must check to be sure its page is
	 * truly available, a la thundering herd. The cost of a
	 * collision is great, but given the expected load of the
	 * table, they should be so rare as to be outweighed by the
	 * benefits from the saved space.
	 *
	 * __wait_on_page() and unlock_page() in mm/filemap.c, are the
	 * primary users of these fields, and in mm/page_alloc.c
	 * free_area_init_core() performs the initialization of them.
	 */
	wait_queue_head_t	* wait_table;
	unsigned long		wait_table_size;
	unsigned long		wait_table_shift;

	/*
	 * Discontig memory support fields.
	 */
	struct pglist_data	*zone_pgdat;
	struct page		*zone_mem_map;
	unsigned long		zone_start_paddr;
	unsigned long		zone_start_mapnr;

	/*
	 * rarely used fields:
	 */
	char			*name;
	unsigned long		size;
} zone_t;

 

分享到:
评论

相关推荐

    linux内核内存管理

    Linux内核内存管理是操作系统中极为重要的一个部分,它涉及到操作系统如何高效、合理地使用物理内存资源以及虚拟内存资源。Linux内核内存管理机制包括页面类型与组织、页面回收逻辑、内存区域划分、页面分配策略、...

    linux内核内存管理图解

    Linux内核内存管理是操作系统设计中的关键部分,它负责有效地分配和管理系统的物理和虚拟内存。在Linux系统中,内存管理的复杂性在于它需要在多个进程之间共享有限的资源,同时确保系统的稳定性和高效性。以下是...

    linux内核开发-内存管理

    内存管理子系统是Linux内核的重要组成部分,它负责处理系统的物理内存资源。良好的内存管理不仅能够提高系统的性能,还能确保系统的稳定性和安全性。对于从事Linux内核开发的工程师来说,深入了解内存管理机制是必不...

    Linux内核的内存管理探秘之四 虚拟内存的管理.pdf

    Linux 内核的内存管理探秘之四 虚拟内存的管理 Linux 操作系统中,内存管理是非常重要的一部分。虚拟内存技术是现代操作系统中的一个关键技术,它克服了旧有的内存管理的限制,允许系统运行比物理内存大的应用程序...

    Linux内核的内存管理探秘之三 物理内存的管理(二)页面周转与缓冲区.pdf

    "Linux内核的内存管理探秘之三 物理内存的管理(二)页面周转与缓冲区" Linux内核的内存管理探秘之三 物理内存的管理(二)页面周转与缓冲区是Linux内核的内存管理机制中一个重要的部分。物理内存的管理是指操作系统...

    Linux内核分析-内存篇

    Linux内核的内存管理是操作系统核心功能之一,负责高效地分配和回收物理内存资源。为了更好地理解这一复杂的过程,本文将深入探讨Linux内核如何管理和组织内存资源。 #### 内存布局 Linux内核将内存分为几个关键...

    Linux内核内存管理.zip

    Linux内核内存管理是操作系统设计的关键部分,它负责有效地分配、使用和回收系统中的物理内存。在Linux系统中,内存管理机制确保了高效且可靠的内存使用,为各个进程提供了一个一致且安全的运行环境。本资料主要探讨...

    基于Linux内核的动态内存管理机制的实现.pdf

    此外,内核还包含了一些内存管理子系统,如伙伴系统和slab分配器,它们用于高效地管理物理内存和缓存。伙伴系统主要用于分配和回收连续的大块内存,而slab分配器则优化了小对象的分配和回收,减少了内存碎片。 实验...

    Linux内核的内存管理探秘之二 物理内存的管理(一)分配与回收.pdf

    《Linux内核的内存管理探秘之二:物理内存的管理(一)分配与回收》 在深入探讨Linux内核的内存管理时,物理内存的分配与回收是至关重要的环节。Linux内核采用了一种高效的分配算法——伙伴系统(Buddy System),其...

    linux源代码分析之内存管理

    Zone是Linux内核内存管理中的一个重要概念,它将整个系统的物理内存分割成多个区域(zone),每个区域包含了一定量的物理页。这种分层的方式有助于提高内存分配的效率。每个Zone都有自己的管理结构,包括自旋锁、空闲...

    Linux内存管理--Linux物理内存三级架构.pdf

    首先,内存节点(node)是Linux内核对物理内存的一种抽象表示。在一个计算机系统中,内存节点用于描述物理内存的分布情况。在一致存储结构(UMA)的计算机系统中,内存是均匀分布的,系统只有一个节点。然而,在非一致性...

    Linux内核设计与实现(第三版中文高清带目录)_linux_linux内核_

    这本书由Robert Love编写,是学习Linux内核不可或缺的经典之作。以下将从标题、描述以及标签中提炼出的关键信息,详细阐述Linux内核设计与实现的相关知识点。 1. **Linux内核的基本概念**:Linux内核是Linux操作...

    一文剖析 Linux 内核的内存管理.docx

    Linux 内核的内存管理是一种复杂的机制,它的主要任务是对物理内存进行组织和分配,并对虚拟地址进行映射。下面将对 Linux 内核的内存管理机制进行详细的剖析。 一、物理内存的组织 Linux 中的物理内存被组织成三...

    Linux内核完全注释:基于0.11内核(V5.0)_0.11内核_linux_linux内核完全注释_Linux内核注释_

    3. 内存管理:了解Linux如何分配和回收内存,包括物理内存的组织、虚拟内存的映射、页面缓存等机制。这些知识对于优化程序性能和避免内存泄漏至关重要。 4. 文件系统:Linux内核支持多种文件系统,如EXT2、EXT3、...

    linux内核知识系列:内存管理

    Linux内核内存管理是操作系统设计的核心部分,它负责有效地分配、使用和回收系统中的物理及虚拟内存。在Linux系统中,内存管理确保了程序的高效运行,防止数据损坏,并优化了系统的整体性能。本篇文章将深入探讨...

    Linux内核内存管理技术分享

    Linux内核内存管理技术分享 Linux内核内存管理技术是指Linux操作系统中管理计算机内存资源的机制。该技术涉及到计算机体系结构、MMU、Cache、DMA、EPT、虚拟地址空间布局、伙伴系统、SLAB、用户空间地址布局、匿名...

    深入理解LINUX内核(中文第三版)第八章 内存管理1

    在Linux内核中,内存管理包括了物理内存的分配与释放、虚拟内存的映射、缓存和页面替换策略等多个方面。 首先,我们需要了解Linux内核是如何组织物理内存的。Linux采用了一种称为页式内存管理的机制,将物理内存...

    Linux内核设计的艺术

    1. 系统管理能力:Linux内核的强大之处在于其高效的系统管理能力,它能够有效地调度和管理CPU、内存以及各种设备资源。系统调度器是内核的核心组件之一,负责为运行在系统上的进程分配CPU时间片,并根据不同的调度...

    Linux011-内存管理

    Linux0.11是一个早期版本的Linux内核,虽然相对简陋,但它的内存管理系统为我们理解现代Linux内核提供了基础。本节将深入探讨Linux0.11内核的内存管理机制。 1. **物理内存管理**: - Linux0.11内核通过页框管理器...

    Linux内核详细图解

    8. **内存管理**:Linux内核的内存管理系统包括虚拟内存、物理内存的分配和回收、页交换等机制,这些对于系统的稳定性和效率至关重要。 9. **进程管理**:内核负责进程的创建、调度、同步和通信,理解进程生命周期...

Global site tag (gtag.js) - Google Analytics