首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让我知道如何加载下一个集群提示文件的第一个集群?

让我知道如何加载下一个集群提示文件的第一个集群?
EN

Stack Overflow用户
提问于 2011-04-24 04:42:17
回答 3查看 853关注 0票数 0

我正在读布劳恩索恩的OS教程

http://www.brokenthorn.com/Resources/OSDev6.html

我坚持了好几天。

加载“第2阶段”,

搜索根目录"stage2 sys“。

根目录包含文件名和启动群集地址。(即0x002)

加载0x002集群并查找FAT,以查找接下来要加载的集群。

FAT由12位数组和

数组大小为4077

现在,我不知道如何增加内容--让我知道如何按文件的第一个集群加载下一个提示。

问题是这个。

  1. 有什么遗漏或错误的地方吗?
  2. 到底有多胖,让我知道如何按文件的第一个集群加载下一个集群提示?

FAT仅由12位数组组成。多么?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-24 04:54:28

FAT集群列表只是一个数组,数组中的条目是文件的集群链中的下一个索引。目录中的文件条目告诉您第一个集群的位置(在示例中,集群0x002)。要找到下一个集群,请查看FAT数组中的索引0x002:

代码语言:javascript
复制
next_cluster = FAT[0x002];

例如,如果FAT[0x002]保存了0x014,那么这个集群将保存文件的下一组数据,那么您可以在FAT[0x014]中查找第三个集群,等等。

如果您处理的是12位FAT,那么这就意味着在索引数组方面有一些复杂性。我觉得索引有点像

代码语言:javascript
复制
// find the 16-bit word that contains the 12-bit FAT entry
uint16_t tmp = ((uint16_t*)(((char*)FAT) + index + (index / 2)));

// keep either the high 12-bits or low 12-bits depending on if the 
// index is even or odd.
next_cluster = (tmp >> ((index % 2) ? 4 : 0)) & 0x0fff;

当然,这是基于记忆中的脂肪。如果FAT是从媒体读取的,则需要适当地将其转换为要读取的扇区(并将偏移量转换为扇区)。

票数 3
EN

Stack Overflow用户

发布于 2011-04-24 04:53:39

文件的目录项包含第一个群集号。您可以使用它从磁盘的“数据”部分获取实际的集群,再加上FAT中的下一个集群号。

FAT中的条目包含文件中下一个集群的群集号。

因此,您将有一个目录条目,它可能指示第一个集群号为22。然后,您将得到集群22的数据,并查找集群22的FAT条目,比如说,容纳了76。

因此,文件中的下一个集群是编号76,您遵循相同的过程:获取数据,并在FAT条目76中查找下一个集群号。

下一个集群号的特殊值表明,链已经完成,不再可用。我认为(从内存中),这是FAT12的0xFFF,但它可能是一个范围很高的值。

票数 1
EN

Stack Overflow用户

发布于 2011-04-24 04:54:23

脂肪基本上是一个链表。如果文件的开头位于集群2中,那么要查找下一个集群,请查看FAT中的条目2。它将包含该文件的下一个集群的群集号。您一直这样做,直到找到一个包含大于(从内存中) 0ff8h的数字,这标志着文件的结束。

顺便说一句,除非你真的习惯于使用12位脂肪,否则16位脂肪的处理要容易得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5768679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档