Що потрібно робити з твердотільним зберіганням?


13

При механічному зберіганні дисковий режим низького рівня seek()змушує голівки жорсткого диска переміщуватися до місця, щоб вони були готові до зчитування з заданої області диска.

З твердотільним накопичувачем, таким як SD-карти, флеш-накопичувачі та SSD-диски, немає апаратних рухомих частин обладнання, лише електричні сигнали.

Якщо припустити, що енергонезалежна технологія оперативної пам'яті NAND є основою обладнання, яку функцію seek()насправді виконує на апаратному рівні такого пристрою?

Щоб було зрозуміло, я вже знаю, що відбувається таке:

  1. Програма користувальницького простору викликає seek()системний виклик або еквівалент для ОС

  2. Ядро інтерпретує системний виклик і надсилає повідомлення контролеру SATA для пошуку

  3. Контролер SATA інтерпретує команду і повідомляє приєднаному дисковому пристрою, який є твердим станом, шукати (а може бути, він досить розумний, щоб визнати, що це твердий стан і навіть не розповідає ?? ??)

  4. Що я не знаю, це твердотільний пристрій робить ??? з командою «шукати».

Якщо є деталі, які залежатимуть від операційної системи, припустімо відносно стандартну версію для настільних ПК GNU / Linux з ядром версії 3.2.


2
Я думаю, що це робить великий жир NOP. Жартую, якщо я не був накопичувачем SSD, я б зробив деяке "застережливе" читання в кеш, щоб переконатися, що все відбувається якнайшвидше. Але оскільки це лише невиразна здогадка про щось, про що я не маю ні найменшого уявлення, то прийміть це із зерном солі ...
ppeterka

Я не думаю, що операції "шукати" вже не використовуються в інтерфейсі низького рівня зберігання. Якщо вони існували, вони просто змінили б збережене положення для наступної операції вводу / виводу.
Девід Шварц

Відповіді:


4

якщо ви посилаєтесь на Linux, шукайте все одно вперед необхідну кількість байтів. Наприклад:

dd if=/dev/zero of=/dev/sdb bs=512 SEEK=2

Почне копіювати нулі 1024 байти на початок диска, не має значення, чи sdb - це sd-карта чи ssd-диск, через маленьку річ, яку називають абстракцією, реальна механіка цього подбає про нижчий рівень.

Оновлення

Я бачу, що ти зараз кажеш. Наслідуючи приклад моєї SD-картки, флеш-пам’ять використовує щось, що називається сторінками , і сторінки мають певний розмір. коли відбувається пошук, ОС надсилає команду контролеру sd-карти / картки для переміщення на певну сторінку для читання та запису.


Я усвідомлюю, що це логічно рухається у файлі , але окрім логічного впливу на файл з точки зору абстрактних "блоків", чи апаратне обладнання робить щось інше, коли його насправді говорять шукати? Ви можете розглядати lseek()системний виклик як конкретний приклад, якщо це необхідно. Я знаю, що цей системний виклик не тільки здійснює логічний пошук, але й призводить до переміщення головки жорсткого диска під час роботи з механічним диском, і що робить SSD?
allquixotic

@allquixotic Я оновив свою відповідь.
MDMoore313

1
Навіть на фізичному обертовому жорсткому диску ОС надсилає команду (команда SCSI, команда ATA / SATA або команда USB-накопичувача масового зберігання), щоб отримати LBA X. Хост насправді не повідомляє накопичувачеві про переміщення голова на будь-якому рівні, прошивка цього диска робить це. Якщо ви хочете мати уявлення про те, що робить прошивка SSD у відповідь на команди зберігання, погляньте на деякі специфікації проекту Jasmine OpenSSD, якщо ви зможете їх знайти, деякі з них пояснюють речі на дуже низькому рівні.
LawrenceC
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.