zoukankan      html  css  js  c++  java
  • 读书笔记Linux内核设计与实现part 4

    Chapter 15 进程地址空间

    是否共享地址空间几乎是进程和Linux中的线程间本质上的唯一区别。同一进程的几个线程的tassk_struct中mm域指向同一个struct mm_struct。

     

    内核线程的mm域为NULL(没有用户上下文)。

     

    VMA

    struct vm_area_struct;

     

    VMA操作函数:

    struct vm_area_struct* find_vma(struct vm_area_struct* mm, unsigned long addr);//search in RBTree

    struct vm_area_struct* find_vma_prev(struct mm_struct* mm, unsigned long start, unsigned long end);

    struct vm_area_struct* find_vma_intersection(struct mm_struct* mm, unsigned long start, unsigned long end);

     

    创建地址空间:

    mmap()和do_mmap()创建地址空间

    unsigned long do_mmap(struct file* file, unsigned long addr,

    struct long len,    unsinged long prot,

    unsgined long flag, unsigned long offset);

     

    int do_munmap(struct mm_struct* mm, unsigned long start, size_t len);

     

    页表:

    顶级页表是页全局目录(PGD),其下是PMT,再其下是PTE。

     

     

    多数体系结构都实现了一个TLB(Translate Lookaside Buffer),硬件加速映射解析。

     

    Chapter 16 页高速缓存和页回写

    写缓存:不缓存(nowrite)、写透缓存(write-through cache)、回写(write-back)。

    Linux采用回写策略。

    Linux使用struct address_space来管理缓存项和IO操作,struct address_space与vm_area_struct是对等体,一个文件可以被映射到5进程的10个VMA中,但只有一个address_space。

     

    flusher线程。

     

    Chapter 17 设备与模块》

    模块导出符号表:EXPORT_SYMBOL

    设备模型

     

     

  • 相关阅读:
    Looks like the Spring listener was not configured for your web app!
    数据库--加入字段语句
    Snail—OC学习之数组NSArray
    Primary Key & Index
    王立平--android中让程序终止退出的解决的方法 System.exit(0)
    Scala具体解释---------高速入门Scala
    NOI2014 起床困难综合症
    转自作者:phylips@bmy
    转自 void- man 差分约束系统详解
    精辟!
  • 原文地址:https://www.cnblogs.com/apprentice89/p/2798741.html
Copyright © 2011-2022 走看看