1. 程式人生 > >linux 的 page 結構體的一點筆記

linux 的 page 結構體的一點筆記

/*
* Each physical page in the system has a struct page associated with
* it to keep track of whatever it is we are using the page for at the
* moment. Note that we have no way to track which tasks are using
* a page, though if it is a pagecache page, rmap structures can tell us
* who is mapping it.
*/
struct page {
    unsigned long flags;        /* Atomic flags, some possibly
                     * updated asynchronously */
    atomic_t _count;        /* Usage count, see below. */
    union {
        atomic_t _mapcount;    /* Count of ptes mapped in mms,
                     * to show when page is mapped
                     * & limit reverse map searches.
                     */
        struct {        /* SLUB */
            u16 inuse;
            u16 objects;
        };
    };
    union {
        struct {
        unsigned long private;        /* Mapping-private opaque data:
                          * usually used for buffer_heads
                         * if PagePrivate set; used for
                         * swp_entry_t if PageSwapCache;
                         * indicates order in the buddy
                         * system if PG_buddy is set.
                         */
        struct address_space *mapping;    /* If low bit clear, points to
                         * inode address_space, or NULL.
                         * If page mapped as anonymous
                         * memory, low bit is set, and
                         * it points to anon_vma object:
                         * see PAGE_MAPPING_ANON below.
                         */
        };
#if USE_SPLIT_PTLOCKS
        spinlock_t ptl;
#endif
        struct kmem_cache *slab;    /* SLUB: Pointer to slab */
        struct page *first_page;    /* Compound tail pages */
    };
    union {
        pgoff_t index;        /* Our offset within mapping. */
        void *freelist;        /* SLUB: freelist req. slab lock */
    };
    struct list_head lru;        /* Pageout list, eg. active_list
                     * protected by zone->lru_lock !
                     */
    /*
     * 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(WANT_PAGE_VIRTUAL)
    void *virtual;            /* Kernel virtual address (NULL if
                       not kmapped, ie. highmem) */
#endif /* WANT_PAGE_VIRTUAL */
#ifdef CONFIG_WANT_PAGE_DEBUG_FLAGS
    unsigned long debug_flags;    /* Use atomic bitops on this */
#endif

#ifdef CONFIG_KMEMCHECK
    /*
     * kmemcheck wants to track the status of each byte in a page; this
     * is a pointer to such a status block. NULL if not tracked.
     */
    void *shadow;
#endif
};

相關推薦

linuxpage 結構一點筆記

