2. Typy magistral

2.12. Geometria dysku twardego, format niskopoziomowy

Na geometrię dysku twardego składają się ścieżki i sektory (Rys. 15). Ścieżki i sektory nie przylegają do siebie, ale są rozdzielone pewną nieużywaną powierzchnią. Ma to na celu lepszą separację pól magnetycznych. Pierwsze dyski twarde miały ustaloną, stałą liczbę ścieżek i sektorów (20 ścieżek, 17 sektorów na ścieżkę). Obecnie dyski mają dużo większą gęstość ścieżek (mogą być ich dziesiątki tysięcy), jak i sektorów na ścieżkę. Liczba sektorów na ścieżkę nie jest  taka sama dla całej powierzchni talerza dysku.
Dane na dysku są kodowane w postaci zmian namagnesowania domen (małych obszarów powierzchni talerza dysku). Nie jest możliwe kodowanie danych przy użyciu kierunku namagnesowania domen, chociażby z tego względu, że ciąg zer czy jedynek powodowałby skomasowanie jednakowo namagnesowanych domen, tworząc silne pole magnetyczne, które wpływałoby na sąsiednie domeny. Tak więc głowica, przemieszczając się nad dyskiem wykrywa zmiany kierunków namagnesowania domen, generując wtedy pik napięcia (Rys. 16).

 
Rys. 15. Format niskopoziomowy, ścieżki i sektory


 
Rys. 16. Zapis i odczyt danych na nośniku magnetycznym

Jednym z najprostszych metod zapisu danych, które wykorzystują zmianę kierunku namagnesowania domen do zapisu danych, jest format FM (ang. frequency modulation). W zapisie tym czas trwania jednego bitu jest regulowany sygnałem zegarowym. Każdy takt zegara generuje impuls Z (Rys. 17). Dodatkowo jeśli kodowany bit jest 1, generowany jest bit D. W ten sposób kodowany jest dowolny ciąg bitów. Kodowanie i dekodowanie jest bardzo proste, ale taki zapis nie jest efektywny. Stosunkowo szybko powstał nieco zmodyfikowany format zapisu danych MFM (ang. modified frequency modulation). W tym przypadku impulsy Z są generowane tylko wtedy, kiedy bieżący bit i poprzedni są zerami. Ma to zapobiec sytuacjom, kiedy ciąg zer nie generuje przemagnesowań. Każda jedynka generuje bit D. Tak powstały kod jest trudniejszy do zdekodowania, ale pozwala na zapis dwa razy większej liczby danych na tym samym nośniku magnetycznym. Kodowanie MFM było używane do zapisu danych na dyskietkach. Następnym z kolei był efektywniejszy kod RLL (ang. Run Length Limited). Przy tym kodowaniu zrezygnowano zupełnie z generowania impulsów przemagnesowujących pochodzących od sygnału zegarowego. Impulsy były generowane tylko przez jedynki z sygnale zapisywanym. Zatem system musiał obliczyć z długości przerwy między jedynkami, ile było pomiędzy nimi zer. W założeniu kodu RLL pomiędzy jedynkami mogła wystąpić pewna minimalna do maksymalnej liczba zer. Jednym z powszechniej używanych kodów był RLL(2,7), gdzie liczba zer musiała się mieścić w przedziale od 2 do 7.

 
Rys. 17. Formaty zapisu FM i MFM

Oczywiście trudno wymagać od zapisywanych danych, żeby ten warunek był zawsze spełniony. Dlatego kodowanie RLL wymagało przekodowywania danych. Dla kodu RLL(2,7) sposób przekodowania jest opisany w tablicy 6. Jak można zauważyć przekodowanie wydłuża ciąg danych o 100%. Jednak zmniejszona liczba przemagnesowań umożliwia zapis ok. 40% więcej danych niż przy zastosowaniu formatu MFM (Rys. 18). 

Tablica 6. Tablica przekodowań systemu RLL(2,7)

Dane wejściowe Dane wyjściowe
000 000100
10 0100
010 100100
0010 00100100
11 1000
011 001000
0011 00001000

