zoukankan      html  css  js  c++  java
  • [linux内存]伙伴系统学习笔记(二)--内存系统初始化

    1,本文大部分来自:http://blog.csdn.net/vanbreaker/article/details/7611585

    2,在start_kernel()-->paging_init()-->zone_sizes_init()-->free_area_init_nodes()-->free_area_init_node()-->free_area_init_core()-->init_currently_empty_zone()->zone_init_free_lists()中,free_area的相关域都被初始化

    [cpp] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. static void __meminit zone_init_free_lists(struct zone *zone)    
    2. {    
    3.     int order, t;    
    4.     for_each_migratetype_order(order, t) {    
    5.         /*链表初始化为空链表*/    
    6.         INIT_LIST_HEAD(&zone->free_area[order].free_list[t]);    
    7.         /*内存块数量初始化为0*/    
    8.         zone->free_area[order].nr_free = 0;    
    9.     }    
    10. }   



    start_kernel()-->mm_init()-->mem_init(),负责统计所有可用的低端内存和高端内存,并释放到伙伴系统中

    在free_area_init_core()-->memmap_init()(-->memmap_init_zone() )-->set_pageblock_migratetype(),将每个pageblock的起始页框对应的struct zone当中的pageblock_flags代表的位图相关区域标记为可移动的,表示该pageblock为可移动的,也就是说内核初始化伙伴系统时,所有的页都被标记为可移动的

    在内核首先通过setup_arch()-->paging_init()-->zone_sizes_init()来初始化节点和管理区的一些数据项其中核心函数为free_area_init_node(),用来针对特定的节点进行初始化

    至此,节点和管理区的关键数据已完成初始化,内核在后面为内存管理做得一个准备工作就是将所有节点的管理区都链入到zonelist中,便于后面内存分配工作的进行内核在start_kernel()-->build_all_zonelist()中完成zonelist的初始化

  • 相关阅读:
    DDoS deflate
    stm32串口
    王立平--GUI与GUILayout的差别
    DOM模型
    Android设计模式(十二)--抽象工厂模式
    Dynamics CRM 开启EmailRouter日志记录
    python in操作引发 TypeError
    为OLED屏添加GUI支持2:2D图形库
    Bloxorz I (poj 3322 水bfs)
    URAL 1823. Ideal Gas(数学啊 )
  • 原文地址:https://www.cnblogs.com/zhiliao112/p/4251210.html
Copyright © 2011-2022 走看看