每次磁盘访问的目的以及为什么可能不会发生

每次磁盘访问的目的以及为什么可能不会发生

我正在复习过去的考试试卷,但我的大学没有提供答案,以便我检查它们,请您告诉我我的理解是否正确,如果不正确,请您纠正。

问题:Linux系统上运行的程序P以磁盘上包含文本的文件的名称和路径作为参数;它打开文件并从中读取第一个字符。假设程序已经运行并且文件存在,列出可能发生的磁盘读取请求,描述:

• 每次磁盘访问的目的。

• 为什么磁盘读取请求可能并不总是发生。

试图:磁盘读取请求可能并不总是发生,因为可能会发生缓存命中,因此可以在没有磁盘读取请求的情况下从缓存读取文件。如果不发生这种情况,将会发生磁盘访问。一个用于获取文件名,另一个用于获取文件的路径,最后一个用于从文件中读取第一个字符

答案1

磁盘读取请求可能并不总是发生,因为可能会发生缓存命中,因此可以在没有磁盘读取请求的情况下从缓存读取文件。

正确且完整。

如果不发生这种情况,将会发生磁盘访问。一个用于获取文件名,另一个用于获取文件的路径,最后一个用于从文件中读取第一个字符

这远非完整且部分不正确。事实上,可以访问:

  • 文件系统根目录的索引节点。
  • 至少有一个块包含根目录中的文件列表。
  • 对文件路径上的每个目录重复此操作。 (如果适用的话,加上符号链接遍历。)
  • 文件的索引节点。
  • 文件内容的第一块。

根据文件系统的不同,这些条目中的每一个都可能涉及一次或多次磁盘读取,因为内容可能分布在多个块上。访问文件的块可能需要访问包含块列表的块,有时深达几层。

除了这些访问之外,还可能存在磁盘访问,以将部分程序代码和数据从交换区加载到 RAM 中。从问题的措辞中不清楚是否假定该程序正在运行相关位位于 RAM 中。可能还有其他微妙之处,我确信考试设置者不是故意的,例如磁盘上已经存在的文件,但在当前未安装的自动安装目录中,这需要在安装之前加载文件系统的驱动程序。

相关内容