Posted By: mac (Macintosh) on 'CZhardware' Title: LBA a prekladajici BIOS Date: Sun Nov 16 01:03:21 1997 Takze jak vidim, panuje tady obrovska mlha, takze se pokusim to trosicku objasnit. 1) Rozhrani disku ATA, zvane tez IDE ===================================== Zapomenme nyni na chvili na to, ze v pocitaci je nejaky BIOS a divejme se na disk jako takovy, a jak ze se vlastne adresuji sektory na urovni rozhrani IDE. Na tomto rozhrani se pouziva 28-mi bitova adresace (vim, je to divne cislo, ale je to tak), takze IDE jako takove muze adresovat az 2^28, tj. teoreticky az cca 137 GB dat. Mody adresace sektoru na disku: nejznamejsi mod adresace sektoru na disku je CHS (Cylinder, Head, Sector) U ktereho se adresa sektoru, jak uz je snad intuitivne videt, posila jako trojice cisel. Onech 28 bitu je rozdeleno takto: 4 bity na hlavy, 16 bitu na cylindry a 8 bitu na sektory. To znamena, ze takhle naadresujeme nejvyse 16 hlav, 65536 cylyndru a 256 sektoru. Jiny casto pouzivany mod adresace je LBA (Logical Block Address) (aha uz jsme u toho, LBA je mod adresace u disku, tudiz zalezitost hardware, musi to umet predevsim disk a radic, ale take je nutna podpora BIOSu) Tady jsou sektory ocislovany linearne tj. kazdemu sektoru priradime cislo od 0 do n, (pricemz zadna cisla nepreskakujeme ani neopakujeme). Pro ocislovani sektoru se pouzije vsech 28 bitu. Vsimnete si, ze oba mody toho naadresuji stejne (oba pouzivaji 28 bitu)! Take si povsimnete, ze tyto dva mody adresace se lisi predevsim tim, ktera cisla se pouziji, a ktera zustanou nevyuzita v pripade, ze je disk mensi nez onech 137 GB (coz je momentalne kazdy disk - aspon jsem tak velky jeste nevidel ;-)) Zavedeme si usporadani sektoru: LBA podle velikosti adresy, u CHS bereme jako nejvyznamnejsi cislo cylindru, potom hlavy a nakonec sektoru. A ted problem - vidime, ze u LBA a CHS nemusi byt fyzicke sektory prirazeny tak, aby tato dve usporadani byla stejna. Avsak neni uplne tezke zjistit, ze z technickeho hlediska LZE udelat disk, ktery bude mit jak v LBA tak v CHS stejne usporadane sektory - z toho vyplyva odpoved k puvodnimu dotazu. Ano, disk naformatovany v LBA muze (ale nemusi) fungovat bez LBA. Zalezi na disku. (a take na BIOSu, jak ostatne uvidime, az se dohrabeme k prekladani adres.) Do jake miry se s timhle da poctat v praxi nevim - patrne spis ne. 2) BIOS ======== Nyni se presuneme blize k zalezitostem BIOSu. Bios preruseni int 13h pouziva, jak je znamo adresaci typu CHS, ovsem tohle je malinko jine CHS nez u IDE, proto zavedeme spec. oznaceni. Adresace BIOSu se obvykle oznaceje jako L-CHS (logical CHS), adresace na IDE jako P-CHS (Physical CHS). <pozn.> P-CHS, prestoze se se jmenuje "physical" ma s fyzickym usporadanim sektoru na disku pramalo spolecneho, a to uz proto, ze ve skutecnosti na disku nemusi (a typicky nemaji) vsechny cylindry stejny pocet sektoru </pozn.> Adresace u L-CHS (tedy v BIOSu int 13h) je 24 bitova. Pro hlavy je vyhrazeno 8, pro cylindry 10 a pro sektory 6 bitu. Tj. max 256 hlav, 1024 cyl., 64 sec. (cisla ktera tady uvadim jsou POCTY, nikoliv max. hodnoty, ty jsou pri cislovani od nuly o jedna mensi) Kdyz si to vynasobite, zjistite, ze lze pres int 13h adresovat az 8 GB (coz neni zase tak mnoho) Vyvstava ovsem problem: U starsich BIOSu, ktere posilaji disku adresu predanou int 13h primo bez jakekoliv upravy vzniklo neprijemne omezeni. BIOSu predavame: 8-mi bitove cislo hlavy, ale IDE pouziva pouze 4 bity, takze hlav max. 16 10-ti bit cylindr. IDE sice muze pouzit 16 bitu, nic naplat, cyl. je max. 1024 6-ti bit sektor, opet je nanic, ze IDE jich pouziva 8, sektoru je max. 64. A ted nasobime 16*1024*64 to cele krat 512 - ha vyjde nam onech 528 MB! A to je ten stary, dobre znamy limit. Reseni je nasnade - staci kdyz bude BIOS umet adresu kterou dostane sikovne prekopavat, a ne jenom slepe predat disku, a je to vyreseno. Udela se to tak, ze kdyz BIOS dostane cislo hlavy, ketere se nevejde do 4 bitu, preda disku mensi cislo - 4 bitove, a vyrovna to tim, ze zvetsi cislo cylindru a/nebo sektoru A tomu se rika PREKLADAJICI BIOS!!! (V originale CHS translating BIOS) DULEZITE UPOZORNENI! Nutno si povsimnouti, ze k vyreseni problemu 528 MB _neni_ treba zadne LBA! (a nejen to, _existuji_ BIOSy, ktere prekladaji _bez_ pouziti LBA.) Nicmene LBA jako mod adresace u disku pouzit lze i tady, ale je dulezite si uvedomit, ze s limitem 528 MB nema nic spolecneho, a ze take samotne LBA problem 528 MB neresi. 3) Problem s velikosti disku c. 2 ================================== Vyvstava nam druhy problem, ktery souvisi s tim, ze BIOS pouziva k adresaci jenom 24 bitu - tj. 8 GB adresovatelnych dat. Na to uz ale tak jednoduchy lek neexistuje. Resit se to snazi: 4) LBA v BIOSu =============== Novejsi BIOSy umoznuji pouzivat pro pristup na disk primo adresaci LBA. K tomu bylo nutne zavest nove sluzby int 13h, AH=4Xh, ktere maji jako parametr 28 bitu dlouhe cislo coz je LBA adresa. Ale zkuste si treba prinutit takovy DOS, aby tyhle sluzby pouzival! <grin> 5) Zaverem =========== To co jsem napsal, je ale jenom cast pravdy, ve skutecnosti to s tim prekladanim neni tak jednoduche, v BIOSu je hned nekolik prekladani, ktera pokryvaji snad vsechny mozne kombinace LBA<=>L-CHS, L-CHS<=>P-CHS, P-CHS<=>LBA, aby se daly pouzit v obou modech disku oba typy adresace, no je toho az hruza. A nejaky standard? Pochopitelne neexistuje, to bychom se snad ani nemohli bavit o PC-cku, protoze na nem je "standardni" jenom to, ze je cele "nestandardni". Je tedy asi 10 znamych typu BIOSu podle toho, jak ktery preklada, ale v zasade se snazi dojit ke stejnemu vysledku, prenositelnost disku je casto mozna. Pokud budou nejasnosti, ozvete se, pripadne vaznejsi zajemce o problematiku prekladajicich BIOSu a LBA odkazuji na http://www.uruk.org/~erich/grub/PC_partitioning.txt (je to dokument v anglictine (jak jinak) velky jenom neco malo pres 100 KB :-) myslim, ze to tady nebudu opisovat ;-)) Mac