Допустим, есть AGP видеокарта с 512МБ памяти и есть матплата, на которой стоит 256 МБ памяти. Можно ли использовать часть видеопамяти как системную память? На самом деле вопрос шире. Есть устройство на шине pci/agp/pciE(хоть isa) которое имеет память(ничего кроме видеокарты в голову не приходит). Оно умеет брать на себя некоторую часть адресного пространства процессора. Как это использовать?
В голову приходят только linear frame buffer в большей степени и agp aperture size в меньшей степени, также "размер окна". Можно ли "замапить" часть памяти достаточно простым образом, чтобы не нужно было сложное программирование и переключение "окон"?
Рассуждения- "память стоит дёшево", "слишком большое время доступа" и т.п. можно не приводить.
Добавлено спустя 5 минут 15 секунд:
Строго говоря, не обязательно даже чтобы память устройства мапилась на адресное пространство процессора - достаточно только:
1) Иметь возможность получить доступ к произвольному блоку памяти устройства каким-то способом (например чере порты либо маппинг на адресное пространство процессора кусками, либо маппинг целиком)
2) Сказать устройству чтобы оно некоторые области собственной памяти не трогало - ибо устройство-то может быть умным, иметь собственную прошивку и т.п.
3) Далее модифицируется VM и алокатор в ядре - все реально при условии того что первые два условия - выполнены.
в теории - можно. Реально в худшем случае придется переписывать memory management в ядре операционной системы. Напр., как можно рассуждать - у нас есть PM. В нем есть возможность при обращении к отсутствующим страницам памяти вызывать обработчик оного прерывания. Так в нем можно реализовать подгрузку этих самых страниц откуда угодно. В т.ч. и из памяти PCI-у-в. Ну, или откуда угодно :-)
Можно воткнуть видеокарту с вынутым биосом и не ставить её драйвера. Интересует, конечно, не "прокручивающееся" окно, а маппинг всей памяти. Можно ли обойтись только софтом устройства без модификации ядра ос. Допустим, рассматриваем более широко распространённые ос, чем линух:-) Или же, как только начнётся инициализация шины в ядре, на которой висит устройство, все предыдущие "установки" отвалятся? Идеально было бы иметь драйвер универсальной инициализации видеокарты, может vesa подошёл бы, например, подобно известному
Малоинтересно. Нужен драйвер устройства, а не перехватчик исключений, как можно с более минимальным программированием, иначе- не имеет смысла. Хоть и было мной написано про не имеющие значения задержки, но, чем более железный способ, тем они меньше.
или упирается в "непрерывность" памяти, в том смысле, что "выше 2Г" и модификация нужна, чтобы ос видела её именно как самую обычную память? Иначе память будет, но писать в неё можно будет только тем, кто знает, что она есть?
были-же ISA платы с памятью, есть PCI-винчестеры на DIMM-ах.
надо только чтобы система считала это картой памяти, а вторую видяху под видео и оставить....
Нужно, чтобы устройство кроме DeviceID и VendorID отдавало правильный Class Code, например что-то такое:
[code:1]D.6. Base Class 05h
This base class is defined for all types of memory controllers. Several sub-class values are
defined. There are no register-level programming interfaces defined.
Base Class Sub-Class Interface Meaning
00h 00h RAM
05h 01h 00h Flash
80h 00h Other memory controller[/code:1]
Иначе ничего не выйдет, в ISA все гораздо проще.
Обслуживавшиеся своим драйвером. По типу EMS, вроде.
Так как раз сделать из VRAM накопитель - сравнительно просто. Но это же не память будет, а все же диск.
Кстати - у линуксоидов есть такой проект.
Не обязательно. Если свой драйвер - то ему пофиг, что там за Class Code у платы - главное, что он системе отдастся как Storage. А вот с драйвером видюхи - да, придется как-то договариваться о юзании ресурсов... Хотя бы в плане обмана - сколько реально мозгов на плате.