← Назад к вопросам

Как происходит взаимодействие с диском как с устройством в ОС

2.0 Middle🔥 122 комментариев
#Linux и администрирование

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Взаимодействие с диском как с устройством в ОС

Взаимодействие операционной системы с диском как с устройством — это многоуровневый процесс, охватывающий аппаратные абстракции, драйверы, планирование запросов и файловые системы. Рассмотрим ключевые аспекты этого взаимодействия.

Аппаратный уровень и регистры устройств

Диск (HDD, SSD) взаимодействует с системой через контроллер диска (SATA, NVMe, SCSI). ОС обращается к нему через порты ввода-вывода (I/O ports) или отображение в память (memory-mapped I/O). Например, на низком уровне программист может отправлять команды чтения/записи, указывая:

  • LBA (Logical Block Address) — номер сектора.
  • Размер данных — количество секторов.
  • Направление операции — чтение или запись.

Пример низкоуровневого обращения к диску через порты в x86 (упрощённо):

mov dx, 0x1F7    ; порт статуса диска
in al, dx        ; чтение статуса

В современных системах такое прямое управление редко используется прикладными программами — вместо этого задействуются драйверы.

Роль драйверов устройств

Драйвер диска — это модуль ядра, который транслирует высокоуровневые запросы ОС в команды, понятные контроллеру. Драйверы для дисков обычно являются блочными устройствами (block devices), оперирующими данными блоками (например, по 4 КБ). Пример структуры драйвера в Linux:

static struct block_device_operations disk_ops = {
    .owner = THIS_MODULE,
    .open = disk_open,
    .release = disk_release,
    .ioctl = disk_ioctl,
};

Драйвер обрабатывает прерывания от диска (завершение операции) и использует DMA (Direct Memory Access) для передачи данных без участия CPU.

Система запросов ввода-вывода

Когда приложение запрашивает чтение файла, запрос проходит через несколько слоёв:

  1. Файловая система преобразует путь файла в номера блоков на диске.
  2. Менеджер блочного ввода-вывода (например, I/O scheduler в Linux) оптимизирует порядок запросов:
    • CFQ (Completely Fair Queuing) — справедливое распределение для HDD.
    • Deadline — гарантирует время обработки.
    • Noop — минимальная обработка для SSD.
  3. Драйвер отправляет команды контроллеру через очередь запросов (request queue).

Пример просмотра очереди запросов в Linux:

cat /sys/block/sda/queue/scheduler

Прерывания и асинхронность

После завершения операции диск генерирует аппаратное прерывание. Обработчик прерывания в драйвере уведомляет ОС о готовности данных. Современные системы широко используют асинхронный ввод-вывод (AIO), чтобы приложения не блокировались на дисковых операциях. В Linux для этого есть интерфейсы:

  • io_submit — асинхронная отправка запроса.
  • epoll — уведомление о завершении.

Виртуализация и абстракции

ОС предоставляет абстракции для работы с диском:

  • Блочное устройство — файл в /dev/sda, с которым можно работать как с потоком байтов.
  • RAW-доступ — прямая запись в секторы (например, через dd):
    dd if=/dev/sda of=backup.img bs=4K count=1000
    
  • Кэширование — данные диска кэшируются в Page Cache для ускорения повторных обращений.

Безопасность и управление доступом

ОС контролирует доступ к диску через права доступа к файлам устройств (права в /dev/*). Например, в Linux:

ls -l /dev/sda
brw-rw---- 1 root disk 8, 0 /dev/sda  # только root и группа disk могут читать/писать

Для предотвращения конфликтов используется блокировка (flocking) при одновременном доступе.

Современные тенденции

  • NVMe — низкоуровневый доступ через PCIe с очередями команд.
  • DAX (Direct Access) — обход кэша страниц для сверхбыстрых SSD.
  • Контейнеры — диски могут представляться как loop-устройства или через Storage Drivers в Docker/Kubernetes.

Взаимодействие с диском — это цепочка: приложение → системный вызов → файловая система → менеджер ввода-вывода → драйвер → контроллер → аппаратура. Каждый слой добавляет абстракцию, оптимизацию или защиту, обеспечивая баланс между скоростью, надёжностью и удобством.

Как происходит взаимодействие с диском как с устройством в ОС | PrepBro