OSDev
http://osdev.su/

Управление физической памятью
http://osdev.su/viewtopic.php?f=5&t=1048
Страница 1 из 10

Автор:  Actium [ 02 фев 2015, 14:30 ]
Заголовок сообщения:  Управление физической памятью

Предполагается страничная трансляция адресов.

Думаю, для управления физ. памятью мне понадобятся такие операции со страничными фрэймами:
    - взятие из пула
    - возврат в пул
    - освобождение (страница выгружается во внешнюю память, фрэйм переходит в пул)

Наверняка, количество доступных фрэймов будет известно (в крайнем случае, вычисляться).

Какие еще операции могут потребоваться/пригодиться и для чего?

P.S. Видел подобные топики, но не хватило сил дочитать их до конца (слишком много не относящегося к теме).

Автор:  pavia [ 02 фев 2015, 21:13 ]
Заголовок сообщения:  Re: Управление физической памятью

Что вы имеет в виду по фреймамми?

Да много всего нужно. С ходу и не ответишь.

Нужна библиотека для управления страницами.
Нужна библиотека для работы с регионами.

С регионами стандартные функции поиск непрерывного региона.
Выделение непрерывного региона. Освобождение.
Перемещение, расширение.
Перечисление всех регионов. Чтение и изменения свойств региона.

Функции для работы с картой памяти SMAP или аналогичной SMAP.

Со страницами. Нужны функции для работы с деревом страниц. Нужны функции для работа с корнем, каталогом, и таблицей страниц (создание, чтение, изменение).
Нужны функции для преобразования адреса.
Нужны функции для чтений и изменения атрибутов страниц.
И вспомогательные функции для отображения физической страницы в текущее виртуальное адресное пространство.

Автор:  phantom-84 [ 02 фев 2015, 21:34 ]
Заголовок сообщения:  Re: Управление физической памятью

Судя по описанию, под фреймом подразумевается физическая страница. Таких операций не очень много. Помимо операций помещения/извлечения страниц, у меня есть еще операция извлечения обнуленной страницы и операция извлечения диапазона смежных физических страниц.

Автор:  Actium [ 02 фев 2015, 22:41 ]
Заголовок сообщения:  Re: Управление физической памятью

pavia писал(а):
Что вы имеет в виду по фреймамми?
Участки физической памяти, в которых могут храниться образы страниц. Разве они как-то иначе называются?

pavia писал(а):
Нужны функции для преобразования адреса.
О каком адресе идет речь, во что его нужно преобразовывать и зачем?

P.S. Пытаюсь вкурить остальные пункты :geek:

phantom-84 писал(а):
у меня есть еще операция извлечения обнуленной страницы
Под обнуленной имеется в виду страница, содержащая только нули?

Автор:  pavia [ 02 фев 2015, 23:38 ]
Заголовок сообщения:  Re: Управление физической памятью

Actium писал(а):
pavia писал(а):
Что вы имеет в виду по фреймамми?
Участки физической памяти, в которых могут храниться образы страниц. Разве они как-то иначе называются?

Всё правильно. Просто с просони, решил уточнить.

Actium писал(а):
pavia писал(а):
Нужны функции для преобразования адреса.
О каком адресе идет речь, во что его нужно преобразовывать и зачем?

Адреса бывают разные:
- физические
- виртуальные
- линейные
Так вот почему бы не иметь функции для преобразования из одних в другие?
Зачем? Ну метод у меня разработки с низу вверх. Вначале делаю низкоуровневые примитивы потом из них собираю более сложные вещи.
В целом не особо нужны.
К примеру нам надо скопировать данные и одного процесса в другой. Пусть к примеру мы загружаем некоторый исполняемый файл exe. Используем функцию ProcessWrite.
Тогда нам достаточно отобразить часть страниц из адресного пространства второго процесса в в адресное пространство первого или если это делает ядро то в его пространство.
Для этого нам нужно знать физические адреса. А так как ядро работает с линейными или виртуальными адресами, то и нужно сделать преобразование линейных в физические адреса.

Actium писал(а):
P.S. Пытаюсь вкурить остальные пункты :geek:

