Unix 无阻塞系统呼叫和模式切换
假设我们为异步IO调用一个系统调用。在调用系统调用时,模式从用户模式更改为内核模式。调用后,模式应立即更改回用户模式,以便用户应用程序可以继续进行(因为它是非阻塞的)Unix 无阻塞系统呼叫和模式切换,unix,asynchronous,operating-system,kernel,system-calls,Unix,Asynchronous,Operating System,Kernel,System Calls,假设我们为异步IO调用一个系统调用。在调用系统调用时,模式从用户模式更改为内核模式。调用后,模式应立即更改回用户模式,以便用户应用程序可以继续进行(因为它是非阻塞的) 现在,如果模式更改为用户模式,那么当模式从内核更改为用户模式时,内核将如何处理IO?内核会在用户模式下执行异步IO吗?IO意味着两种不同的东西(在两种不同的抽象级别上): 从应用程序的角度来看,从磨合中调用与输入或输出相关的任何(在Linux中列出),例如。。。。请注意,该函数未列为系统调用(它是一些使用其他系统调用的库函数,请
现在,如果模式更改为用户模式,那么当模式从内核更改为用户模式时,内核将如何处理IO?内核会在用户模式下执行异步IO吗?IO意味着两种不同的东西(在两种不同的抽象级别上):
- 从应用程序的角度来看,从磨合中调用与输入或输出相关的任何(在Linux中列出),例如。。。。请注意,该函数未列为系统调用(它是一些使用其他系统调用的库函数,请参阅)
- 在原始硬件上,向实际IO设备(如SATA磁盘、USB端口等)发送数据(或命令)的任何物理输入或输出操作
另请参见和。异步IO将代表进程执行,当进程继续运行时,内核将几乎像往常一样处理它。在阻塞模式下,进程只是暂停
内核可以访问每个进程空间,因此无论进程当前在做什么,他都可以从进程用户空间填充/读取数据。一般来说,非阻塞系统调用如何?内核能否在用户模式下执行功能(在模式从内核更改为用户模式后,以便用户可以继续)?根据定义,内核只能在内核模式下运行。那么内核将如何处理IO?如果内核在内核模式下处理整个IO,那么在非阻塞系统调用的情况下,用户应用程序将无法继续(因为它是内核模式)。您真的很困惑。我强烈建议花几天时间阅读《操作系统:三件容易》这本书。我想需要一整本书来解释这一切,而我没有空间来写,也没有时间来写。我理解异步IO中会发生什么。当进程继续运行时,模式将更改为用户模式,对吗?当用户应用程序运行时,内核将如何在用户模式下处理IO?我读到内核总是只在内核模式下执行它的操作。看起来你有太多的误解了<代码>内核在用户模式下处理IO,不,内核总是在内核模式下处理IO(至少在标准操作系统上)。我知道内核在内核模式下处理IO。我的问题是,当内核以内核模式处理IO时,当系统调用是非阻塞的时,用户应用程序如何继续运行?要让用户应用程序继续,应该将模式更改回用户模式,对吗?内核和进程是并发的。了解中断、DMA、上下文切换。