【操作系统】在阅读论文:OrcFS: Orchestrated file system for flash storage是需要补充的基础知

news2024/9/23 5:34:48

在阅读论文:OrcFS: Orchestrated file system for flash storage是需要补充的基础知识
这篇论文是为了解决软件层次之间的信息冗余问题

To minimize the disk traffic, the file system buffers the updates and then flushes them to the disk as a single unit, a segment (e.g.,2Mbyte), either when the buffer is full or when fsync() is called.

在这里插入图片描述The metadata area consists of the file system super block (FS-SB), checkpoint, segment information table (SIT), and node address table (NAT). The SIT manages the block
bitmap of each segment in the data area. The NAT manages the block address corresponding to
each node ID.

在这里插入图片描述

fsync

一、缓冲#
传统的UNIX实现的内核中都设置有缓冲区或者页面高速缓存,大多数磁盘IO都是通过缓冲写的。

当你想将数据write进文件时,内核通常会将该数据复制到其中一个缓冲区中,如果该缓冲没被写满的话,内核就不会把它放入到输出队列中。

当这个缓冲区被写满或者内核想重用这个缓冲区时,才会将其排到输出队列中。等它到达等待队列首部时才会进行实际的IO操作。
在这里插入图片描述
这里的输出方式就是大家耳熟能详的: 延迟写

这个缓冲区就是大家耳熟能详的:OS Cache

二、延迟写的优缺点#
很明显、延迟写降低了磁盘读写的次数,但同时也降低了文件的更新速度。

这样当OS Crash时由于这种延迟写的机制可能会造成文件更新内容的丢失。而为了保证磁盘上的实际文件和缓冲区中的内容保持一致,UNIX系统提供了三个系统调用:sync、fsync、fdatasyn

三、sync、fsync、fdatasync

#include<unistd.h>
int fsync(int filedes);
int fdatasync(int filedes);
int sync();

sync系统调用:将所有修改过的缓冲区排入写队列,然后就返回了,它并不等实际的写磁盘的操作结束。所以它的返回并不能保证数据的安全性。通常会有一个update系统守护进程每隔30s调用一次sync。

fsync系统调用:需要你在入参的位置上传递给他一个fd,然后系统调用就会对这个fd指向的文件起作用。fsync会确保一直到写磁盘操作结束才会返回。所以fsync适合数据库这种程序。

fdatasync系统调用:和fsync类似但是它只会影响文件的一部分,因为除了文件中的数据之外,fsync还会同步文件的属性。

缓存的意义:

系统调用是一件成本很高的事情,如果没有缓冲区,写一个数据就要传输一下,时间成本很高。缓冲区可以根据一定的策略进行数据的一次性传输,所以意义就是可以节省调用者的时间。

OrcFS的架构

在这里插入图片描述

基础知识补充

1.磁盘

磁盘是计算机上唯一一个机械设备,磁盘和我们现在电脑上的固态硬盘(SSD)不一样,固态硬盘是电子的,比起磁盘要快的多,但是价格比磁盘贵。磁盘现在只有一些公司存储大量数据的时候会用,因为成本低。

机械磁盘中主要的部件有:马达、磁盘、磁头等,磁盘有一摞,数据就记录在磁盘上面,一个磁盘有两面,就会有两个磁头,一个磁头负责一面的数据读写。磁头负责读写磁盘上的数据,马达负责转动磁盘。磁头和磁盘是不接触的,但是距离非常近,如果磁头接触了磁盘,就有可能把磁盘上的数据抹掉,造成数据丢失。所以磁盘是不能碰撞的,一旦磕碰就有可能会发生数据丢失,这也是被淘汰的原因

计算机是只能识别0和1的,那么在磁盘上怎么区分0和1呢?不同的设备区分0和1的方法不同,在磁盘上就是以南极北极区分0和1,磁盘的盘片上有无数的基本单元,每一个基本单元就是一个磁铁,磁铁就有南极和北极。所以写入数据的过程就是把N编程S,删除数据的本质就是S编程N。所以磁头读取数据就是读取南北极,写入数据就是更改南北极。

在这里插入图片描述

2.具体存储:

