FAT:磁盘上数据组织格式综述 (阿甘译)

实测对比:DINOv2、CLIP、ResNet在图像相似度任务上谁更强?(含Python代码与避坑指南) 本文通过实测对比DINOv2、CLIP和ResNet在图像相似度任务中的表现,提供Python代码实现与避坑指南。实验结果显示,DINOv2在精度上表现最佳,CLIP在多模态场景中优势明显,而ResNet则在计算效率上更优。文章还针对不同业务场景给出了具体选型建议,帮助开发者在图像搜索和版权检测等项目中做出更明智的技术决策。 阅读详情

////////////////////////////////////////////////////////////////////////////////////////////////////////
   这篇文档中记法的约定:
    
   有前缀"0x"的数字都是16进制数字。
   任何其他没有前缀"0x"的数字都是10进制数字。
   本文档里面所有代码片段都是使用的'C'语言。但没有严格遵从其代码输入规范和语法。
   本文档中某些代码片段混合使用了32位和16位的数据元素。我们假设你是一个知道怎样正确将32位数据转换成16位数据(保证数据不丢失)的程序员。同时,必须注意,所有的数据类型都是无符号的。不要使用有符号整型数据来进行FAT表所需的计算,因为这样计算得到的结果对某些FAT系统是错误的。
  
   一般性概念(适合所有类型的FAT文件系统)
  
    所有的FAT文件系统最早是为IBM PC架构开发的。很重要的一点是:磁盘上FAT文件系统的数据结构都是"小端的"(一种数据存储组织形式)。让我们先看看一个32位的FAT表项,它是以4个8位字节形式存储在磁盘上的-----第一个字节是byte[0],最后一个字节是byte[4]------下面显示的是一个32位的数据,从00标识,一直到31。(00位是最不重要的一位)<原文如此!"00 being the least significant bit">

    byte[3]          3  3  2  2  2  2  2  2
                         1  0  9  8  7  6  5  4

    byte[2]          2  2  2  2  1  1  1  1
                         3  2  1  0  9  8  7  6

    byte[1]          1  1  1  1  1  1  0  0
                         5  4  3  2  1  0  9  8

    byte[0]          0  0  0  0  0  0  0  0
                         7  6  5  4  3  2  1  0

    如果你使用的机器是基于"大端"的,上面的一些原则就显得很重要了。因为当你想和磁盘进行数据交换,你就必须在大端和小端之间转换。

   一个FAT文件系统是由以下四个基本区组成的,它们是:

     0 --- 保留区
     1 --- FAT区
     2 --- 根目录区(在FAT32系统中不存在)
     3 --- 文件和目录数据区

