Board.KolibriOS.org

Official KolibriOS board
It is currently Sat Aug 17, 2019 4:08 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 77 posts ]  Go to page Previous 1 2 3 4 5 6 Next
Author Message
PostPosted: Fri Jun 17, 2016 5:04 pm 
Offline
User avatar

Joined: Mon Nov 19, 2012 5:22 pm
Posts: 455
А если f18.16(получить размер свободной оперативной памяти)?

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


Top
   
PostPosted: Fri Jun 17, 2016 5:40 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Да, 18.16 единственный вариант.


Top
   
PostPosted: Fri Jun 17, 2016 7:38 pm 
Offline

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


Top
   
PostPosted: Fri Jun 17, 2016 9:47 pm 
Offline
User avatar

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

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


Top
   
PostPosted: Fri Jun 17, 2016 9:55 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quote:
Ну и не забываем, что система многозадачная — пока наш процесс делал запрос, другой процесс уже взял и использует память.

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


Top
   
PostPosted: Mon Jun 20, 2016 3:31 am 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1150
Выделил соответствующие сообщения в отдельную тему.

_________________
я лишь учусь


Top
   
PostPosted: Sun Oct 16, 2016 3:50 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Думаю, сюда относится.
Вот код
Spoiler: Show
Code:
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, похоже, вернулся указатель на память.
Spoiler: Show
Image


Top
   
PostPosted: Mon Oct 17, 2016 12:50 am 
Offline

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


Top
   
PostPosted: Mon Oct 17, 2016 1:39 am 
Offline

Joined: Tue Mar 08, 2016 11:00 pm
Posts: 436
Я видел programs\system\os
http://websvn.kolibrios.org/listing.php ... em%2Fos%2F

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


Top
   
PostPosted: Mon Oct 17, 2016 2:05 am 
Offline

Joined: Tue Oct 04, 2016 10:05 pm
Posts: 44
Siemargl wrote:
Я видел programs\system\os
http://websvn.kolibrios.org/listing.php ... em%2Fos%2F

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

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


Top
   
PostPosted: Mon Oct 17, 2016 2:09 am 
Offline

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


Top
   
PostPosted: Mon Oct 17, 2016 2:39 am 
Offline
Kernel Developer

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


Top
   
PostPosted: Mon Oct 17, 2016 1:48 pm 
Offline

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


Top
   
PostPosted: Mon Oct 17, 2016 2:38 pm 
Offline

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

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


Top
   
PostPosted: Mon Oct 17, 2016 2:53 pm 
Offline

Joined: Tue Mar 08, 2016 11:00 pm
Posts: 436
В gcc действительно свой субаллокатор, в tcc я делать пока не стал - используется системный.

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 77 posts ]  Go to page Previous 1 2 3 4 5 6 Next

All times are UTC+03:00


Who is online

Users browsing this forum: Google [Bot] and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited