Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Конвертация битов в мегабайты....


Автор: Guest 23.9.2005, 14:59
Что-то я запутался с конвертацией компьютерных единиц измерения… Читаю строчку: "Процессоры i8086 и i8088 относятся к 16-разрядным процессорам. Максимальный объём адресуемой ими оперативной памяти составляет 1 мегабайт, что определяется использованием 20-разрядной адресации памяти.". Пробую представить себе этот процесс в голове. Если память 20-ти разрядная, значит можно сгенерировать 2^20=1048576 уникальных адресов. Каждый разряд – это фактически бит (ячейка), которая может иметь 0 или 1. Если переводить все это дело в мегабайты, получаем 1048576 / 8 (бит в байте) / 1024 (байт в килобайте) / 1024 (килобайт в мегабайте) = 0.125 Мегабайт (вместо 1 Mb). Где я неправ?

Автор: chaos 23.9.2005, 15:05
на 8 не надо делить! тк адресуется не бит а байт!

Автор: Дрон 23.9.2005, 15:07
Цитата(Guest @ 23.9.2005, 15:59)
Если память 20-ти разрядная, значит можно сгенерировать 2^20=1048576 уникальных адресов. Каждый разряд – это фактически бит (ячейка), которая может иметь 0 или 1.

По отдельности это правильно, но вывод делаешь неверный smile

Адресов доступно всего 1048576. Но для упрощения и увеличения быстродействия в памяти адресуются не биты, а целые байты, т.е. ты не можешь сказать запиши 1 в бит по адресу такому-то... Минимальной единицей адресации является байт.
Для доступа к отдельным битам существуют специальные операции, но они не работают с памятью напрямую.

А 20-разрядов (бит) это просто размер адреса.



Автор: chaos 23.9.2005, 15:10
угугу
если камешек 64х разрядный это получается что можно адресовать
17179869184 Гб памяти. Куда же столько

Автор: Guest 24.9.2005, 16:43
И все-равно я до конца не понял процесс, происходящий на аппаратном уровне. Если адрес 20-битный, а по утверждению Дрона адресация происходит побайтно, значит фактически используется только 16 разрядов из 20... , а значит мегабайт все равно неполучается. Подскажите хоть, что почитать (где мой пример хорошо разжеван)???

Автор: Dreamer_0x01 24.9.2005, 17:42
Цитата
Если адрес 20-битный, а по утверждению Дрона адресация происходит побайтно, значит фактически используется только 16 разрядов из 20...


Почему???

16 разрядные у тебя данные.
а 20ти разрядные - адреса. Не путай.

Автор: Дрон 24.9.2005, 18:13
Guest
Ты опять путаешь smile

По порядку:
20-разрядность адреса -- означает то, адрес представляется 20 битами.
При помощи 20 бит можно закодировать 1048576 значений (адресов).
Каждому адресу соответствует 1 байт.
В итоге получаем 1048576 байт.

Минимальная единица адресации -- байт.

Очень и очень грубо говоря, 20-разрядов -- это просто 20 проводов составляющих шину адреса. На каждом из них либо есть напряжение, либо нет. Все вместе они формируют какой-то адрес, передаваемый в память. В соответствии с этим адресом микросхема памяти выдаёт нужный байт на шину данных (а там 8-проводов для 8-бит, составляющих байт).

Я уж не знаю как проще объяснить smile

Автор: damir5 30.9.2005, 07:12
на самом деле используется не 20 разрядов а 2 регистра 16+16, по при этом они друг друга перекрывают. один 16 бит регистр отвечает за семент в 64К

а вот если эти регистры склеивать (но не ты ручками, а через himem) то можно адресовать больше одного метра

Бил гейтс 1981: Одного мега всем должно хватить smile

Автор: Mad 30.9.2005, 09:59
Цитата(damir5 @ 30.9.2005, 06:12)
на самом деле используется не 20 разрядов а 2 регистра 16+16, по при этом они друг друга перекрывают. один 16 бит регистр отвечает за семент в 64К

а вот если эти регистры склеивать (но не ты ручками, а через himem) то можно адресовать больше одного метра


Это ты уже к i80286 процам перескочил, i8080 и i8086 (XT) больше метра адресовать не могли, и реально в машинах второй адресный регистр был зарезервирован, но не использовался, поэтому и макс. обьем памяти для XT состовлял 640Kb smile

