还记得一个进程创建的时候是什么给它分配的“进程描述符”吗?没错,是slab分配器,那么,这个slab分配器是个什么东西呢?

      分配和释放数据结构是所有内核中最普遍的操作之一。为了便于结构的频繁分配和回收,编程人员常常会用到空闲链表。空闲链表中包含可供使用的,已经分配好的数据结构块。当代码需要一个新的数据结构实例时,就可以从空闲链表中抓取一个,而不需要再去执行一些分配内存的代码,这样不仅高效而且使用简单。以后,当不需要这个数据结构时,我们不能简单的释放这块内存,而是需要把它放回空闲链表中,毕竟,下次使用的时候我们还要使用呢。

      在内核中,空闲链表面对的一个主要问题就是不能全局控制。当可用内存变得紧缺时,内核无法通知每个空闲链表,让其收缩缓存的大小以便释放出一些内存来。实际上,内核根本不知道存在任何空闲链表。为了解决这个问题,Linux内核引入了slab层的概念。slab分配器扮演了通用数据结构缓存层的角色。

      slab层把不同的对象划分为高速缓存,其中每个高速缓存组中存放的都是不同类型的数据结构对象。例如,一个高速缓存用于存放进程描述符,另一个高速缓存用于存放i节点。

      之后,这些高速缓存又被划分为slab。slab由一个或多个物理上连续的页组成。一般情况下,slab也就仅仅一页。每个高速缓存可以由多个slab组成,下图显示的就是高速缓存,slab,数据结构对象三者的关系:、


      每个slab都包含一些数据成员,这里的成员指的是缓存的数据结构。每个slab处于三种状态之一:满,部分满或空。

      当内核的某一部分需要一个对象时,就要由slab分配了,首先考虑的是部分满的slab,如果不存在部分满的slab则去空的slab分配,如果也不存在空的slab,则内核需要申请页重新分配高速缓存。

      slab层的管理是在每个高速缓存的基础上的,通过给整个内核一个简单的接口来完成的。通过接口就可以创建和撤销高速缓存,并在高速缓存内分配和释放对象。高速缓存及其slab的复杂管理完全通过slab层的内部机制来处理。当你创建了一个高速缓存之后,slab层所起的作用就像一个专用的分配器,可以为具体的对象类型进行分配。

Linux2.6中的Slab层相关推荐

  1. oracle数据库有哪些文件构成,Oracle数据库架构中包括几层?每层都有什么元素?...

    Oracle数据库架构中包括几层?每层都有 什么元素? 1 PL/SQL代表 A PROCEDURAL LANGUAGE/SQL B PROGRAM LANGUAGE SQL C POWER LANG ...

  2. 求二叉树中第K层结点的个数

    一,问题描述 构建一棵二叉树(不一定是二叉查找树),求出该二叉树中第K层中的结点个数(根结点为第0层) 二,二叉树的构建 定义一个BinaryTree类来表示二叉树,二叉树BinaryTree 又是由 ...

  3. TF之BN:BN算法对多层中的每层神经网络加快学习QuadraticFunction_InputData+Histogram+BN的Error_curve

    TF之BN:BN算法对多层中的每层神经网络加快学习QuadraticFunction_InputData+Histogram+BN的Error_curve 目录 输出结果 代码设计 输出结果 代码设计 ...

  4. caffe中的batchNorm层(caffe 中为什么bn层要和scale层一起使用)

    caffe中的batchNorm层 链接: http://blog.csdn.net/wfei101/article/details/78449680 caffe 中为什么bn层要和scale层一起使 ...

  5. 网络中的七层协议与TCP/IP五层模型

    socket(套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程 ...

  6. (原)torch中微调某层参数

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6221664.html 参考网址: https://github.com/torch/nn/issues ...

  7. html遮罩实例,给原生html中添加水印遮罩层的实现示例

    效果图 代码 水印遮罩 .watermark_mask { position: fixed; top: 10px; } .hello { width: 500px; height: 2048px; m ...

  8. MVC中Model BLL层Model模型互转

    MVC中Model BLL层Model模型互转 一. 模型通常可以做2种:充血模型和失血模型,一般做法是模型就是模型,不具备方法来操作,只具有属性,这种叫做失血模型(可能不准确):具备对模型一定的简单 ...

  9. 求二叉树中结点个数代码java_求二叉树中第K层结点的个数

    一,问题描述 构建一棵二叉树(不一定是二叉查找树),求出该二叉树中第K层中的结点个数(根结点为第0层) 二,二叉树的构建 定义一个BinaryTree类来表示二叉树,二叉树BinaryTree 又是由 ...

最新文章

  1. 为什么你的工作经验不值钱
  2. 重载运算与类型转换——基本概念,输入和输出运算符,算术和关系运算符,赋值运算符,下标运算符,递增和递减运算符,成员访问运算符...
  3. javascript取随机数_查缺补漏一些 Javascript 的小技巧笔记
  4. Serverless 如何落地?揭秘阿里核心业务大规模落地实现
  5. 如何理解android的函数,通过Android源码理解回调函数
  6. 一起谈.NET技术,HubbleDotNet 和 Lucene.Net 匹配相关度的比较
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的宠物商城
  8. 碳酸铜行业调研报告 - 市场现状分析与发展前景预测
  9. git 停止维护了,官网无法下载
  10. 2018.07.09 顺序对齐(线性dp)
  11. head first 设计模式 java_吐血整理:Head First设计模式大全
  12. sas不能安装独立的java_SAS安装问题解决办法
  13. 将坐标系统保存为一个文件.prj
  14. 计算机组成原理平均cpi怎么算_计算机组成原理 第1--4章
  15. 子类可以重新定义父类的同名方法,并且允许他们有不同的返回值类型吗?
  16. 【源码分析】Spring Boot中Relaxed Binding机制的不同实现
  17. 网站被qq拦截应该怎么处理
  18. 编写lisp程序解一元二次方程_怎样用C语言编一个解一元二次方程的程序?
  19. 时隔24年,《失孤》原型父子相认!身体特征结合DNA对比,公安如何定位被拐儿童...
  20. html 图片repeat,html中repeat技术分享

热门文章

  1. js算法入门(2)--哈希表
  2. 前Duolingo秦龙博士归国创业:情定K12个性化学习
  3. @RequestBody, @ResponseBody 注解详解
  4. Android Hacks:在代码中隐藏软键盘
  5. App Store 状态列表
  6. 【090】Excel VBA 基础
  7. ExecuteNonQuery()返回受影响行数不适用select语句
  8. Ubuntu下Postgres安装与配置
  9. 脚手架koa2+mockjs
  10. [转]kaldi中的特征提取