Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];

Вниз

Как считать файл по битам?   Найти похожие ветки 

 
Defunct ©   (2005-05-27 12:29) [40]

isasa ©   (27.05.05 10:42) [39]

небольшие поправки:

Чтение с диска идет побитово.
Битовые цепочки еще вдобавок кодированы (RLL).
Объем буфера ограниченный (цилиндр туда не поместится).
По SATA данные передаются побитово

ну а в остальном все как Вы и говорите.

С уважением,
def


 
Alex Konshin ©   (2005-05-27 14:02) [41]

Defunct ©   (27.05.05 12:29) [40]
isasa ©   (27.05.05 10:42) [39]
небольшие поправки:
Чтение с диска идет побитово.

большие поправки:
- чтение с поверхности диска идет побитово (на самом деле это тоже еще темное дело). Кстати, как я уже тут обращал внимание, порядок записи битов может быть отличным от того принятого в i486.  У меня стойкое подозрение, что там даже порядок байт другой (переставлены четный и нечетный байт), по крайней мере это видно по результату команды IDENTIFY.
- чтение с диска в память - блоками, никаких битов там нет, то есть нет никакой возножности выделить единичный бит.


 
Anatoly Podgoretsky ©   (2005-05-27 14:23) [42]

Еще и никакими 16*255 головками и не пахнет, точно также нельзя говорить ни о размере сектора, их количестве и количестве дорожек. Все сие темная тайна.


 
Defunct ©   (2005-05-27 14:27) [43]

Alex Konshin ©   (27.05.05 14:02) [41]

совсем маленькая поправочка:

> чтение с диска в память - блоками, никаких битов там нет, то есть нет никакой возножности выделить единичный бит.

на физ. уровне в интерфейсах SATA и USB можно выделить единичный бит при передаче инф. с диска в память.

С уважением.


 
Drakosha ©   (2005-05-27 14:37) [44]

Бит - неделимая еденица информации.
Но русские учёные....


 
KilkennyCat ©   (2005-05-27 14:40) [45]


> [43] Defunct ©   (27.05.05 14:27)


Ну да, в силу последовательности интерфейсов. Но непосредственно между контроллерами. Передача в память уже - всё.

А что касается побитового чтения блина, то думаю, это также возможно только на проводочке головы.


 
Anatoly Podgoretsky ©   (2005-05-27 14:42) [46]

Defunct ©   (27.05.05 14:27) [43]
В последовательных интерфейсах такое возможно.
Но как тебя понимать, что существует возможно по битно передавать из контролера в программу? Иначе ни о какой битовости не стоит и говорить.


 
Игорь Шевченко ©   (2005-05-27 14:42) [47]

KilkennyCat ©   (27.05.05 14:40) [45]

Но файлы-то на блине побитно хранятся ? :))))


 
Alex Konshin ©   (2005-05-27 14:44) [48]

Defunct ©   (27.05.05 14:27) [43]
на физ. уровне в интерфейсах SATA и USB можно выделить единичный бит при передаче инф. с диска в память.

С осцилографом? Программно у тебя никакой возможности нет, так как в SATA передача происходит тоже через DMA и процессор в этом не участвует.


 
Alex Konshin ©   (2005-05-27 14:48) [49]

Игорь Шевченко ©   (27.05.05 14:42) [47]
KilkennyCat ©   (27.05.05 14:40) [45]
Но файлы-то на блине побитно хранятся ? :))))

И это не совсем так. При нынешних способах записи информации нельзя  выделить на поверхности один бит. Там реально в несколько смен фазы записывается несколько бит, причем то несколько на это несколько обычно нацело не делится. То есть можно сказать, где записана группа битов, но самого бита там не разглядишь.


 
Anatoly Podgoretsky ©   (2005-05-27 14:50) [50]

Да модуляция там по хитрее, чем голая запись битов


 
Alex Konshin ©   (2005-05-27 14:50) [51]