Автор: Romikgy 30.9.2005, 13:33
Цитата(damir5 @ 30.9.2005, 07:12)
а вот если эти регистры склеивать (но не ты ручками, а через himem)

Это сам проц делает smile

Автор: damir5 30.9.2005, 18:24
ну про himem и проц мне все ясно, не будем вдаваться в детали,
а вот насчет 286 может и ошибаюсь.

но вот про 640 помоему ошибочка. просто MS на свое усмотрение под досом разбили так. и все что было выше использовал для своих целей ОС. а 640 выделил для программ, обычно 480-512 использовалось для загрузки в память, а все что до 640 использовалось для TSR в нижней памяти.
а вот адресовался все равно метр, а не 640к, а значит минимум 20 разрядов

я конечно много уже чего забыл, но помоему какой то командой проца регистр с шины данных использовался, для адресации выше чем сегмент(64кб 2хх16)



Автор: Дрон 30.9.2005, 18:32
Цитата(damir5 @ 30.9.2005, 19:24)
о вот про 640 помоему ошибочка. просто MS на свое усмотрение под досом разбили так

MS тут не причём.
Это всё IBM придумало smile

Первые 640 Кб - память для программ (причём даже не все, начало памяти -- служебные области вроде таблицы прерываний)

Потом 64 Кб -- видео-память.

Остальные адреса вроде бы отображаются в ПЗУ -- но в этом я не уверен.

Автор: Mad 30.9.2005, 18:33
Цитата(damir5 @ 30.9.2005, 17:24)
какой то командой проца регистр с шины данных использовался, для адресации выше чем сегмент(64кб 2хх16)

это добавили уже в 286 проц - переход в защищенный режим

Автор: damir5 30.9.2005, 18:45
ну 640 ibm не могло придумать. это Фишки ОС как ей память использовать
640 - это 2 в какой степени, и иначе как объяснить почему 640 ?

640-1М использовалось и для 4 страниц видео ( 80стлб 25стр)
+ отображение ПЗУ в память, а не наоборот (последние 64 к из 1М)
+ TSR
+ таблицы загрузок фалов, хендлеры, хешы и тд.
короче ядром




Автор: Mad 30.9.2005, 19:00
Цитата(damir5 @ 30.9.2005, 17:45)
640 - это 2 в какой степени

ближайшие степени, это 512 и 1024 smile

Цитата(damir5 @ 30.9.2005, 17:45)
отображение ПЗУ в память

а потвоему BIOS (или ПЗУ) адресоваться никак не должен ?

Цитата(damir5 @ 30.9.2005, 17:45)
короче ядром

какраз нет, 640К-1М резервировались какраз апаратно.

А вообщето "ядро" в ДОСе это сильная фраза smile и как потвоему однозадачная система могла контролировать и регламинтировать доступ к памяти ? smile

Автор: damir5 30.9.2005, 19:14
да вы чего!!!!

у доса есть ядро!!!! оно загружало приложения, передавало управление, после заверншения получало.

про 640-1м - скользкий вопрос.
я согласен что это пространство было зарезервировано, но все же ...

короче ядро использовало его ..... и пользовалось само...

Автор: Mad 30.9.2005, 19:20
Цитата(damir5 @ 30.9.2005, 18:14)
у доса есть ядро!!!! оно загружало приложения, передавало управление, после заверншения получало.

согласен только в том, что понятие ЯДРО в данном слечае просто теологический спор smile

Цитата(damir5 @ 30.9.2005, 18:14)
короче ядро использовало его ..... и пользовалось само...

оно его не использовало, да и не могло использовать smile

если тебе удасться освободить 640К памяти под ДОС (чтоб команда ДОС показала что свободно 640К), тогда я с тобой соглашусь, а вообщето ДОС и для себя использовал эти самые первые 640К smile

Автор: Guest 30.9.2005, 19:20
дет сад

Автор: Дрон 30.9.2005, 22:07
Цитата(Guest @ 30.9.2005, 20:20)
дет сад

Ню-ню...

Так расскажи нам в чём же дело?

Я, например, честно признаюсь, что точно не знаю, как там на самом деле всё устроено и откуда у 640 Кбайт ноги растут.

Когда читал, но так как реально применять не приходилось -- всё забыл.
Добавлено @ 22:11
Модераторы:
Может перенесите эту тему куда-нибудь в Ассемблер -- она всё равно изначально к С++ никакого отношения не имеет, а сейчас вообще чёрти куда ушла. В асме люди скорее всего должны быть лучше с архитектурой знакомы smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)