数据在盘面上存储的,而盘面是一个同心圆,那么根据什么规则来找到数据所在的区域呢?

把盘面分为多个扇面,每个扇面都有磁道划分扇区,数据就是存储在无数个扇区里面,每个扇区大小不同,但是存储的bit位是相同的,都是512字节,那么怎么找到对应的扇区呢? 一个磁盘有多个盘面,一个盘面对应一个磁头,所以可以给磁头定一个编号,根据磁头能找到盘面,而盘面相对位置都是一样的,所以就会有一个柱面,这个柱面就是磁道,然后根据扇面的编号就可以确定一个扇区。磁头(head)、柱面(cylinder)、扇区(sector)这种就是一种CHS定位法。根据这种方法可以定位任意一个扇区,把文件写入磁盘的本质就是给一个或者多个扇区写入二进制,或者读取多个扇区的二进制。
在这里插入图片描述

对磁盘物理结构的逻辑抽象

​ 一个磁盘通过CHS地址能够访问到任何一个扇区,那么OS内不能是不是通过CHS地址访问磁盘中的数据呢?并不是。一旦磁盘物理结构发生改变,OS就不能访问数据了,这样是为了OS和磁盘之间解耦。

一个扇区也就是512字节,但是OS读取数据的时候基本单位是4kb,哪怕OS只修改一个bit位OS也会把这一个bit位所在4kb全部读取,然后修改完成后再把4kb整体放回到原来的地方。所以操作系统需要有一套新的地址进行IO操作。
那么操作系统想要一次读取4kb(也就是8个扇区),怎么读取的呢?
把一个盘面抽象成一个数组。LBA方式读取数据

​ 磁盘的数据存储再盘面上,而盘面是一个同心圆,从最外圈到最内圈有无数个磁道,一圈磁道有许多扇区,如果把磁道拉伸成一个线性的,就像磁带一样,最开始读取数据是在最外圈,最后读取的数据是在最内圈。一个磁道拉伸出来就像一个长条,然后这个长条内有无数个扇区就像数组的空间,这样一圈磁道就被拉伸成了一个数组,内侧磁道拉伸成数组头部跟在外侧磁道尾部的后面,这样就可以把一个同心圆抽象成一个数组。
​ 计算机要读取一个内置类型或者自定义类型时,通常是起始地址+偏移量(数据类型)。OS读取4kb也就是8个扇区就是读取8个扇区空间的首地址。这4kb大小的类型,被称为块。把这个数据块看做一种数据类型。块的地址就是一个下标。这种读取数据的方式被称为LBA。

LBA转换成CHS方法,简单的转换,实际的转换方法一定要复杂得多。

//假设一个盘面有10圈磁道,一圈有500个扇区,一个盘面有5000个扇区。读取6500号数组下标
C:1500/500 = 3
H:6500/5000 = 1
S: 1500%500 = 0
到现在操作系统对磁盘的管理就变成了对数组的管理。

文件系统

​ OS对磁盘抽象为数组管理,每个数组空间为4kb,但是磁盘有着很大的空间,是以GB甚至是TB为单位的。用一个简单数组直接管理难度太大。所以会对磁盘进行分区,类似分C盘D盘,而每个区还是很大,所以每个区会分组(group)管理。
在这里插入图片描述
每个组内又分了各种区域存储不同的信息,把一个组管理模式可以复刻到每一个分组,这样就能管理好整个分区。

super block

这个分区内存放的是:
1.文件系统的类型
2.整个分组的情况
super block在每个分组里都存在,而且都存了文件系统的类型,是同时更新的同样的数据。主要是为了做多个备份,如果super block这个区域的数据没有备份而且损坏,直接导致整个分区的数据不能被使用。

Group Descriptor Table

简称GDT:组描述符,主要是记录组内详细统计等信息。例如每个区域的大小等等

inode table

linux系统中,内容和属性是分开存储的,一个文件的所有属性集合就是一个inode(128kb)节点,一个分组内也有大量的文件也就有大量的inode节点,这些inode节点都存储在inode
table表中,每一个inode节点都有自己的indoe编号,也属于对应文件的属性id。

Linux中查看inode编号ls -il