KilkennyCat ©   (27.05.05 14:40) [45]
А что касается побитового чтения блина, то думаю, это также возможно только на проводочке головы.

Хм, но ты-то уж должен бы знать, что это не так. Я же помню, что ты железячник, или я не прав?


 
Anatoly Podgoretsky ©   (2005-05-27 14:54) [52]

Наверно не знаком с манчестер кодом, где последовательность 01011001 совсем не означает биты 01011001


 
KilkennyCat ©   (2005-05-27 14:59) [53]


> [51] Alex Konshin ©   (27.05.05 14:50)


Да, так. но честно говоря, я лишь предполагал, что запись идет далеко не простым способ "намагничено-ненамагничено". Как в действительности обстоит дело - не знаю. не успеваю я все знать :( могу лишь догадываться. И все же, уверен, что некоей "коробочкой" можно вытащить и один бит. Но я бы ее делать не стал :)


 
Alex Konshin ©   (2005-05-27 15:01) [54]

Там еще хитрее. Там нет битов вовсе. Грубо говоря, некая последовательность смен фазы означает какую-то последовательность битов. Другая последовательность смен фаз - другую цепочку битов. А потом на это еще и накладываются корректирующий код.

Drakosha ©   (27.05.05 14:37) [44]
Бит - неделимая еденица информации.
Но русские учёные....

Вот как раз на дисках нецелые биты - в полный рост.


 
wal ©   (2005-05-27 15:05) [55]


> [44] Drakosha ©   (27.05.05 14:37)
> Бит - неделимая еденица информации.
Кто тебе такое сказал?


 
Eraser ©   (2005-05-27 15:10) [56]

KilkennyCat ©   (27.05.05 14:59) [53]

Дело в том, что записывать/считывать информацию без потерь практически невозможно. В связи с чем и применяют алгоритм с избыточностью данных [54].


 
Defunct ©   (2005-05-27 15:22) [57]

Alex Konshin ©   (27.05.05 15:01) [54]
> Грубо говоря, некая последовательность смен фазы означает какую-то последовательность битов.

Именно это и есть RLL (Run Length Limited) кодирование

> А потом на это еще и накладываются корректирующий код.
Не слышал о таком ничего.

Anatoly Podgoretsky ©   (27.05.05 14:42) [46]
> Но как тебя понимать, что существует возможно по битно передавать из контролера в программу?

Нет, не существует, я же четко написал в [40], что согласен с [39].

wal ©   (27.05.05 15:05) [55]
это аксиома.


 
Anatoly Podgoretsky ©   (2005-05-27 15:22) [58]

Eraser ©   (27.05.05 15:10) [56]
Инженеры ИБМ иначе считали, правда им быстро пришлось убедиться в обратном.


 
KilkennyCat ©   (2005-05-27 15:27) [59]

Anatoly Podgoretsky ©   (27.05.05 14:54) [52]

Наверно не знаком с манчестер кодом


Ну... не настолько я плох :) Это первое, что изучают, когда возникает проблема синхронизации последовательных данных. я делал его реализацию программным автоматом.


 
wal ©   (2005-05-27 15:33) [60]


> [57] Defunct ©   (27.05.05 15:22)
>  это аксиома.
Да ну? Тогда для начала определение бита (с точки зрения теории информации) в студию, а потом скажи тогда сколько бит в ните и дите.

С уважением.


 
Polevi ©   (2005-05-27 16:15) [61]

Бит — это минимальное количество информации, составляющее выбор одного из двух возможных вариантов


 
Anatoly Podgoretsky ©   (2005-05-27 16:18) [62]

Значит с учетов выше сказаного бардака, у нас остается, что минимальная часть информации, которую мы можем получить от системы это байт.


 
Defunct ©   (2005-05-27 16:26) [63]

wal ©   (27.05.05 15:33) [60]
> а потом скажи тогда сколько бит в ните и дите.