////////////////////////////////////////////////////////////////////////////////////////////////////////
    启动扇区和BPB(Bios Parameter Block)

    在FAT系统中,首先碰到的一个很重要的数据结构就是BPB(BIOS Paramerer Block),它被放在保留区的第一个扇区中。这个扇区也被叫做"启动扇区"、"保留扇区"或者"第0扇区",很重要的一点就是,它处在系统的第一个扇区。
    关于FAT文件系统,有一点常常被混淆。在MS-DOS 1.x 版本中,启动扇区里并没有BPB结构。在FAT文件系统的第一个版本中,仅仅有两中不同的形式,一个支持单面,一个支持双面360K 5.25-inch的软盘。要判断磁盘上的文件系统的类型,必须查看FAT表的第一个字节(FAT[0]的低8位)。
    上面这种媒体类型的判断方法已经被在MS-DOS 2.x中,放入一个BPB结构到启动扇区的方法取代了,并且老式的方法 (通过查看FAT表的第一个字节)已经不再被支持。所有FAT系统都有一个BPB结构放置在启动扇区。
    这又会给我们带来FAT系统类型辨别的第一点困惑:BPB结构到底象什么样子呢?MS-DOS 2.x 启动扇区里的BPB结构严格限制FAT系统的大小不能大于65,536个扇区(32MB,每扇区512字节)。这个限制是由于FAT表中的"total sectors"域是一个16位域。这个限制在MS-DOS 3.x中被修正了,通过将BPB结构修改成能够包含32位域来扩大支持的扇区总数。
    下一个BPB的变化发生在WINDOWS 95操作系统下,同时FAT32被引进。FAT16限制了FAT表的最大尺寸和最大可用簇的大小不能超过 2GB (假定磁盘是512字节每扇区)。FAT32修改了这个磁盘容量的限制,使得FAT系统能够存在于容量大于2GB 只分一个区的磁盘上。

     FAT32的BPB结构能够完美的向下兼容FAT12/FAT16的BPB结构,并增加了一个域——BPB_TotSec32。它们从偏移36处开始根据是FAT12/FAT16还是FAT32,而有所不同(请看下面关于FAT类型的讨论)。这里相关点是:FAT系统启动扇区里的BPB结构应该总是含有新增的BPB域,以便于FAT12/FAT16或者FAT32都可以使用。这样,既能保证FAT文件系统有最好的兼容性,又能保证所有的FAT系统的驱动都能分辨,以便于更好的支持文件系统。因为总是包含了所有定义过的域。
    
    注意:在下面的描述中,所有以BPB_为前缀命名的域都是BPB的一部分。所有以BS_为前缀命名的域都是启动扇区的一部分,并不属于BPB。下面显示了一个FAT文件系统的0扇区的起始部分,它包含了BPB结构。

图1

从这里开始,FAT12和FAT16的BPB结构/启动扇区开始和FAT32的有所不同,下面第一个表显示了FAT12和FAT16启动扇区偏移36以后的结构:

 

让 PyCharm 代码“发光”:高亮插件与特效全攻略 PyCharm 作为一款强大的 Python IDE,支持多种插件让代码“发光”——无论是动态输入特效、彩虹括号,还是霓虹主题,都能让你的代码脱颖而出!进入 File → Settings → Editor → Color Scheme → Rainbow Brackets。进入 File → Settings → Appearance & Behavior → Material Theme。进入 File → Settings → Editor → Color Scheme → General。 阅读详情

相关推荐

SRAM Bank数量配置:性能、面积与功耗的权衡指南

SRAM(静态随机存取存储器)是芯片设计中的关键存储单元,其Bank数量配置直接影响访问延迟、吞吐率、功耗和面积。Bank切分通过将存储阵列分区,缩短位线和字线延迟,从而提升性能,但会增加外围电路开销。合理配置Bank数量可优化PPA(性能、功耗、面积),在28nm和16nm工艺下,2个Bank通常是性价比最高的选择。本文基于实测数据,探讨不同场景下的Bank配置策略,帮助工程师避免常见误区,提升设计效率。

weixin_27230891的博客 179

FAT文件系统解析(阿甘译)

http://www.nondot.org/sabre/os/files/FileSystems/fatFilesystem.txt原文作者: Inbar Raz/////////////////////////////////////////////////////////////////////////////////////////////////////////////////  

6306

论文理解【LLM-OR】——【Step-Opt】Training LLMs for Optimization Modeling via Iterative Data Synthesis and

本文提出 Step-Opt-Instruct 方法,针对用 LLM 做 OR 问题求解任务,用迭代问题生成 + 分步验证机制实习更可靠的训练数据合成,从而微调开源 LLM 得到 Step-Opt。在多个 OR 建模基准提升性能,尤其在复杂问题上提升更明显

佚失的诗篇 805

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

网络工程师软考通关指南:网络新技术与应用深度解析

网络安全与管理是网络工程师必须掌握的核心技能,华为设备在企业网络中广泛应用。建议考生在理解安全原理的基础上,重点掌握华为特有的命令体系和配置方法,通过模拟实验加深理解。下篇文章将深入讲解"网络优化与QoS"章节,涵盖流量调度、拥塞避免、服务质量等关键技术,敬请期待。

