KÎOPOTY Z GIGAMI Docent/UNION Od redakcji: Po teôcie dysku 2,6 GB, zamieszczonym w MA 7/96, na îamach Internetu rozgorzaîa dyskusja na temat tego, jakie dyski moûna podîâczyê do Amigi. Wiëkszoôê twierdziîa, ûe maksimum 2 GB, mniejszoôê (do której zdania przychylamy sië, bo od 3 miesiëcy redakcja ma dobrze dziaîajâcâ partycjë 2,56 GB na dysku WDC 32500), ûe 4 GB. Dyskusja przedîuûaîa sië, aû w koïcu zdenerwowaî sië Boski Docent i palnâî najdîuûszy tekst, jaki w ûyciu napisaî. Sâdzimy, ûe warto, aby Czytelnicy nie majâcy dostëpu do sieci takûe zapoznali sië z tym tekstem, który powinien raz na zawsze rozwiaê wâtpliwoôci. Wszystko zaô sprowokowaî list o treôci: "Jeôli dysk ma 63 sektory na ôcieûkë i 16 gîowic (oczywiôcie chodzi o parametry logiczne), to moûe mieê maksymalnie 4162 cylindry. Jeôli w HDToolbox wpisze sië w pole "Cylinders" liczbë 4163, to w polu "Size" zobaczymy liczbë "-2047 Meg". Tak wiec po przemyôleniu wyników nasuwa sië wniosek, ûe maksymalnie moûna wykorzystaê tylko 2 GB, bez wzglëdu na to, jak duûy jest dysk. A moûe sië mylë?" Na co Boski Docent odpowiedziaî nastëpujâco: Mylisz sië. Oficjalnie pojemnoôê partycji, zdefiniowana w RDB moûe wynosiê nawet 4 294 967 295 bloków o definiowanej wielkoôci od 1 do 4 294 967 295 bajtów... Niestety, ograniczenie jest nakîadane przez system i wynosi 4 294 967 295 bajtów, czyli 4 GB, ale juû przy 2 GB zachowanie niektórych programów moûe byê niepoprawne. Problem leûy w dos.library i filesystemie -- ze wzglëdu na zgodnoôê ze starymi wersjami DOS-u, napisanymi w bcpl, wiëkszoôê funkcji ma parametry typu long. Takûe wiëkszoôê pól w strukturach np. FileInfoBlock i InfoData jest tak samo zdefiniowana. O ile w InfoData nie ma to wielkiego znaczenia (pole opisujâce liczbë bloków na dysku daje pojemnoôê dysku maksimum 2147483647*512 -- bîâd pojawia sië w momencie obliczania pojemnoôci w MB), o tyle w wypadku FileInfoBlock jest problem -- fib_Size (rozmiar pliku) nie moûe byê wiëkszy niû 2 GB. Ten sam problem bëdzie z Seek() -- offset jest zdefiniowany jako LONG -- i wiëkszoôciâ innych funkcji dos.library. Mimo ze od wersji 2.04 DOS jest juû w C, to ze wzglëdu na kompatybilnoôê pozostaîy stare deklaracje np. LONG czy MAXINT=$7fffffff (pozostaîoôê bcpl). Limit wielkoôci partycji wynosi 4.294.967.295 bajtów -- jest to maksymalny rozmiar zmiennej typu unsigned long, wykorzystywanej w IOStdReq. Ze wzglëdu na artefakty bcplu, przy takich partycjach niektóre funkcje DOS-u mogâ úle sië zachowywaê (patrz wyûej). Np. przy partycji wiëkszej niû 2 GB komenda info bëdzie zwracaîa ujemnâ wielkoôê partycji :). To samo dzieje sië w HDToolboxie. Zresztâ Commodore sam informowaî, ze partycje wiëksze niû 2 GB nie sâ "reliable" :), o czym moûecie sië sami przekonaê wyûej. Powstaje pytanie, czy da sië standardowo zainstalowaê, np. na dysku 8 GB, dwie partycje... Teoretycznie powinno sië daê. Ale w rzeczywistoôci nie jest to moûliwe. Problem polega na tym, ze filesystem korzysta z device do czytania z dysku, np. z scsi.device. Niestety, uûywa do tego struktury IOStdReq, w której pole io_Offset jest zdefiniowane jako ULONG. Poniewaû device wymaga, aby w tym polu byîa podawana wartoôê w bajtach, w rezultacie moûna z dysku wykorzystaê maksymalnie 4 GB. I nie pomoûe tu pomysî z PC zwiëkszania rozmiaru bloku... Sâ trzy rozwiâzania tego problemu: jedno to napisanie na nowo filesystemu, który bëdzie np. io_Offset ustawiaî w blokach oraz przepisanie wszystkich devices (co jest nie do zrobienia, jeûeli chce sië zachowaê kompatybilnoôê). Drugie rozwiâzanie, to przepisanie filesystemu tak, aby przy offsetach wiëkszych niû 4 GB wywoîywaê przez device funkcje SCSI-direct i interpretowaê dane... To rozwiâzanie bëdzie dziaîaê TYLKO z dyskami SCSI... (Tu otwarta droga dla np. Phase 5 czy MTec i ich kontrolerów SCSI do zaimplementowania tego pomysîu.) Trzecie rozwiâzanie to pomysî zrealizowany w giga.device. Pozwala on tylko na wykorzystywanie duûych pojemnoôci, ale nie jako JEDNEJ partycji. Jeôli ktoô chce uûywaê wiëkszych dysków SCSI, to moûe zainstalowaê sobie ten device (na Aminecie /disk/misc/giga171.lha), który pozwala na uûywanie wiëkszych partycji. Opiera sië on o niezîy pomysî -- instaluje duûy dysk jako partycje po 4 GB i patchuje scsi.device, przeliczajâc odpowiednio offset dla partycji innych niû pierwsza i odczytujâc dane bezpoôrednio komendami SCSI, co rozwiâzuje problem niezbyt elegancko, ale skutecznie... W skrócie, nie widzë moûliwoôci îatwego przeskoczenia limitu 4 GB -- wiâzaîoby sië to z zerwaniem ze zgodnoôciâ lub bardzo duûym zamâceniem w systemie, aby jâ zachowaê. Chyba tylko rozwiâzanie zastosowane w giga.device jest îatwe do zaimplementowania w nowej wersji systemu (jeôli bëdzie...) Ale czy ktoô widziaî dyski AT-Bus wiëksze niû 4 GB?