V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
aiqier
V2EX  ›  程序员

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

  •  
  •   aiqier · 2021-01-06 21:24:47 +08:00 · 1600 次点击
    这是一个创建于 1435 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在网上搜关于不可中断状态( 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 条回复    2021-01-07 10:28:50 +08:00
    codehz
        1
    codehz  
       2021-01-06 21:44:40 +08:00   ❤️ 1
    阻塞调用不是一直禁止中断,只有操作已经开始进行了之后才会变成不可中断的状态...
    也就是如果大量程序访问磁盘,但是由于你的操作被排队了,在实际进行之前还是可以 EINTR 的。。。
    如果卡在这个状态,多半是由于硬件故障,驱动故障,或者 fuse 的死锁(
    aiqier
        2
    aiqier  
    OP
       2021-01-07 10:28:50 +08:00
    @codehz 那等待 io 的不可中断状态是指“等 io 开始执行到 io 执行完成”么?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   859 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:07 · PVG 04:07 · LAX 12:07 · JFK 15:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.