Programming Talk 253

手把手教你YOLOv8/YOLOv11分割训练自己数据集和推理,并教你使用Labelme工具标注数据(附分割网络结构图)

YOLOv8-seg 和 YOLOv11-seg 都是一种高效实例分割算法,实例分割模型的输出是一组勾勒出图像中每个物体的遮罩或轮廓,以及每个物体的类标签和置信度分数。当你不仅需要知道物体在图像中的位置,还需要知道它们的具体形状时,实例分割就非常有用了,功能非常强大,可以应对各种视觉任务。 YOLOv11-seg 则在 YOLOv8-seg 基础上进一步魔改了模型架构,相对分割速度可能更快,其他指标性能有待测试。实例分割可以用于自动驾驶、医疗图像处理、智能农业监控等领域。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 4475

【数据结构】基于比较的排序算法 - 交换排序

本文介绍交换排序中的冒泡排序与快速排序。冒泡排序通过相邻元素比较交换,实现升序,时间复杂度最坏为O(N²),空间复杂度O(1),稳定且适合小规模有序数据。快速排序采用分治思想,以基准值划分区间,平均时间复杂度O(N log N),空间复杂度O(log N),但不稳定,实际应用中性能优异,可通过随机基准、小区间优化等提升效率。

careathers的博客 341

Linux 完全卸载 Neovim 的方法:解决权限问题和清除残留文件

Neovim 没有被完全卸载的原因,可能是因为它是通过非官方方式(如手动编译或二进制包)安装的。对于这种情况,使用apt卸载命令无法删除这些文件。因此,需要手动删除和中的相关文件。建议在安装软件时,尽量使用包管理器(如apt)进行安装,以便以后能够方便地卸载。如果你不太熟悉 Linux 系统,避免手动操作系统目录,除非你非常清楚自己的操作。通过上述方法,你应该能够彻底卸载 Neovim 并重新安装。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 4941

【数据结构-5】单链表的实现

单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。

weixin_44218929的博客 185

华为OD技术面八股文_C++_02

汇总华为OD面试C++方面计数八股文真题,提供详细解答。

qq_45776114的博客 765

PTP(确时间协议,Precision Time Protocol)时间同步

主时钟定期发送带预估发送时间 t1 的报文(若支持硬件时间戳,实际 t1​ 由后续的Follow_Up报文携带)。所有设备启动后通过协商选举出唯一主时钟(Grandmaster),其余设备自动成为从时钟(Slave)。:从时钟记录接收时间 t2,随后向主时钟发送Delay_Req并记录发送时间 t3​。若使用支持PTP的交换机,可修正报文在交换机内的驻留时间,进一步提升精度。从时钟根据offset调整本地时钟,实现与主时钟同步。动态调整本地时钟,抵消传输延迟和时钟漂移。(或通过BMCA自动当选)。

努力努力努力 1303

C# 数据结构和特殊类型

.NET Core(现称.NET)提供丰富数据结构,优化性能与开发效率。日常开发首选List<T>和Dictionary<TKey,TValue>;高性能场景推荐Span<T>与Memory<T>减少内存分配;并发环境使用ConcurrentDictionary等线程安全集合;避免非泛型集合如ArrayList。

cccloveforever的博客 673

Python 爬虫实战:爬取 GitHub 热门项目(星数 / 语言 / 作者)

本文系统介绍了使用Python爬虫技术获取GitHub热门项目数据的完整方案。通过分析GitHub Trending页面和官方API两种数据源,详细讲解了HTML解析、JSON数据处理、反爬应对策略等关键技术。采用requests、BeautifulSoup、pandas等工具链,实现了项目信息(名称、星数、语言等)的结构化爬取,并配套数据清洗、统计分析及可视化功能。特别强调遵守GitHub API使用规范,包括Token认证、请求频率控制等合规要求。该方案为开发者提供了一种高效、合法的数据采集方法,适用于

