EXFS的块分配策略
经过进一步的阅读代码,现昨天的一些观点似乎有些问题,把我的一些结论贴出来,请师兄指正。
1.在函数 exfs_blocklayout_get()中,有如下代码
Exfs_alloc_blocks()定义如下:
这里面涉及到三个概念
Blocks;segment blocks; alloc_bits;
这三个概念在代码中如下注释
Blocks是物理磁盘块,大小为4K
Segment是三级间址的粒度(和郭博交流后得出的结论,不是非常确定),默认大小是64k
Alloc bits 是描述每次layout分配的粒度参照值为1M
则 segment_length ==1 << allocbits << segment bits << 12(即为block bits)
造成之前的误解,主要是segment_length命名导致将其理解为 1 << segment bits << 12(即为blockbits);
最好改为alloc_length;
2在函数exfs_blocklayout_get()中,把要分配的长度截取为一个一个的segment_length之后,调用下面这个函数;
Exfs_get_blocknr_offset()入口参数是经过处理的被分配线性地址尾部的逻辑块的块号。
在 Exfs_get_blocknr_offset()中,
Segno是通过把iblock(逻辑块号)转换为以segment为粒度的偏移(如果把segment称为段,则为段号)
Exfs_block_to_path()函数是把此段号转换为三级间址编码,将每一级的偏移量放到offset[4]数组中。
其代码如下:
其中,各变量含义如下
ptrs:一个物理块上可以存放多少个物理地址。
ptrs_bits :ptrs有多少位 相等于sizeof(ptrs)
direct_blocks:三级间址的数组中,表示直接地址的数量
indirect和double分别代表二级和三级的数量。
若一个地址需要三级索引来表示。
offset[0]= EXFS_TIND_BLOCK;在i_data[]数组中的偏移量,即为三间址的一级地址
offset[1] 表示的是在第一级中的偏移量
offset[2]表示 第二级中的偏移量
offset[3]表示的是第三级中的偏移量
回到Exfs_get_blocknr_offset()函数,
此函数中,根据offset[] 和depth,解析三级间址,并把物理地址存到一个chain[]中,chain[]的类型为
typedef struct {
u32 *p;
u32 key;
struct buffer_head *bh;
} Indirect
其中,bh 指向间接索引块的内存缓存,p 指向此索引块中的某一个entry(一个entry对应一个物理块地址),而KEY的值为物理块(或者应该叫物理segment)的地址。
若exfs_get_branch()发现当前的逻辑地址已经在三级间址中,则返回NULL;否则返回查找过程的断点(即为现在文件的末尾),然后由后面的代码完成真正的分配。
EXFS的块分配策略相关推荐
- Kafka 原理以及分区分配策略剖析
欢迎关注方志朋的博客,回复"666"获面试宝典 一.简介 Apache Kafka 是一个分布式的流处理平台(分布式的基于发布/订阅模式的消息队列[Message Qu ...
- 《深入理解Java虚拟机》-----第3章 垃圾收集器与内存分配策略
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来. 3.1 概述 说起垃圾收集(Garbage Collection,G ...
- 《深入理解java虚拟机》笔记2——GC算法与内存分配策略
说起垃圾收集(Garbage Collection, GC),想必大家都不陌生,它是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如Sca ...
- 深入理解JVM(2)——GC算法与内存分配策略
说起垃圾收集(Garbage Collection, GC),想必大家都不陌生,它是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如Sca ...
- Memcache 内存分配策略和性能(使用)状态检查
一直在使用Memcache,但是对其内部的问题,如它内存是怎么样被使用的,使用一段时间后想看看一些状态怎么样?一直都不清楚,查了又忘记,现在整理出该篇文章,方便自己查阅.本文不涉及安装.操作.有兴趣的 ...
- JVM学习笔记之-堆,年轻代与老年代,对象分配过程,Minor GC、Major GC、Full GC,堆内存大小与OOM,堆空间分代,内存分配策略,对象分配内存,小结堆空间,逃逸分析,常用调优工具
堆的核心概述 概述 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域.Java堆区在JVM 启动的时候即被创建,其空间大小也就确定了.是JVM管理的最大一块内存空间. 堆内存的大小是可 ...
- 操作系统:第三章 内存管理2 - 详解虚拟内存,页面置换算法,页面分配策略
本文已收录至 Github(MD-Notes),若博客中有图片打不开,可以来我的 Github 仓库:https://github.com/HanquanHq/MD-Notes,涵盖了互联网大厂面试必 ...
- JAVA虚拟机之垃圾收集与内存分配策略
最近再看<深入理解JAVA虚拟机>周志明写的第二版.现将学习笔记分享出来,方便日后复习,理解有误的地方欢迎指正! 1.运行时数据区: 程序计数器:一块较小的内存空间,保存当前线程所执行的字 ...
- jvm(3)-垃圾收集器与内存分配策略
[0]README 0.1)本文部分文字转自:深入理解jvm,旨在学习 垃圾收集器与内存分配策略 的基础知识: [1]垃圾回收概述 1)GC(Garbage Collection)需要完成的3件事情: ...
最新文章
- 如何添加ORACLE 的 ODBC
- cookie的路径和域
- How to Analyze Java Thread Dumps--reference
- 分享十佳Web开发资源
- AngularJS从入门到实践(一)
- FLutter入门:异步加载组件FutureBuilder
- 使用密钥加密码加密_创建基于密码的加密密钥
- bazel 链接_bazel-链接第三方动态库,静态库。
- 有符号数与无符号数间的转换
- win7+cuda8.0+cudnn6.0+tensorflow-gpu1.3.0安装过程总结
- 浅谈OWASP TOP 10
- Hive--sql中的explode()函数和posexplode()函数
- mysql安装包下载与检核
- 风车im即时通讯源码
- 拳王虚拟项目公社:如何搭建虚拟资源解析站,全自动化卖会员网络赚钱项目
- 微博 用户画像_用户画像实例:创建可信的微博用户画像
- win10开机内存占用过高
- 景区宣传片制作的作用
- 电子邮件协议---SMTP,POP3,IMAP,MIME
- 百度代码配置化实践:配置化是业务架构三化之一
热门文章
- ur机器人编程-程序流程
- ECHAP:身份认证的安全协议
- 回首2019,瞻仰2020
- MaxCompute SQL大数据公开数据集实战
- 量子计算机需要消耗什么能量,量子计算机的功效如何?
- 微信小程序开发之——个人中心-个人资料修改(7)
- su oracle是什么意思,su 命令 以及 su oracle 与su - oracle 命令区别
- Zabbix Trapper items
- JAVA基础Day01
- 难过!能不能放下抢票套路,我只想买好好回家过年!我在网上抢火车票:多加了100元的加速包,却依然买不到票...