И не говори. Только сейчас понимание того как надо приходит.

Автор:  phantom-84 [ 03 фев 2015, 00:20 ]
Заголовок сообщения:  Re: Управление физической памятью

Actium писал(а):
Участки физической памяти, в которых могут храниться образы страниц. Разве они как-то иначе называются?
Ну, я к примеру фреймами называю страницы ВАП, т.е. "рамки", в которые отображаются (или не отображаются) страницы физической памяти.

Цитата:
Под обнуленной имеется в виду страница, содержащая только нули?
Да.

Автор:  Actium [ 03 фев 2015, 00:38 ]
Заголовок сообщения:  Re: Управление физической памятью

Насколько я понимаю, системе индифферентно, что там у пользователя в памяти хранится. В таком случае зачем ей копировать данные из одного ВАПа в другой? Наверное, речь о чем-то другом?

pavia писал(а):
А так как ядро работает с линейными или виртуальными адресами, то и нужно сделать преобразование линейных в физические адреса.
Преобразование виртуальных адресов в физические делает процессор (ну, или какой-нить блок, не суть). Зачем еще и ядро обучать этому?

Автор:  phantom-84 [ 03 фев 2015, 00:52 ]
Заголовок сообщения:  Re: Управление физической памятью

pavia писал(а):
Адреса бывают разные:
- физические
- виртуальные
- линейные
Так вот почему бы не иметь функции для преобразования из одних в другие?
Зачем? Ну метод у меня разработки с низу вверх. Вначале делаю низкоуровневые примитивы потом из них собираю более сложные вещи.
В целом не особо нужны.
К примеру нам надо скопировать данные и одного процесса в другой. Пусть к примеру мы загружаем некоторый исполняемый файл exe. Используем функцию ProcessWrite.
Тогда нам достаточно отобразить часть страниц из адресного пространства второго процесса в в адресное пространство первого или если это делает ядро то в его пространство.
Для этого нам нужно знать физические адреса. А так как ядро работает с линейными или виртуальными адресами, то и нужно сделать преобразование линейных в физические адреса.

Все это делается в рамках других функций, связанных не только с физическими страницами. Тут нужны и блокировки, и разделение страниц, и работа с регионами (я не использую отдельные структуры для хранения свойств каждой распределенной страницы; используются только табличные входы и дескрипторы регионов). Сам список физических адресов страниц можно получить из таблицы страниц процесса после блокировки соответствующего региона.

Actium писал(а):
Насколько я понимаю, системе индифферентно, что там у пользователя в памяти хранится. В таком случае зачем ей копировать данные из одного ВАПа в другой? Наверное, речь о чем-то другом?
А как размножать код между процессами, если он требует релокации? С диска тащить? Как реализовать механизм Copy-On-Write? Даже просто для разделения памяти нужно получать физические адреса уже распределенных страниц, чтобы отображать их в другие ВАП.

Цитата:
Преобразование виртуальных адресов в физические делает процессор (ну, или какой-нить блок, не суть). Зачем еще и ядро обучать этому?
Тут имелось в виду получение списка физ. адресов.

Автор:  Actium [ 03 фев 2015, 08:17 ]
Заголовок сообщения:  Re: Управление физической памятью

phantom-84 писал(а):
А как размножать код между процессами, если он требует релокации? Как реализовать механизм Copy-On-Write? Даже просто для разделения памяти нужно получать физические адреса уже распределенных страниц, чтобы отображать их в другие ВАП.
В контексте релокации не знаю, а в остальных случаях для разделения (share) страниц нужно отобразить на них адреса разных ВАПов. Как это делать технически? - Вероятно, данные из таблиц одной задачи скопировать в таблицы других. Для поддержки CoW нужна дополнительная информация (возможно, она доступна, я не знаю всех деталей).

Автор:  phantom-84 [ 03 фев 2015, 19:11 ]
Заголовок сообщения:  Re: Управление физической памятью

О том и речь, чтобы взять список адресов из таблицы одного процесса и записать их в таблицу другого.

Страница 1 из 10 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/