Dlaczego adresowanie numerów sektorów w CHS zaczyna się od sektora 1, a nie od 0?

13

Przed wprowadzeniem LBA, dlaczego CHS zaczyna się od, 0,0,1a nie 0,0,0?

Jordan Davis
źródło
1
„Dlaczego liczba sektorów zaczyna się od 1 ...” - W rzeczywistości chodzi o numer sektora , a nie liczbę sektorów . Są to dwa różne i różne parametry używane w żądaniu dysku. „Indeks sektora” jest również słabą nomemklaturą dla numeru sektora, ponieważ w napędach dyskowych istnieje odrębna jednostka zwana indeksem .
trociny

Odpowiedzi:

8

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).

Przełom
źródło
Podaję odpowiedź na to pytanie, ale chyba osoba, która zostawiła moje komentarze wyświetlające odpowiedź, usunęła je ... w każdym razie powodem, dla którego zadałem to pytanie, był fakt, że wszyscy i wszystko, co przeczytałem, opublikowali w zasadzie twój dokładny słowa w przeważającej części. Ta odpowiedź „to po prostu sposób, w jaki to zrobili ...” naprawdę mnie zirytowała, ponieważ ludzie po prostu nie budują czegoś i nie używają tego tylko dlatego, że nie chcą tego używać ... ta logika nie robi od tego czasu w ogóle ...
Jordan Davis,
1
Przeglądając historię CHR / CHS / LBA, zauważyłeś, że przed CHR, który był zmiennej długości przy użyciu MBBCCHHR, używał zero sectorkodó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
Jordan Davis
@JordanDavis w większości przypadków obszar chroniony przez hosta znajduje się na końcu dysku, a nie na początku. Rzeczywiście, podczas gdy nomenklatura dla pierwszego sektora jest zwracana jako wartość 1, wciąż nie znalazłem żadnych informacji, dlaczego (chociaż podejrzewam, że może to mieć coś wspólnego z 0zarezerwowaniem sektora jako flagi błędu). Na pewno cię zaktualizuję, jeśli coś napotkam.
Przełom
Link do Wikipedii do przeglądu sekcji FBA, lista jest rekordem zerowym jako ECC, ale to brzmi dobrze, zrobię to samo, jeśli jedno z nich się pojawi.
Jordan Davis,
@JordanDavis Dodałem nagrodę za to pytanie, ponieważ naprawdę chciałbym usłyszeć jakieś uwagi od innych - szczególnie w odniesieniu do aspektu dlaczego . Zachęcam do pozostawienia pytania otwartego / bez odpowiedzi na razie, aby dać szansa na inne odpowiedzi.
Przełom
8

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.

harrymc
źródło
„Powiedziałbym, że pozostawił sektor zero jako sektor adresowania ...” - nielogiczne przypuszczenie. Każdy sektor ma rekord identyfikacyjny zawierający adres cylindra / głowicy / sektora. Kontroler dysku nie musi czekać na pojawienie się indeksu, aby sprawdzić, czy wyszukiwanie zostało zakończone na odpowiednim cylindrze; następny sektor, który obraca się pod głową, jest czytany do weryfikacji.
trociny
„CH = numer cylindra (0-1023 dec.)” - oryginalny IBM PC BIOS używa CH dla numeru „ścieżki”. CH jest rejestrem 8-bitowym, więc maksymalna wartość to tylko 255.
trociny
„Próbowałem prześledzić historię CHS ... i dałem szybki początek LBA” - Żeby było jasne, wszystkie te dyskusje na temat „LBA” odnoszą się tylko do interfejsów dysków PC, szczególnie specyfikacji ATAPI. W przeciwnym razie CHS i LBA mogą współistnieć. Np. Napisałem kilka systemów plików, które wewnętrznie korzystały z LBA, ale przekonwertowałem adresowanie na CHS, aby wykonać rzeczywiste operacje we / wy dysku dla interfejsu kontrolera. „najwcześniejszy schemat CHS faktycznie używał adresów sektorów zerowych”. - To prawda, ale stało się to przed CP / M.
trociny
@sawdust: Wszystko, co zrobiłem, to zacytowanie dokumentów IBM, które mogą nawet poprzedzać przypisanie rejestrów do interfejsu BIOS komputera. Oczywiste jest, że Bradley pomylił się lub wprowadził w błąd, ustawiając sektor 0 jako adres zastrzeżony, ale nie możemy być pewni, po co, ponieważ tak się nigdy nie stało. Możliwe, że nie wiedział, że część adresu sektora zawierała także numer ścieżki. A może ten wolny sektor był własnością dyskietek przeniesionych do ogólnego interfejsu BIOS Bradleya. Wiemy tylko, że za tę zmianę w CHS odpowiedzialny był BIOS IBM / PC.
harrymc
Jak zawsze w tych sprawach, lista przerwań Ralpha Browna zawiera bezcenne informacje. Chociaż prawdą jest to, co @sawdust napisał o CH jako ośmiobitowym rejestrze, nie tak wykorzystano CX. Zamiast tego CX był wypchany bitami zarówno numerem cylindra, jak i numerem sektora (ale to rozszerzenie najwyraźniej dotyczyło tylko dysków twardych, a nie dyskietek; dla dyskietek CL posiadał numer sektora, a CH numer cylindra). Porównaj na przykład określony interfejs dla parametrów wejściowych Int 13 / AH = 02h, BIOS - DYSK - CZYTAJ SEKTOR (-Y) DO PAMIĘCI .
CVn
1

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.

APO69
źródło
Jego zarezerwowane dla kierowcy - I / O Firmware Interface, nawet w nowoczesny dysk SSD lub błysk dzień mieć zarezerwowane miejsce dla operacji I / O do odczytu / zapisu / kopiowania / format etc ..
Jordan Davis
Spójrz na This
yass
Tak, ale nie SEKTOR 0, ale CYLINDER 0. Z pierwszej specyfikacji (IBM 3740) cylinder 0 nazywany jest „cylindrem indeksu” i przechowuje wiele danych określonych w „UKŁADIE CYLINDRA INDEKSOWEGO”. Na współczesnych dyskach ten cylinder jest zwykle przypisany jako „NUMER CYLINDRA -1”, tak „-1” i jest dostępny tylko dla kontrolera. Nic nie wyjaśnia, dlaczego sektor 0 nie został użyty i chociaż możemy go zobaczyć w niektórych systemach operacyjnych, takich jak CP / M, jest wirtualny, ponieważ sprzęt jest nadal produkowany zgodnie z IBM 3740. Innymi słowy, pierwszy sektor to SEKTOR 1. Dlaczego? „
NUMEROWANIE