OSDev

для всех
Текущее время: 15 ноя 2018, 17:56

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 93 ]  На страницу 1, 2, 3, 4, 5 ... 10  След.
Автор Сообщение
 Заголовок сообщения: Управление физической памятью
СообщениеДобавлено: 02 фев 2015, 14:30 

Зарегистрирован: 01 фев 2015, 10:02
Сообщения: 54
Предполагается страничная трансляция адресов.

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

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

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

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


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

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1092
Что вы имеет в виду по фреймамми?

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

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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление физической памятью
СообщениеДобавлено: 02 фев 2015, 21:34 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление физической памятью
СообщениеДобавлено: 02 фев 2015, 22:41 

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

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

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

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


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

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

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

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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление физической памятью
СообщениеДобавлено: 03 фев 2015, 00:20 

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление физической памятью
СообщениеДобавлено: 03 фев 2015, 00:38 

Зарегистрирован: 01 фев 2015, 10:02
Сообщения: 54
Насколько я понимаю, системе индифферентно, что там у пользователя в памяти хранится. В таком случае зачем ей копировать данные из одного ВАПа в другой? Наверное, речь о чем-то другом?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление физической памятью
СообщениеДобавлено: 03 фев 2015, 00:52 

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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление физической памятью
СообщениеДобавлено: 03 фев 2015, 08:17 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление физической памятью
СообщениеДобавлено: 03 фев 2015, 19:11 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1197
О том и речь, чтобы взять список адресов из таблицы одного процесса и записать их в таблицу другого.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 93 ]  На страницу 1, 2, 3, 4, 5 ... 10  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB