程序在访问内核空间时会发生什么

时间:2017-07-28 15:51:01

标签: linux-kernel

我已经阅读过关于用户空间和内核空间以及程序的执行路径如何将它从用户空间带到内核空间的内容,我想这个例子就是我的程序是这样运行的

Poco::Net::SocketAddress sender;
char buffer[64000];
.
.
.
socket.receiveFrom(buffer, sizeof(buffer), sender);

由于此调用需要访问网卡,我认为它应该进入内核空间。

我的问题是: 当程序使socket.receivefrom(...)调用

时会发生什么
  1. 线程是否会进入休眠状态并放弃其核心 到内核​​空间,只有在char缓冲区被唤醒时才被唤醒 写的
  2. 线程是否直接进入内核空间并在写入char缓冲区后返回用户空间

1 个答案:

答案 0 :(得分:0)

  1. 没有。该线程以内核权限(x86中的ring 0)执行内核代码。线程可能会进入" sleep" (即,CPU可能会执行不同的程序,或者将在内核中执行空闲,这取决于调度程序决定的内容)。但是,如果数据已经从网卡上获得,它可能根本不会进入休眠状态。从用户的角度来看,您知道当调用返回时,您将数据放在缓冲区中,并且您可能希望调用需要一段时间。

  2. 这取决于调度程序。您可能随时获得中断并执行其他操作。但一般来说,是的,你去内核然后回来了。