如果有8个核心cpu,理论上OS可以同时写入8个文件?

if there are 8 core cpu, theoretically OS can write 8 files at the same time?

如果有8个核心cpu,理论上OS可以在不进行上下文切换的情况下同时写入8个文件?

顺序写入8个1gb文本文件和同时写入速度有很大差异吗?(使用线程或多进程)

Os 可以同时打开很多文件并写入,而不管 cpu 个核心,但瓶颈是 hard-drive。即使您有 8 个核心 cpu,您写入的所有数据也必须按顺序进入 hard-drive。

但是现代 OS 不直接写入文件,所以如果您同时打开和写入 8 个文件,它将存储在 RAM 中并放入队列中等待写入 hard-drive 所以每当 hard-drive 获得空闲时,它就会从 ram 中获取数据并将其写入磁盘。

你对磁盘传输有很大的误解。现在 CPU 还没有完成磁盘 IO。它用于当 CPU 必须 read/write 数据 to/from 一个 IO 端口 (https://wiki.osdev.org/ATA_PIO_Mode)。 ATA PIO 模式是最新的(并且仍然受支持)hard-disk 传输模式,它不是 DMA。

否则,您将拥有一个 AHCI,它是一个将控制 hard-disks 的 PCI 设备。 AHCI 是与现代 SATA hard-disks (https://www.intel.ca/content/www/ca/en/io/serial-ata/serial-ata-ahci-spec-rev1-3-1.html). It doesn't control NVME disks. NVME are a separate class and must be controlled by a specialized PCI controller that has a different interface (https://wiki.osdev.org/NVMe) 交互的规范。

如果我没记错的话,PCI 总线是串行的。他们一次传输一位。它们可以非常快,并且 PCI 规范用于高端服务器,PCI-SIG 小组经常宣布新规范,旨在提供新功能(新速度、新机制等)。

在 PCI 中,您写入 RAM 中的一些常规位置,这些位置写入设备的 PCI 寄存器。这通常称为内存映射 IO (MMIO)。可以肯定的是,它比您在问题中所说的要复杂得多。具有 8 个内核的 CPU 不会同时写入 8 个文件。即使在没有DMA的系统中,读取的IO端口也只能从hard-disk上的一个特定位置填充一些数据。不能同时被8核读取。

我不太确定 AHCI,但通常情况下,PCI 硬件接口几乎不需要锁定。它们在 RAM 中具有必须修改的结构,如操作队列。可以肯定的是,如果一个核心修改队列,另一个核心不得也触及队列中的相同位置。如果8个核心必须做文件IO,这8个核心会把他们的操作加入到AHCI的DMA作业队列中。我从未实现过 AHCI 驱动程序,但在 AHCI 规范(第 5 章)中指出:

The data structures of AHCI are built assuming that each port in an HBA contains its own DMA engine, that is, each port can be executed independently of any other port. This is a natural flow for software, since each device is generally treated as a separate execution thread. It is strongly recommended that HBA implementations proceed in this fashion.

Software presents a list of commands to the HBA for a port, which then processes them. For HBAs that have a command list depth of ‘1’, this is a single step operation, and software only presents a single command. For HBAs that support a command list, multiple commands may be posted.

Software posts new commands received by the OS to empty slots in the list, and sets the corresponding slot bit in the PxCI register. The HBA continuously looks at PxCI to determine if there are commands to transmit to the device.

这里,HBA指的是AHCI规范的硅实现(实际芯片)。我不太确定这意味着什么,但我认为这意味着多个 DMA 作业可以同时发生,但可能不是来自同一个 device/hard-disk。由于在大多数计算机上只有一个主hard-disk,所以我猜同一个磁盘不会同时有 8 个 DMA 作业,因为“CPU 中有 8 个核心”。