gpt4 book ai didi

unix - 非阻塞系统调用和模式切换

转载 作者:行者123 更新时间:2023-12-02 03:42:43 27 4
gpt4 key购买 nike

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

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

最佳答案

IO 意味着两种不同的事物(在两个不同的抽象级别):

  • 从应用的角度来看,从process运行于user-mode ,调用任何system call (在 Linux 的 syscalls(2) 中列出)与输入或输出相关,例如read(2) , .... 请注意 aio_read(3)未列为系统调用(它是使用其他系统调用的某些库函数,请参阅 aio(7) )。

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

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

阅读 Operating Systems: Three Easy Pieces (可免费下载)以更好地了解操作系统。

Will kernel perform asynchronous IO in user mode ?

这显示出一些困惑。实际上,在内核内部,物理 IO 通常(并且可能总是)由 interrupt handlers 发起。 (可能会配置一些 DMA 等...)。硬件interrupt将处理器切换到“内核模式”(实际上 supervisorISA 模式)。

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

进程本身(与 files )是主要的 abstractions 之一。 (由 kernel 提供)到应用程序代码。

换句话来说,在概念层面上,内核scheduler编码为 continuation-passing style .

另请参阅kernelnewbiesOSDEV .

关于unix - 非阻塞系统调用和模式切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47987606/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com