2503_91057718的博客 2342

pandas 深度入门:从数据结构到一份真实销售报表

本文系统讲解Pandas核心应用,从三分钟安装到完整月度报表生成,涵盖数据读取、清洗、筛选、分组聚合、表连接、透视表与时间序列等13个关键环节。强调“先看数据再动手”,掌握Series/DataFrame/Index结构本质,熟练运用loc/iloc、merge校验、agg/transform区别,通过真实案例实现高效报表自动化,告别手动Excel操作。最后提供性能优化与高频报错解决方案,助力读者快速上手,真正实现“写二十行代码,跑三秒出结果”。

信息安全领域优质创作者|操作系统领域专家 276

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

工单系统的数据结构化:故障分类体系设计与报表可用性

很多团队上完工单系统半年,会发现一个尴尬的事实:单子照常在走,报表却始终出不来。导出的 Excel 几千行,看不出趋势、算不出口径、答不了"哪类故障占大头"。问题几乎都不在系统,而在数据模型的第一层——。这篇文章把这件事拆开讲:自由文本为什么会失效、分类体系怎么分层、表怎么建、老数据怎么迁、上线前怎么验收。

ITyunwei0987的博客 283

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

数据结构的基本概念和算法的初步认识

本文系统阐述数据结构与算法的基础概念,涵盖数据、数据元素、数据对象的层次关系,数据结构的三要素(逻辑结构、存储结构、数据运算),以及抽象数据类型。重点解析算法的特性与设计要求,并深入讲解时间复杂度分析的核心——大O表示法,通过“只保留最高阶项、忽略常数系数、取最坏情况”三大原则,结合实例剖析O(1)、O(n)等常见时间复杂度,揭示算法效率的本质评估方法。

ACH_YYX的博客 175

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

[C++高阶数据结构·图论下] 最短路径:为什么“挑最小的”一定正确?

本文系统对比最小生成树与最短路径的核心差异,聚焦三类最短路算法:Dijkstra(非负权、贪心确认)、Bellman-Ford(可负权、反复松弛)、Floyd(全源、分层中转)。核心区别在于:MST 关注“连通所有点”的最小代价(边数固定),而最短路关注“两点间路径最短”(边数可变)。关键反直觉点是:负权对 MST 无害,却使 Dijkstra 失效——因“绕远更近”破坏贪心前提。算法本质反映三种处理不确定性的策略:确认式(Dijkstra)、迭代修正(Bellman-Ford)、分层逼近(Floyd)。强

Tairitsu_青云 518

数据结构:9.Map和Set

有的讲解会说这里key是标识作用,这种说法其实没有太大意义,就算知道了他是标识value的作用又如何,在实际的使用过程中,我们只会根据具体的效果选择使用的方法等,不会执着于“标识”这种说法。2.由于哈希函数的设计原则太过理论,它仅仅是在认为:这些通过关键码算出来的index不同 的情况下设计的,然而这种理论化的设计原则在遇到冲突时,恰恰就出现了问题,而我们能做的,就是降低冲突率。虽然哈希表的使用过程中存在冲突,但是在实际的使用过程中,哈希表的冲突率是不高的,冲突的个数是可控的。

2602_95646088的博客 196

Redis 数据结构、单线程架构与 String 字符串详解

Redis采用单线程架构,通过事件循环(Event Loop)高效处理I/O事件,避免阻塞。其核心优势在于内存操作快、无上下文切换开销。数据结构支持多种内部编码(如ziplist、quicklist),自动根据场景优化存储与性能。字符串类型是基础且灵活,可存文本、数字或二进制数据,最大512MB,支持原子操作。命令如SET、GET、MGET、MSET等实现高效读写,适用于缓存、计数、会话管理等场景。

2303_77004089的博客 342

