如果我的代码执行类似fd = open("/dev/sdXY", ...)
和pwrite(fd, ...)
/pread(fd, ...)
,那么I/O操作是否会跳过缓冲区或磁盘缓存?假设/dev/sdXY是未挂载的格式化磁盘分区(ext4,ufs等)。pread/pwrite,缓冲区和磁盘缓存
我问,因为需要在我正在处理的应用程序中授予连续的文件存储空间,并且我读到实现它的唯一方法就是执行类似于我所描述的操作。但是,如果这会导致丢失缓冲区,磁盘缓存或其他有用的功能,我可能会删除对连续存储的需求。
我也很困惑,如果我需要重新实现低级别的东西,因为分区已经被格式化为文件系统。我读到这是RAW磁盘/分区的情况。我已经知道需要处理哪些块是免费或正在使用的,文件和文件夹结构等,我已经在研究这个问题。
另一个问题:当我读到fopen()
/fread()
/fwrite()
和C++的文件流时,我只看到了有关缓冲区的信息。是不是只有这些流和f*
函数家族有某种缓冲区,不像open/write/read/pwrite/pread/etc?这个缓冲区是否与磁盘缓存相同或不同?
最后一个:HDD缓存是由自己的驱动器还是由文件系统(ext4,ufs等)处理?
谢谢。我认为只需要处理哪些块是坏的,自由的或正在使用的以及文件和文件夹结构。我还需要重新执行什么? –
这足以让你忙一阵子,我想 - 这肯定会让我忙一阵子。我不得不研究ext4文件系统以了解还有什么需要担心的。 _ [... 30秒的思考时间...]但是,我认为这是一个日记文件系统,因此您需要知道日志记录的工作方式,以及如何更改手动分配的文件,而不会扰乱文件的连续性分配空间。我怀疑,现在我想,甚至有可能。 –
硬盘本身可以存储缓存 - 这是一个可以忽略的其他类型的袋子。硬盘应该让它看起来没有这样的缓存 - 除了它可能比没有这样的缓存更好的性能。一旦写入完成,写入HDD的任何内容都应该是安全的,即使数据位于HDD缓存中,但实际上还不在磁盘上。 –