Автор: opa
Дата сообщения: 16.10.2001 03:29
Nep
Помоему это как раз в тему ....
А вот зело про память значицца так, если по уму объяснять, то в современных компах имееца иерархия памяти - регистры, кэш 1-3 уровней, оперативная память, диск (для организации памяти виртуевой). Виртуевая память в процах со страничной адресацией (Пентюх и компания - сегментно-страничные, но сегменты там сугубо сверху и в плоской модели задавлены) создается путем сочетания страничной адресации и кэша файла подкачки. Управлять можно: 1) кэшем проца 2) старничным адресным пространством 3) кэшем файла подкачки.
У кэша есть общий объем, размер страницы и четыре основных стратегии, коими реально определяется эффективность использования. Плюс при чтении и записи нужно учитывать возможности девайса. Из памяти можно читать бурстом, например, бывают write-combine буфера (этот держит в себе очередь обновляемых страниц кэша, и если успеваешь до реальной записи попасть еще раз в ту же старницу, она пишется лишь раз). На диск тоже писать можно пачками, да меньше 512 байт за раз записать и невозможно. Кстати, эти самые комбинирующие буфера для записи реально присутствуют и на жестких дисках. На каждом контроллере есть кэш, кэш состотоит из буферов размером в цулиндер. Можно запустить в контроллер пачку дисковых адресов и читать или писать с них. Реально при этом контроллер сортирует их по номеру дорожки (цулиндера) и смотрит в свою память. Ежели для такого цулиндера буфер ужо отведен, меняет данные в буфере. Если нет, вытесняет один из занятых буферов на диск и подчитывает недостающие данные в кэш. Значица, буфер делится на сектора, у каждого сектора есть признак изменения. За одну операцию диск одновременно пишет измененные и дочитывает недостающие данные в буфер. (ой, ща за РАМ примусь, а то за флэйм меня забанят)
Значица, процессорным кэшом рулить можно так - назначать ему сквозную или отложенную запись, выключать его нах, если кэш включен, можно еще комбинирующие буфера включить. Буфера эти разные у разных моделей пентюхов и АМД. Рулить всем этим хозяйством можно постранично. Страничная переадресация устроена так - у пентюха есть регистр CR3, указывающий на физический адрес каталога страниц. Каталог страниц состоит из дескрипторов таблиц страниц. Каталог занимает 1 страницу (4КБ, на 4КБ и выровнено), состоит из 1024 4-байтовых дескрпипторов. 20 бит дескриптора - старшие биты адреса таблицы страниц (остальные 12 бит содержат атрибуты, благо на 4К выровнено). Атрибуты такие - есть в памяти, как кэшировать, можно ли писать/читать, изменились ли данные, было ли обращение. Ну и еще пара поюзанных и несколько штук для операционки. Таблица страниц, сука, тоже состоит из дескрипторов, только уже самих страниц. Стурктура их очень похожа на дескрипторы таблиц страниц, но атрибуты там чуть отличаются. Но это на самом деле пох.
Адресация работает так - адрес режется на 10 старших бит (индекс в каталоге таблиц странц). 10 средних бит (индекс в соответствующей таблице страниц) и оставшиеся 12 бит смещения в получившейся странице. Ежели чего-то там по пути в памяти не оказалось, хардверный интерупт. Его операционка ловит и юзает. Биты использования и изменения железо проставляет само. Ежели способ доступа не соответствует атрибутам страницы - опять же интерупт.
Бит доступа операционка время от времени сбрасывает, чтобы было понятно, к каким страницам был доступ в последнее время.
Кэш файла подкачки - переменного размера, состоит из тех же самых страниц. Файл подкачки - тоже из тех же страниц.
Как рулят адресным пространством - его можно отводить (в вынюках есть фнукция ВиртуалАллок с туеевой хучей параметров, ею все и делается), менять атрибуты страниц (операционка еще держит одноразовый признак Guarded, который защищает страницу от любого доступа, при первом доступе кидается ексепшн, который задача может ловить, а операционка снимает сама признак Guarded),
освобождать, разумеется, привязывать к куску файла, чтобы его мжно было в адресное пространство мапить, привязывать и отвязывать от кэша файла подкачки. Это все вызовами функций из задачи. Если кусок адресного пространства отвязать, содержимое его не гарантируется - нету содержимого, только адрес. Например, ели какой-то ох@енный массив говном зарос, и точно известно, что это говно будет затерто, и юзать массив прямо сейчас не собираешься, лучше его оторавть от памяти, хай говно живет как хочет.
Чего можно сделать на уровне операционки виндовс - можно только поменять размер кэша файла подкачки, возможно, стратегии управления (как страники распределять между задачами, какие страницы вытеснять, если не хватает). Возможно, но не уверен, что можно повлиять на выделение страничек кэша файла подкачки в физ. памяти - например, сгруппировать в кучку те, что читаются и пишутся вместе, и тогда будет меньше обращений к диску. Но на самом деле это пох, если уж свопинг начался, и тут 3,14здец не за горами. В нормальной операционке еще можно влезть и организовать дополнительный уровень кэша с быстрой компрессией данных. На быстрых процах свопинг лечится со страшной силой.
Все оптимизаторы, какие я видел, занимались одной и той же туфтой - пытались кучно отводить в оперативке часто используемые страницы и время от времени флашить неиспользованное на диск. Вообразить, что в вынюках стратегии кэширования выбраны такими херовыми, что от периоического принудительного выписывания в файл подкачки им хорошеет - не легко, но могу. Что хорошеет радикально - не верю, ибо если стратегии кривые - все равно жопа, а если прямые, то принудительное выписывание бы не помогало.
Со всех этих вынюковых оптимизаторов толку нет никакого. Операционка тяжелая и для примочек совершенно не приспособленная. Программные интерфейсы весь выигрыш сожрут, да и не видно ни хрена. Не надо еще забывать о том, что еще в добавок и сам сжирает не малый кусман операционки, где хочет жить и работать Ой, а про процессор я и забыл. Короче спорить продолжаем ?
Имха, эта фишка вся с оптимизацией памяти какими-то предприимчивым дядькам которым не дает покоя старая слава QEMM, многие юзвери которые и до того огребались траблами с памятью в ДОС с огромным удовольствием купят эту приладу, наЕбизнес это называется.
Да, еще был один небесполезный опттмизатор виртуевой памяти под вынь 3.x. МагнаРАМ назывался. Поставлялся вместе с Куемемом Кватердековским. Главная фича была именно в быстром сжатии страничек, что радикально сокращало свопинг.
фу-у-у-у .... Чего не дописал про память, дополнит Теchsup
"И не надо пудрить мне мозги по образованию я УРИСТ и учился о-о-очень хорошо" (с) Черная Роза, эмблема печали - красная роза, эмблема любви.