【问题标题】:Blocking syscalls with no other load in system (linux kernel)在系统中没有其他负载的情况下阻塞系统调用(linux内核)
【发布时间】:2013-02-14 20:56:25
【问题描述】:

如果系统中只有 1 个正在运行的应用程序(默认为 100 个睡眠进程),并且它会执行阻塞系统调用(我对阻塞 recv 或阻塞读取感兴趣)。 linux内核会从task_t *current指针中删除这个应用吗?

【问题讨论】:

  • 看来current 会指向swapper (pid 0) 任务

标签: linux-kernel scheduling


【解决方案1】:

你是问正在运行的应用程序会休眠吗?

如果有满足读取的数据,那么它不会休眠——内核会将排队的数据复制到您的缓冲区并从系统调用返回。如果没有等待数据,则进程将休眠。这不依赖于系统上其他进程的状态。如果所有进程都处于休眠状态,内核将执行一些有用的操作,例如将 CPU 置于低功耗状态,直到发生中断,这可能意味着您的进程正在等待的数据现在可能可用。

【讨论】:

  • 没有数据可供读取。任务将休眠。请问,内核current指针(内核栈)会不会指向这个任务。
猜你喜欢
  • 2017-10-13
  • 2015-05-24
  • 2014-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 2020-11-11
相关资源
最近更新 更多