V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
aiqier
V2EX  ›  程序员

关于进程的不可中断状态(Uninterruptible Sleep)的疑惑?

  •  
  •   aiqier · Jan 6, 2021 · 2259 views
    This topic created in 1950 days ago, the information mentioned may be changed or developed.

    在网上搜关于不可中断状态( Uninterruptible Sleep )的博客都是“不可中断状态在等 IO”。 首先 io 有很多种,常见的有网络 io 和文件 io,首先网络 io 我理解分阻塞式和非阻塞式,阻塞式 io 在 io 没好的时候直接就变成 TASK_INTERRUPTIBLE (信号可中断的睡眠),非阻塞式 io 在 io 没好的时候直接就继续往下执行是 TASK_RUNNING ( 进程运行状态)。那网络 io 啥时候才会是“不可中断状态在等待 IO”?

    而且文件 io 都不分阻塞不阻塞,而且我印象中 io 操作都是交给 dma 处理了,那到底啥时候文件 io 才会产生不可中断状态( Uninterruptible Sleep )?

    我理解不可中断 io 应该时间很短啊,如果等磁盘 io 就是不可中断状态,那不是时间很长。

    2 replies    2021-01-07 10:28:50 +08:00
    codehz
        1
    codehz  
       Jan 6, 2021   ❤️ 1
    阻塞调用不是一直禁止中断,只有操作已经开始进行了之后才会变成不可中断的状态...
    也就是如果大量程序访问磁盘,但是由于你的操作被排队了,在实际进行之前还是可以 EINTR 的。。。
    如果卡在这个状态,多半是由于硬件故障,驱动故障,或者 fuse 的死锁(
    aiqier
        2
    aiqier  
    OP
       Jan 7, 2021
    @codehz 那等待 io 的不可中断状态是指“等 io 开始执行到 io 执行完成”么?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3798 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 00:07 · PVG 08:07 · LAX 17:07 · JFK 20:07
    ♥ Do have faith in what you're doing.