Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Чт окт 19, 2017 6:40 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 77 сообщений ]  На страницу Пред. 1 2 3 4 5 6 След.
Автор Сообщение
 Заголовок сообщения: Re: Выделение памяти
СообщениеДобавлено: Пн окт 17, 2016 3:18 pm 
Не в сети

Зарегистрирован: Вт окт 04, 2016 10:05 pm
Сообщения: 44
Siemargl писал(а):
В gcc действительно свой субаллокатор, в tcc я делать пока не стал - используется системный.

Но прикрутить libc от gcc (в виде PE DLL) к не си- программам будет нетривиально.

А выкусить только аллокатор в объектный файл нереально?


Вернуться к началу
 Заголовок сообщения: Re: Выделение памяти
СообщениеДобавлено: Пн окт 17, 2016 3:26 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1069
//DG, я вообще-то написал по дефолту. А если кому-то нужно сделать подмену. Например, для тестирования или отладки, то вот тогда и lib_init вызывать лишь при необходимости.
А то сейчас программы вынуждены из-за прихоти разработчиков таких библиотек таскать с собой вот это http://websvn.kolibrios.org/filedetails.php?repname=Kolibri+OS&path=%2Fprograms%2Fdll.inc А так бы GetProcAddress было бы достаточно.


Вернуться к началу
 Заголовок сообщения: Re: Выделение памяти
СообщениеДобавлено: Пн окт 17, 2016 3:29 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3929
Цитата:
Там в левом нижнем углу написано Free memory(KB): 203716, а это меньше, чем запрошено(203716 < 1048576).
Это не мешает выделить виртуальную память, т.е. диапазон адресов. Если ты начнёшь эту память обнулять, получишь страничную ошибку, когда физическая память закончится.
Я проверял в VBox и VMware Player c 256 Мб


Вернуться к началу
 Заголовок сообщения: Re: Выделение памяти
СообщениеДобавлено: Пн окт 17, 2016 3:37 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1069
Serge, попробую по-другому тогда объяснить.
Приложение1 резервирует всю память,
Приложение2 резервирует всю память,
..............
потом, когда приложения начнут её использовать, кто-то словит pagefault.


Вернуться к началу
 Заголовок сообщения: Re: Выделение памяти
СообщениеДобавлено: Пн окт 17, 2016 4:05 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3929
0CodErr
Словит, когда свободные страницы закончатся. Но в твоём случае вылезает не страничное нарушение, a gpf - общее нарушение защиты.


Вернуться к началу
 Заголовок сообщения: Re: Выделение памяти
СообщениеДобавлено: Пн окт 17, 2016 4:10 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1069
Serge писал(а):
Но в твоём случае вылезает не страничное нарушение, a gpf - общее нарушение защиты.
Да это, похоже, не к этой теме относится.
Цитата:
Словит, когда свободные страницы закончатся.
Хорошо, как перед использованием какой-либо страницы определить, свободна она, или её уже кто-то другой использует?
Ты говорил, что надо В цикле с шагом в 4Кб пройти по всем страницам. Это закрепит физ. страницы по адресам. Так почему бы ядру самому не закрепить страницы?


Вернуться к началу
 Заголовок сообщения: Re: Выделение памяти
СообщениеДобавлено: Пн окт 17, 2016 4:21 pm 
Не в сети

Зарегистрирован: Вт окт 04, 2016 10:05 pm
Сообщения: 44
0CodErr писал(а):
//DG, я вообще-то написал по дефолту. А если кому-то нужно сделать подмену. Например, для тестирования или отладки, то вот тогда и lib_init вызывать лишь при необходимости.
А то сейчас программы вынуждены из-за прихоти разработчиков таких библиотек таскать с собой вот это http://websvn.kolibrios.org/filedetails.php?repname=Kolibri+OS&path=%2Fprograms%2Fdll.inc А так бы GetProcAddress было бы достаточно.

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


Ококок, я воспринял "lib_init" как абстрактный вызов для инициализации данной библиотеки. А ты о конкретном lib_init, извини. еще не привык к вашему языку :D


