我已经阅读过关于用户空间和内核空间以及程序的执行路径如何将它从用户空间带到内核空间的内容,我想这个例子就是我的程序是这样运行的
Poco::Net::SocketAddress sender;
char buffer[64000];
.
.
.
socket.receiveFrom(buffer, sizeof(buffer), sender);
由于此调用需要访问网卡,我认为它应该进入内核空间。
我的问题是: 当程序使socket.receivefrom(...)调用
时会发生什么答案 0 :(得分:0)
没有。该线程以内核权限(x86中的ring 0)执行内核代码。线程可能会进入" sleep" (即,CPU可能会执行不同的程序,或者将在内核中执行空闲,这取决于调度程序决定的内容)。但是,如果数据已经从网卡上获得,它可能根本不会进入休眠状态。从用户的角度来看,您知道当调用返回时,您将数据放在缓冲区中,并且您可能希望调用需要一段时间。
这取决于调度程序。您可能随时获得中断并执行其他操作。但一般来说,是的,你去内核然后回来了。