Stosowane były również inne kody RLL(1,7), RLL(3,9). Umożliwiały one uzyskanie jeszcze większej gęstości zapisu, ale wymagały też wyższej dokładności wykonania układów dekodujących. Obecnie kod RLL też nie jest już stosowany. W pewnym momencie konstrukcji dysków, kiedy domeny magnetyczne stały się naprawdę małe, wykrywanie pików powodowanych przez przemagnesowania okazało się bardzo trudne. Bardzo słabe pola magnetyczne, wpływ innych domen powodowały, że sygnał odczytany przez głowice nie wykazywał wyraźnie widocznych szczytów. Zamiast detekcji szczytów odczytywano ciągły sygnał z głowic. Następnie sygnał taki był zamieniany na cyfrowy. Specjalne algorytmy próbowały odgadnąć jaki jest najbardziej prawdopodobny ciąg bitów, który by wygenerował taki sygnał. Pozostałe błędy są korygowane w locie z użyciem algorytmów korekcji błędów zaszytych w format niskopoziomowy. Taki sposób kodowania nazywa się PRML (ang. Partial Response, Maximum Likelihood). Obecnie stosuje się kodowanie EPRML (ang. Extended PRML), w którym poprawiono wydajność algorytmów dekodujących.

 
Rys. 18. Kodowanie RLL(2,7)

Nałożona na powierzchnię talerzy struktura ścieżek i sektorów tworzy tzw. format niskopoziomowy dysku. Formatowanie niskopoziomowe jest zawsze przeprowadzane przez producenta, użytkownik nie może go zmienić. Format niskopoziomowy stosowany przy kodowaniu RLL (starsze dyski) jest przedstawiony na rysunku 19. Ścieżki są zbudowane z pewnej liczby sektorów. Każdy sektor przechowuje 512 bajtów danych. Sektor można podzielić na dwie części. Pierwsza z nich to metryka adresowa (ID). Pole ID zawiera adres sektora. Druga część przechowuje dane (DANE). Dane i metryka adresowa są chronione kodami ECC, które są w stanie wykryć błąd odczytu danych i skorygować ten błąd. Pola S służą do synchronizacji sygnałów zegarowych. Pola D3 i D4 wskazują wystąpienie metryki i danych, a pola Z stanowią szczeliny (nieużywane obszary). 

 Rys. 19. Format niskopoziomowy budowa ścieżki i sektora, kodowanie RLL

Dyski z kodowaniem EPRML w formacie niskopoziomowym nie mają metryki adresowej. Jest to tzw. format No-ID. Adresy poszczególnych sektorów kodowane są w przestrzeniach pomiędzy sektorami. W ten sposób zwiększono powierzchnię dysku przeznaczoną do przechowywania danych. Do kodowania adresów stosuje się specjalne kody (np. Greya). W kodowaniu Greya kolejne liczby zmieniają się tylko na pozycji jednego bitu. Śledząc te zmiany można odczytać położenie głowicy. 
Mówiąc o formacie niskopoziomowym nie możemy pominąć pojęcia cylindra (Rys. 20). Głowice są połączone ze sobą w taki sposób, że pozostają w pozycji jedna pod drugą. Jeśli czytany jest sektor z pierwszej ścieżki (położonej najbardziej na skraju dysku, na pierwszym talerzu) to pozostałe głowice są też umieszczone na pierwszej ścieżce tylko innych talerzy (dotyczy to górnej i dolnej powierzchni talerza). Te same ścieżki na górnej i dolnej powierzchni każdego z talerzy tworzą cylinder. Sektory są numerowane w kolejności: wszystkie na pierwszej ścieżce z górnej powierzchni pierwszego talerza, wszystkie na pierwszej ścieżce z dolnej powierzchni pierwszego talerza, wszystkie na pierwszej ścieżce z górnej powierzchni drugiego talerza, itd. Należy zaznaczyć, że we współczesnych dyskach liczba sektorów na ścieżkę nie jest taka sama dla całej powierzchni talerza. Jest to tzw. zapis strefowy (Rys. 21). Na zewnętrznych fragmentach talerza jest po prostu więcej miejsca. Można tam umieścić większą liczbę sektorów (zwykle dwa razy tyle co w strefie wewnętrznej).

 Rys. 20. Sektory, ścieżki i cylindry dysku twardego [źródło: https://en.wikipedia.org/wiki/Cylinder-head-sector]

 
Rys. 21. Zapis strefowy
Strefy pośrednie zawierają coraz większą liczbę sektorów licząc od środka talerza. Ma to też pewien skutek uboczny. Prędkość kątowa obrotu dysku jest stała. Zatem prędkość liniowa na obrzeżu dysku jest większa niż dla sektorów położonych tuż przy środku talerza. Powoduje to, że odczyt danych z sektorów na zewnątrz talerza jest ok. dwa razy szybszy niż tych najbardziej wewnętrznych. Jest to uwidocznione na rysunku 22.

 
Rys. 22. Transfer danych dla magnetycznego dysku twardego