Всем доброго времени суток! На моей машине установленно два банка оперативной памяти по 1 Гб и видеокарта 1 Гб. Значит ли это то, что я могу физически адресовать 3 Гб ? Или память видеокарты проецируется на область оперативной памяти ?
pashe4ka13 Нет не значит. Адресовать это значит составлять адрес. У 32 битного процессора семейства x86 у тебя 36 выходов то тебе доступно адресов 2^36 или другими словами 64 миллиарда адресов. А вот из них рабочих будет 2ГБайта+видео память. Да видео память проецируется в физическое адресное пространство, но не вся. Термины "Физическая память" и "Физическое адресное пространство" использованы в узком смысле, так как они определены в документации фирмы Intel для архитектуры X86.
На самом деле даже несколько меньше двух гигабайт ОЗУ -- часть адресов там как минимум затенена видеопамятью. Ну а сколько потенциально можно адресовать, зависит только от разрядности шины адреса -- обычно 36 бит (хотя в современных процессорах теоретически ширина может достигать 64 бит, но физически это не реализовано).
Если видео-карта проецирует весь свой 1 ГБ памяти, то да. Определённо нет. Сначала будет полностью располагаются оперативная памяти (хотя и разрываться в первом МБ BIOS и другими служебными областями), потом память различных устройств (в том числе и видео-память). Вот если у вас оперативной памяти будет скажем 3 или 4 ГБ и она вместе с памятью устройств не поместится в первых 4 ГБ, то часть оперативки будет отображена выше 4 ГБ и не будет доступна без 36- (PAE) или 64-битной адресации (long mode). Любой 32-битный процессор имеет возможность составлять физический адрес из 32 бит. То есть адресовать до 4 ГБ физической памяти. 32-битный процессор обладающий технологией PAE способен адресовать 64 ГБ физической памяти. Однако это требует специальных приспособлений со стороны ОС (к тому же объём адресуемой виртуальной памяти всё равно будет 4 ГБ). И наконец 64-битный процессор может адресовать до 2 ^ 64 байт памяти (16777216 ТБ). Однако поскольку этот объём памяти слишком велик, адресная шина современных процессоров позволяет адресовать намного меньшее (меньшее число бит. 48, например. может быть ещё меньше). К тому же 64-битная адресация (кстати, виртуальный адрес имеет лишь 48 значащих бит. у отдельных процессоров может быть меньше) требует перевода процессора в "длинный режим" и соответственно 64-битной ОС.
Как уже верно заметили, адресовать можно 4Гб или 64Гб, в зависимости от разрядности шины. А вот сколько из этих адресов будут валидными - другой вопрос
SII,Pavia Вам огромное спасибо, а Вам KIV отдельное, которое еще больше, так как мне кажется Ваш ответ самый точный. Но, что-то я еще не совсем допонимаю. Вот значит на моей машине будут валидными 3 Гб в любом случае,даже при различной разрядности шины данных, хоть 32 хоть 36. Ну предположим на моей машине 32-х разрядная шина, у меня 3 Гб, а адресовать я могу виртуально 4 ? Будет использоваться виртуальная память ? Это аппаратная поддержка (операционной системы нет) защищенного режима процессора ? И еще если шина будет 36 (при страничной адресации размер сегмента равен 4 Гб), а на машине будет, ну, скажем 8 Гб памяти, я смогу разместить в ней два сегмента?
Виртуальное адресное пространство в любом случае будет 4Гб а что ты туда проецироваьт будешь - твое дело. можно хоть одну страницу на все 4Гб перепроецировать - какая разница. ты сам задаешь таблицы. PS. Чтобы обозначить вопрос, достаточно одного вопросительного знака. Лишние потёр. Плиз, не надо ставить "???" и тп, в глазах рябит
О великий, всезнающий и могучий, который может стирать знаки вопросиков из моих постов всё вышесказанное Вами я внимательно вкурил, но мои вопросы остались без ответа:
pashe4ka13 Не всегда проецируется вся видео память. Иногда проецируются лишь так называемые окна памяти. Например: на моей машине 8 Гб оперативной памяти и 2 видео карты по 1 Гб каждая, но первые 4 Гб памяти выглядят у меня так 0-~2.5Gb - RAM 2.5Gb-0.5Gb - Video1 window 3.0-~0.3Gb - PCI Devices 3.3Gb-0.5Gb - Video2 window 3.8Gb-0.2Gb - PCI devices and others 4.0-~5.5Gb - RAM Виртуально всегда 4, но не обязательно. Многие страницы виртуального пространства могут попросту отсутствовать, а какие-то выгружены на диск. Разберитесь с адресациями памяти, это сложная тема, но она прекрасно разжевана в манах по процам. "Физическое пространство (4/64 Гб/256 Tb)">"Страничная адресация, Виртуальное пространство (4 Гб/16 Еб)">"Сегментная адресация (4 Гб/Unlimited)">"Линейное адресное пространство (4 Гб/16 Еб)" Вроде я запомнил так. Что выгружать или что загружать на/с диска определяет только операционная система. Да, но они не будут превышать 4 Гб адресации т.к. механизм сегментации идет после механизма страничной адресации, а механизм страничной адресации ограничивает нас 4 Гб виртуальным адресным пространством в 32-битном режиме
KIV Это Ваше утверждение неверно. Области ОЗУ, видеопамяти и регистров устройств могут перемежаться. Например, если на компьютере много оперативной памяти (свыше примерно 2-3 гигабайт, точное количество зависит от конфигурации железа), то часть её либо будет вообще недоступна (т.е. полностью затенена регистрами устройств и видеопамятью), либо будет переотображена чипсетом (в широком смысле, включая сюда контроллер памяти, физически располагающийся в современных процессорах на кристалле самого процессора, но логически являющийся отдельным узлом) за пределы 4 Гбайт. Это необходимо для того, чтобы 32-разрядные системы могли на такой конфигурации работать, ведь они не обязаны уметь пользоваться ПАЕ, а значит, могут оказаться неспособными дотянуться до регистров устройств за пределами нижних 4 Гбайт физического адресного пространства. Кроме того, БИОС обязан располагаться в конце этих 4 Гбайт, ну и т.д. В общем, ещё раз: обычное ОЗУ, видеопамять, регистры устройств и области БИОС перемежаются друг с другом, и никаких _предположений_ об их местонахождении делать нельзя (полагаться можно лишь на то, что точно известно, т.е. стандартизировано).
SII Регистры устройств? А разве регистры устройств имеют отношение к оперативной памяти? Мне всё время казалось, что данные регистры находятся в адресном пространстве ввода-вывода, которое размером 64Кб и физически к ОЗУ не имеет ни какого отношения
pashe4ka13 и лишь некоторые из этого пространства доступны также и через АП В/В (то, что 64 кб размером, а большинство вообще в этом самом АП В/В эмулируется, например клавиатура с мышью, т.к. они отображаются с усб и прикидываются обычными пс/2)
pashe4ka13 Это кривость архитектуры x86. В нормальных архитектурах это одно пространство. По мимо портов ввода/вывода (IO) которые находятся в своем пространстве. Есть порты которые отображены в адресное пространства физической память (Memory Mapped IO - MMIO). PCI устройства обычно отображают свои регистры в память. Вообще все устройства начиная примерно с 1990 стараются отображать свои регистры в память. А вот все устарелые и те которые поддерживают совместимость с ними еще продолжают использовать порты ввода вывода в отдельном адресном пространстве. max7C4 По поводу USB клавиатур и мышей. Контроллер USB просто считывает данные и записывает их в PS/2 контроллер. Так что порты не эмулируются они физические и настоящие.
Пример, пожалуйста. PCI-устройства предпочитают жить в I/O-пространстве (фрэйм-буфер не в счёт). Из ярких примеров я помню только Weitek какой-то-там, мат. сопроцессор с MMIO. А эмуляция legacy-устройств иногда и через SMM идёт. Хотя современные чипсеты поддерживают это аппаратно (запись в read-only порт?).
baldr Стандарт ПСИ прямо указывает, что предпочтительней отображать регистры на пространство памяти, а не ввода-вывода, ну а система поступает по своему усмотрению. Например, на моём компе на работе (за коим сейчас нахожусь; южный мост ICH7) USB2 Enhanced Host Controller занимает адреса памяти FEA77C00-FEA77FFF, а вот все четыре USB Universal Host Controller сидят в пространстве ввода-вывода.
Для USB контроллеров в их собственных спецификациях указано что у EHCI регистры находятся в MMIO, у UHCI - в I/O. Это будет так на всех материнских платах. Определённо это зависит от типа карты. Если карта внешняя - то будет так как ты описал, если интегрированная - у неё нет своей видеопамяти, она использует системную, и реально доступный объём RAM будет меньше на объём видеопамяти.
Здравствуйте. Подскажите, пожалуйста, возможен ли доступ к физическим адресам $E8001000-$E80013FF PCI-платы из приложения, созданного при помощи Borland Pascal 7.0. Запускать приложение нужно на компьютере Pentium3 с ДОС 6.22.