/* * Each physical page in the system has a struct page associated with * it to keep track of whatever it is we are using the page for at the * moment. Not

linux核心page結構的PG_referenced和PG_active標誌

linux核心使用了lru演算法來置換記憶體頁面,但是實際上並不是純的lru演算法,裡面摻雜了很多別的思想,比如第二次機會,比如雙時鐘指標等等。這裡著重說一下第二次機會的體現。在核心中有一個mark_page_accessed函式,它實際上體現一個狀態機,這是它的實現: if

linux結構對齊【轉】

src double 無需 fine types 查看 真理 blog 多個 轉自:https://blog.csdn.net/suifengpiao_2011/article/details/47260085 linux中定義對齊字節 typedef struct

Linux 變數結構等命名規則

1  識別符號 在程式設計中,變數名、函式名、陣列名等統稱為識別符號。簡單地說,識別符號就是一個名字。除庫函式的函式名由系統定義外,其餘都由使用者自定義。C語言規定,識別符號只能由字母(a~z,A~Z)、數字(0~9)、下劃線(_)組成,並且識別符號的第一個字元必須是字母或下劃線,不能以數字開頭。C語言

linux C 結構struct的定義和初始化

struct 定義: struct test { int a; long b; float c; char d; char e[]; }tt1,tt2;//物件宣告列表緊跟struct定義 struct test tt3,tt4;//單獨宣告物件列表 //宣告一個沒結構體名

Linux結構的記憶體分配問題

不要用sizeof(struct gg),這個不能說明問題,你需要在定義一個gg的變數後,再在其後定義另一個變數,將這兩個變數的地址相減才能求出實際結果,而且你的測試一定是在VC中,GCC中是4個位元組的不能用這種方式來求結構體佔用的空間,這是不準確的,不過在另一種程度上可以說得過去,因為結構體地址是被4整除

linux通過結構struct resource描述一個具體的硬體

linux對掛接在4G匯流排空間上的裝置實體的管理方式 -- struct resource/usr/src/linux-2.6.21.5/include/linux/ioport.hstruct re

結構學習筆記3——結構取成員運算符

兩種 style stdlib.h 變量定義 tdi urn 飛揚 單獨 span 訪問成員:學會之後可以對結構體中的成員,單獨進行操作。 結構體訪問成員分兩種:1,對結構體實例變量的訪問 2,對結構體指針變量的訪問。 struct Stu stu1;//實例變量就

結構學習筆記6——結構嵌套

%d class std {} 當前 system 學習 use pau 結構體嵌套就是 在當前的結構體內的一個成員是另一個整體的結構體變量! struct Stu { char name[10]; int age; }; struct Te

結構學習筆記7——結構數組

truct struct %s \n 元素 結構體類型 類型 char printf 結構體數組:有一個數組,每個元素是一個結構體類型。 #include <stdio.h> #include <stdlib.h> struct Teach

學習筆記 linux 結構位元組對齊

     網路位元組序傳傳輸的,結構體要用一位元組對齊,否則會因為預設對齊方式而造成程式資料異常,如下圖結構體,預設對齊方式下,結構體長度為2+2+2+2=8;一位元組對齊方式下,結構體長度為1+2+2+2=7  #pragma pack(1) typedef struc

Linux下C結構初始化

直觀 tro 擴展性 方式 建議 struct 初始化方式 www 寫到 原文地址在這裏: http://www.cnblogs.com/Anker/p/3545146.html 我 只把裏面的主要介紹和代碼寫到這裏了. 順序初始化   教科書上講C語言結構體初始化

【2017-07-01】Linux應用開發工程師面試問題記錄之二:關於結構的大小及內存對齊問題

偶數 而且 strong span net 但是 開發 f11 flag Tencent後臺服務器開發有一道題是計算一個結構體的sizeof的大小: struct strData { int m_Int; char m_Char; short m_Short; char

golang筆記(1)-數據庫查詢結果映射至結構

tint 地址 style 定義數據 range con clas num end 通用的映射模式 query:="select id,name from user where id=?" //單個結構體ret:=&Activity{} DbClient(

Linux系統結構目錄、ls命令、文件類型、alias命令筆記

linux系統結構目錄 文件類型 ls命令 alias命令 Linux系統結構目錄: 使用ls命令查看根目錄就可以看到系統結構目錄:useradd命令可以創建一個普通用戶:安裝tree命令: tree命令可以樹形的方式顯示目錄結構,在CentOS7中的最小化安裝tree命令是需要自己手動安

c語言學習筆記.結構.

成員訪問運算符 div 成員 bsp tro truct 年齡 可用 語言學 結構體:   一種用戶自定義的可用的數據類型,它允許您存儲不同類型的數據項。 定義/聲明: struct 類型名{ 成員1; 成員2; ... 成員n; } 變量

c語言執行linux命令並通過結構返回每行命令的輸出

打印 linux pop sscanf [] #define ufs pan pipe #include <stdio.h> #include <stdlib.h> #include <unistd.h>

關於指針和結構一點教訓

地址 usart 但是 image 分代 數據 圖片 數值 inf 在DMA控制中,我使用了這樣的一部分代碼,想實現從內存到外設 的數據搬運。 後來經過仔細查證,發現了指針的一些基礎不牢。現總結如下: 圖中的外設地址寫的為USART1,其地址為0x40011000,而

Linux進程描述符task_struct結構詳解--Linux進程的管理與調度(一)【轉】

mage ase 設備 兩種 等價 而且 當前 結構體 技術 Linux內核通過一個被稱為進程描述符的task_struct結構體來管理進程,這個結構體包含了一個進程所需的所有信息。它定義在include/linux/sched.h文件中。 談到task_struct結構體

go學習筆記-結構

結構體 結構體是由一系列具有相同型別或不同型別的資料構成的資料集合 定義 格式 type struct_variable_type struct { member definition; member definition; ... member definition; }