Unix 无阻塞系统呼叫和模式切换

Unix 无阻塞系统呼叫和模式切换,unix,asynchronous,operating-system,kernel,system-calls,Unix,Asynchronous,Operating System,Kernel,System Calls,假设我们为异步IO调用一个系统调用。在调用系统调用时,模式从用户模式更改为内核模式。调用后,模式应立即更改回用户模式,以便用户应用程序可以继续进行(因为它是非阻塞的) 现在,如果模式更改为用户模式,那么当模式从内核更改为用户模式时,内核将如何处理IO?内核会在用户模式下执行异步IO吗?IO意味着两种不同的东西(在两种不同的抽象级别上): 从应用程序的角度来看,从磨合中调用与输入或输出相关的任何(在Linux中列出),例如。。。。请注意,该函数未列为系统调用(它是一些使用其他系统调用的库函数,请

假设我们为异步IO调用一个系统调用。在调用系统调用时,模式从用户模式更改为内核模式。调用后,模式应立即更改回用户模式,以便用户应用程序可以继续进行(因为它是非阻塞的)


现在,如果模式更改为用户模式,那么当模式从内核更改为用户模式时,内核将如何处理IO?内核会在用户模式下执行异步IO吗?

IO意味着两种不同的东西(在两种不同的抽象级别上):

  • 从应用程序的角度来看,从磨合中调用与输入或输出相关的任何(在Linux中列出),例如。。。。请注意,该函数未列为系统调用(它是一些使用其他系统调用的库函数,请参阅)

  • 在原始硬件上,向实际IO设备(如SATA磁盘、USB端口等)发送数据(或命令)的任何物理输入或输出操作

进程的异步或同步IO意味着只调用一些合适的系统调用子集,因为系统调用是进程与内核交互的唯一方式,而且在用户模式下,不可能直接进行物理IO

阅读(可免费下载)以更好地了解操作系统

内核会在用户模式下执行异步IO吗

这显示出一些混乱。实际上,在内核内部,物理IO通常(并且可能总是)由(可能会配置一些等)启动。硬件将处理器切换到“内核模式”(实际上是内核模式)

阻塞系统调用(例如,由于数据不在中而需要物理IO时)不会阻塞整个计算机:只是调用过程被“阻塞”,因此被重新调度。内核将调度一些其他可运行进程。很久以后,在内核处理了许多中断之后,阻塞的进程将变得可运行,并且可以重新安排运行

流程本身是应用程序代码的主要(由提供)之一

换句话说,在概念层面,内核是以某种方式编码的


另请参见和。

异步IO将代表进程执行,当进程继续运行时,内核将几乎像往常一样处理它。在阻塞模式下,进程只是暂停


内核可以访问每个进程空间,因此无论进程当前在做什么,他都可以从进程用户空间填充/读取数据。

一般来说,非阻塞系统调用如何?内核能否在用户模式下执行功能(在模式从内核更改为用户模式后,以便用户可以继续)?根据定义,内核只能在内核模式下运行。那么内核将如何处理IO?如果内核在内核模式下处理整个IO,那么在非阻塞系统调用的情况下,用户应用程序将无法继续(因为它是内核模式)。您真的很困惑。我强烈建议花几天时间阅读《操作系统:三件容易》这本书。我想需要一整本书来解释这一切,而我没有空间来写,也没有时间来写。我理解异步IO中会发生什么。当进程继续运行时,模式将更改为用户模式,对吗?当用户应用程序运行时,内核将如何在用户模式下处理IO?我读到内核总是只在内核模式下执行它的操作。看起来你有太多的误解了<代码>内核在用户模式下处理IO,不,内核总是在内核模式下处理IO(至少在标准操作系统上)。我知道内核在内核模式下处理IO。我的问题是,当内核以内核模式处理IO时,当系统调用是非阻塞的时,用户应用程序如何继续运行?要让用户应用程序继续,应该将模式更改回用户模式,对吗?内核和进程是并发的。了解中断、DMA、上下文切换。