LBA versus CHS

7 отговора 363 прегледа
#1

LBA versus CHS

Пиша една програма под DOS на C++, която трябва директно да чете конкретен сектор от хард диска. С коя функция може да се адресира сектор след 8 Gb-вата граница? Т.е. функция, която да адресира сектора по LBA, а не по CHS (Cylinder, Head, Sector). Дали това ще е BIOS функция или такава на C, няма значение - ще се оправя и с двете. Пробвах с DOS функциите abswrite()/absread(), които работят именно по LBA, но не става. Дава unknow error.

Отговор
в отговор на Пиpoтexниk #2

Re: LBA versus CHS

DOS е прекалено стара ОС. Тогава още 640 kb са били достатъчни на всеки и харддисковете са били по-малки от 1 GB. Май ти трябва директен достъп през BIOS функции.

Отговор
в отговор на Пиpoтexниk #3

Ralf Brown interrupt list!?

Едно време беше много популярен и съдържаше детайлна информация за прекъсванията. Дали пък няма да ти помогне.
Аз пуснах търсене в google с "Ralf Brown" + "interrupt list" и намерих тоя линк:
[линк]

Отговор
в отговор на ZZ #4

Re: Ralf Brown interrupt list!?

Линка ми свърши чудесна работа, макар и по косвен начин. Той ми подсказа едно ключово съкращение EDD-3.0, което като го пуснах в google с думите: EDD-3.0 pdf и ударих точно в десятката - даде ми спецификацията на Enhanced Disk Drive (EDD) от сайта на Phoneix. Просто досега не знаех, че така се казва разширението на INT 13 за работа с дискове по-голями от 1024 цилиндъра. BIOS функциите, които са CHS ориентирани са под "шапката" на т.нар. legacy INT 13, а тези които са по LBA адресиране са INT13 extended.

Отговор
в отговор на Пиpoтexниk #5

Re: Ralf Brown interrupt list!?

Значи под DOS може да се адресират и големи дискове?
Аз не го знаех.
Едно време, преди 7-8 години, бях чувал за някакви разширения, които правят възможна адресацията на цилиндри/сектори с голям номер, но никога не ми се е налагало да го правя.

Отговор
в отговор на ZZ #6

Re: Ralf Brown interrupt list!?

Да, възможно е, и ограничението идва не от DOS, a от BIOS. Това разширение касае BIOS (INT 13). Аз се насочих към BIOS функциите заради по-голямата съвместимост. Зарадвах се, че сред API-тата има и функция за проверка дали дадения BIOS съдържа разширенията на INT 13. А що се отнася до това, че DOS не може да чете секторите след 2Gb-та бариера идва от факта, че DOS работи на FAT 16, т.е. има 16 битов регистър за адресиране на секторите, който е достатъчен да адресира "само" 2Gb дисково пространство. Друг е въпроса, че това му е напълно достатъчно. Примерна програма, която работи под DOS на ниво сектор е, например, Ghost. Тя прави имидж на големи дискове без проблем. Е, сега вече и аз мога да чета секторите след 8.4Gb-вата граница, а не само Ghost.

Отговор
в отговор на ZZ #7

Re: Ralf Brown interrupt list!?

има и LBA-48, което май ще е последното 'подобрение' в посока големина на диска - досегашния (28-бита) имаше ограничение на адресиране 268,435,455. засега няма BIOS, който да го поддържа това (май)

имай предвид, че има разлика между физическо адресиране (напр. през BIOS) и адресиране през операционна система (ДОС, доколкото ДОС могже да се нарече операционна система)

Отговор
в отговор на Пиpoтexниk #8

Редакция

Горе написах:"... има 16 битов регистър за адресиране на секторите", а правилното е: "16 битов регистър за адресиране на КЛЪСТЕРИТЕ". Просто грешка на езика. Ето и кръчмарската сметка:

1) 2^16=65536
2) Максималният размер на един клъстер е 32kb
3) 65536*32*1024 = 2147483648 bytes
4) 2147483648/2^30 = 2Gb

Отговор