메모리 관리 관련 데이터 구조의 pgdata_t

3662 단어
메모리 관리 관련 개념 설명 관련 데이터 구조.주로
  • pg_data_t. 노드 표시 하기;
  • zone: 메모리 영역;
  • 페이지: 페이지 프레임;

  • pglist_data 정 의 는 다음 과 같 습 니 다.
    typedef struct pglist_data {
        struct zone node_zones[MAX_NR_ZONES];
        struct zonelist node_zonelists[MAX_ZONELISTS];
        int nr_zones;
    #ifdef CONFIG_FLAT_NODE_MEM_MAP /* means !SPARSEMEM */
        struct page *node_mem_map;
    #ifdef CONFIG_PAGE_EXTENSION
        struct page_ext *node_page_ext;
    #endif
    #endif
    #ifndef CONFIG_NO_BOOTMEM
        struct bootmem_data *bdata;
    #endif
    #ifdef CONFIG_MEMORY_HOTPLUG
        /*
         * Must be held any time you expect node_start_pfn, node_present_pages
         * or node_spanned_pages stay constant.  Holding this will also
         * guarantee that any pfn_valid() stays that way.
         *
         * pgdat_resize_lock() and pgdat_resize_unlock() are provided to
         * manipulate node_size_lock without checking for CONFIG_MEMORY_HOTPLUG.
         *
         * Nests above zone->lock and zone->span_seqlock
         */
        spinlock_t node_size_lock;
    #endif
        unsigned long node_start_pfn;
        unsigned long node_present_pages; /* total number of physical pages */
        unsigned long node_spanned_pages; /* total size of physical page
                             range, including holes */
        int node_id;
        wait_queue_head_t kswapd_wait;
        wait_queue_head_t pfmemalloc_wait;
        struct task_struct *kswapd; /* Protected by
                           mem_hotplug_begin/end() */
        int kswapd_max_order;
        enum zone_type classzone_idx;
    #ifdef CONFIG_NUMA_BALANCING
        /* Lock serializing the migrate rate limiting window */
        spinlock_t numabalancing_migrate_lock;
    
        /* Rate limiting time interval */
        unsigned long numabalancing_migrate_next_window;
    
        /* Number of pages migrated during the rate limiting time interval */
        unsigned long numabalancing_migrate_nr_pages;
    #endif
    
    #ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
        /*
         * If memory initialisation on large machines is deferred then this
         * is the first PFN that needs to be initialised.
         */
        unsigned long first_deferred_pfn;
        /* Number of non-deferred pages */
        unsigned long static_init_pgcnt;
    #endif /* CONFIG_DEFERRED_STRUCT_PAGE_INIT */
    } pg_data_t;
    
  • node_zones 는 노드 의 각 메모리 영역 (ZONE DMA, ZONE DMA 32, ZONE NORMAL...) 을 포함 하 는 배열 입 니 다.
  • node_zonelists 는 노드 의 예비 목록 을 지정 합 니 다.
  • nr_zones 는 노드 의 서로 다른 메모리 필드 수 를 표시 합 니 다.
  • node_mem_맵 은 노드 의 모든 물리 적 메모리 페이지 를 설명 합 니 다.노드 를 포함 하 는 모든 메모리 영역;
  • bdata 시스템 이 자체 메모리 분배 기 데이터 구조 인 스 턴 스 를 시작 합 니 다.
  • node_start_pfn 현재 NUMA 노드 첫 페이지 프레임 논리 번호.UMA 에 서 는 항상 0.
  • node_present_pages 노드 의 페이지 프레임 수;
  • node_spanned_pages 노드 는 페이지 프레임 단위 로 계 산 된 수량 입 니 다.공허 한 존재 로 인해 node 와 같 지 않 을 수 있 습 니 다.present_pages, node 보다 클 것 같 습 니 다.present_pages;
  • node_id 는 전역 노드 ID 입 니 다.
  • kswapd_wait: node 의 대기 열, 데 몬 열 프로 세 스 의 대기 목록 교환
  • kswapd_max_order: 방출 해 야 할 구역 의 길 이 는 페이지 단계 단위
  • 시스템 노드 가 하나 남 으 면 커 널 은 하나의 비트 맵 을 유지 하여 각 노드 의 상태 정 보 를 제공 하고 상태 정 보 는 enum 입 니 다.정 의 는 다음 과 같 습 니 다.
    enum node_states {
        N_POSSIBLE,     /* The node could become online at some point */
        N_ONLINE,       /* The node is online */
        N_NORMAL_MEMORY,    /* The node has regular memory */
    #ifdef CONFIG_HIGHMEM
        N_HIGH_MEMORY,      /* The node has regular or high memory */
    #else
        N_HIGH_MEMORY = N_NORMAL_MEMORY,
    #endif
    #ifdef CONFIG_MOVABLE_NODE
        N_MEMORY,       /* The node has memory(regular, high, movable) */
    #else
        N_MEMORY = N_HIGH_MEMORY,
    #endif
        N_CPU,      /* The node has one or more cpus */
        NR_NODE_STATES
    };
    

    좋은 웹페이지 즐겨찾기