"На каждом уроке в системе Дениса появляется что-то новое" (с) Нижнетагильское ТВ...
В общем, на приведенном скриншоте - весь ассортимент: процесс hello запущенный из процесса ядра, дочерний процесс, запущенный из этого процесса, потоки запущенные процессом ядра, и поток запущенный процессом hello.
Создание стека потока, запускаемого из процесса выполняется в куче, расположенной в ВАП процесса-родителя. Причем каталог переключается планировщиком, нигде нет принудительных переключений
. Кучи всех процессов имеют одинаковые виртуальные адреса, но физически лежат в разных местах, как и положено
Ещё раз убедился в прогрессивности предложенной схема запуска - если правильно работает планировщик, не надо задумываться в каком контексте у тебя происходят действия
Add: Сегодня попробовал написать на асме хелловорд для своей системы. Исходник ничем не отличается от аналогичного для, скажем, Linux (разве что в линукс int 80h а не int 50h)
Код:
/*-----------------------------------------------------------------------------
/
/ Test GNU assembler program for PhantomEx
/ (c) maisvendoo, 04.09.2013
/
/----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
* Constants
*---------------------------------------------------------------------------*/
.set cur_x, 0
.set cur_y, 15
.set VIDEO_MEMORY, 0x15000000
.set SYS_EXIT, 0
.set SYS_VPRINT, 0x0D
/*-----------------------------------------------------------------------------
* Data section
*---------------------------------------------------------------------------*/
.data
msg:
.ascii "I'm test GNU assembler program!!!\n"
/*-----------------------------------------------------------------------------
* Code section
*---------------------------------------------------------------------------*/
.text
.comm vs,4,1
.global _start
_start:
/* Fill vs structure */
mov $vs, %edx /* &vs --> EDX */
mov $cur_x, %ebx /* vs.cur_x init */
mov %ebx, (%edx)
mov $cur_y, %ebx /* vs.cur_y init */
mov %ebx, 1(%edx)
mov $VIDEO_MEMORY, %ebx /* vs.vmemory init */
mov %ebx, 2(%edx)
/* Call system function SYS_VPRINT */
mov $SYS_VPRINT, %eax
mov $vs, %ebx
mov $msg, %ecx
int $0x50
/* Call system function SYS_EXIT */
mov $SYS_EXIT, %eax
int $0x50
ret
Кроме того исправил критическую ошибку в менеджере кучи ядра, всплывшую после того, как я приступил к аккуратному удалению "мусора" после загрузки/завершения процессов/потоков, так как в тестовом варианте всё работало без удаления динамики. Теперь куча вроде освобождается нормально, не генерируя после этого #PF (там было наложение блоков памяти при выделении с выравниванием по 4К)