![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как считать файл по битам? [D7, WinXP]
чип © (2005-05-26 20:39:00)Подскажите, можно ли считать файл в двоичном виде, не побайтно, а побитно, т.е. в виде 0 и 1. Имеется в виду не преобразовывать на ходу, а именно сразу читать побитно.
Anatoly Podgoretsky (2005-05-29 11:04:00) [61]SergP © (28.05.05 02:52) [76]
Это в современных дисковых устройствах, где даже об уровне секторов говорить нельзя, а тем более о битах и байтах, полностью отсутствуе прямой доступ к данным, только через порты контроллера. Но так было не всегда, Были 8 дюямовые флоппи-диски, где чтение запись делались программно, вот там производился прямой последовательный доступ к битам. У меня до сих пор где то валяется такой дисковод.
Defunct (2005-05-29 05:14:00) [62]Marser © (29.05.05 01:10) [78]
C памятью вообще истинный дурдом. Вся память предстваляет собой матрицу строк и столбцов. Строка выбирается адресом строки и сигналом RAS, столбец адресом столбца + CAS. При подаче сигнала CAS ячейки памяти обновляются.
Конроллеру памяти постоянно приходится "пробегаться" по всем столбцам памяти для регенерации. Процессор и DMA контроллер его вечно отвлекают своми глупыми обращениями "не туда куда надо", не к тем столбцам. Посему контроллер памяти считывает по возможности как можно больше элементов одного столбца при обращении к любому элементу этого столбца и хранит его в "кеше", а процессору выдает то, что тот заказывал. При этом процессор понятия не имеет как контроллер физически адресует ту самую память, читает он что-либо или не читает(побитово, побайтово, или вообще по 256 разрядов сразу), записывает или не записывает. При записи еще более "прикольней". Продвинутые контроллеры могут для ускорения работы вообще ничего не записывать до тех пор пока не накопится приличный объем, чтобы записать сразу целый столбец.
gdaujk (2005-05-29 01:29:00) [63]Вывод: не читаёте файлы, читайте книги :-)
Marser (2005-05-29 01:10:00) [64]
> То есть, последовательно? :)
?
Побйатно это значит последовательно одновременно по восьми каналам :-)
KilkennyCat (2005-05-29 00:53:00) [65]Даже с памяти инфа считываетя процессором минимум побайтно
То есть, последовательно? :)
а я-то, дурень, вчера дуал моде запустил...
SergP (2005-05-28 02:52:00) [66]
> В старых MFMках были биты в чистом виде. И на дискетках
> лежат биты в чистом виде до сих пор ;>
Все равно даже с дискеты как бы там биты не лежали, но считывать инфу можно только посекторно.
Даже с памяти инфа считываетя процессором минимум побайтно
Defunct (2005-05-28 01:49:00) [67]Alex Konshin © (27.05.05 23:03) [72]
В старых MFMках были биты в чистом виде. И на дискетках лежат биты в чистом виде до сих пор ;>
Defunct (2005-05-28 01:41:00) [68]> отвечает только за "доставку" данных из устройства в ОП.
и наоборот
Defunct (2005-05-28 01:40:00) [69]Eraser © (27.05.05 21:56) [71]
DMA контроллер ничего обрабатывать не может, он отвечает только за "доставку" данных из устройства в ОП.
Alex Konshin (2005-05-27 23:03:00) [70]http://www.pcguide.com/ref/hdd/geom/index.htm
Про RLL:
http://www.pcguide.com/ref/hdd/geom/dataRLL-c.html
Замечу, что уже применяются модификации этого кода (например, ARLL).
Как вы видите, битов на диске просто НЕТ, есть последовательности перемен фаз, каждый определенный паттерн соответствует определенной поледовательности бит.
Eraser (2005-05-27 21:56:00) [71]Defunct © (27.05.05 21:34) [69]
Оптимальнее всего читать блоками, при этом объем блока не должен превышать объема буфера HDD и объема кеша L2 процессора.
Это в случае т.н. PIO режима, а в режиме DMA/UDMA данные пересылаются в память почти без участия CPU, их обрабатывает DMA контроллер.
Medved (2005-05-27 21:36:00) [72]Одно дело прочитать, другое дело КУДА прочитать? Где будешь хранить ОДИН бит? Мне кажется, что будет дольше обрабатывать место хранения, чем один байт.
Defunct (2005-05-27 21:34:00) [73]чип (27.05.05 18:48) [66]
Поймите главное, HDD - блочное устройство, с него можно прочитать/записать блок данных. Максимальный размер блока определяется параметром "IDE HDD Block mode" в биосе, виндовс же подбирает размер блока самостоятельно и вам об этом не сообщает. Сам HDD еще оснащен умным контроллером, который умеет принимать решения, например при получении команды на чтение i-го сектора, контроллер может самостоятельно "догадаться" прочитать (i+1)-й сектор. Плюс имеется еще кеш (на случай повторного обращения к тому же сектору). Ну и плюс ОС имеет такие же самые механизмы, многократно ускоряющие производительность дисковой подсистемы.
Битово/байтово читать с блочного устройства -
это полная лажа, очень медленно и не нужно. Оптимальнее всего читать блоками, при этом объем блока не должен превышать объема буфера HDD и объема кеша L2 процессора. По-умолчанию объем блока равен 64kb, либо кратен одному кластеру (если кластер превышает 64kb).
PAVIA (2005-05-27 20:50:00) [74]Я думал эта тема еще в 2 часа ночи загнулась, а нет живет.
Винчестер не может физически читать побитно. Почему это так? Да все потому, что на это понадобиться его позиционировать с точностью до бита, а это значительно снизит скорость четения из-за разгона тороможения привода дисковода и не забываем о дабавочном кодирование. По-этому диски читаются по класторно. Либы один кластер, либы несколько.
Самое быстрое - это будет считать весь файл целиком в памить. И от туда с ним работать прирост, просто калосальный нежели чем если читать по байтно.
SergP (2005-05-27 20:03:00) [75]
> [65] KilkennyCat © (27.05.05 18:30)
> Polevi © (27.05.05 16:15) [61]
>
> Бит — это минимальное количество информации, составляющее
> выбор одного из двух возможных вариантов
А если представить себе нечто представляющее собой выбор одного из трехвозможных вариантов, то количество информации которое ннесет это нечто будет равно 1,5849625007211561814537389439478 бит.
Т.е. имеем нецелое число битов...
чип (2005-05-27 18:48:00) [76]Эк вас разобрало на глубинные теории. А реально кто-нибудь сравнивал скорость на реальных задачах при разных способах чтения: байтами, кластерами и т.д.
KilkennyCat (2005-05-27 18:30:00) [77]Polevi © (27.05.05 16:15) [61]
Бит — это минимальное количество информации, составляющее выбор одного из двух возможных вариантов
Значит, теоретически можно предположить существование полубита, хранящий лишь один вариант их этих двух возможных :)
MacroDenS (2005-05-27 16:49:00) [78]
Давеча с Васьком открыли посмотреть чаво это в ейном винчестере за биты лежат. И нишиша там не было никаких битов, тока железяка какая-то...
А вы перед этим винт не форматили? И еще биты живущие на поверхности блина очень боятся света и свежего воздуха.
Вот я как-то вскрывал винт, полурабочий, не формаченый, так биты в рассыпуху разбежались по всему физическому уровню. А самое интересное что я обнаружил, так это то, что биты способны организовывать семьи (обысно по 8), а так же при организации семей начинают формировать общины. Эти общины могут занимать целые сектора и более жизненого пространства физического уровня. Вот такая вот тема.
Так что извлекать биты по одному, это крайне не гуманно. Подумайте об их семьях и общинах.
Defunct (2005-05-27 16:26:00) [79]wal © (27.05.05 15:33) [60]
> а потом скажи тогда сколько бит в ните и дите.
В чем?
Жара плохо влияет или научной фантастики начитались?
Anatoly Podgoretsky (2005-05-27 16:18:00) [80]Значит с учетов выше сказаного бардака, у нас остается, что минимальная часть информации, которую мы можем получить от системы это байт.