Коли відбувається зчитування чи записування диска, куди йдуть дані?


10

Я розумію, що є таке поняття, як дисковий контролер, який містить буфер, але мені було цікаво, чи читає ЦП безпосередньо з цього буфера, чи дані повинні спочатку перейти до певного місця в пам'яті, а потім дозволяти собі читати процесором?

Хтось також знає, як називається буфер? І як DMA вписується у все це?

Відповіді:


20

Для читання диска потік даних по суті є:

  • після того, як збірка читання / запису знаходиться у запитуваному циліндрі, вибирається запитувана головна г / ш головка.
  • в кожному секторі зчитується ідентифікатор сектора. Якщо номер сектора, який було прочитано, відповідає запитуваному номеру сектора, то дані сектора зчитуються.
  • дані сектора читаються як послідовний потік бітів і перетворюються в байти.
  • байти сектора зберігаються в секторному буфері (зазвичай SRAM в контролері); цей секторний буфер відрізняється від "кеш-диска".
  • Після того, як буде прочитаний весь сектор, дані перевіряються за допомогою ECC та, можливо, виправляються.
  • Після перевірки дані сектора передаються з контролера на головний ПК. Примітка: існування цього секторного буфера недостатньо відоме, і широко поширена дезінформація про те, що швидкість передачі на інтерфейсі хоста (egATA) прив'язана або обмежена швидкістю передачі бітів на голові R / W. Це абсолютно помилково, оскільки ці дві передачі даних є незалежними та послідовними операціями та не є одночасними.
  • оскільки ПК отримує дані від дискового контролера через інтерфейс ATA, ПК може використовувати або запрограмований ввід / вивід (ЦП багаторазово зчитує регістр даних порту ATA і копіює значення в пам'ять призначення) або DMA (контролер DMA є налаштування для копіювання N байтів з регістра даних порту ATA в буфер пам'яті без подальшого втручання процесора).
  • "буфер" пам'яті ПК, який приймає дані, може бути буфером програми (при використанні системного виклику блоку вводу / виводу ), або може бути внутрішнім системним буфером під управлінням файлової системи, або навіть пам'яттю програми або пам'яті даних, якщо дані надходили з підкачки область (або файл сторінки).

Запис на диск схожий, за винятком того, що дані передаються з ПК на дисковий контролер, обчислюється ECC, розміщується запитуваний сектор, а потім дані записуються з буфера сектору на планшет.

За додатковий кредит:

Читайте на передачах " розсипати-збирати ", де використовується ланцюжок DMA і список адрес пам'яті та довжини буфера. Замість одного великого, суміжного буфера пам'яті, передача "розсипати-збирати" дозволяє використовувати неперервні буфери пам'яті для агрегації запиту вводу / виводу диска.


1
Можливо, може бути дещо менш конкретним щодо 'r / w head', оскільки немеханічні приводи використовуються набагато частіше в наші дні, але це хороша відповідь.
Shinrai

@Shinrai - У мене є лише досвід програмування з дискових приводів з рухомими руками (і я використовував накопичувачі з фіксованою головою). Я вирішу не спекулювати чи повторювати інформацію про другу чи третю руку про те, як працюють SSD-диски.
тирса

+1 за цю чудову відповідь, добре задокументовану та написану. Дуже професійний.
climenole

2

Він переходить у певну область пам’яті, яку ядро ​​виділило драйверу диска. Я не думаю, що це конкретно названо. Ця область пам'яті, як правило, налаштована як буфер кільця . Залежно від ОС, ця пам'ять може бути скопійована вдруге в просторі користувача для використання додатком.

DMA є «прямим доступом до пам'яті» , який означає , що контролер дискового накопичувача може безпосередньо писати в ОЗУ без процесора кілька разів запитати, якщо більше даних доступні (відомий як опитування - як речі , які використовуються бути зроблений). Натомість, коли весь буфер передано, контролер перериває процесор, щоб повідомити, що тепер доступні дані.

Якщо вам цікаво ще нижчий рівень, водій здійснює дзвінки ioctl .


1
Буферні дзвінки зазвичай використовуються мережевими пристроями (наприклад, контролером Ethernet), оскільки дані можуть надходити непотрібно (несподівано без очікування запиту читання). Дані з дисковода / контролера завжди відповідають на запит хоста. Дані вимагають, тому в драйвері диска немає необхідності "буфер дзвінка".
тирса

Гаразд я працював лише з ЦАП на рівні драйверів, і вони також використовують кільцеві буфери, тому я припускав.
Аарон Д. Мараско
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.