zoukankan      html  css  js  c++  java
  • 读书笔记深入linux内核架构Chapter 1

    《第一章》简介和概述

    实现策略:微内核、宏内核

    命名空间:全局资源具有不同的分组

    由于被中断的进程与中断原因没有什么关系,因此内核无权访问被中断进程用户空间的内容。

     

    页表

    虚拟地址的分割:

    clip_image002

    页表的一个特色在于:对虚拟地址空间中不需要的区域,不必创建中间页目录或者页表,与直接使用一级页表数组的方式相比,节省了大量的内存。

    加速转换:1.MMU硬件支持,2.TLB硬件缓存(有些架构下TLB运转透明,有些需要内核专门处理)

    内存映射:内存映射是一种重要的抽象手段,可以将任意来源的数据传输到进程的虚拟地址空间,映射到的这部分虚拟地址空间可以像内存一样被操作,其上的修改会被内核自动传输到数据源。这样就可以使用相同的函数处理不同的目标对象。

     

    物理内存分配

    伙伴系统:

    clip_image004

    伙伴系统一定程度上可以减少碎片,但不能完全消除。

     

    slab缓存:

    内核经常需要比一个页帧小得多的一块内存。内核使用slab机制。

     

    伙伴系统、slab缓存、内核其他部分的联系:

    clip_image006

     

    系统调用分类:

    进程管理、信号、文件、目录和文件系统、保护机制、定时器函数。

     

    VFS

    clip_image008

     

    对象管理和引用计数:

    内核采用了一般性的方法来管理(例如引用计数)内核对象。管理操作包括 引用计数、管理对象链表、集合加锁、将对象属性导出到用户空间(via sysfs)。

    struct kobject {

        constchar * k_name;

        struct kref kref;

        struct list_head entry;

        struct kobject * parent;

        struct kset * kset;

        struct kobj_type * ktype;

        struct sysfs_dirent * sd;

    };

     

    kobject嵌入到其他数据结构中

    struct sample {

        … …

        struct kobject kobj;

        … …

    };

     

     

     

     

  • 相关阅读:
    关于参数,集合的演示
    Process
    常见的IT 日语
    C#格式化数值
    提高C#编程水平的50个要点
    .net中C#代码与javaScript函数的相互调用问题
    Rundll32.exe
    徐家骏:我在华为工作十年的感悟
    转换人民币大小金额
    29个Ajax Javascript相册资源
  • 原文地址:https://www.cnblogs.com/apprentice89/p/2808313.html
Copyright © 2011-2022 走看看