#heading[Внешние запоминающие устройства.]
#emph[Внешние запоминающие устройства (Устройство магнитных и оптических накопителей. Что такое дорожка, сектор? Что хранится в секторе? RAID. Флеш накопители и SSD и как они работают, в чем отличия от HDD?).]

#import "/commons.typ": imagebox

== Внешние запоминающие устройства
#emph[Внешнее запоминающее устройство] — устройство, предназначенное для записи и хранения данных. В основе работы запоминающего устройства может лежать любой физический эффект, обеспечивающий приведение системы к двум или более устойчивым состояниям.

== Магнитные накопители
#emph[Магнитный накопитель] — это внешнее запоминающее устройство, использующее какую-то поверхность, которая может быть намагничена, и какое-то утройство, которое может по заданому участку поверхности считать его намагниченность и изменить её. В качестве накопителя могут выступать: лента, алюминиевая поверхность, стеклянная поверхность и так далее.

#columns(3)[
  #imagebox("magnet_hdd.jpeg", height: 130pt, label: [Магнитный жёсткий диск])
  #colbreak()
  #imagebox("tape_drive.jpg", height: 130pt, label: [Ленточный накопитель])
  #colbreak()
  #imagebox("diskett.png", height: 130pt, label: [Дискета])
]

=== Чтение и запись данных в HDD
В случае с дисками (которые вращаются порядка $7200\/3600"RPM"$), круговые участки намагниченности представляют собой последовательности битов, называемые дорожками, 1 бит информации хранится на участке шиирной порядка $0.1 mu m$. Дорожка делится на сектора фиксированного размера (512 байт, сейчас 4 Кб). Состояние каждого участка считывается и записывается специальной головкой, в зависимости от намагниченности. Такой сектор является минимально адресуемой единицей памяти на диске.
#imagebox("magnet_disk_sector.png", height: 190pt)

Важно понамать, что каждый сектор жесткого диска разбит на 3 части:
- Преамбула, хранящаая данные о новом секторе.
- Данные сектора.
- Исправляющие коды, которые способны улавливать и устранять ошибки (например, коды Рида-Соломона, которые). Коды Рида-Соломона, наподобие кодов Хемминга, но оперируют блоками данных, исправляя в них ошибки.

#imagebox("magnet_hdd_in_details.png", height: 190pt)
В реальности, жёсткий диск состоит даже не из одной пластины, а из нескольких. В наше время на поверхности одного диска может храниться до 1Тб данных.

=== Проблемы HDD
- Перестановка считывающей головки на произвольный сектор занимает в худшем случае 5-10 милисекунд. (долго).
- Из-за того, что угловая скорость вращения постоянна, плотность запиcи информации на диске неравномерна: чем дальше от центра, тем менее плотная запись.

К счастью, второе можно исправить, сделав так, что количество секторов на разных дорожках будет увеличиваться от цетра к краю.

Взаимодействие в жесткими дисками происходит через контроллер, --- микросхему, которая получает команды на чтение/запись/форматирование, управляет перемещением головок, обнаруживает и исправляет ошибки, передает данные наружу и даже следит за здоровьем жесткого диска. Угловая скорость вращения диска *не меняется*.


Для того чтобы увеличить объем хранимых данных и обеспечить их сохранность используются 2 подхода: _RAID (Redurent Array of Independent Disks)_ и _SLED (Single Large Expensive Disk)_.
#pagebreak()

=== RAID (Redurent Array of Independent Disks)
#grid(columns: (50%, 50%), column-gutter: 20pt, row-gutter: 10pt, [
  #imagebox("RAID0.png", height: 120pt)
  - Разбиваем объем $n$ жестких дисков на $m$ равных блоков, связанных между собой
  - Можно читать $n$ блоков параллельно с $n$ дисков
  - Скорость увеличивается существенно, если данные разбиты равномерно между дисками
  - Шанс потерять данные в $n$ раз выше
], [  
  #imagebox("RAID1.png", height: 120pt)
  - Дублируем данные
  - Эффективный объём в 2 раза меньше реального
  - Чтение в 2 раза быстрее, запись такая же
], [  
  #imagebox("RAID2.png", height: 120pt)
  - Одна часть жестких дисков для хранения информации, другая для битов исправления хранимых данных
  - Оперируем блоками или байтами
  - Используем код Хэмминга, можем исправлять ошибки на лету
  - Нужно минимум 7 дисков, быстрый износ
], [
  #imagebox("RAID3.png", height: 120pt)
  - Храним байт чётности
  - Хорошо читать
  - Плохо писать (перезапись 3 диска)
  - Исправление ошибок дольше
], [  
  #imagebox("RAID4.png", height: 120pt)
  - То же самое, что и RAID 3, но вместо байт - блоки
], [
  #imagebox("RAID5.png", height: 120pt)
  - То же самое, что и RAID 4, но теперь все диски изнашиваются равномерно
], [
  #imagebox("RAID6.png", height: 120pt)
  - То же самое, что и RAID 5, только мы храним 2 блока чётности
], [
  #imagebox("RAID1PLUS0.png", height: 120pt)
  - Просто 2 RAID 0, соединённые в RAID 1 
])
=== Оптические накопители
#emph[Оптические накопители] похожи на магнитные. Они имеют одну длинную закручивабщуюся спираль на весь диск. Информация хранится с помощью дырок и площадок (переход дырка-площадка или площадка-дырка это единичка, плоская поверхность - нолик). В них всё так же есть преамбула и коды коррекции. 
#imagebox("optical_disks.jpg", height: 150pt)

Выгодно исопользовать тогда, когда информация читается непрерывно, полностью (музыка, фильмы). 

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

Угловая скорость вращения диска *меняется* от центра к краю, чтобы линейная скорость при считывании оставалась постоянной.

#align(center)[ === Флеш-накопители (SSD и флешки) ]

#columns(2)[
  #imagebox("kingston_ssd.jpg", height: 200pt, label: [SSD-диск на 480 Гб])
  #colbreak()
  \
  #imagebox("flashka.jpg", height: 140pt, label: [
    \
    \
    \
    флешка])
]

#emph[Флеш-накопители] для хранения информации используют транзисторы с плавающим затвором. В обычном транзисторе данные теряются при
отключении питания, а в транзисторе с плавающим затвором заряд на
затворе сохраняется. Благодаря этому, на них можно хранить и перезаписывать информацию.

Транзисторы с плавающим затвором могут хранить в себе 2 (SLC, Single Level Cell), 4 (MLC, Multi Level Cell), 8 (TLC, Tripple Level Cell), 16 (Quadripple Level Cell) состояний. В жизни вы чаще всего встречается 4 или 8 состояний на транзистор.

С точки зрения внутренней реализации SSD и флешки очень сильно похожи на оперативную память. SSD на самом деле представляет из себя флешку с умным контроллером, который равномерно распредеяет по нему нагрузку.

#columns(2)[
  #align(center)[*Плюсы*]
   - Нулевое время поиска данных по сравнению с HDD.
   - Не страдают от резких перемещений в пространстве.
  #colbreak()
  #align(center)[*Минусы*]
   - Заряд на транзисторе может пропадать со временем.
   - Для перезаписи данных сначала необходимо записать 0, а затем данные.
]










