如果设备仅提供顺序访问而不提供随机访问,设备驱动程序或文件系统是否可以使设备看起来像用户可以随机访问?
如果是,这是通过向设备提供缓冲区/缓存来完成的吗?
例如,这是我听到的但不确定是否正确:
仅倒带磁带仅提供顺序访问
对于这样的磁带设备,从当前位置向后移动可能需要将磁带倒带到开头,然后向前移动
是什么使得这样的磁带可以随机访问:在设备/硬件级别更改设备本身、磁带的设备驱动程序或其他什么?
给定这样一个可随机访问的磁带,如果我
open()
使用O_DIRECT
,该磁带是否会变得只能顺序访问而不能随机访问?
答案1
如果设备可以在没有外部干预的情况下来回移动,那么是的,您可以让设备驱动程序实现它出现为随机访问。您可以通过几种方式做到这一点:
- 如果设备的可用主内存量较小,您可以将设备的内容镜像到可以随机访问的内存中。
- 如果设备太大而无法存储在主内存中,您可以对其进行分页 - 基本上执行 (1),但在底层内容的片段上。对当前不在内存中的页面的任何读/写都会非常慢,因为“旧”页面需要刷新并且新页面需要读入内存。
任何写入最终都需要刷新回底层介质。这可能是一个极其缓慢的过程,并且会引发诸如“介质是否支持部分更新”之类的问题(即操作系统是否可以仅覆盖已更新的数据,或者是否需要重写整个介质)?
话虽如此,“可行”并不意味着它是一个好主意。您受限于硬件的行为。如果它不提供真正的随机访问,那么伪造它会非常慢。