上下文切换期间 I/O 缓冲区是否存储?

上下文切换期间 I/O 缓冲区是否存储?

上下文切换期间 I/O 缓冲区是否存储?

例如,如果一个进程通过 IO 缓冲区从网络接收数据,并且发生上下文切换,那么这些缓冲区是否与程序状态一起存储?

如果没有,为什么没有?

答案1

据我了解,发生上下文切换是为了让操作系统可以“同时”运行多个进程,通过保存寄存器、PC 等的当前状态,以便它可以从中断的地方开始。

好吧,你似乎知道基本概念。
但这在哪里“当前状态”(处理器)将得到保存吗?
答案是“在记忆中”

顺便说一下“个人电脑“(程序计数器)也是一个寄存器。
通过使用“登记”你似乎指的是通用寄存器。

上下文切换期间 I/O 缓冲区是否存储?

I/O 缓冲区在哪里?
答案是“在记忆中”.
是否有意义“节省”数据(即 I/O 缓冲区)已经在内存中(并且不是处理器或处理器状态的一部分)位于内存中的另一个位置?
答案是

如果没有,为什么没有?

(这明显暗示正确答案是“不”。)

保存处理器状态是为了以后在处理器用于其他任务时恢复。
什么将替换/破坏 I/O 缓冲区?
答案应该是没有什么


例如,如果一个进程通过 IO 缓冲区从网络接收数据,并且发生上下文切换,那么这些缓冲区是否与程序状态一起存储?

使用上下文切换并不一定意味着操作系统处于活动状态。
例如,上下文切换也可用于处理中断。
然而,在您规定的情况下,操作系统(使用其设备驱动程序)将管理所有 I/O 操作(奇怪的用户空间 I/O 除外)。
这意味着 I/O 缓冲区属于操作系统,而不属于任何进程。
传入数据存储在操作系统控制的系统缓冲区中(使用程序 I/O,又名 PIO,或直接内存访问,又名 DMA)。
无论 CPU 正在执行哪个进程,设备都可以接收数据。

“那些缓冲区”不属于任何(用户空间)“程序”,因此不“已存储”与任何“程序状态”在任何情况下。

但我不太确定这应该如何处理通过缓冲区的数据流:因为它还没有处理这些缓冲区中的数据,但是当过程恢复时会有更多的数据到达……似乎无论哪种方式都会丢失数据?

当进程向操作系统发出“读取”系统调用时,它实际上是从中间系统缓冲区获取数据,而不是(直接)执行任何 I/O。
根据设备和数据类型,接收到的数据可能会从一个缓冲区复制到另一个缓冲区(例如网络协议堆栈),然后进程才能“读取”它。

由于操作系统代表所有进程管理所有 I/O,因此操作系统力求不丢失任何数据。I
/O 缓冲区属于系统,不属于任何进程上下文。
每个设备驱动程序都会维护其设备的状态(使用内存中的数据结构),并管理设备正在执行的 I/O。

无论如何,内存中已有的数据不属于“处理器状态”,也不会被保存或“已存储”在上下文切换期间。

相关内容