Вернуться к началу
 Заголовок сообщения: Re: Выделение памяти
СообщениеДобавлено: Пн окт 17, 2016 4:23 pm 
Не в сети

Зарегистрирован: Вт окт 04, 2016 10:05 pm
Сообщения: 44
0CodErr писал(а):
Serge писал(а):
Но в твоём случае вылезает не страничное нарушение, a gpf - общее нарушение защиты.
Да это, похоже, не к этой теме относится.
Цитата:
Словит, когда свободные страницы закончатся.
Хорошо, как перед использованием какой-либо страницы определить, свободна она, или её уже кто-то другой использует?
Ты говорил, что надо В цикле с шагом в 4Кб пройти по всем страницам. Это закрепит физ. страницы по адресам. Так почему бы ядру самому не закрепить страницы?

В Колибри есть что-то типа MEM_RESERVE/MEM_COMMIT? Ну, вызываешь ты функцию "дай мне памяти, ядро и закрепи-ка физические сразу" или просто "зарезервируй мне диапазон".
А то если нет подкачки, резервирование без закрепления - странная штука.


Вернуться к началу
 Заголовок сообщения: Re: Выделение памяти
СообщениеДобавлено: Пн окт 17, 2016 4:45 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3929
Цитата:
Хорошо, как перед использованием какой-либо страницы определить, свободна она, или её уже кто-то другой использует?
Ты про физическую страницу ? Физический адрес которой не имеет смысла в виртуальном адресном пространстве процесс ? А что это тебе даст ?


Вернуться к началу
 Заголовок сообщения: Re: Выделение памяти
СообщениеДобавлено: Пн окт 17, 2016 4:50 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1069
Serge, нет, я про виртуальную, которую будет использовать процесс в юзермоде.


Вернуться к началу
 Заголовок сообщения: Re: Выделение памяти
СообщениеДобавлено: Пн окт 17, 2016 5:02 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3929
Страница выделяется при первом обращении к ней. И остаётся закреплённой, пока процесс её не вернёт ядру.


Вернуться к началу
 Заголовок сообщения: Re: Выделение памяти
СообщениеДобавлено: Пн окт 17, 2016 5:10 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1069
Serge, первое обращение может совершить и любой другой процесс, зарезервировавший эту память. Получается, кто первый встал — того и тапки? :lol: А остальные pagefault поймают.


Вернуться к началу
 Заголовок сообщения: Re: Выделение памяти
СообщениеДобавлено: Пн окт 17, 2016 5:15 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1186
Ну обсуждалось же уже, тему перечитай.


Вернуться к началу
 Заголовок сообщения: Re: Выделение памяти
СообщениеДобавлено: Пн окт 17, 2016 6:03 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3929
Цитата:
первое обращение может совершить и любой другой процесс, зарезервировавший эту память.
Нет, не может. У другого процесса другое адресное пространство. Общее только пространство ядра, юзерспейс индивидуальный.


Вернуться к началу
 Заголовок сообщения: Re: Выделение памяти
СообщениеДобавлено: Пн окт 17, 2016 6:08 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1069
Обсуждалось-то оно обсуждалось, а толку? Мне больше всего "понравился" 3-ий пункт алгоритма Serge viewtopic.php?f=2&t=3297&start=15#p65652
Ну разве кто-то будет использовать эту ОС для серьёзных вещей? Представьте, что от этого зависила бы работа дорогостоящего оборудования. Я уж не говорю про жизнь людей. А тут, понимаешь, Скрестить пальцы.
Так и представляю, пишет кто-то багрепорт, а Serge ему: "Пальцы скрещивали?" :)
Цитата:
Нет, не может. У другого процесса другое адресное пространство.
А я и не про это вовсе. Если 2 приложения зарезервируют каждый всю свободную память, то при обращении к ней рано или поздно у кого-то будет pagefault.


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

Часовой пояс: UTC+03:00


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

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


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

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