Станислав писал(а):
Кстати 4мб страницы это очень полезная вещь, так как для создания окон для доступа к регистрам эта тема очень подходит. Например я открыл такое окно для апика и лапика, они находятся по умолчанию в 1019ом 4мбайте 0FEC00000 и 0FEE00000.
Я просто mov dword[6FECh],0FEC00000h or 10000011b вот этой строчкой открыл 4мб окно и всё, и ненужно тратить страницу для таблиц. Адреса устройств кстати выравнены на 4мб и их тоже открывают 4мб окнами без потерь лишних страниц.
Я писал про подобное применение больших страниц. Но ради экономии вирт. пространства часто лучше пожертвовать лишней страницей. Тождественное отображение для аппаратных буферов не требуется. Не забывай отключать кэширование аппаратных буферов.
Цитата:
В пространстве задач таких окон не будет, чтобы они могли использовать все 4Гб, т.е. задачи которые используют их будут работать в первой задаче(системы), которая использует это виртуальное пространство.
У меня все это отображается в пространстве ядра. Ты говоришь только о коде ядра небольшого размера, отображаемом во все ВАП, но это близко к микроядерной архитектуре, которой у тебя не наблюдается. Так что привыкай к тому, что пространство ядра будет занимать половину/четверть ВАП каждой задачи. По разметке ВАП первичная задача обычно не отличается от все других задач. У меня в этом плане она отличается только тем, что при ее завершении ВАП не уничтожается полностью, а очищается для возможной повторной загрузки основного модуля.
Цитата:
Так же было бы очень полезно те страницы, которыми мы воспользовались, но не храним в них нужную информацию отдавать, возвращая метку "выделить по востребованию". И конечно вариант меток страниц сброшенных на диск с их адресом на диске у неактивных задач при нехватке страниц.
Я уже говорил, что нужно классифицировать все страницы/фреймы по типу. Для поддержания актуальности страниц рабочего набора нужно ввести механизм их старения. Кстати сразу отбирать устаревшие страницы не обязательно, можно их считать частью т.н. расширенного рабочего набора и отбирать лишь со временем, если к ним в течение этого времени не было повторных обращений. Также сильно повышает производительность отказ от выгрузки "чистых" (немодифицированных) страниц, а для этого нужно, чтобы чистые страницы могли продолжать храниться на диске, даже если они загружены в память. Также изначально чистые страницы исполняемых модулей можно загружать непосредственно из исполняемых файлов, не дублируя их в своп, пока они не изменятся. И т.д., и т.п.