Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Feb 25, 2021 7:33 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 1348 posts ]  Go to page Previous 173 74 75 76 7790 Next
Author Message
PostPosted: Wed Mar 16, 2016 3:16 pm 
Offline
User avatar

Joined: Sat Sep 27, 2014 2:59 pm
Posts: 102
Serge wrote:
YasonДва потока tinypad используют одну область памяти для командной строки при вызове fasm и в качестве буфера для сохранения информации о процессе fn.9 Синхронизация доступа отсутствует. Результат немного предсказуем.
Ясно.

Serge
В свежей н.с., всё работает штатно. Спасибо за исправления. :D :D :D


Top
   
PostPosted: Sun Mar 20, 2016 11:11 am 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1177
После ревизии 6333 не запускается по ассоциации zSea.

Это может быть следствие того, что ФМ не меняют рабочую директорию перед запуском программы?

_________________
я лишь учусь


Top
   
PostPosted: Sun Mar 20, 2016 11:52 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
punk_joker
Нет, это я поменял алгоритм загрузки приложения. Буду разбираться.


Top
   
PostPosted: Thu Mar 24, 2016 8:22 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 892
Есть подозрение что сист. ф. 68.20 - перераспределить блок памяти в случае не возможности выделить новую память возвращает в eax не 0 как написано в документации, а значение из указателя edx при входе в функцию.
Пробовал в virtualbox создавать виртуальную систему с памятью 128 Мб. Запускал в ней программу animage, которая выделяла 210 Мб (5 буферов под фотографию 14 Мп), и программа вела себя нормально не выдавая никаких сообщений о нехватке памяти. Потом при попытках редактирования изображения сразу закрывалась, очевидно лезла на нехватающую память.


Top
   
PostPosted: Fri Mar 25, 2016 3:37 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
IgorA
Там скорее другое. Память выделяется не сразу, а по мере обращения к страницам, в обработчике страничных ошибок. Когда обработчик не может выделить новую страницу он прибивает процесс.


Top
   
PostPosted: Fri Mar 25, 2016 4:57 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1278
Так может при выделении адресов нужно хотя-бы проверять количество свободной памяти?

IgorA
А 5 буферов выделяются одним блоком или по отдельности?


Top
   
PostPosted: Sat Mar 26, 2016 2:36 pm 
Offline
User avatar

Joined: Sat Sep 27, 2014 2:59 pm
Posts: 102
r6371.

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

Если в функции, установить бит увеличения шрифта, с любым множителем, кроме нулевого (например: 0x11ff0000), то, если после этого, попытаться передвинуть окно, больше 1 раза, то окно, намертво виснет. Или может, я чего напутал? Доска отладки, ничего не показывает.
Code:
mcall 47, 0x00080100, 0x11223344, <10, 70>, 0x11ff0000
Прикрепил тестовый код.


Attachments:
PrintN.7z [5.97 KiB]
Downloaded 188 times
Top
   
PostPosted: Sat Mar 26, 2016 3:25 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 892
Pathoswithin wrote:
Так может при выделении адресов нужно хотя-бы проверять количество свободной памяти?

функцией 18.16 ? Надо попробовать.
Pathoswithin wrote:
А 5 буферов выделяются одним блоком или по отдельности?

блок один, а для разделения просто ставятся указатели


Top
   
PostPosted: Sun Mar 27, 2016 12:12 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1278
Я имел в виду, что если может возникнуть такая проблема, то может в ядре нужно проверять количество свободной памяти перед выделением адресов...

Yason, обрати внимание, что в функции 47 младший бит увеличения шрифта соответствует параметру "неперемещаемое окно" в функции 0.


Top
   
PostPosted: Mon Mar 28, 2016 2:02 am 
Offline
User avatar

Joined: Sat Sep 27, 2014 2:59 pm
Posts: 102
Quote:
Yason, обрати внимание, что в функции 47 младший бит увеличения шрифта соответствует параметру "неперемещаемое окно" в функции 0.
Ясно. Не обратил внимание на то, что в примере из дистра, в вызове сис. функции 0, макросом mcall, нет принудительной очистки регистра esi.

Спасибо, за подсказку! :)


Top
   
PostPosted: Fri Jun 10, 2016 4:51 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1498
Это уже не актуально http://board.kolibrios.org/viewtopic.php?f=5&t=1602&start=990#p57305
Serge пофиксил #6318


Top
   
PostPosted: Mon Oct 31, 2016 2:01 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5395
PDF ассоциаций в ФМ не было.
Fplay ассоциации в KFM и KFAR прописаны были не правильно.

Fixed.

_________________
Звиздеть не мешки ворочать


Top
   
PostPosted: Thu Nov 10, 2016 7:14 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5395
Code:
======================================================================
========== Функция 68, подфункция 12 - выделить блок памяти. =========
======================================================================
Параметры:
  * eax = 68 - номер функции
  * ebx = 12 - номер подфункции
  * ecx = требуемый размер в байтах
Возвращаемое значение:
  * eax = указатель на выделенный блок
Замечания:
  * Предварительно следует инициализировать кучу процесса вызовом
    подфункции 11.
  * Функция выделяет целое число страниц (4 Кб) так, что фактический
    размер выделенного блока больше или равен запрошенному.
 
---------------------- Константы для регистров: ----------------------
  eax - SF_SYS_MISC (68)
  ebx - SSF_MEM_ALLOC (12)

Что возвращается в случае неудачи?
0, -1, ... ?

_________________
Звиздеть не мешки ворочать


Top
   
PostPosted: Thu Nov 10, 2016 7:50 pm 
Offline

Joined: Tue Jun 24, 2008 11:12 pm
Posts: 64
Очевидно, что NULL, указатель всё-таки. Вот выход из user_alloc:
Code:
.m_exit:
        mov     ecx, [current_process]
        lea     ecx, [ecx+PROC.heap_lock]
        call    mutex_unlock
 
        xor     eax, eax
        pop     edi
        pop     esi
        pop     ebx
        ret


Top
   
PostPosted: Thu Nov 10, 2016 8:33 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5395
Я написал программу, она пытается сделать malloc очень большого размера и на выходе я ожидаю нолу, а получаю какое-то число.
Ядерщики, посмотрите, пожалуйста.


Attachments:
malloc_fail.zip [1.52 KiB]
Downloaded 81 times

_________________
Звиздеть не мешки ворочать
Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1348 posts ]  Go to page Previous 173 74 75 76 7790 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


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