Adresowanie bloków logicznych - Logical block addressing

Logiczne adresowanie bloków ( LBA ) to powszechny schemat używany do określania lokalizacji bloków danych przechowywanych na komputerowych urządzeniach pamięci masowej, zazwyczaj wtórnych systemach pamięci masowej , takich jak dyski twarde . LBA jest szczególnie prostym liniowym schematem adresowania ; bloki znajdują się za pomocą indeksu liczb całkowitych, przy czym pierwszy blok to LBA 0, drugi LBA 1 i tak dalej.

Standard IDE obejmował jako opcję 22-bitowy LBA, który został dodatkowo rozszerzony do 28-bitowego wraz z wydaniem ATA-1 (1994) i do 48-bitowego wraz z wydaniem ATA-6 (2003), podczas gdy rozmiar wpisy w strukturach danych na dysku i w pamięci zawierające adres mają zwykle 32 lub 64 bity. Większość dysków twardych wydanych po 1996 roku implementuje adresowanie bloków logicznych.

Przegląd

W adresowaniu bloków logicznych do adresowania danych używana jest tylko jedna liczba, a każdy liniowy adres bazowy opisuje pojedynczy blok.

Schemat LBA zastępuje wcześniejsze schematy, które ujawniały fizyczne szczegóły urządzenia pamięci masowej oprogramowaniu systemu operacyjnego. Najważniejszym z nich był schemat cylinder-head-sector (CHS), w którym bloki były adresowane za pomocą krotki, która określała cylinder, głowicę i sektor, w którym pojawiały się na dysku twardym . CHS nie był dobrze mapowany na urządzenia inne niż dyski twarde (takie jak taśmy i sieciowa pamięć masowa) i generalnie nie był dla nich używany. CHS był używany we wczesnych dyskach MFM i RLL , a zarówno on, jak i jego następca, rozszerzony sektor głowicy cylindrów (ECHS), były używane w pierwszych dyskach ATA . Jednak obecne napędy dysków używają nagrywania strefowego , gdzie liczba sektorów na ścieżkę zależy od numeru ścieżki. Mimo że dysk będzie raportował niektóre wartości CHS jako sektory na ścieżkę (SPT) i głowice na cylinder (HPC), mają one niewiele wspólnego z prawdziwą geometrią dysku.

LBA został po raz pierwszy wprowadzony w SCSI jako abstrakcja. Chociaż kontroler napędu nadal adresuje bloki danych za pomocą ich adresu CHS, informacje te nie są zazwyczaj używane przez sterownik urządzenia SCSI, system operacyjny, kod systemu plików ani żadne aplikacje (takie jak bazy danych), które uzyskują dostęp do „surowego” dysku. Wywołania systemowe wymagające we/wy na poziomie bloku przekazują definicje LBA do sterownika urządzenia pamięci masowej; w prostych przypadkach (gdzie jeden wolumin jest mapowany na jeden dysk fizyczny), ten LBA jest następnie przekazywany bezpośrednio do kontrolera dysku.

W nadmiarowych macierzach niezależnych dysków (RAID) i sieciach pamięci masowej (SAN) oraz w których dyski logiczne ( numery jednostek logicznych , LUN) są tworzone za pomocą wirtualizacji i agregacji LUN, adresowanie LBA poszczególnych dysków powinno być tłumaczone przez warstwę oprogramowania, aby zapewnić jednolite adresowanie LBA dla całego urządzenia pamięci masowej.

Ulepszony BIOS

Wcześniejszy standard IDE firmy Western Digital wprowadził 22-bitowe LBA; w 1994 r. standard ATA-1 zezwalał na 28-bitowe adresy zarówno w trybach LBA, jak i CHS. Schemat CHS używał 16 bitów na cylinder, 4 bity na głowicę i 8 bitów na sektor, licząc sektory od 1 do 255. Oznacza to, że raportowana liczba głowic nigdy nie przekracza 16 (0-15), liczba sektorów może wynosić 255 ( 1-255; chociaż 63 jest często używany jako największy), a liczba cylindrów może być tak duża, jak 65 536 (0-65535), ograniczając rozmiar dysku do 128 GiB (≈137,4 GB), przy założeniu 512-bajtowych sektorów. Dostęp do tych wartości można uzyskać, wydając ECdo napędu polecenie ATA „Identify Device” ( h).

