linux - 磁盘io队列溢出

标签 linux linux-kernel hard-drive

据我了解,磁盘设备有一个队列,用于存储来自 linux 内核的读/写请求。当设备没有足够快地排空队列(即溢出)时会发生什么?

这个队列是否(逻辑上)扩展到 DRAM?

一些请求会丢失吗?

最佳答案

Does this queue extend (logically) into DRAM?

您首先认为队列在哪里?它在 RAM 中。

任何操作系统的 IO 缓冲基础结构只能用于避免阻塞任何试图执行 IO 操作的程序。

例如假设您有一个将数据写入文件的程序。为此,它调用了一个write 系统调用。在操作系统中,它进入文件系统驱动程序,它决定更改哪个磁盘扇区。

现在,更改命令进入 IO 子系统,IO 子系统将命令放入队列中。如果该队列已满,文件系统调用 blocks,即。在队列中有空间之前调用不会完成,这意味着 write 调用会阻塞。

非常简单:只要您的写入设备跟不上,您的写入程序就会在 write 调用中停止。这很合乎逻辑。这就像试图将邮件插入一个装满的邮箱。直到有人在另一端取出邮件,你才能推送新邮件,所以 postman 必须等待。

关于linux - 磁盘io队列溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38927561/

相关文章:

linux - 如何禁用 yocto 中的某些键盘键

file - 如何从 Linux 内核空间访问系统中的所有管道

linux - 使用 Linux 内核 call_usermodehelper 在用户模式下运行用户空间进程

程序集 - 读取虚拟磁盘的下一个扇区

c++ - WriteFile 失败,错误代码 87,每扇区磁盘 4096 字节

python - 在 Python 中获取硬盘大小

regex - 我可以在 sed 中提到从不同模式到其他模式的反向引用吗

linux - 从 root 帐户执行 cron 作业是否安全?

linux - 如何使用 perl 脚本创建添加用户到 linux 机器

linux - 在内核空间和用户空间之间进行通信的理想且最快的方式是什么?