Fix sf9 to ignore slot 0

It used to read uninitialized data at SLOT_BASE[0].

git-svn-id: svn://kolibrios.org@9964 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Ivan Baravy 2024-01-14 19:34:21 +00:00
parent 259bd4349f
commit 0572b0fbf6
3 changed files with 9 additions and 4 deletions

View File

@ -356,7 +356,7 @@ picture rb Xsize*Ysize*4 ; 32 бита
для которого: для которого:
* окно находится внизу оконного стэка, поля +4 и +6 содержат * окно находится внизу оконного стэка, поля +4 и +6 содержат
значение 1 значение 1
* имя процесса - "OS/IDLE" (дополненное пробелами) * имя процесса - "IDLE" (дополненное пробелами)
* адрес процесса в памяти равен 0, размер используемой памяти * адрес процесса в памяти равен 0, размер используемой памяти
16 Mb (0x1000000) 16 Mb (0x1000000)
* PID=1 * PID=1
@ -366,7 +366,9 @@ picture rb Xsize*Ysize*4 ; 32 бита
* время выполнения складывается из времени, уходящего на * время выполнения складывается из времени, уходящего на
собственно работу, и времени простоя в ожидании прерывания собственно работу, и времени простоя в ожидании прерывания
(которое можно получить вызовом подфункции 4 функции 18). (которое можно получить вызовом подфункции 4 функции 18).
* Начиная со слота 2, размещаются обычные приложения. * Слот 2 (и некоторые другие) соответствуют специальным потокам
операционной системы, для которых:
* имя процесса - "OS" (дополненное пробелами)
* Обычные приложения размещаются в памяти по адресу 0 * Обычные приложения размещаются в памяти по адресу 0
(константа ядра std_application_base_address). (константа ядра std_application_base_address).
Наложения не происходит, поскольку у каждого процесса своя Наложения не происходит, поскольку у каждого процесса своя

View File

@ -344,7 +344,7 @@ Remarks:
* Slot 1 corresponds to special system thread, for which: * Slot 1 corresponds to special system thread, for which:
* the window is in the bottom of the window stack, the fields * the window is in the bottom of the window stack, the fields
+4 and +6 contain value 1 +4 and +6 contain value 1
* name of the process - "OS/IDLE" (supplemented by spaces) * name of the process - "IDLE" (supplemented by spaces)
* address of the process in memory is 0, size of used memory is * address of the process in memory is 0, size of used memory is
16 Mb (0x1000000) 16 Mb (0x1000000)
* PID=1 * PID=1
@ -354,7 +354,8 @@ Remarks:
* the execution time adds of time leaving on operations itself * the execution time adds of time leaving on operations itself
and idle time in waiting for interrupt (which can be got by call and idle time in waiting for interrupt (which can be got by call
to subfunction 4 of function 18). to subfunction 4 of function 18).
* Beginning from slot 2, the normal applications are placed. * Slot 2 (and some others) correspond to system threads, for which:
* name of the thread - "OS" (supplemented by spaces)
* The normal applications are placed in memory at the address * The normal applications are placed in memory at the address
0 (kernel constant 'std_application_base_address'). 0 (kernel constant 'std_application_base_address').
There is no intersection, as each process has its own page table. There is no intersection, as each process has its own page table.

View File

@ -2432,6 +2432,8 @@ sys_cpuusage:
.no_who_am_i: .no_who_am_i:
cmp ecx, max_processes cmp ecx, max_processes
ja .nofillbuf ja .nofillbuf
test ecx, ecx ; slot 0 is empty, kernel threads start from 1
jz .nofillbuf
; +4: word: position of the window of thread in the window stack ; +4: word: position of the window of thread in the window stack
mov ax, [WIN_STACK + ecx * 2] mov ax, [WIN_STACK + ecx * 2]