π ΠΡΠ°ΡΠΊΠΎ
Disk Controller β Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ Π΄Π°Π½Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ (HDD/SSD) ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠ΅Π½ΠΈΡ, Π·Π°ΠΏΠΈΡΠΈ ΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅ΠΊΡΠΎΡΠ°ΠΌ.
π§ ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
Disk Controller ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΎΡ CPU (ΡΠ΅ΡΠ΅Π· O bus) ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΈΡ
 Π² Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΡΠΈΠ³Π½Π°Π»Ρ Π΄Π»Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°.
ΠΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ:
- ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΊΠΎΠΌΠ°Π½Π΄ (NCQ / TCQ)
 - ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ (LBA)
 - ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ Π²ΡΠ±ΠΎΡΠΊΡ
 - Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ DMA controller ΠΈΠ»ΠΈ PIO
 
Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°ΠΌΠΈ:
βοΈ ΠΠ΄Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ
| Π’ΠΈΠΏ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° | ΠΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ | 
|---|---|
| HDD | ΠΠ΅Ρ Π°Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ Ρ Π±ΡΡΠ΅ΡΠΎΠΌ | 
| SATA SSD | AHCI-ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ Ρ DRAM ΠΈΠ»ΠΈ Π±Π΅Π· Π½Π΅Ρ | 
| NVMe SSD | NVMe-ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ Π½Π° PCIe-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ | 
| RAID | ΠΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΉ RAID-ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ (HBA/RAID) | 
| Embedded | ΠΡΡΡΠΎΠ΅Π½Π½ΡΠΉ eMMC/UFS-ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ | 
π» ΠΡΠΈΠΌΠ΅Ρ (Π½Π° C: ΡΠ°Π±ΠΎΡΠ° ΡΠ΅ΡΠ΅Π· ioctl Π² Linux)
int fd = open("/dev/sda", O_RDONLY);
ioctl(fd, HDIO_GET_IDENTITY, &id_info); // ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°
close(fd);π§© ΠΠΎΠ΄ΡΠ»ΠΈ ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°
| ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ | ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ | 
|---|---|
| Command Decoder | ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ ΠΎΡ CPU | 
| Data Buffer | ΠΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΎΠ² (ΠΊΡΡ) | 
| DMA Engine | ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° Π΄Π°Π½Π½ΡΡ Π±Π΅Π· ΡΡΠ°ΡΡΠΈΡ CPU | 
| Error Checking | ΠΠΎΠ½ΡΡΠΎΠ»Ρ CRC/ECC | 
| Flash Translation Layer (FTL) | ΠΠ»Ρ SSD: Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠΎΠ² | 
| Queue Manager | ΠΡΠ΅ΡΠ΅Π΄Ρ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ, ΠΏΠ΅ΡΠ΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°Π½ΠΈΠ΅ | 
π Π‘Ρ Π΅ΠΌΠ° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ
CPU / Kernel
     β       \
   Driver    DMA setup
     β         \
 +-----------+   +-------------+
 |   Driver  |βββ| Disk Ctrl   |
 +-----------+   +-------------+
                     β
                [Storage Device]
β ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°
- 
ΠΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠ΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°
 - 
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΡΠΌΠΈ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° Π΄ΠΎΡΡΡΠΏΠ°
 - 
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° DMA, ECC, ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ½Π΅ΡΠ³ΠΎΡΠ±Π΅ΡΠ΅ΠΆΠ΅Π½ΠΈΡ
 
β ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ
- 
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠ·ΠΊΠΈΠ΅ ΠΌΠ΅ΡΡΠ° (SATA 6Gbps vs PCIe 4.0+)
 - 
ΠΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ (ΡΠ°Π·Π½ΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ, ΡΠ΅ΠΆΠΈΠΌΡ)
 - 
ΠΠ°Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠ΅ΠΆΠΈΠΌΠΎΠ²