Obsah

Detekce fyzické paměti

Paměťové zóny

typedef struct zone_strunct {
	spinlock_t lock;
	
	unsigned long free_pages;
	unsigned long pages_min;
	unsigned long pages_low;
	unsigned long pages_high;
	int need_balance;
	
	free_area_t free_area[MAX_ORDER];
	wait_queue_head_t *wait_table;
	unsigned long wait_table_size;
	unsigned long wait_table_shift;
	
	struct pglist_data *zone_pgdat;
	struct page *zone_mem_map;
	
	unsigned long zone_start_paddr;
	unsigned long zone_start_mapnr;
	
	char *name;
	unsigned long size;
} zone_t;

Adresní prostor

Přístup k paměti

typedef struct page {
	struct page *next;
	struct page *prev;
	
	struct inode *inode;
	unsigned long offset;
	
	struct page *next_hash;
	atomoic_t count;
	unsigned long flags;
	struct wait_queue *wait;
	struct page **prev_hash;
	struct buffer_head *buffers;
} mem_map_t;

Buddy system

Slab allocator

kmalloc()

vmalloc()

Alokace během bootu

Alokace paměti pro user space

Odkazy

  1. Bovet, Cesati: Understanding the Linux Kernel (O'Reilly)
  2. Nayani, Gorman, de Castro: Memory Management in Linux (LKDP)
  3. Gorman: Understanding The Linux Virtual Memory Manager (LKDP)
  4. Gorman: Code Commentary On The Linux Virtual Memory Manager (LKDP)