Tuesday, December 25, 2018

NCD85 6. Interleave

Pri pohľade na disketu je interleave abstraktný pojem, ktorý nie je každému jasný a nevie ho pochopiť. Ja som sa s interleave stretol prvý krát na PP-06, kde som mal MFM harddisk. Program z Norton Utilities otestoval disk a zistil aký interleave je pre danú kombináciu CPU, radič a HDD najvýhodnejší. Rozdiel vo výkonnosti disku mohol byť obrovský.

Na floppy disketách na CP/M tomu nie je inak. Nevhodný interleave spôsobí, že práca s disketami sa stane utrpením a všetko bude neskutočne dlho trvať. Pri vhodnom interleave sa diskety podstatne zrýchlia, aj keď rýchlosť PC s interleave 1 nedosiahnu. PC používali DMA a boli schopné prečítať celú stopu na jednu otáčku.



https://en.wikipedia.org/wiki/Interleaving_(disk_storage)

Interleave je optimalizácia rozloženia sektorov na stope. Pri interleave 1 idú sektory hneď za sebou 1,2,3,.. Lenže ak computer načíta sektor 1, musí hneď pokračovať v čítaní sektoru 2, pretože ten sa práve nachádza pod hlavičkou mechaniky. Ak to nestihne, pretože má ešte niečo iné na práci, sektor 2 mu ujde a musí čakat kompletnú otáčku diskety (napr. 32 sektorov) než sa zase objaví sektor 2 pod hlavičkou. CP/M potrebuje na spracovanie a deblocking načítaného sektoru troška viac času, ale interleave 1 mu žiadny nedáva. Pri interleave 1 je práca s disketami na NCB85 neznesiteľne pomalá. Ak je na stope 32 sektorov, tak na načítanie celej stopy sa disketa musí otočiť 32 krát, pričom väčšinu času sa čaká na dootáčanie hľadaného sektoru ku hlavičke. Iba malá čast času sa strávi čítaním z diskety. Pri interleave 2 je situácia podobná, len ešte o kúsoček horšia. Sektory idú v poradí: 1,iný,2,iný,3,.... Computer pri objavení sektoru 2 žiaľ stále ešte spracováva sektor 1. Takže dvojka mu zase ujde a musí čakať celú ďalšiu otáčku plus jeden sektor (ktorý už práve čakal) kým sa znovu objaví očakávaný sektor 2.

Interleave 3 je vhodný pre NCB85 na disketách 1.44MB. Po sektore 1 na diskete nenasleduje hneď sektor 2, ale nejaké dva iné sektory a až potom ide sektor 2. To dáva computeru dosť času na spracovanie načítaného sektoru 1, a hneď ako skončí može pokračovat v čítaní sektoru 2 a nemusí čakať kým sa disketa otočí o celú otáčku.

To aký je rozdiel pri rôznych interleave si je možné ľahko odskúšať. Je treba naformátovať disketu s interleave 1,2,3,4,5 .. a následne s každou zmerať čas kým sa prekopčí napr. 20 file na takúto disketu. Treba postupovať od interleave 1. Prvý interleave, pri ktorom odozva výrazne ožije a zrýchli je ten pravý. Pri interleave 3 dokáže computer prečítať celú stopu za 3 otáčky diskety. To je podstatne lepšie ako povedzme 33 (interleave 2, počet sektorov 32, spomalenie 11x). Zbytočne vyšší interleave tiež nemá zmysel, pretože computer potom nečinne čaká a pritom by už mohol čítať. V našom prípade pri interleave 4 by čakal 1 sektor. Pri interleave 4 by sa jedna stopa načítala za 4 otáčky diskety. To je oproti interleave 3 spomalenie o celú tretinu.

CP/M poskytuje možnosť realizácie interleave v BIOSe. To malo zmysel pri hard sectored disketách, kde dierky v diskete určovali začiatok každého sektora. Ale pri soft sektored disketách (bez dierok pre každý sektor) je to radič, kto rozdeľuje stopu na sektory a adresu sektoru zapisuje už pri formátovaní. Tým umožňuje naformátovať stopu s ľubovoľnou sekvenciou čísiel sektorov. Interleave na NCB85 je teda realizovaný pri formátovaní diskety. Utilita FDC.COM generuje čísla sektorov podľa zvoleného interleave.

Konkrétne v metóde generate_sec_numbers v:
https://github.com/ncb85/utilis-and-examples/blob/master/cpm_fdc/main.c riadok 83

No comments:

Post a Comment