Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вт июл 25, 2017 9:35 am

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




Начать новую тему  Ответить на тему  [ 3 сообщения ] 
Автор Сообщение
 Заголовок сообщения: SysFn18.20:GetRAMInfo
СообщениеДобавлено: Вт ноя 08, 2016 12:10 am 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 930
У меня вот так выводит
Спойлер: Показать
Вложение:
1.PNG
1.PNG [ 6.27 КБ | 427 просмотров ]
Вот это MaxFreeBlock, MaxAllocatedBlock ещё не поддерживается?
Интересно, я только загрузился, а уже столько PageFaults? Такое может быть?
Вот исходник
Спойлер: Показать
Код:
Unit Unit1;
(* -------------------------------------------------------- *)
Interface
(* -------------------------------------------------------- *)
Type

  Dword = Cardinal;

  TRAMInfo = Packed Record
    AvailablePages:    Dword;
    FreePages:         Dword;
    PageFaults:        Dword;
    KernelHeapSize:    Dword;
    KernelHeapFree:    Dword;
    Blocks:            Dword;
    FreeBlocks:        Dword;
    MaxFreeBlock:      Dword;
    MaxAllocatedBlock: Dword;
  End;

Var
  hConsole: Pointer;
  ConsoleInit:       Procedure(WndWidth, WndHeight, ScrWidth, ScrHeight: Dword; Caption: PChar); StdCall;
  ConsoleExit:       Procedure(bCloseWindow: Cardinal); StdCall;
  printf:            Function(Const Format: PChar): Integer; CDecl VarArgs;
(* -------------------------------------------------------- *)
  Procedure Main; Forward;
  Procedure ThreadTerminate; Forward;
  Function  LoadLibrary(Path: PChar): Pointer; StdCall; Forward;
  Function  GetProcAddress(hLib: Pointer; ProcName: PChar): Pointer; StdCall; Forward;
  Function  GetRAMInfo(Var Buffer: TRAMInfo): Integer; StdCall; Forward;
(* -------------------------------------------------------- *)
Implementation
(* -------------------------------------------------------- *)
Procedure Main();
Var
   RAMInfo: TRAMInfo;
Begin

   hConsole          := LoadLibrary('/sys/lib/console.obj');
   ConsoleInit       := GetProcAddress(hConsole, 'con_init');
   ConsoleExit       := GetProcAddress(hConsole, 'con_exit');
   printf            := GetProcAddress(hConsole, 'con_printf');

   ConsoleInit($FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, 'Test');

   GetRAMInfo(RAMInfo);
   With RAMInfo Do Begin
     printf('AvailablePages    = %d'#10, AvailablePages);
     printf('FreePages         = %d'#10, FreePages);
     printf('PageFaults        = %d'#10, PageFaults);
     printf('KernelHeapSize    = %d'#10, KernelHeapSize);
     printf('KernelHeapFree    = %d'#10, KernelHeapFree);
     printf('Blocks            = %d'#10, Blocks);
     printf('FreeBlocks        = %d'#10, FreeBlocks);
     printf('MaxFreeBlock      = %d'#10, MaxFreeBlock);
     printf('MaxAllocatedBlock = %d'#10, MaxAllocatedBlock);
   End;

   ConsoleExit(0);
   ThreadTerminate;
End;
(* -------------------------------------------------------- *)
Function  GetRAMInfo(Var Buffer: TRAMInfo): Integer; StdCall;
Asm
        push   ebx
        mov    eax, 18
        mov    ebx, 20
        mov    ecx, Buffer
        int    64
        pop    ebx
End;
(* -------------------------------------------------------- *)
Procedure ThreadTerminate();
Asm
        mov    eax, $FFFFFFFF
        int    64
End;
(* -------------------------------------------------------- *)
Function GetProcAddress(hLib: Pointer; ProcName: PChar): Pointer;
Asm
        push   esi
        push   edi
        push   ebx
        mov    edx, hLib
        xor    eax, eax
        test   edx, edx
        jz     @end
        mov    edi, ProcName
        mov    ecx, $FFFFFFFF
        repne scasb
        mov    ebx, ecx
        not    ebx
@next:
        mov    esi, [edx]
        test   esi, esi
        jz     @end
        mov    ecx, ebx
        mov    edi, ProcName
        add    edx, 8
        repe cmpsb
        jne    @next
        mov    eax, [edx - 4]
@end:
        pop    ebx
        pop    edi
        pop    esi
End;
(* -------------------------------------------------------- *)
Function LoadLibrary(Path: PChar): Pointer;
Asm
        push   ebx
        mov    eax, 68
        mov    ebx, 19
        mov    ecx, Path
        int    64
        pop    ebx
End;
(* -------------------------------------------------------- *)
End.


Вернуться к началу
 Заголовок сообщения: Re: SysFn18.20:GetRAMInfo
СообщениеДобавлено: Вт ноя 08, 2016 7:35 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3927
0CodErr
Это наверное общий счётчик ошибок.


Вернуться к началу
 Заголовок сообщения: Re: SysFn18.20:GetRAMInfo
СообщениеДобавлено: Пт ноя 11, 2016 7:54 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1596
0CodErr писал(а):
Вот это MaxFreeBlock, MaxAllocatedBlock ещё не поддерживается?
Не поддерживается и никогда не поддерживалось. Сейчас оно просто не заполняется.

0CodErr писал(а):
Интересно, я только загрузился, а уже столько PageFaults? Такое может быть?

Первое обращение к памяти, выделенной через 68.12, - это #PF, который и выделяет физическую память.
В icon.ini 230 строчек. API библиотеки libini устроено так, что для чтения каждой из этих строчек каждый раз заново открывается файл - выделение+обращение к памяти - запрашивается его размер, причём буфер для 70.5 зачем-то выделяется отдельно - выделение+обращение к памяти - и потом собственно читается содержимое ini-файла в ещё один буфер - ещё выделение+обращение к памяти. Повторить для всех ini-файлов, читающихся при загрузке, - вот половина #PF со скриншота.
Половина оставшегося - icons32.png 32*2656*32bpp, который читается двумя разными программами - icon и docky - и при загрузке которого сначала распаковываются данные в том виде, в котором они хранятся в png, а потом они перегоняются в набор пикселей.
Ну и остальное набирается по мелочи.

_________________
Сделаем мир лучше!


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 3 сообщения ] 

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


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

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


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

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