OberonCore
https://forum.oberoncore.ru/

#012 Linux Kernel: механизм выделения памяти
https://forum.oberoncore.ru/viewtopic.php?f=134&t=6490
Страница 1 из 1

Автор:  Евгений Темиргалеев [ Воскресенье, 24 Ноябрь, 2019 22:40 ]
Заголовок сообщения:  #012 Linux Kernel: механизм выделения памяти

По каким критериям выбирался адрес 65536, почему тут не 0? Значение 0 означает, что система сама подбирает начальный адрес, так вызывается HeapAlloc в AllocModMem. Ненулевое значение означает просьбу выделить страницы с указанного адреса при возможности, при этом предыдущая разметка на этих страницах отменяется (https://www.gnu.org/software/libc/manua ... 002fO.html).
Код:
   PROCEDURE AllocHeapMem (size: INTEGER; VAR c: Cluster);
...
      IF size < N THEN
         adr := HeapAlloc(65536, N, prot)
      END;
      IF adr = 0 THEN
         adr := HeapAlloc(65536, size, prot);
...

   PROCEDURE HeapAlloc (adr: Libc.PtrVoid; size: INTEGER; prot: SET): Libc.PtrVoid;
      VAR x: Libc.PtrVoid;
   BEGIN
      x := Libc.mmap(adr, size, prot, Libc.MAP_PRIVATE + Libc.MAP_ANON, zerofd, 0);
      IF x = Libc.MAP_FAILED THEN
         x := Libc.NULL
      ELSE
         ASSERT(size MOD 4 = 0, 100);
         Erase(x, size DIV 4)
      END;
      RETURN x
   END HeapAlloc;

Автор:  Alexander Shiryaev [ Понедельник, 25 Ноябрь, 2019 00:42 ]
Заголовок сообщения:  Re: Linux Kernel: механизм выделения памяти

Если указать 0, то BlackBox может не работать. ОС тогда выделяет память с адресами >= 80000000H (т. е. с отрацательными значениями INTEGER), и BlackBox наверное почему-то с такими адресами работает неправильно. Можно запустить какой-нибудь тест на работу сборщика мусора, например, и проверить. Поведение одинаковое и в Linux, и в OpenBSD.

Windows начинает выдавать память с адресами >0

Автор:  Alexander Shiryaev [ Понедельник, 25 Ноябрь, 2019 00:50 ]
Заголовок сообщения:  Re: Linux Kernel: механизм выделения памяти

В AllocModMem 0, потому что с теми областями проблем нет, они могут быть любыми адресами.

Автор:  Евгений Темиргалеев [ Четверг, 28 Ноябрь, 2019 11:59 ]
Заголовок сообщения:  Re: Linux Kernel: механизм выделения памяти

Вопрос подтормаживания пока сняли увеличением размера кластера с 256 кБ до 32 МБ.

Автор:  Alexander Shiryaev [ Пятница, 29 Ноябрь, 2019 17:04 ]
Заголовок сообщения:  Re: Linux Kernel: механизм выделения памяти

Иван уже недавно увеличивал N в AllocHeapMem в ядре для Linux в 4 раза (с 65536 до 65536 * 4)

Автор:  Иван Денисов [ Суббота, 30 Ноябрь, 2019 06:06 ]
Заголовок сообщения:  Re: Linux Kernel: механизм выделения памяти

32 Мб — это прямо жестко. Но для десктопного приложений, где память не жалко, вполне нормальное решение.
Мы не стали делать больше 256 кб, чтобы сохранить "вау-эффект", когда ББ показывает при запуске, что потребляет меньше МБ памяти.
Также для серверных приложений, которые запускаться баллансировщиком могут в больших количествах, не стоит 32 Мб делать...

Автор:  Alexander Shiryaev [ Суббота, 30 Ноябрь, 2019 11:50 ]
Заголовок сообщения:  Re: Linux Kernel: механизм выделения памяти

Иван Денисов писал(а):
...Но для десктопного приложений, где память не жалко, вполне нормальное решение...

Вложение:
Снимок экрана_2019-11-30_11-42-39.png
Снимок экрана_2019-11-30_11-42-39.png [ 71.26 КБ | Просмотров: 2760 ]

Автор:  Иван Денисов [ Суббота, 30 Ноябрь, 2019 13:03 ]
Заголовок сообщения:  Re: Linux Kernel: механизм выделения памяти

Вот 700 кб, это отлично. Так что пусть люди под свою задачу увеличивают. 256кб по-умолчанию — вполне нормально.

Автор:  Борис Рюмшин [ Суббота, 30 Ноябрь, 2019 18:12 ]
Заголовок сообщения:  Re: Linux Kernel: механизм выделения памяти

Иван Денисов писал(а):
Вот 700 кб, это отлично. Так что пусть люди под свою задачу увеличивают. 256кб по-умолчанию — вполне нормально.

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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/