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. Пытаюсь вкурить остальные пункты phantom-84 писал(а): у меня есть еще операция извлечения обнуленной страницы Под обнуленной имеется в виду страница, содержащая только нули?
|
Автор: | pavia [ 02 фев 2015, 23:38 ] |
Заголовок сообщения: | Re: Управление физической памятью |
Actium писал(а): pavia писал(а): Что вы имеет в виду по фреймамми? Участки физической памяти, в которых могут храниться образы страниц. Разве они как-то иначе называются?Всё правильно. Просто с просони, решил уточнить. Actium писал(а): pavia писал(а): Нужны функции для преобразования адреса. О каком адресе идет речь, во что его нужно преобразовывать и зачем?Адреса бывают разные: - физические - виртуальные - линейные Так вот почему бы не иметь функции для преобразования из одних в другие? Зачем? Ну метод у меня разработки с низу вверх. Вначале делаю низкоуровневые примитивы потом из них собираю более сложные вещи. В целом не особо нужны. К примеру нам надо скопировать данные и одного процесса в другой. Пусть к примеру мы загружаем некоторый исполняемый файл exe. Используем функцию ProcessWrite. Тогда нам достаточно отобразить часть страниц из адресного пространства второго процесса в в адресное пространство первого или если это делает ядро то в его пространство. Для этого нам нужно знать физические адреса. А так как ядро работает с линейными или виртуальными адресами, то и нужно сделать преобразование линейных в физические адреса. Actium писал(а): P.S. Пытаюсь вкурить остальные пункты И не говори. Только сейчас понимание того как надо приходит. |
Автор: | 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/ |