Jednak implementacja IBM BIOS zdefiniowana w procedurach dostępu do dysku INT 13h wykorzystywała zupełnie inny 24-bitowy schemat adresowania CHS, z 10 bitami na cylinder, 8 bitami na głowicę i 6 bitami na sektor lub 1024 cylindry, 256 głowic, oraz 63 sektory. Ta implementacja INT 13h poprzedzała standard ATA, ponieważ została wprowadzona, gdy IBM PC miał tylko pamięć masową na dyskietkach , a gdy dyski twarde zostały wprowadzone w IBM PC/XT , interfejs INT 13h nie mógł zostać praktycznie przeprojektowany ze względu na problemy ze zgodnością wsteczną . Nakładające się mapowanie ATA CHS z mapowaniem BIOS CHS dało najniższy wspólny mianownik 10:4:6 bitów, czyli 1024 cylindry, 16 głowic i 63 sektory, co dało praktyczny limit 1024×16×63 sektorów i 528  MB (504  MiB ), przy założeniu 512-bajtowych sektorów.

Aby BIOS mógł przezwyciężyć ten limit i pomyślnie pracować z większymi dyskami twardymi, schemat translacji CHS musiał zostać zaimplementowany w procedurach we/wy dysku BIOS, które konwertowałyby między 24-bitowym CHS używanym przez INT 13h i 28-bitowym CHS numeracja używana przez usługę ATA. Schemat translacji nazwano translacją dużą lub przesunięciem bitowym . Ta metoda przemapowałaby 16:4:8-bitowe cylindry i głowice ATA do schematu 10:8:6-bitowego używanego przez INT 13h, generując znacznie więcej „wirtualnych” głowic dysków niż zgłoszony dysk fizyczny. Zwiększyło to praktyczny limit do 1024×256×63 sektorów, czyli 8,4  GB (7,8  GiB ).

Aby jeszcze bardziej przezwyciężyć ten limit, wprowadzono rozszerzenia INT 13h wraz z usługami BIOS Enhanced Disk Drive Services , które usunęły praktyczne ograniczenia rozmiaru dysku dla systemów operacyjnych, które są świadome tego nowego interfejsu, takich jak komponent DOS 7.0 w Windows 95 . Ten ulepszony podsystem systemu BIOS obsługuje adresowanie LBA metodą LBA lub LBA-assisted , która wykorzystuje natywny 28-bitowy LBA do adresowania dysków ATA i w razie potrzeby przeprowadza konwersję CHS.

W normalnych lub żadna metoda powraca do wcześniej 10: 4: 6 bitowym trybie CHS który nie obsługuje adresowania więcej niż 528  MB.

Instalacja wersji OEM napędu EZ Drive firmy Western Digital na dyskietce 3,5 cala.

Do czasu wydania standardu ATA-2 w 1996 roku istniała garstka dużych dysków twardych, które nie obsługiwały adresowania LBA, więc można było używać tylko dużych lub normalnych metod. Jednak użycie dużej metody spowodowało również problemy z przenośnością, ponieważ różne BIOS-y często używały różnych i niekompatybilnych metod translacji, a dyski twarde podzielone na partycje w komputerze z BIOS-em od konkretnego dostawcy często nie mogły być odczytane na komputerze z inną marką BIOS-u . Rozwiązaniem było użycie oprogramowania do konwersji, takiego jak OnTrack Disk Manager , Micro House EZ-Drive/EZ-BIOS itp., które instalowało się w programie ładującym system operacyjny dysku i zastępowało procedury INT 13h podczas rozruchu niestandardowym kodem. To oprogramowanie może również włączyć obsługę rozszerzeń LBA i INT 13h dla starszych komputerów z BIOS-ami niezgodnymi z LBA.

Tłumaczenie wspomagane LBA

Gdy BIOS jest skonfigurowany do korzystania z dysku w trybie translacji ze wspomaganiem LBA, BIOS uzyskuje dostęp do sprzętu za pomocą trybu LBA, ale przedstawia również przetłumaczoną geometrię CHS za pośrednictwem interfejsu INT 13h. Liczba cylindrów, głowic i sektorów w przesuniętej geometrii zależy od całkowitego rozmiaru dysku, jak pokazano w poniższej tabeli.

Rozmiar dysku Sektory/utwór Głowy Cylindry
1 < X ≤ 504 MiB 63 16 X ÷ (63 × 16 × 512)
504 MiB < X ≤ 1008 MiB 63 32 X ÷ (63 × 32 × 512)
1008 MiB < X ≤ 2016 MiB 63 64 X ÷ (63 × 64 × 512)
2016 MiB < X ≤ 4032 MiB 63 128 X ÷ (63 × 128 × 512)
4032 MiB < X ≤ 8032,5 MiB 63 255 X ÷ (63 × 255 × 512)

LBA48

