OSDev

для всех
Текущее время: 09 май 2024, 12:58

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




Форум закрыт Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 93 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 10  След.
Автор Сообщение
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 27 авг 2012, 16:02 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Станислав писал(а):
Получается, что для процесса важен не сам адрес процесса, а адрес каталога страниц...
:?: При использовании пэйджинга под адресом обычно понимаю вирт. адрес, в противном случае говрят физ. адрес. Где что ты имел в виду, я не понял. Но в принципе при использовании пейджинга физ. адреса вообще мало важны, хотя они и присутствуют во многих структурах. После включения пэйджинга ты и к каталогу обращаешься по вирт. адресу. Физический адрес каталога фигурирует только при выделении для него свободной страницы и в структуре потока или процесса.

Цитата:
...после загрузки которого в CR3 адрес будут с 0.
:?:

Цитата:
А функция добавления памяти будет добавлять страницы из любого места оперативки и ставить подряд в каталоге страниц.
Из любого, но естественно те, которые свободны. Можно и не подряд.

Цитата:
Как я понял, главный каталог страниц = 4мб, а для процессов можно делать и меньше.
:?: Сначала матчасть. Посмотри, что есть в терминологии Интел "каталог страниц". Это не сложно.


Последний раз редактировалось phantom-84 27 авг 2012, 16:13, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 27 авг 2012, 16:11 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
phantom-84 писал(а):
Лично я для подобных модулей использую формат файла, который в принципе не поддерживает релокацию (однако имеет поле для хранения базового адреса, правда, ядро все равно не "проглотит" любой адрес, а часто ему нужен вполне определенный адрес; я уже очень давно компилирую приложения только по адресу 400000h). Некоторые используют формат с поддержкой релокации, но только ради унификации формата основных модулей и библиотек.

Вообще говоря, отсутствие поддержки релокации не есть хорошо. DLL-библиотеки нельзя скомпилировать на фиксированные адреса, т.к. никогда не знаешь, когда и в каком составе они потребуются в адресном пространстве текущего процесса.

Станислав писал(а):
Получается, что для процесса важен не сам адрес процесса, а адрес каталога страниц, после загрузки которого в CR3 адрес будут с 0.

Не, не так. Адрес не будет ни с нуля, ни с какого другого значения. Виртуальная память - это отображение одних адресов (любых) на другие (тоже любые). То, что отображаем, называется логическим или виртуальным адресом, т.е. программа обращается по этому адресу и не знает, где на самом деле находится то, что она читает/пишет. Да ей это и не важно. Куда отображаем - называется физическим адресом. Это та страница памяти, где реально будут данные этой программы. Отображение происходит блоками по 4кБ или по 4МБ. 4МБ используются редко, обычно предпочитают 4к. Эти блоки называют страницами памяти. Отобразить можно любую страницу из адресного пространства 4Гб на любую физическую страницу.

Станислав писал(а):
Как я понял, главный каталог страниц = 4мб, а для процессов можно делать и меньше.

Не, это тоже не так. Размер всего каталога зависит от того, сколько памяти ты отобразил. В простейшем случае, есть два уровня (для страниц размером 4к). Первый уровень - таблица Page Directory, размером 4к. На неё указывает содержимое регистра CR3. Каждый элемент этой таблицы указывает на таблицу другого уровня - Page Table. А уже элементы этой таблицы указывают нужное расположение физической страницы памяти.
В минимальном варианте (со страницами размером 4к) возможно использование только двух таблиц - одна PD и одна PT, получается 8к, что позволит использовать 4МБ памяти. Совокупный размер таблиц в 4М это только в случае, если у тебя ВСЁ адресное пространство отображено на какие-то страницы, но реально этого почти никогда не требуется.

Если владеешь английским, почитай эту статью: http://wiki.osdev.org/Paging

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 27 авг 2012, 16:18 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Английским владею с переводчиком, после чего долго вдумываешся в переведённую белеберду, поэтому читал у Аблязова и разбирал его пример как раз на FASM, но там мало, про таблицы есть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 27 авг 2012, 16:26 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Yoda писал(а):
Не, не так. Адрес не будет ни с нуля, ни с какого другого значения. Виртуальная память - это отображение одних адресов (любых) на другие (тоже любые). То, что отображаем, называется логическим или виртуальным адресом, т.е. программа обращается по этому адресу и не знает, где на самом деле находится то, что она читает/пишет. Да ей это и не важно. Куда отображаем - называется физическим адресом. Это та страница памяти, где реально будут данные этой программы. Отображение происходит блоками по 4кБ или по 4МБ. 4МБ используются редко, обычно предпочитают 4к. Эти блоки называют страницами памяти. Отобразить можно любую страницу из адресного пространства 4Гб на любую физическую страницу.


Это я знал ещё до того как задумал писать ОС, я имел в виду не с 0, а с того адреса на который настроил таблицу, просто до этого я писал о намерении делать её с 0 для процесса.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 27 авг 2012, 16:29 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Yoda писал(а):
Вообще говоря, отсутствие поддержки релокации не есть хорошо. DLL-библиотеки нельзя скомпилировать на фиксированные адреса, т.к. никогда не знаешь, когда и в каком составе они потребуются в адресном пространстве текущего процесса.
Я специально написал "основной модуль приложения", чтобы все поняли, что я говорю НЕ о библиотеках.

Цитата:
В минимальном варианте (со страницами размером 4к) возможно использование только двух таблиц - одна PD и одна PT, получается 8к, что позволит использовать 4МБ памяти.
При использовании рекурсивно отображенного каталога достаточно только одной страницы, хотя это без "полезной нагрузки", но зато и PD, и все PTs могут быть видны в ВАП.

Станислав писал(а):
Английским владею с переводчиком, после чего долго вдумываешся в переведённую белеберду, поэтому читал у Аблязова и разбирал его пример как раз на FASM, но там мало, про таблицы есть.
См. по ссылке. Там есть картинки. В интеловском мане тоже есть картинки.

Цитата:
Это я знал ещё до того как задумал писать ОС, я имел в виду не с 0, а с того адреса на который настроил таблицу, просто до этого я писал о намерении делать её с 0.
На нулевой адрес лучше "ловить" NULL pointer (нулевой указатель).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 27 авг 2012, 16:33 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Да, библиотеки же должны сидеть в системном пространстве, или они по адресам кочуют, хотя и то и другое. Хотя могут же и в пространство приложения залезть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 27 авг 2012, 16:44 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 27 авг 2012, 16:50 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Понятно, спасибо за объяснения, нужно практики набраться теперь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 27 авг 2012, 16:53 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Кстати где размещать сами таблицы для приложенийто? Нам же нужны их реальные адреса, и какого объема их делать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Память
СообщениеДобавлено: 27 авг 2012, 17:00 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Я размещаю таблицу страниц или в начале пространства ядра (если грубо, в середине ВАП), или в конце пространства ядра (в конце ВАП). В принципе можно и в user space, т.к. таблица должна по-любому защищаться - достигается установкой одного бита в рекурсивной ссылке каталога на себя.


Последний раз редактировалось phantom-84 27 авг 2012, 17:01, всего редактировалось 1 раз.

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

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


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

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


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

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