このページを編集する際は、編集に関する方針に従ってください。

概要

  • include/linux/mm.hにて定義
  • メモリリージョン
    • プロセス空間のテキスト領域、データ領域、ヒープ領域、スタック領域など論理的な領域を管理するために使用される構造体

実装

/*

* This struct defines a memory VMM memory area. There is one of these
* per VM-area/task.  A VM area is any part of the process virtual memory
* space that has a special rule for the page-fault handlers (ie a shared
* library, the executable area etc).
*/

struct vm_area_struct {

	struct mm_struct * vm_mm;	/* The address space we belong to. */
	unsigned long vm_start;		/* Our start address within vm_mm. */
  • この領域の開始アドレス
	unsigned long vm_end;		/* The first byte after our end address
					   within vm_mm. */
  • この領域の終了アドレス+1
	/* linked list of VM areas per task, sorted by address */
	struct vm_area_struct *vm_next;
	pgprot_t vm_page_prot;		/* Access permissions of this VMA. */
	unsigned long vm_flags;		/* Flags, listed below. */
  • フラグ
    フラグ名説明
    VM_READ0x00000001read可能
    VM_WRITE0x00000002write可能
    VM_EXEC0x00000004実行可能
    VM_SHARED0x00000008共有
    VM_MAYREAD0x00000010read可に設定可能
    VM_MAYWRITE0x00000020write可に設定可能
    VM_MAYEXEC0x00000040実行可に設定可能
    VM_MAYSHARE0x00000080共有に設定可能
    VM_GROWSDOWN0x00000100スタックがアドレスの低位に伸びる
    VM_GROWSUP0x00000200スタックがアドレスの高位に伸びる
    VM_SHM0x00000400共有メモリ領域
    VM_DENYWRITE0x00000800マップしているファイルのwriteを禁じる
    VM_EXECUTABLE0x00001000実行可能ファイル
    VM_LOCKED0x00002000ロックしている
    VM_IO0x00004000memory map I/O領域
    VM_SEQ_READ0x00008000先読みが利く
    VM_RAND_READ0x00010000先読みが利かない
    VM_DONTCOPY0x00020000fork時にコピーしない
    VM_DONTEXPAND0x00040000拡張不可
    VM_RESERVED0x00080000アンマップ不可
    VM_ACCOUNT0x00100000課金対象
    VM_HUGETLB0x00400000huga TLB(ラージページ)使用
    VM_NONLINEAR0x00800000vmaアドレス範囲内にvm_pgoffとずれたマッピングがある
	struct rb_node vm_rb;
	/*
	 * For areas with an address space and backing store,
	 * linkage into the address_space->i_mmap prio tree, or
	 * linkage to the list of like vmas hanging off its node, or
	 * linkage of vma in the address_space->i_mmap_nonlinear list.
	 */
	union {
		struct {
			struct list_head list;
			void *parent;	/* aligns with prio_tree_node parent */
			struct vm_area_struct *head;
		} vm_set;
		struct prio_tree_node prio_tree_node;
	} shared;
  • address_spaceリンク用
	/*
	 * A file's MAP_PRIVATE vma can be in both i_mmap tree and anon_vma
	 * list, after a COW of one of the file pages.  A MAP_SHARED vma
	 * can only be in the i_mmap tree.  An anonymous MAP_PRIVATE, stack
	 * or brk vma (with NULL file) can only be in an anon_vma list.
	 */
	struct list_head anon_vma_node;	/* Serialized by anon_vma->lock */
  • anon_vma構造体からのリンク用
	struct anon_vma *anon_vma;	/* Serialized by page_table_lock */
	/* Function pointers to deal with this struct. */
	struct vm_operations_struct * vm_ops;
	/* Information about our backing store: */
	unsigned long vm_pgoff;		/* Offset (within vm_file) in PAGE_SIZE
					   units, *not* PAGE_CACHE_SIZE */
  • ファイルオフセット
	struct file * vm_file;		/* File we map to (can be NULL). */
	void * vm_private_data;		/* was vm_pte (shared mem) */
  • プライベートデータ

#ifdef CONFIG_NUMA

	struct mempolicy *vm_policy;	/* NUMA policy for the VMA */

#endif };

履歴

  • 作者:ひら
  • 日付:2005/3/12
  • 対象:2.6.10
    更新日更新者更新内容

コメント

  • 1 -- 1? 2014-08-15 (金) 08:56:15
  • 1 -- 1? 2014-08-15 (金) 08:56:27
  • 1 -- 1? 2014-08-15 (金) 08:56:30
  • 1 -- -1'? 2014-08-15 (金) 08:56:33
    • 1' -- 1? 2014-08-15 (金) 08:56:36
  • 1 -- 1? 2014-08-15 (金) 08:56:38

  • 1 -- 1? 2014-08-15 (金) 08:56:28

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-08-15 (金) 08:56:38 (1160d)