【发布时间】:2013-02-14 20:56:25
【问题描述】:
如果系统中只有 1 个正在运行的应用程序(默认为 100 个睡眠进程),并且它会执行阻塞系统调用(我对阻塞 recv 或阻塞读取感兴趣)。 linux内核会从task_t *current指针中删除这个应用吗?
【问题讨论】:
-
看来
current会指向swapper (pid 0) 任务
如果系统中只有 1 个正在运行的应用程序(默认为 100 个睡眠进程),并且它会执行阻塞系统调用(我对阻塞 recv 或阻塞读取感兴趣)。 linux内核会从task_t *current指针中删除这个应用吗?
【问题讨论】:
current 会指向swapper (pid 0) 任务
你是问正在运行的应用程序会休眠吗?
如果有满足读取的数据,那么它不会休眠——内核会将排队的数据复制到您的缓冲区并从系统调用返回。如果没有等待数据,则进程将休眠。这不依赖于系统上其他进程的状态。如果所有进程都处于休眠状态,内核将执行一些有用的操作,例如将 CPU 置于低功耗状态,直到发生中断,这可能意味着您的进程正在等待的数据现在可能可用。
【讨论】:
current指针(内核栈)会不会指向这个任务。