F2FS 文件流程浅析
本文简要梳理了 f2fs 文件系统的组织方式和操作流程。 f2fs 文件组织形式和典型流程 重要结构 文件结构 文件数据的组织方式一般时被设计为inode-data模式,即 每一个文件都具有一个inode,这个inode记录data的组织关系,这个关系称为文件结构。例如用户需要访问A文件的第1000个字节,系统就会先根据A文件的路径找到的A的inode,然后从inode找到第1000个字节所在的物理地址,然后从磁盘读取出来。那么F2FS的文件结构是怎么样的呢? 如上图,F2FS中的一个inode,包含两个主要部分: metadata部分,和数据块寻址部分。我们重点观察数据块寻址部分,分析inode时如何将数据块索引出来。在图中,数据块寻址部分包含direct pointers,single-indirect,double-indirect,以及triple-indirect。它们的含义分别是: direct pointer: inode内直接指向数据块(图右上角Data)的地址数组,即inode->data模式。 single-indirect pointer:...
编译调试内核方法
编译内核 一、从官网上下载源码,解压。 建议下载的内核与本机内核版本一致,这样可以直接使用本机的配置文件/boot/config-{version_name}进行编译。{version_name}字符串与本机的linux内核版本相关,如/boot/config-5.4.0。 二、编译之前,首先安装编译需要的依赖包 ubuntu下: 1sudo apt install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison pkg-config dwarves 三、进入下载的源码根目录,并将本机的配置信息拷贝到此处,命名为.config 1cp -v /boot/config-`uname -r` .config 使用这种方式可以沿用本机很多适合的配置,不必在接下来的配置过程中去处理过多不熟悉的配置项。 四、额外配置 配置文件中的额外配置 1make...
PCIE学习笔记(一)PCI
PCI是 Peripheral Component Interconnect (外设部件互连标准)的缩写,它曾经是个人电脑中使用最为广泛的接口,几乎所有的主板产品上都带有这种插槽。目前该总线已经逐渐被PCI Express总线所取代。 PCI 总线 PCI 总线是一种树型结构,并且独立于 CPU 总线,可以和 CPU 总线并行操作。PCI总线上可以挂接 PCI 设备和 PCI 桥, PCI 总线上只允许有一个 PCI 主设备(同一时刻),其他的均为 PCI 从设备,而且读写操作只能在主从设备之间进行,从设备之间的数据交换需要通过主设备中转。 PCI 配置空间 PCI 配置空间为256字节的固定空间,负责设备的信息提供和管理等。头部最开始的 deviceID 和 vendorID 寄存器由 pcisig 分配,只读,vendorID 代表 pci 设备的厂商,deviceID 代表厂商的具体设备。 Header Type 0xE偏移处是设备的 header type,决定了 PCI 配置头的布局和设备的类型。头类型有三种,在 PCIE 中只保留了前两种。 Type 0设备代表...
深度学习笔记II 多层感知机
玩樱之诗玩的 隐藏层与激活函数 隐藏层 我们通过矩阵X∈Rn×d\mathbf{X} \in \mathbb{R}^{n \times d}X∈Rn×d来表示nnn个样本的小批量, 其中每个样本具有ddd个输入特征。 对于具有hhh个隐藏单元的单隐藏层多层感知机, 用H∈Rn×h\mathbf{H} \in \mathbb{R}^{n \times h}H∈Rn×h表示隐藏层的输出, 称为隐藏表示(hidden representations)。 在数学或代码中,H\mathbf{H}H也被称为隐藏层变量(hidden-layer variable) 或隐藏变量(hidden variable)。 因为隐藏层和输出层都是全连接的, 所以我们有隐藏层权重W(1)∈Rd×h\mathbf{W}^{(1)} \in \mathbb{R}^{d \times h}W(1)∈Rd×h和隐藏层偏置b(1)∈R1×h\mathbf{b}^{(1)} \in \mathbb{R}^{1 \times h}b(1)∈R1×h以及输出层权重W(2)∈Rh×q\mathbf{W}^{(2)}...
深度学习笔记I 线性回归
为了进组开始机器学习 唉,不想练车 线性回归 线性模型 y^=w⊤x+b\hat{y} = \mathbf{w}^\mathbf{\top}\mathbf{x} +b y^=w⊤x+b 损失函数 样本iii的预测值为y^(i)\hat{y}^{(i)}y^(i),其相应的真实标签为y(i)y^{(i)}y(i) l(i)(w,b)=12(y^(i)−y(i))2l^{(i)}(\mathbf{w}, b) = \frac{1}{2} \left(\hat{y}^{(i)} - y^{(i)}\right)^2 l(i)(w,b)=21(y^(i)−y(i))2 总误差为 L(w,b)=1n∑i=1nl(i)(w,b)=1n∑i=1n12(w⊤x(i)+b−y(i))2L(\mathbf{w}, b) =\frac{1}{n}\sum_{i=1}^n l^{(i)}(\mathbf{w}, b) =\frac{1}{n} \sum_{i=1}^n \frac{1}{2}\left(\mathbf{w}^\top \mathbf{x}^{(i)} + b -...
2023-5-7-OOCPC学习笔记
嗯学英文Object-oriented programming with ansci-c Chapter 4 C结构体的储存结构取决于结构体定义中成员的排列顺序,柔性数组必须排列在最后。父类的内存应放在子类的最前面,以保证类型的向上转换后的内存访问是合法的。 类的标识符以及能被重写的函数都写在class结构体里面,但是无法适用于多种类型的继承 只有构造器逐层向上构造各子类延伸部分时会调用同层函数,即使这个函数会被下层子类继承并重写 重写过程发生在new函数的一开始,因此这种调用可能无法实现。在本层构造器中应调用本层函数的原名而不是标识名。 基于信息隐藏原则,子类不应直接访问父类信息,父类应提供静态函数接口或者宏来提供访问(宏本身并不是完全安全的) Chapter 6 classOf和sizeOf的作用是进行错误检查后分别返回类描述和类大小。 seletor传入的参数是实例指针,作用是调用classOf返回的类描述中储存的多态函数并调用。 紫辰presentation大纲 1. 什么是OOP捏 oop的特性(多态,继承……) 数据结构的定义 老生常谈的编程原则 2....
2023-2-24-病毒学习笔记~文件系统
病毒前置:文件系统相关的学习笔记 硬盘的物理结构 低级格式化 低级格式化的主要目的是将盘面划分成磁道、扇区和柱面 文件系统 基本INT 13H调用 BIOS INT...
2023-1-28画板制作笔记一
进bitman时写的画板,现在写一个笔记回忆下当时的思路。 任务内容 写一个类似于windows画图的画板程序,要求至少提供直线,正方形和圆三种图形,支持拖拽以及文件保存读取。 用到的Qt特性 基于知道啥用啥的原则,选择Qt作为sdk编写。Qt的特性决定了这个程序怎么架构。 信号和槽 属于Qt元对象机制的内容。 信号与槽(Signal & Slot)是 Qt 编程的基础,也是 Qt 的一大创新。因为有了信号与槽的编程机制,在 Qt 中处理界面各个组件的交互操作时变得更加直观和简单。 信号(Signal)就是在特定情况下被发射的事件,例如 PushButton 最常见的信号就是鼠标单击时发射的 clicked() 信号,一个 ComboBox 最常见的信号是选择的列表项变化时发射的 CurrentIndexChanged() 信号。 槽(Slot)就是对信号响应的函数。槽是一个函数,与一般的 C++ 函数一样,可以定义在类的任何部分(public、private 或...
python杂记
其他学习中碰到的python知识,做一个杂烩记录 迭代器和可迭代对象 迭代器是一个带状态的对象,它能在你调用next()方法时返回容器中的下一个值,任何实现了__iter__()和__next__()方法的对象都是迭代器,__iter__()返回迭代器自身,__next__()返回容器中的下一个值,如果容器中没有更多元素了,则抛出StopIteration异常。 12345678910111213141516171819class Fab(object): def __init__(self, max): self.max = max self.n, self.a, self.b = 0, 0, 1 def __iter__(self): return self def next(self): if self.n < self.max: r = self.b self.a, self.b = self.b, self.a +...