Date block

主要存储文件的内容数据,所有的文件的内容都被存储在Date block这个区域内。Linux查找一个文件必须先找到这个文件对应的inode节点的编号,通过indoe节点映射关系找到文件的内容。

inode bitmap

这个区域内的一个bit位表示一个inode的使用情况,0表示空可以使用,1表示被占用。

Linux系统只认识inode编号,并不存在文件名,文件名是给用户看的。

ref: https://blog.csdn.net/weixin_48344647/article/details/129925872

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1381040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二极管限幅电路理论分析,工作原理+作用

一、限幅是什么意思&#xff1f; 限幅也就是&#xff0c;将电压限制在某个范围内&#xff0c;去除交流信号的一部分但不会对波形的剩余部分造成影响。通常来说&#xff0c;限幅电路主要是由二极管构成&#xff0c;波形的形状取决于电路的配置和设计。二、限幅电路工作原…

流量预测中文文献阅读(郭郭专用)

目录 基于流量预测的超密集网络资源分配策略研究_2023_高雪亮_内蒙古大学&#xff08;1&#xff09;内容总结&#xff08;2&#xff09;流量预测部分1、数据集2、结果对其中的一个网格的CDR进行预测RMSE和R2近邻数据和周期数据对RMSE的影响 &#xff08;3&#xff09;基于流量预…

C语言实现简易n子棋小游戏(代码含注解)

利用C语言简单实现一个n子棋小游戏&#xff0c;棋盘大小由自己定义 将源文件分为 执行游戏的测试文件(test.c)和保存游戏运行逻辑的相关函数的文件(game.c) 头文件中声明符号和函数的定义(game.h) 游戏执行主要依靠二维数组实现&#xff0c;电脑走棋采用随机值的方法简易地…

【NI-DAQmx入门】LabVIEW中DAQmx同步

1.同步解释 1.1 同步基础概念 触发器&#xff1a;触发器是控制采集的命令。您可以使用触发器来启动、停止或暂停采集。触发信号可以源自软件或硬件源。 时钟&#xff1a;时钟是用于对数据采集计时的周期性数字信号。根据具体情况&#xff0c;您可以使用时钟信号直接控制数据采…

ElasticSearch概述+SpringBoot 集成 ES

ES概述 开源的、高扩展的、分布式全文检索引擎【站内搜索】 解决问题 1.搜索词是一个整体时&#xff0c;不能拆分&#xff08;mysql整体连续&#xff09; 2.效率会低&#xff0c;不会用到索引&#xff08;mysql索引失效&#xff09; 解决方式 进行数据的存储&#xff08;只存储…

ssm基于Javaweb的物流信息管理系统的设计与实现论文

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统物流信息管理难度大&#xff0c;容错率低&#xff0c;管理…

基于OpenCV的谷物颗粒识别

基于OpenCV的谷物颗粒识别 一、程序整体功能介绍1.1 导入库与函数定义1.2 颜色分割与灰度处理1.3 二值化与轮廓检测1.4 绘制与计数1.5 主程序与结果展示 二、算法原理与实现流程2.1算法原理&#xff08;1&#xff09;颜色分割&#xff08;2&#xff09;灰度处理与二值化&#x…

mysql进阶 - 存储过程

目录 1. 用途&#xff1a; 2. 相关语法 2.1 创建 2.1.1 语法 2.1.2 示例 2.2 查看存储过程 2.3 调用 2.4 修改存储过程 2.5 删除存储过程 1. 用途&#xff1a; 存储过程广泛存在于一些遗留系统&#xff0c;可以减少代码的编写。而近些年&#xff0c;存储过程很少再用…

【期末不挂科-C++考前速过系列P4】大二C++实验作业-继承和派生(3道代码题)【解析,注释】

前言 大家好吖&#xff0c;欢迎来到 YY 滴C考前速过系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《…

试用统信服务器操作系统UOS 20

作者&#xff1a;田逸&#xff08;formyz&#xff09; 试用统信Linux操作系统UOS&#xff0c;想了解一下用已有的Linux经验能否轻松驾驭它。以便在某些场景下&#xff0c;可以多一种选择。本次试验在Proxmox VE 8&#xff08;以下简称PVE 8&#xff09;平台下进行&#xff0c;采…

