Można śmiało powiedzieć, że udział dysku twardego w pracy całego systemu jest niemniejszy od wkładu, jaki wnosi sam procesor. Pakiety oprogramowania o monstrualnych rozmiarach tylko dlatego mogą znaleźć nabywców, że od czasów wprowadzenia na rynek pierwszego dysku twardego o pojemności 10 MB (w cenie 4000 dolarów) wiele się w tej dziedzinie zmieniło.
Przez wiele lat dominował tzw. standard ST412/506, którego nazwa wywodziła się od pierwszych dwóch modeli tego systemu. W miarę upływu czasu wzrostu wymagań stawianych dyskom twardym, zwłaszcza w dziedzinie zastosowań profesjonalnych, opracowane zostały nowocześniejsze systemy (IDE,ESDI,SCSI). Jednemu z nich udało się zdominować również komputerów powszechnego użytku. Mowa tu o systemie IDE ( AT-BUS ). Ze względu na jego popularność, zostanie mu poświęcona znaczna część tego rozdziału.
Budowa kontrolera
W obudowie klasycznego dysku twardego zintegrowane są jedynie układy bardzo ściśle współpracujące z elementami wykonawczymi sterowania części ruchomych napędu dysku, jak silniki krokowe i liniowe, oraz systemy bezpośrednio związane z głowicami odczytująco-zapisującymi. Skomplikowane zadanie sterowania tymi elementami i obróbkę danych przejmuje tzw. kontroler dysku. Jest to układ podobny do kontrolera napędu dysków elastycznych.
Z logicznego punktu widzenia kontroler dysku twardego wymienia dane z magistralą systemową komputera PC tak samo, jak każde inne urządzenie. Procesor wysyła do odpowiednich rejestrów sterujące dane i rozkazy a pozostający w kontakcie z dyskiem kontroler odpowiada danymi i informacjami dodatkowymi. Sam kontrole składa się z mikroprocesora otoczonego niezbędnymi układami dodatkowymi, jak pamięci RAM i ROM, dekodery adresów i specjalistyczne układy obróbki danych. Każdy kontroler zawiera dodatkowo pamięć mogącą pomieścić dane jednego pełnego sektora wraz z tzw. kodami ECC (ang. Error Corektion Code), nazywaną buforem sektora. systemy kontroli i korekcji ECC są również rozwiązaniami sprzętowymi. Spróbujmy prześledzić działanie kontrolera w trakcie realizacji operacji odczytu sektora dysku.
6. Odczytane, sprawdzone i ewentualnie poprawione dane lokowane są w buforze sektora i mogą być przekazane do pamięci operacyjnej. Kontroler komputera PC/XT posługuje się kanałem 3 DMA, natomiast modele AT korzystają z przerwań. Po odczytaniu sektora kontroler modelu AT wyzwala przerwanie na linii IRQ14. Procedura obsługi tego przerwania rozpoczyna, wykorzystując rozkaz in, żmudną operację przenoszenia krok po kroku wszystkich 512 ( a czasem 516, tj. dane wraz z ECC ) bajtów z portu danych kontrolera do pamięci operacyjnej.
Systemy kodowania MFM i RLL
Poprzedniego rozdziału, poświęconego dyskom elastycznym, pamiętamy, że sama tylko zmiana systemu kodowania danych z FM na MFM przyniosła znaczne zwiększenie upakowania danych przy tej samej gęstości zapisu magnetycznego. Nic więc dziwnego, że poszukiwane były nadal metody pozwalające na jeszcze większy wzrost pojemności tego samego nośnika wyłącznie kosztem komplikacji towarzyszącej mu elektroniki. Jednym z takich nowych systemów, któremu udało się ugruntować swoją pozycję jest standard RLL ( ang. Run Lengtch Limited ).
Powróćmy na chwilę do metody MFM. Punktem do naszych rozważań będzie przykładowy bajt danych o wartości 00101110, reprezentowany przez przebieg ( 1 ) na rysunku.
Sposób zapisu informacji na dysku twardym w standardach MFM i RLL
Na ciąg wyjściowych impulsów w systemie MFM ( 3 ) składała się, jak pamiętamy z rozdziału 4, suma impulsów zegarowych Z ( 2 ) oraz impulsów D, pochodzących od strumienia danych ( 1 ). Obowiązywała przy tym zasada, że składowe D reprezentowały ustawione bity danych, a składowe Z- tylko te impulsy zegara, które wypadają pomiędzy dwoma kolejnymi wyzerowanymi bitami danych.
Istota kodowania RLL polega na całkowitej rezygnacji ze składowej Z. Układy logiczne dekodera muszą wtedy obliczać, na podstawie odległości dzielących kolejne impulsy, liczbę zer przypadających między nimi.
System taki może poprawnie funkcjonować w warunkach rzeczywistych
( uwzględniając fluktuacje prędkości obrotowej ) jedynie w pewnych granicach.
Proszę zwrócić uwagę na fakt, że powtórne formatowanie dysku twardego ( celowe lub niezamierzone ) nie niszczy w najmniejszym stopniu zapisanej na nim informacji, a jedynie jej logiczną strukturę. Nie oznacza to bynajmniej, że odzyskanie danych jest sprawą banalną, szczególnie gdy były one rozproszone na całym dysku. Niszczona jest informacja o strukturze danych zawarta w FAT, dlatego też przechowywanie “rezerwowej” kopii FAT w dodatkowym miejscu dysku pozwala odzyskać dane po formatowaniu.
Formatowaniu niskiego poziomu
Operacja nanoszenia na powierzchnię dysku ścieżek, sektorów i wszystkich innych pól dodatkowych nazywana jest formatowaniem niskiego poziomu (ang. low lewel format ).zdecydowana większość produkowanych obecnie napędów poddawana jest tej operacji jeszcze u producenta i nie należy jej powtarzać. Kategoryczny zakaz formatowania niskiego poziomu obowiązuje w stosunku do dysków IDE (AT-BUS), których kontrolery, zgodne na poziomie rejestrów z systemem ST412/506 bardzo łatwo się tej operacji poddają. Przy dużej dozie szczęścia tak “potraktowany” dysk będzie jeszcze funkcjonował, często pozornie bezbłędnie. Jeżeli przy okazji formatowania niskiego poziomu została zniszczona jedna z tablic odwzorowania uszkodzonych sektorów (ang. bat sector mapping), wcześniej czy później da to o sobie znać. Najczęściej jedna do takiego dysku odmawia nawet program FDISK. Z góry skazane na niepowodzenie są również próby “poprawy’ współczynnika przeplotu (ang. interleave ), bowiem bez względu na to, co meldują programy diagnostyczne (a są na nieszczęście i takie, które dla dysków AT-BUS nie odmawiają działania) współczynnik przeplotu dysków IDE z reguły wynosi 1:1.
Przyjmijmy więc, że struktura ścieżek i sektorów znajduje się już na dysku, a my możemy się jej co najwyżej przyjrzeć. Na rysunku przedstawiona jest budowa jednej ścieżki dysku twardego systemu ST412/506. W zależności od systemu kodowania (MFM lub RLL) zmieniają się zawartości niektórych pól, ale ich ogólny układ pozostaje ten sam.
Z porównania rysunków wynika, ze ścieżka dysku twardego zbudowana jest w sposób bardzo zbliżony do ścieżki dyskietki. Uwagę zwraca jedynie kilka szczegółów.
Znacznemu zmniejszeniu uległy rozmiary odstępów ( szczelin ) między elementami ścieżki, tj. sektorami i znacznikami EOT i BOT. Szczeliny te miały za zadanie kompensację wahań prędkości obrotowej dyskietki. Redukcja ich wielkości stała się możliwa dzięki lepszej stabilizacji prędkości wirowania dysku, co z kolei ma swoje (uzasadnienie w elektronicznej regulacji obrotów silnika oraz braku tarcia między głowicami a powierzchnią nośnika magnetycznego. Kolejną różnicę widać wyraźnie w czwartym bajcie metryki adresowej IDE, oznaczonym przez Z. Stanowi on tzw. znacznik sektora, a jego rola omówiona zostanie w następnym punkcie tego rozdziału.
Ścieżka
BOT
Sektor 1
Sektor 2
...
Sektor n
EOT
Znacznik początku ścieżki (BOT)
S
D1
Z1
Sektor
D2
D3
ID
ECC1
Z2
D4
DANE
ECC-2
Z3
Znacznik końca ścieżki (EOT)
Z4
Organizacja danych na ścieżce dysku twardego.
Pole System MFM System RLL
S (BOT) 10 bajtów o wartości 00h 11 bajtów o wartości 00h
D1 A1FCh A1FCh
Z1 11 bajtów o wartości 4Eh 12 bajtów o wartości FFh
D2 7 bajtów o wartości 4Eh -
S 10 bajtów o wartości 00h 10 bajtów o wartości 00h
D3 A1FEh 5EA1h
ID C:G:N:Z C:G:N:Z
ECC-1 4 bajty kodu ECC 4 bajty kodu ECC
Z2 5 bajtów o wartości 00h 5 bajtów o wartości 00h
S 10 bajtów o wartości 00h 11 bajtów o wartości 00h
D4 A1F8h 5EA1h
Dane 512 bajtów 512 bajtów
ECC-2 4 bajty kodu ECC 4 bajty kodu ECC
Z3 15 bajtów o wartości 00h 3 bajtów o wartości 00h
17 bajtów o wartości FFh
Z4 ok. 56 bajtów o wartości 00h ok. 93 bajtów o wartości 00h
Symbol C:G:N:Z oznacza zakodowaną w polu ID metrykę adresową sektora w postaci
numer cylindra-numer głowicy-numer sektora-znacznik sektora.
Błędy i ich korekcja
Fizycznym nośnikiem informacji w dysku twardym jest, jak wiadomo, zespół koncentrycznie osadzonych krążków (płyt) pokrytych warstwą magnetyczną. Pomimo wyrafinowanej technologii produkcji tej części napędu do dnia dzisiejszego nie jest możliwe uzyskanie absolutnie idealnych właściwości magnetycznych materiału pokrycia. Już mikroskopijnej wielkości defekt niszczy jeden bit informacji, co z kolei eliminuje cały sektor.
Dyski twarde, przechodząc kolejne etapy produkcji, poddawane są długotrwałym próbom mającym na celu wykrycie wszystkich takich miejsc na powierzchni. Dla każdego dysku sporządzana jest indywidualnie lista błędów, której pozycje, określające jednoznacznie uszkodzone sektory, definiują dla każdego a nich numer cylindra, głowicy i sektora. Lista taka dołączona jest często do napędu w formie oddzielnego arkusza lub naklejki na obudowie. Nawet gdy liczba pozycji na niej przekracza kilkadziesiąt, nie stanowi to powodu do rozpaczy, gdyż jest to “ryzyko wkalkulowane”, a problem rozwiązywany jest elegancko przez tzw. system odwzorowania uszkodzonych sektorów ( ang.bad sector mapping ).
Uważny Czytelnik zwrócił zapewne uwagę, że czterobajtowe pole ID metryki adresowej sektora dysku twardego (zobacz rysunek ) ma nieco inną budowę niż jego dyskietkowy odpowiednik ( porównaj rysunek ). Główna różnica tkwi w ostatnim bajcie, który w przypadku dysku twardego nie podaje wielkości sektora, lecz stanowi jego tzw. znacznik.
Postać znacznika sektora Z ( bajt 4 metryki adresowej ID ):
bbit 7
bbit 6
bbit 5
bit 4
bbit 3
bbit 2
bbit 1
bbit 0
Objaśnienia odnoszą się do sytuacji, w której dany bit jest ustawiony.
bity 7-4 zarezerwowane.
bit 3 oznacza ścieżkę zastępczą.
bit 2 metryka adresowa wskazuje na ścieżkę zastępczą.
bit 1 ścieżka uszkodzona bez przydziału ścieżki zastępczej.
bit 0 sektor uszkodzony.
Tak więc ustawienie bitu 0 znacznika sygnalizuje uszkodzenie danego sektora. Jeżeli uszkodzona jest cała ścieżka, a kontroler nie był w stanie przydzielić dla niej “zastępstwa”, ustawiany jest bit1. Odpowiednio duża przestrzeń rezerwowa dysku pozwala kontrolerowi zastąpić całą uszkodzoną ścieżkę. Sektory uszkodzonej ścieżki mają wtedy ustawiony bit 2 znacznika, a pierwsze trzy bajty pola ID wskazują nie na ścieżkę aktualną, lecz na zapasową. Ścieżka uznana za zastępczą posiada ustawiony bit 3 znacznika Z.
Mechanizm odwzorowania uszkodzonych sektorów opiera się na dwóch tablicach przechowywanych na dysku. Pierwszą z nich jest liczba błędów wykrytych podczas testowania powierzchni magnetycznej jeszcze u producenta. Umieszczona jest ona zwykle na ścieżce zerowej i może zawierać maksymalnie 101 pozycji. Poszczególne pozycje lokalizują uszkodzone miejsce przez podanie numeru cylindra, głowicy i liczby bajtów zawartych pomiędzy znacznikiem D3 na początek ścieżki a miejscem uszkodzenia. Drugą listę tworzy sam kontroler dysku podczas operacji formatowania (automatycznie lub na życzenie wyrażone odpowiednim rozkazem-aktualizacja listy ).lista ta nosi nazwę znanych błędów ( ang. Grown Error List ). Pozycje na tej liście, w przeciwieństwie do listy błędów ustalonej przez producenta, oznaczają uszkodzone miejsca poprzez podanie sekwencji cylinder-głowica-numer sektora.
W oparciu o przedstawione listy kontroler ma możliwość optymalnego zagospodarowania powierzchni dysku. Niesprawne sektory i ścieżki są logicznie przesuwane lub zastępowane innymi tak, że dysk “na zewnątrz” prezentuje się nienagannie mimo wielu uszkodzeń. Zjawiska tego nie należy traktować jako wady dysku. Jeżeli dana ścieżka posiada tylko jeden zły sektor, kontroler może jeszcze w trakcie operacji formatowania tak przesunąć wszystkie sektory, że uszkodzenie trafi w niewykorzystywaną część ścieżki. Operacja ta określana jest często mianem sector-slipping; jeśli może być przeprowadzona, nie powstaje ubytek pojemności dysku. Wykluczenie uszkodzonego sektora przez oznaczenie go jako zły stanowi nieco gorszą alternatywę, gdyż zmniejsza pojemność dysku. Niektóre kontrolery “profilaktycznie” formatują w tym celu o jeden sektor więcej na każdej ze ścieżek (zwykle 18 zamiast 17 lub 27 zamiast 26). Dodatkowe sektory nie są w normalnych warunkach wykorzystywane i oczekują w rezerwie. Pozwala to na eliminację pojedynczych sektorów ścieżki bez utraty pojemności.
Widzimy więc, że niewielkie błędy mogą być stosunkowo łatwo likwidowane przez kontroler. Uszkodzenia obejmujące więcej niż jeden sektor nie mogą być skompensowane w ramach tej samej ścieżki. Kontroler oznacza w takim przypadku całą ścieżkę jako uszkodzoną, a jako zastępczą wyznacza najwyższą z pozostałych dostępnych ścieżek. Jej metryki adresowe (cylinder-głowica-sektor-znacznik) odkładane są we wszystkich polach ID ścieżki uszkodzonej, przy czym ustawiony zostaje bit 2 znacznika. Z kolei w znacznikach sektorów ścieżki rezerwowej ustawiony zostaje bit 3. Ścieżka taka, adresowana swymi własnymi parametrami, przestaje być dostępna dla normalnych operacji. Każda próba dostępu do sektorów uszkodzonej ścieżki kierowana jest przez kontroler do ścieżki rezerwowej. Praktycznie oznacza to dodatkowy manewr najazdu (pozycjonowania) głowic.
Przydział ścieżki zapasowej powoduje wprawdzie zmniejszenie pojemności dysku, ale pozostawienie uszkodzonej ścieżki bez przydzielenia “zastępstwa” jest jeszcze gorsze, oznacza bowiem przerwanie ciągłości w przestrzeni adresowej sektorów. Zarządzanie takim obszarem jest dla kontrolera zadaniem dużo trudniejszym i sprawność dysku obniża się. Na szczęście obecny poziom technologii pozwala na minimalizację liczby uszkodzeń powierzchni dysków do tego stopnia, że na skorygowanie wszystkich błędów pozwala w zasadzie sama technika sector-slipping.
Kontrolery realizujące opisany powyżej mechanizm odwzorowania uszkodzonych sektorów rezerwują zwykle dla swoich celów pierwszy cylinder fizyczny dysku i przydzielają mu numer ujemny (-1). Daje to gwarancję, że dostęp do tego cylindra może mieć wyłącznie sam kontroler, żaden rozkaz nie może bowiem zaadresować sektora położonego na ujemnym cylindrze. W tak zabezpieczonych sektorach kontroler przechowuje wykorzystywane listy błędów oraz dokładny opis rzeczywistej geometrii dysku (dla bezpieczeństwa - w kilku kopiach).
Archie12