Operating system 计算机如何理解它可以切换到等待网络数据的进程?

Operating system 计算机如何理解它可以切换到等待网络数据的进程?,operating-system,hardware,cpu-architecture,low-level,Operating System,Hardware,Cpu Architecture,Low Level,想象一下,我们有一台计算机,它除了等待来自网络的数据外,什么也不做,当收到数据时,它会在上面做一些计算 现在我认为除了这个,没有别的办法了 定期检查一些处理器寄存器,表明数据已准备就绪,然后进行计算。在我的理解中,网卡接收数据,将其放入内存,并自行写入cpu寄存器,cpu可以进行计算。第二天之后 定期检查处理器是否会计算内容。你能详细解释一下(在硬件和操作系统上)实际发生的事情吗。这个问题让我担心了很久 也会很高兴看到任何关于它的资料 使用处理器定期检查某些数据寄存器的问题中描述的方法,称为轮询

想象一下,我们有一台计算机,它除了等待来自网络的数据外,什么也不做,当收到数据时,它会在上面做一些计算

现在我认为除了这个,没有别的办法了 定期检查一些处理器寄存器,表明数据已准备就绪,然后进行计算。在我的理解中,网卡接收数据,将其放入内存,并自行写入cpu寄存器,cpu可以进行计算。第二天之后 定期检查处理器是否会计算内容。你能详细解释一下(在硬件和操作系统上)实际发生的事情吗。这个问题让我担心了很久


也会很高兴看到任何关于它的资料

使用处理器定期检查某些数据寄存器的问题中描述的方法,称为轮询。轮询通常用于较简单的系统中,因为它易于实现,但它的缺点是浪费cpu周期来检查可能存在或不存在的数据

实际上,尽管大多数现代操作系统都将使用一种称为中断的cpu硬件功能与操作系统的调度程序结合使用。在从网络获取数据的示例中,程序将使用一些阻塞读取调用,等待从网络接收数据。一旦发出读取调用,调用程序将完全停止执行,操作系统的调度程序将使程序保持挂起状态,直到收到数据

通常情况下,程序在发生某些事情(如接收到数据包)之前发出停止执行信号的方式是使用一种称为信号量(或类似互斥机制)的软件结构。但是,在网络代码的情况下,程序员不会直接访问信号量

当网卡接收到数据包时,网卡会将数据包存储到RAM中的某个地方。完成后,网卡会触发CPU中断。中断(通常)导致CPU停止执行当前正在运行的任何程序,CPU执行与处理网络活动相关的内核代码。在这种情况下,它将接收到的数据包发送给等待接收数据的程序

最后,内核使用信号量来表示接收到数据包。然后,内核让调度器“唤醒”等待网络数据的程序。程序可以处理数据,然后等待来自网络的下一组数据


若你们想了解更多,我建议你们阅读关于中断、调度和信号量的op。然而,这些技术不仅仅用于网络。许多其他IO设备都是通过类似的方法访问的。

使用处理器定期检查某些数据寄存器中描述的方法,称为轮询。轮询通常用于较简单的系统中,因为它易于实现,但它的缺点是浪费cpu周期来检查可能存在或不存在的数据

实际上,尽管大多数现代操作系统都将使用一种称为中断的cpu硬件功能与操作系统的调度程序结合使用。在从网络获取数据的示例中,程序将使用一些阻塞读取调用,等待从网络接收数据。一旦发出读取调用,调用程序将完全停止执行,操作系统的调度程序将使程序保持挂起状态,直到收到数据

通常情况下,程序在发生某些事情(如接收到数据包)之前发出停止执行信号的方式是使用一种称为信号量(或类似互斥机制)的软件结构。但是,在网络代码的情况下,程序员不会直接访问信号量

当网卡接收到数据包时,网卡会将数据包存储到RAM中的某个地方。完成后,网卡会触发CPU中断。中断(通常)导致CPU停止执行当前正在运行的任何程序,CPU执行与处理网络活动相关的内核代码。在这种情况下,它将接收到的数据包发送给等待接收数据的程序

最后,内核使用信号量来表示接收到数据包。然后,内核让调度器“唤醒”等待网络数据的程序。程序可以处理数据,然后等待来自网络的下一组数据


若你们想了解更多,我建议你们阅读关于中断、调度和信号量的op。然而,这些技术不仅仅用于网络。许多其他IO设备都是通过类似的方法访问的。

中断或轮询,有太多易于访问的文档,无法列出任何特定的文档。主题太宽泛,信息也很容易获取。另请参见和中断或轮询,有太多易于访问的文档,无法列出任何特定的文档。主题太宽泛,信息很容易获取。另请参见和