杨中科 .NETCORE ENTITY FRAMEWORK CORE-1 EFCORE 第一部分

一 、什么是EF Core 什么是ORM 1、说明: 本课程需要你有数据库、SOL等基础知识。 2、ORM: ObjectRelational Mapping。让开发者用对象操作的形式操作关系数据库 比如插入: User user new User(Name"admin"Password"123”; orm.Save(user);比如查询: Book b…

串行Nor Flash的结构和参数特性

文章目录 引言1、Nor Flash的结构2、Nor Flash的类别3.标准Serial Nor Flash的特征属性1.Wide Range VCC Flash2.Permanent Lock3.Default Lock Protection4.Standard Serial Interface5.Multi-I/O6.Multi-I/O Duplex (DTR)7.XIP&#xff08;片上执行&#xff09; 4.标准Serial…

【LabVIEW FPGA入门】LabVIEW FPGA 实现SPI通信协议

该实现由两个组件组成&#xff1a;在 LabVIEW FPGA 中实现的 SPI 协议以及用于从主机 PC 或实时控制器与 FPGA 进行通信的 LabVIEW 主机接口。该架构允许从单个主机程序控制多个 SPI 端口&#xff0c;同时仍然允许定制 FPGA VI 以进行其他数据采集和处理。该实现不使用任何DMA&…

运算电路(1)——加法器

一、引言 微处理器是由一片或少数几片大规模集成电路组成的中央处理器。这些电路执行控制部件和算术逻辑部件的功能。微处理器能完成取指令、执行指令&#xff0c;以及与外界存储器和逻辑部件交换信息等操作&#xff0c;是微型计算机的运算控制部分。它可与存储器和外围电路芯片…

FasterNet(CVPR 2023)论文解读

paper&#xff1a;Run, Dont Walk: Chasing Higher FLOPS for Faster Neural Networks official implementation&#xff1a;https://github.com/jierunchen/fasternet 存在的问题 为了设计轻量、速度快的网络&#xff0c;许多工作都专注于减少floating-point operations (F…

点餐新体验:老板自研扫码点餐小程序的成果

为了提高餐厅的效率和顾客的用餐体验&#xff0c;餐饮店老板们纷纷开始探索新的技术手段。其中&#xff0c;扫码点餐小程序就是一种非常受欢迎的解决方案。 扫码点餐小程序是一种基于微信小程序开发的餐饮点餐系统&#xff0c;它通过扫描桌码或菜品二维码&#xff0c;实现快速点…

图神经网络|图注意网络Graph Attention Network

图注意网络Graph Attention Network Leaky ReLU 有利于压低负数对结局的影响。 图注意网络Graph Attention Network的流程 输入向量 h i h_i hi​乘上权重矩阵W得到对应的向量 h i ∗ h_i^* hi∗​,并将 h i ∗ h_i^* hi∗​计算出对应的 a i a_i ai​,从而得到最终对结果向量…

2023年第十四届中国数据库技术大会(DTCC2023):核心内容与学习收获(附大会核心PPT下载)

随着信息化时代的深入发展&#xff0c;数据库技术作为支撑信息化应用的核心技术&#xff0c;其重要性日益凸显。本次大会以“数据价值&#xff0c;驱动未来”为主题&#xff0c;聚焦数据库领域的前沿技术与最新动态&#xff0c;吸引了数千名业界专家、企业代表和数据库技术爱好…

STL篇一:string

文章目录 前言1. STL的简单理解1.1 什么是STL1.2 STL的版本1.3 STL的六大组件1.4 STL的重要性1.5 STL的缺陷 2. string类2.1 为什么学习string类&#xff1f;2.1.1 C语言中的字符串2.1.2 两个面试题 2.2 标准库中的string类2.2.1 string类(了解)2.2.2 string类的常用接口说明 2…

Selenium 测试 Electron 应用

Electron 介绍 Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript代码代码库并创建 在Windows、macOS和Linux上运行的跨平台应用。 • 有哪些应用 有许多我们常见的桌面应用&am…