读书笔记深入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;

    … …

};

 

 

 

 

原文地址:https://www.cnblogs.com/apprentice89/p/2808313.html