Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Aug 21, 2019 7:00 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 4 posts ] 
Author Message
 Post subject: SysFn18.20:GetRAMInfo
PostPosted: Tue Nov 08, 2016 12:10 am 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
У меня вот так выводит
Spoiler: Show
Attachment:
1.PNG
1.PNG [ 6.27 KiB | Viewed 2663 times ]
Вот это MaxFreeBlock, MaxAllocatedBlock ещё не поддерживается?
Интересно, я только загрузился, а уже столько PageFaults? Такое может быть?
Вот исходник
Spoiler: Show
Code:
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.


Top
   
PostPosted: Tue Nov 08, 2016 7:35 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
0CodErr
Это наверное общий счётчик ошибок.


Top
   
PostPosted: Fri Nov 11, 2016 7:54 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1620
0CodErr wrote:
Вот это MaxFreeBlock, MaxAllocatedBlock ещё не поддерживается?
Не поддерживается и никогда не поддерживалось. Сейчас оно просто не заполняется.

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

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

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


Top
   
PostPosted: Thu Jul 05, 2018 11:35 am 
Offline

Joined: Mon Dec 05, 2016 11:04 am
Posts: 136
CleverMouse wrote:
Не поддерживается и никогда не поддерживалось. Сейчас оно просто не заполняется.
спасибо, теперь я знаю почему при вызове mcall 18, 20, buffer в буфере заполняются только 28 байт вместо 36.
http://wiki.kolibrios.org/wiki/SysFn18/ru На всякий случай буфер все равно оставлю 36 байт, вдруг будет заполняться в будущем


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 4 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 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