Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Ср май 24, 2017 3:17 am

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




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

Зарегистрирован: Пн ноя 19, 2012 5:22 pm
Сообщения: 429
А если f18.16(получить размер свободной оперативной памяти)?

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!


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

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Да, 18.16 единственный вариант.


Вернуться к началу
 Заголовок сообщения: Re: Помогите новичку
СообщениеДобавлено: Пт июн 17, 2016 7:38 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 911
Serge писал(а):
Да, 18.16 единственный вариант.
Я не очень понимаю, как это должно помочь. Конкретно в приведённом мной примере на скриншоте показано, что свободно 206 из 255 мегабайт. Ну и не забываем, что система многозадачная — пока наш процесс делал запрос, другой процесс уже взял и использует память.
А лучше привести пример кода, конечно :)


Вернуться к началу
 Заголовок сообщения: Re: Помогите новичку
СообщениеДобавлено: Пт июн 17, 2016 9:47 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн ноя 19, 2012 5:22 pm
Сообщения: 429
Ну вот значит пусть прога больше 206 метров не выделяет. Хотя многозадачность - да, может сделать подставу. Значит подойдём с другой стороны : f68,24 - установить обработчик исключений. Правда я ни разу не пользовался, так что с примером кода не помогу, пробуй сам.

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!


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

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

А других вариантов нет.
Алгоритм такой:
1. Узнать объём свободной физ. памяти.
2. Зарезервировать память при помощи 68.12
3. Скрестить пальцы
4. В цикле с шагом в 4Кб пройти по всем страницам. Это закрепит физ. страницы по адресам.


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

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1046
Выделил соответствующие сообщения в отдельную тему.

_________________
я лишь учусь


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

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 911
Думаю, сюда относится.
Вот код
Спойлер: Показать
Код:
ORG 0
BITS 32
; -------------------------- ;
STACK_SIZE equ 256
; -------------------------- ;
MEMORY_ALLOC_SIZE equ 1024 * 1024 * 1024
; -------------------------- ;
        db     'MENUET01'
        dd     1
        dd     START
        dd     END
        dd     END + STACK_SIZE
        dd     END + STACK_SIZE
        dd     0
        dd     0
; -------------------------- ;
START:
; heap create:
        mov    eax, 68
        mov    ebx, 11
        int    64
; heap allocate       
        mov    eax, 68
        mov    ebx, 12
        mov    ecx, MEMORY_ALLOC_SIZE
        int    64               
; thread terminate
        mov    eax, -1
        int    64       
END:
Запустил под отладчиком. Почему-то exeption(ещё до запроса памяти, судя по debugger-у), но на BOARD — ничего. Как видно, памяти(Free memory) меньше, чем запрошено, но в eax, похоже, вернулся указатель на память.
Спойлер: Показать
Изображение


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

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


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

Зарегистрирован: Вт мар 08, 2016 11:00 pm
Сообщения: 233
Я видел programs\system\os
http://websvn.kolibrios.org/listing.php ... em%2Fos%2F

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


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

Зарегистрирован: Вт окт 04, 2016 10:05 pm
Сообщения: 44
Siemargl писал(а):
Я видел programs\system\os
http://websvn.kolibrios.org/listing.php ... em%2Fos%2F

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

Ну, это не проблема, интерфейс-то примерно одинаковый. Библиотек полно, интересно, чем уже тут пользуются.


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

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 911
Siemargl, а и при этом некоторые библиотеки хотят в lib_init указатели на alloc\free\realloc.
Проще, наверное было эти функции по дефолту в саму библиотеку впилить. А lib_init вызывать лишь при необходимости.


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

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
0CodErr
У меня не получилось воспроизвести ошибку. Судя по отладчику 68.12 отработала успешно, зарезервировав память начиная 0х2000. Как ты тестировал, в какой конфигурации ?


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

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 911
Serge, да, странное дело. Тестировал пока в эмуляторах. Exeption у меня появляется только в VirtualBox, а в Qemu и Bochs — всё нормально. Причём, это и с другими программами тоже так. Например, calc под отладчиком так же ведёт себя. Может ещё как-то с этим viewtopic.php?f=36&t=3395#p66407 связано? Там тоже сначала процесс становится "suspended", а потом продолжает работу. Надо на реальном железе попробовать тогда ещё.
Цитата:
Судя по отладчику 68.12 отработала успешно
Там в левом нижнем углу написано Free memory(KB): 203716, а это меньше, чем запрошено(203716 < 1048576).


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

Зарегистрирован: Вт окт 04, 2016 10:05 pm
Сообщения: 44
0CodErr писал(а):
Siemargl, а и при этом некоторые библиотеки хотят в lib_init указатели на alloc\free\realloc.
Проще, наверное было эти функции по дефолту в саму библиотеку впилить. А lib_init вызывать лишь при необходимости.

Это наоборот замечательно, что не захардкожено напрямую, потому что можно сделать подмену. Например, для тестирования или отладки. Или если потребуется что-то отфильтровать и перенаправить в другой вызов и т.д.
Из переносимых проектов вижу FreshLib с отдельным менеджером памяти второго уровня. Но ведь чем-то пользуются ваши программы(кроме programs\system\os)? libc же есть, емнип.


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

Зарегистрирован: Вт мар 08, 2016 11:00 pm
Сообщения: 233
В gcc действительно свой субаллокатор, в tcc я делать пока не стал - используется системный.

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


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

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


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

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


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

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