Obecny 48-bitowy schemat LBA został wprowadzony w 2003 roku wraz ze standardem ATA-6 , podnosząc limit adresowania do 2 48  × 512 bajtów, czyli dokładnie 128 PiB lub około 144 PB . Obecne komputery kompatybilne z komputerami PC obsługują rozszerzenia INT 13h, które używają 64-bitowych struktur do adresowania LBA i powinny obejmować wszelkie przyszłe rozszerzenia adresowania LBA, chociaż nowoczesne systemy operacyjne implementują bezpośredni dostęp do dysku i nie używają podsystemów BIOS , z wyjątkiem czasu ładowania rozruchu . Jednak wspólna tabela partycji głównego rekordu rozruchowego (MBR) w stylu DOS obsługuje tylko partycje dysku o rozmiarze do 2 TiB. W przypadku większych partycji należy to zastąpić innym schematem, na przykład tabelą partycji GUID (GPT), która ma ten sam limit 64 bitów, co obecne rozszerzenia INT 13h.    

Konwersja CHS

Odpowiednik LBA i CHS z 16 głowicami na cylinder
Wartość LBA krotka CHS
0 0, 0, 1
1 0, 0, 2
2 0, 0, 3
62 0, 0, 63
63 0, 1, 1
945 0, 15, 1
1007 0, 15, 63
1008 1, 0, 1
1070 1, 0, 63
1071 1, 1, 1
1133 1, 1, 63
1134 1, 2, 1
2015 1, 15, 63
2016 2, 0, 1
16 127 15, 15, 63
16 128 16, 0, 1
32255 31, 15, 63
32,256 32, 0, 1
16 450 559 16319, 15, 63
16 514 063 16382, 15, 63

W schemacie adresowania LBA sektory są numerowane jako indeksy całkowite; po zmapowaniu na krotki CHS ( cylinder-head-sector ) numeracja LBA rozpoczyna się od pierwszego cylindra, pierwszej głowicy i pierwszego sektora ścieżki. Po wyczerpaniu toru numeracja jest kontynuowana do drugiej głowicy, pozostając wewnątrz pierwszego cylindra. Po wyczerpaniu wszystkich głowic wewnątrz pierwszego cylindra numeracja jest kontynuowana od drugiego cylindra itd. Zatem im niższa wartość LBA, tym bliżej sektora fizycznego znajduje się pierwszy (czyli najbardziej zewnętrzny) cylinder dysku twardego.

Krotki CHS można mapować na adres LBA za pomocą następującej formuły:

LBA = ( C × HPC + H ) × SPT + (S − 1)

gdzie

  • C , H i S to numer cylindra, numer głowicy i numer sektora
  • LBA to adres bloku logicznego
  • HPC to maksymalna liczba głowic na cylinder (podawana przez dysk, zwykle 16 dla 28-bitowego LBA)
  • SPT to maksymalna liczba sektorów na ścieżkę (zgłaszana przez dysk, zwykle 63 dla 28-bitowego LBA)

Adresy LBA mogą być mapowane na krotki CHS za pomocą następującego wzoru („mod” to operacja modulo , czyli reszta , a „÷” to dzielenie całkowite , czyli iloraz dzielenia, w którym odrzucana jest część ułamkowa):

C = LBA ÷ ( HPC × SPT )
H = ( LBA ÷ SPT ) mod HPC
S = ( LBA mod SPT ) + 1

Zgodnie ze specyfikacją ATA „Jeżeli zawartość słów (61:60) jest większa lub równa 16 514 064, to zawartość słowa 1 [liczba logicznych cylindrów] będzie równa 16 383”. Dlatego w przypadku LBA 16450559 dysk ATA może faktycznie odpowiadać krotką CHS (16319, 15, 63), a liczba cylindrów w tym schemacie musi być znacznie większa niż 1024 dozwolone przez INT 13h.

Zależności systemu operacyjnego

Systemy operacyjne, które są wrażliwe na geometrię dysku zgłaszaną przez BIOS, obejmują Solaris , DOS i rodzinę Windows NT, gdzie NTLDR ( NT , 2000 , XP , Server 2003 ) lub WINLOAD ( Vista , Server 2008 , Windows 7 i Server 2008 R2 ) używają rozruchu głównego rekord, który adresuje dysk za pomocą CHS; Wersje systemu Windows x86-64 i Itanium mogą partycjonować dysk za pomocą tabeli partycji GUID, która korzysta z adresowania LBA.

Niektóre systemy operacyjne nie wymagają żadnej translacji, ponieważ nie używają geometrii zgłaszanej przez BIOS w ich programach ładujących . Wśród tych systemów operacyjnych są BSD , Linux , macOS , OS/2 i ReactOS .

Zobacz też

Uwagi

Bibliografia

Linki zewnętrzne