Przed wprowadzeniem LBA, dlaczego CHS zaczyna się od, 0,0,1
a nie 0,0,0
?
Przed wprowadzeniem LBA, dlaczego CHS zaczyna się od, 0,0,1
a nie 0,0,0
?
Odpowiedzi:
Niestety, właśnie w ten sposób popularny w tamtym czasie schemat adresowania CHS został zaimplementowany i przyjęty do użytku. Zostało to przyjęte jako oficjalna konwencja dla komputerów zgodnych z IBM w przerwaniach BIOS używanych do dostępu do dysku, wyjaśniając, dlaczego ta konwencja jest używana do dziś. Ze standardu ECMA-107 , struktury woluminów i plików kartridży dyskowych do wymiany informacji (jest to również wspomniane w oryginalnej specyfikacji ATA-1 ):
6.1.3 Logiczny numer sektora
Każdy sektor w wolumenie musi być identyfikowany przez logiczny numer sektora. [...] Logiczne numery sektorów są przypisywane w kolejności rosnącej, zaczynając od 0, zaczynając od sektora 1, ścieżki 00, strony 0 , kontynuując na ścieżce 00, stronie 1 (jeżeli FDC można nagrać po obu stronach), a następnie do śledzenia 01, strony 0 itd.
Ten problem rozwiązano w specyfikacjach niektórych dysków twardych , gdzie należy zauważyć, że dany logiczny adres CHS różni się od fizycznej lokalizacji adresu CHS . Jest to dalej omówione w Instrukcji obsługi interfejsu Seagate ATA , która zawiera tę interesującą narrację:
5.1 Logiczne adresowanie bloków
[...] zakłada się, że sektory na dysku są mapowane liniowo, z LBA 0 cylindra 0 / głowicą 0 / sektorem 1.
[...] Dla wszystkich trybów tłumaczenia C = 0, H = 0, S = 1 jest równoważne LBA = 0. Nie jest możliwe obliczenie równoważnego CHS dla wszystkich logicznych adresów bloków we wszystkich trybach tłumaczenia, ponieważ ta formuła działa tylko w jednym kierunku. Wynika to z faktu, że adresowanie CHS nie może uzyskać dostępu do 1/256 wszystkich możliwych sektorów, do których adresowanie bloków logicznych może uzyskać dostęp, ponieważ w CHS nie ma sektora 0.
Zatem w przypadku logicznego adresowania CHS, chociaż pierwsze indeksy cylindra / głowicy zaczynają się od przesunięcia opartego na 0, a indeks pierwszego sektora zaczyna się od 1 (np. Minimalny możliwy adres CHS to 0/0/1), nic to nie zmienia fizyczna lokalizacja tego sektora. Pomyśl o tym jako o pierwszym sektorze fizycznym na dysku o nazwie „sektor 1”, zajmującym CHS 0/0/1. Rzeczywiście, „pierwszy” element w większości języków programowania jest oparty na 0, więc adres logiczny sektora pod adresem CHS 0/0/1 wynosi zero ( 0x00
).
Ma to logiczniejszy sens (mianowicie „zerowy” adres logiczny jest pierwszym sektorem fizycznym ), ponieważ możemy zaadresować urządzenie dyskowe jak każde inne urządzenie pamięci (ponieważ każdy sektor ma unikalny adres liniowy, aby odwzorować go na fizyczny sektor), dlatego dlaczego LBA ma sens od zera. Rzeczywiście, jeśli przetłumaczymy adres CHS 0/0/1 na LBA , wynikowy LBA będzie 0x00000000
(właśnie dlatego 1 jest odejmowany od indeksu sektora w większości obliczeń CHS do LBA i dlaczego 1 jest dodawany do indeksu dla LBA do obliczeń CHS).
zero sector
kodów błędów, złych bloków itp. .... przejście do CHS i „architektury stałego bloku” również miałeś przejście od dodania kontrolera (oprogramowania wewnętrznego) do napędu i rozpoczęcie „logicznych” skojarzeń dysków ... kontroler jest teraz niewidoczny, ale można założyć, że używa go w ten sam sposób ... termin ten nazywa się teraz „Host Protected” Obszar " en.wikipedia.org/wiki/Fixed-block_architecture i en.wikipedia.org/wiki/Host_protected_area
1
, wciąż nie znalazłem żadnych informacji, dlaczego (chociaż podejrzewam, że może to mieć coś wspólnego z 0
zarezerwowaniem sektora jako flagi błędu). Na pewno cię zaktualizuję, jeśli coś napotkam.
Próbowałem prześledzić historię CHS i fiasko numeracji sektorów „zaczynając od 1”, co spowodowało wiele komplikacji dla twórców sterowników dysków i dało szybki wzrost LBA .
CHS sięga czasów, kiedy komputery osobiste działały na dyskietkach i kiedy wynaleziono BIOS. Tak mówi Wikipedia :
Termin BIOS (Basic Input / Output System) został wymyślony przez Gary'ego Kildalla i po raz pierwszy pojawił się w systemie operacyjnym CP / M w 1975 roku, opisując specyficzną dla komputera część CP / M ładowaną podczas rozruchu, która bezpośrednio łączy się ze sprzętem.
W badaniu systemu CP / M BIOS znaleziono dokument Archiwum informacji CP / M: wywołania systemowe BDOS , w których numery sektorów zaczynają się od zera. Wniosek jest taki: najwcześniejszy schemat CHS faktycznie używał adresów sektorów zerowych .
Adresy sektorowe oparte na jednym sektorze zostały po raz pierwszy wprowadzone w pierwszym IBP / PC. Dokument INT 13 - Usługi BIOS-u dyskietek wyraźnie mówi:
Most disk BIOS calls use the following parameter scheme:
AH = function request number
AL = number of sectors (1-128 dec.)
CH = cylinder number (0-1023 dec.)
CL = sector number (1-17 dec.) <--------!!!
DH = head number (0-15 dec.)
DL = drive number (0=A:, 1=2nd floppy, 80h=drive 0, 81h=drive 1)
DL = drive number (0=A:, 1=2nd floppy, 80h=C:, 81h=D:)
Note that some programming references use (0-3) as the
drive number which represents diskettes only.
ES:BX = address of user buffer
Tak więc to właśnie IBM / PC przez faktyczną implementację systemu BIOS przekształcił numerację sektorów z zerowej na jedną.
Z dwunastu inżynierów IBM wyznaczonych do stworzenia IBM Personal Computer (model 5150) David J. Bradley opracował kod dla BIOS-u. Więc to on, wśród wszystkich innych szczegółów, zdecydował o parametrach przerwań dysku. Jesteśmy również winni temu facetowi wraz ze słynnym CTRL+ ALT+ Melem Hallermanem DEL.
Tak więc odpowiedź na pytanie
Dlaczego liczba sektorów zaczyna się od 1, a nie 0 w CHS, brzmi:
Ponieważ David J. Bradley tak zaprogramował BIOS .
Jeśli chodzi o to, dlaczego zrobił to w ten sposób, najlepiej na to sam odpowiedzieć. Gdybym musiał zgadywać, powiedziałbym, że pozostawił sektor zero jako sektor adresowania, dzięki któremu kierowca mógł sprawdzić, czy głowa znajduje się na właściwym torze.
Ponieważ dyski zostały tak zaprojektowane, aby nie wymagały takiego mechanizmu, a inżynierowie nie byli gotowi zmarnować jednego sektora z powodu systemu BIOS, sektor zero nigdy nie powstał. Następnie autorzy sterowników musieli odjąć jeden i dodać jeden do adresów sektorów dla wszystkich wywołań dysku BIOS.
Pierwsza specyfikacja na dyskietkach została opracowana przez IBM z wyglądem IBM 3740 i nie wspomina, że istnieją sektory zarezerwowane dla systemu. Jedynym zastrzeżeniem dla systemu jest ścieżka 00, która przechowuje tylko „Etykiety zestawu danych”, które identyfikują rodzaj informacji przechowywanych w ścieżkach 01 do 76. Jasno określa, że pierwszym sektorem jest SEKTOR 1. To nie jest przypadek, ale kwestia naturalnej numeracji w stosunku do numeracji komputera.
Możemy zaobserwować, że kiedy człowiek zaczyna liczyć cokolwiek, nie zaczyna się od zera, ale od jednego. Wyobraź sobie na przykład, że w klasie jest 135 uczniów. Liczenie liczby byłoby mniej więcej takie: raz, dwa, trzy ... sto trzydzieści cztery, sto trzydzieści pięć.
Jego numeryczna reprezentacja byłaby zatem: 1, 2, 3, ... 134, 135 Jak dotąd się zgadzamy, prawda?
Teraz wstawmy cyfry, które nie są reprezentowane przez 0. Wyglądałoby to tak: 001, 002, 003, ..., 015, 016, ..., 099, 100, ..., 133, 134, 135
Tak dzieje się z CHS : 0,0,1 - 0,0,2 - 0,0,3 ...
Znaczące jest to, że wiersze w arkuszach Excela lub pola auto-numeryczne w bazie danych zaczynają się od 1, a nie od 0, i nikt nic o tym nie powiedział.
Czy David J. Bradley tak zaplanował BIOS?
Tak, ale nie był z boku.
Zdecydowanie nie ma technicznego powodu, dla którego SECTOR 0 nie może być używany, chyba że jest zarezerwowany i ukryty przed użytkownikami z innych powodów. Zasadniczo wszystko wskazuje na to, że jest to naturalna numeracja.
GA21-9152-2 Plik nr 3740-00,15
IBM 3740 Data Entry System
strona 12
INICJALIZACJA DYSKU
... Każdy dysk zawiera dwie zapasowe ścieżki, które zastępują dowolne ścieżki nieregularne. Ponadto funkcja inicjalizacji umożliwia zmianę sekwencji adresu sektora na dyskietce. Zwykle sekwencja sektorów jest uporządkowana numerycznie (1, 2, 3, ... 25,26) .
strona 24
OZNAKOWANIE DANYCH NA DYSKETCE
Podczas inicjalizacji etykieta zestawu danych dla zestawu danych jest magnetycznie zapisywana na ścieżce indeksu (ścieżka 00) dyskietki. Głównym celem tej etykiety jest pokazanie położenia zestawu danych na dyskietce
Było to w 1973 roku. Zapisano dane na dyskietce 8 ". IBM PC 5150 urodził się 12 sierpnia 1981 roku ... i nie możemy zapominać, że musieli zachować pewną kompatybilność z poprzednimi urządzeniami.
Zdecydowanie nie było powodu technicznego.