В чем?
Жара плохо влияет или научной фантастики начитались?


 
MacroDenS ©   (2005-05-27 16:49) [64]


Давеча с Васьком открыли посмотреть чаво это в ейном винчестере за биты лежат. И нишиша там не было никаких битов, тока железяка какая-то...

А вы перед этим винт не форматили? И еще биты живущие на поверхности блина очень боятся света и свежего воздуха.

Вот я как-то вскрывал винт, полурабочий, не формаченый, так биты в рассыпуху разбежались по всему физическому уровню. А самое интересное что я обнаружил, так это то, что биты способны организовывать семьи (обысно по 8), а так же при организации семей начинают формировать общины. Эти общины могут занимать целые сектора и более жизненого пространства физического уровня. Вот такая вот тема.

Так что извлекать биты по одному, это крайне не гуманно. Подумайте об их семьях и общинах.


 
KilkennyCat ©   (2005-05-27 18:30) [65]

Polevi ©   (27.05.05 16:15) [61]

Бит — это минимальное количество информации, составляющее выбор одного из двух возможных вариантов

Значит, теоретически можно предположить существование полубита, хранящий лишь один вариант их этих двух возможных :)


 
чип   (2005-05-27 18:48) [66]

Эк вас разобрало на глубинные теории. А реально кто-нибудь сравнивал скорость на реальных задачах при разных способах чтения: байтами, кластерами и т.д.


 
SergP ©   (2005-05-27 20:03) [67]


>  [65] KilkennyCat ©   (27.05.05 18:30)
> Polevi ©   (27.05.05 16:15) [61]
>
> Бит — это минимальное количество информации, составляющее
> выбор одного из двух возможных вариантов


А если представить себе нечто представляющее собой выбор одного из трех возможных вариантов, то количество информации которое ннесет это нечто будет равно 1,5849625007211561814537389439478 бит.
Т.е. имеем нецелое число битов...


 
PAVIA ©   (2005-05-27 20:50) [68]

Я думал эта тема еще в 2 часа ночи загнулась, а нет живет.
Винчестер не может физически читать побитно. Почему это так? Да все потому, что на это понадобиться его позиционировать с точностью до бита, а это значительно снизит скорость четения из-за разгона тороможения привода дисковода и не забываем о дабавочном кодирование. По-этому диски читаются по класторно. Либы один кластер, либы несколько.
Самое быстрое - это будет считать весь файл целиком в памить. И от туда с ним работать прирост, просто калосальный нежели чем если читать по байтно.


 
Defunct ©   (2005-05-27 21:34) [69]

чип   (27.05.05 18:48) [66]

Поймите главное, HDD - блочное устройство, с него можно прочитать/записать блок данных. Максимальный размер блока определяется параметром "IDE HDD Block mode" в биосе, виндовс же подбирает размер блока самостоятельно и вам об этом не сообщает. Сам HDD еще оснащен умным контроллером, который умеет принимать решения, например при получении команды на чтение i-го сектора, контроллер может самостоятельно "догадаться" прочитать (i+1)-й сектор. Плюс имеется еще кеш (на случай повторного обращения к тому же сектору). Ну и плюс ОС имеет такие же самые механизмы, многократно ускоряющие производительность дисковой подсистемы.

Битово/байтово читать с блочного устройства -
это полная лажа, очень медленно и не нужно. Оптимальнее всего читать блоками, при этом объем блока не должен превышать объема буфера HDD и объема кеша L2 процессора. По-умолчанию объем блока равен 64kb, либо кратен одному кластеру (если кластер превышает 64kb).


 
Medved ©   (2005-05-27 21:36) [70]

Одно дело прочитать, другое дело КУДА прочитать? Где будешь хранить ОДИН бит? Мне кажется, что будет дольше обрабатывать место хранения, чем один байт.


 
Eraser ©   (2005-05-27 21:56) [71]

