Посмортел на список системных вызовов своего микроядра. Не слишком ли их много?
Код:
SYSCALL_GET_VERSION = 0
SYSCALL_VIRTUAL_ALLOC_PAGES = 1
SYSCALL_VIRTUAL_GET_PAGES = 2
SYSCALL_VIRTUAL_FREE_PAGES = 3
SYSCALL_HEAP_ALLOC_PAGES = 4
SYSCALL_HEAP_GET_PAGES = 5
SYSCALL_HEAP_FREE_PAGES = 6
SYSCALL_GET_PROCESS_HEAP = 7
SYSCALL_GET_CURRENT_PROCESS = 8
SYSCALL_GET_CURRENT_THREAD = 9
SYSCALL_GET_SYSTEM_PROCESS = 10
SYSCALL_GET_SYSTEM_THREAD = 11
SYSCALL_CREATE_PROCESS_FROM_RAW_BUFFER = 12
SYSCALL_CREATE_THREAD = 13
SYSCALL_TERMINATE_PROCESS = 14
SYSCALL_TERMINATE_THREAD = 15
SYSCALL_EXIT_PROCESS = 16
SYSCALL_EXIT_THREAD = 17
SYSCALL_GET_PROCESS_COUNT = 18
SYSCALL_GET_THREAD_COUNT = 19
SYSCALL_GET_PROCESS_THREAD_COUNT = 20
SYSCALL_GET_PHIS_MEMORY_SIZE = 21
SYSCALL_GET_FREE_PHIS_MEMORY_SIZE = 22
SYSCALL_GET_BOOT_DISK_ID = 23
SYSCALL_GET_THREAD_PROCESS = 24
SYSCALL_GET_NEXT_KERNEL_OBJECT = 25
SYSCALL_GET_PROCESS_NAME = 26
SYSCALL_RENAME_CURRENT_PROCESS = 27
SYSCALL_READ_PHIS_MEMORY_QWORD = 28
SYSCALL_HEAP_ALLOC_MEMORY = 29
SYSCALL_HEAP_FREE_MEMORY = 30
SYSCALL_SET_ENV_VARIABLE = 31
SYSCALL_GET_ENV_VARIABLE = 32
SYSCALL_UNSET_ENV_VARIABLE = 33
SYSCALL_CREATE_SHARED_MEMORY_REGION = 34
SYSCALL_LOCK_SHARED_MEMORY_REGION = 35
SYSCALL_UNLOCK_SHARED_MEMORY_REGION = 36
SYSCALL_CREATE_MESSAGE_QUEUE = 37
SYSCALL_FREE_MESSAGE_QUEUE = 38
SYSCALL_DESTROY_MESSAGE_QEUUE = 39
SYSCALL_SEND_MESSAGE = 40
SYSCALL_GET_MESSAGE = 41
SYSCALL_REGISTER_IRQ_HANDLER = 42
SYSCALL_UNREGISTER_IRQ_HANDLER = 43
SYSCALL_GET_IO_PORTS = 44
SYSCALL_FREE_IO_PORTS = 45
SYSCALL_SWITCH_TO_NEXT_THREAD = 46
Тут ещё не хватает вызовов для получения информации о списке переменных окружения и обработчиков IRQ, а также возможности обработки исключений (типа деления на ноль и пр.)
HEAP_ALLOC_MEMORY/HEAP_FREE_MEMORY - это работа с кучей из которой можно забирать блоки произвольной длины (на самом деле кратные 32 байтам - в функциях производится округление в большую сторону).
HEAP_ALLOC_PAGES/HEAP_FREE_PAGES - работа с кучей из которой можно забирать целые страницы.
VIRTUAL_ALLOC_PAGES - монтирование свободных физических страниц не к адресу из кучи, а к конкретному адресу.
всё что про память и с GET, а не ALLOC - это монтирование конкретного физического адреса. Нужно для драйверов.