[C++高阶数据结构·图论上] 最小生成树:为什么“选边”和“选点”是两条路?

本文系统讲解最小生成树(MST)的核心思想与两大算法:Kruskal与Prim。强调MST目标是用最小权值总和连接所有顶点形成一棵树,而非单边最小。通过三条构造准则(用图中边、恰n-1条边、无环)统一框架。Kruskal按边贪心,依赖并查集判环,适合稀疏图;Prim按点扩张,利用割集特性天然避免成环,需起点,适合稠密图。两算法本质差异在于“判环”机制与数据结构选择,且与最短路径问题在连通性、负权处理上截然相反,需分篇厘清。

Tairitsu_青云 222

笔记-论数据结构3(算法分析-时间复杂度)

i <= n;s = 0;次数1234ti1248?i2^02^12^22^32^t-1在遍历的过程中,2^t-1次方的增长率肯定大于n,可得出结论2^t-1 > n那么,为了得出t和n的关系,我们可以运用对数关系:log2为底2^t-1 > log2为底n消掉log2为底2t-1 > log2为底nt > log2为底n+1于是可以得出。

fish_zzzz的博客 224

Vue3 低代码移动表单设计器实战(二):缩放画布下的拖拽系统与树状级联数据结构

本文深入剖析Vue3低代码表单设计器在缩放画布下的拖拽失效问题,揭示SortableJS在CSS Transform下坐标崩溃的数学根源。通过自研独立视觉克隆壳层与逆向几何补偿算法,实现精准拖拽;采用扁平数据存储+运行时树状计算结构,解决级联依赖与深克隆难题,确保逻辑一致性与性能优化,为复杂低代码系统提供可复用的工程范式。

NanChen的博客 341

排序算法深度笔记(上):比较类排序的思想演进与代码实现

与。本文聚焦前者 —— 也就是通过元素间两两比较来确定相对顺序的排序算法,从最朴素的 O (n²) 基础排序,到工业级主流的 O (nlogn) 进阶排序,逐层拆解设计思想、带注释的代码实现与边界细节。当我们理解了比较排序的性能边界,也就自然引出了非比较排序的存在意义。所有代码均遵循统一的实现规范:入口函数前置空数组与单元素边界校验,基于数组原地修改,主函数附带可直接运行的测试用例,与练习代码风格完全对齐。

2401_87069538的博客 609

笔记-论数据结构2

typedef 数据类型 别名return 0;typedef也经常用在结构体上:每次声明结构体变量都要写struct关键字,很麻烦,而且逻辑上也很难受,typedef可以解决这个问题。int x;int y;p.x = 5;p.y = 10;return 0;而利用typedef解决有两种解法:typedef struct 结构体名数据类型 变量名;数据类型 变量名;……}别名;数据类型 变量名;数据类型 变量名;……}别名;实际的运用int x;

fish_zzzz的博客 105

【数据结构】树和二叉树(下):讲透四种遍历、递归返回值与经典题

🔥 星光编译者📚 学习专栏:《C/C++ 成长笔记》《Linux 实践手册》《数据结构与算法》🌄 向云端飞扬,编译属于自己的代码星河。☕ 写在开篇你好,这里是星光编译者。这里记录我在C/C++、Linux、数据结构与算法学习中遇到的真实问题、亲手验证过的代码,以及那些容易被忽略的实现细节。比起简单罗列结论,我更愿意从问题出发,把一个知识点的来由讲清楚,把“为什么会这样”和“应该怎样解决”说明白,让每一次踩坑都沉淀成可以复用的经验。如果这篇记录能帮你少绕一点路。

星光编译者的技术博客,专注 C/C++、Linux、数据结构与算法。 421

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 82
上一篇: FAT:磁盘上数据组织格式综合述
下一篇: 在VC++通过汇编实现获取代码运行时间
aganpro
博客等级 码龄24年 12粉丝 13原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值