1 filesystems operating-system
我有一个家庭作业问题需要回答,但我却搞不清楚。我已经多次查看了本书(操作系统概念第 9 版)中我认为相关的部分,但我不确定这是从哪里来的。
问题:
考虑磁盘上的文件系统的逻辑块和物理块大小均为 512 字节。假设每个文件的信息已经在内存中。对于三种分配策略(连续、链接和索引)中的每一种,回答以下问题:
A。该系统中逻辑地址到物理地址的映射是如何完成的?(对于索引分配,假设文件的长度始终小于 512 个块。)
b. 如果我们当前位于逻辑块 10(最后访问的块是块 10)并且想要访问逻辑块 4,则必须从磁盘读取多少个物理块?
作业稍作修改(从逻辑块 12 开始,希望分别访问逻辑块 3,而不是 10 和 4)。
答案:
答案:设Z为起始文件地址(块号)。
A。连续的。
将逻辑地址除以 512,X 和 Y 分别得到商和余数。
我。将X与Z相加即可得到物理块号。Y 是该块的位移。
二. 1
b. 已链接。
将逻辑物理地址除以 511,X 和 Y 分别得到商和余数。
我。追踪链表(获得 X + 1 块)。Y + 1 是最后一个物理块的位移。
二. 4
c.索引。
将逻辑地址除以 512,X 和 Y 分别得到商和余数。
我。将索引块放入内存。物理块地址包含在位置 X 处的索引块中。Y 是到所需物理块的位移。
二. 2
我不知道这些答案从何而来,每个在线资源都只是一遍又一遍地重复这些答案。谁能提供更彻底的解释?
这本书是纯粹的粪便废物。没有哪一来源比这本书更容易造成混乱,从而导致如此多的问题。从你复制的内容我可以看出你为什么如此困惑。
由于存在让您进一步困惑的风险,操作系统通常对磁盘执行物理、逻辑和虚拟 I/O。
对于物理 I/O,您已指定块在磁盘上的 (ta-ta) 物理位置。这就是盘片、磁道和扇区。
在逻辑 I/O 中,磁盘被视为块阵列。磁盘上的每个块都有一个序列号。如今大多数磁盘都在硬件中执行逻辑 I/O。如今,操作系统很少需要执行物理 I/O。
虚拟 I/O 用于文件访问。磁盘虚拟 I/O 与磁盘逻辑 I/O 类似。不同之处在于,在虚拟 I/O 中,组成文件的块被视为数组,而不是磁盘的块。
如果您可以对磁盘进行逻辑 I/O,您就可以拥有该系统。
您书中的第一个令人困惑的地方是,通常当我们处理文件系统时,我们只在块(或块集群)中工作。您的问题是要求使用字节偏移量。
本书中另一个令人困惑的地方是,它将文件的虚拟块称为“逻辑块”
在第一个问题中,您正在处理连续的文件。在连续文件中,文件的虚拟块和磁盘的逻辑块之间会有简单的匹配。如果文件的第一个(或第零个)逻辑块是Z,则从任何虚拟块到逻辑块N的映射是NZ。
在您的连续文件问题中,如果我想在文件中的偏移量 B 处定位任意字节,则 B DIV 512 是包含该字节的虚拟块。B MOD 512 是包含该字节的块内的偏移量。
因此,正在寻找的逻辑块是 B DIV 512 + Z。
在这个问题的第 2 部分中,您想要从虚拟块 10 移动到虚拟块 4。因为您位于逻辑块 10 + Z 并且文件是连续的,所以通过读取逻辑块 4 + Z 来访问块 4。直接完成,无需干预
从这里开始,你的问题就进入了牛粪便废物总量的领域。
从问题和答案看来,“书”假设了一个链接结构,其中每个块包含 511 字节的数据,一个字节由到下一个块的偏移量组成(完全不现实)。
如果你想访问第四个块,你必须读取第一个块,找到第二个块的偏移量,读取第二个块,.....找到第四个块的偏移量,读取第四个块。
另一个令人困惑的是,问题似乎在从 0 开始的块编号和从 1 开始的块编号之间切换。只有当块编号从 1 开始时,“4”才是正确的。但是,除以获取其余部分的偏移量时,“4”才是正确的。答案假定块编号从 0 开始。
对于文件分配的索引方法,“书”显然假定存在连续索引。同样,它假设索引中偏移量的大小是一字节。
假设 Z 是索引的起点。那么块4(编号1到4)的条目是块Z+3DIV 512处的字节和3MOD 512处的偏移(3=4-1)。
要找到该块,您必须读取索引并读取数据块(2次读取)。
您正在阅读的内容与现实无关,我理解您为什么感到困惑。