此问题涉及由正在运行的进程执行的系统调用,以及如何影响调度程序。
我的问题是-如果另一个进程现在正在CPU上运行,系统调用何时/在哪里被执行?还是调度程序在选择要运行的挂起进程之前一直等到系统调用完成?
还有一个额外的问题--无论你给出什么答案,都是通用操作系统和RTOS的情况,或者后者不同(因为任何RTOS调度程序都对时间更敏感,并实现确定性性能)。
发布于 2021-12-25 05:12:18
在现代x86-64上,如果用户模式进程发出系统调用请求磁盘上的数据,则操作系统将磁盘操作放在AHCI或NVME PCI主机控制器的操作队列中。这两种设备都是设备,都是DMA设备.操作系统还保存各种数据结构本身,以确定哪个操作属于哪个进程和其他东西。
操作系统通过内存映射IO请求PCI设备执行操作,然后将该进程置于阻塞队列中,等待MSI/MSI中断,该中断与处理器间中断类似,它绕过IOAPIC直接触发在特定CPU核的IDT中找到的处理程序,该处理器可以通过在PCI设备(AHCI/NVME)的PCI寄存器中使用MMIO更改某些设置来指定。
有关更多信息,请参见我的回答:https://cs.stackexchange.com/questions/142525/data-transfer-between-cpu-ram-and-secondary-storage/142553#142553
https://stackoverflow.com/questions/70467145
复制相似问题