Defunct ©   (27.05.05 21:34) [69]
Оптимальнее всего читать блоками, при этом объем блока не должен превышать объема буфера HDD и объема кеша L2 процессора.


Это в случае т.н. PIO режима, а в режиме DMA/UDMA данные пересылаются в память почти без участия CPU, их обрабатывает DMA контроллер.


 
Alex Konshin ©   (2005-05-27 23:03) [72]

http://www.pcguide.com/ref/hdd/geom/index.htm

Про RLL:
http://www.pcguide.com/ref/hdd/geom/dataRLL-c.html
Замечу, что уже применяются модификации этого кода (например, ARLL).
Как вы видите, битов на диске просто НЕТ, есть последовательности перемен фаз, каждый определенный паттерн соответствует определенной поледовательности бит.


 
Defunct ©   (2005-05-28 01:40) [73]

Eraser ©   (27.05.05 21:56) [71]

DMA контроллер ничего обрабатывать не может, он отвечает только за "доставку" данных из устройства в ОП.


 
Defunct ©   (2005-05-28 01:41) [74]

> отвечает только за "доставку" данных из устройства в ОП.

и наоборот


 
Defunct ©   (2005-05-28 01:49) [75]

Alex Konshin ©   (27.05.05 23:03) [72]

В старых MFMках были биты в чистом виде. И на дискетках лежат биты в чистом виде до сих пор ;>


 
SergP ©   (2005-05-28 02:52) [76]


> В старых MFMках были биты в чистом виде. И на дискетках
> лежат биты в чистом виде до сих пор ;>


Все равно даже с дискеты как бы там биты не лежали, но считывать инфу можно только посекторно.

Даже с памяти инфа считываетя процессором минимум побайтно


 
KilkennyCat ©   (2005-05-29 00:53) [77]

Даже с памяти инфа считываетя процессором минимум побайтно

То есть, последовательно? :)
а я-то, дурень, вчера дуал моде запустил...


 
Marser ©   (2005-05-29 01:10) [78]


> То есть, последовательно? :)

?
Побйатно это значит последовательно одновременно по восьми каналам :-)


 
gdaujk ©   (2005-05-29 01:29) [79]

Вывод: не читаёте файлы, читайте книги :-)


 
Defunct ©   (2005-05-29 05:14) [80]

Marser ©   (29.05.05 01:10) [78]

C памятью вообще истинный дурдом. Вся память предстваляет собой матрицу строк и столбцов. Строка выбирается адресом строки и сигналом RAS, столбец адресом столбца + CAS. При подаче сигнала CAS ячейки памяти обновляются.
Конроллеру памяти постоянно приходится "пробегаться" по всем столбцам памяти для регенерации. Процессор и DMA контроллер его вечно отвлекают своми глупыми обращениями "не туда куда надо", не к тем столбцам. Посему контроллер памяти считывает по возможности как можно больше элементов одного столбца при обращении к любому элементу этого столбца и хранит его в "кеше", а процессору выдает то, что тот заказывал. При этом процессор понятия не имеет как контроллер физически адресует ту самую память, читает он что-либо или не читает(побитово, побайтово, или вообще по 256 разрядов сразу), записывает или не записывает. При записи еще более "прикольней". Продвинутые контроллеры могут для ускорения работы вообще ничего не записывать до тех пор пока не накопится приличный объем, чтобы записать сразу целый столбец.



Страницы: 1 2 3 4 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.64 MB
Время: 0.051 c
3-1119714262
ali_tash
2005-06-25 19:44
2005.07.31
TDBLookupComboBoxEh


1-1121087371
webpauk
2005-07-11 17:09
2005.07.31
Удаление компонента изнутри


1-1121085795
chili
2005-07-11 16:43
2005.07.31
Подскажите что может являться уникальным индентификатором для фай


14-1120931664
Piter
2005-07-09 21:54
2005.07.31
RTTI?


3-1118921580
Сергей2
2005-06-16 15:33
2005.07.31
Использование процедуры из package





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский