OSDev http://osdev.su/ |
|
Не слишком ли много системных вызовов для микроядра http://osdev.su/viewtopic.php?f=5&t=330 |
Страница 1 из 1 |
Автор: | KIV [ 08 авг 2010, 16:38 ] |
Заголовок сообщения: | Не слишком ли много системных вызовов для микроядра |
Посмортел на список системных вызовов своего микроядра. Не слишком ли их много? Код: 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 - это монтирование конкретного физического адреса. Нужно для драйверов. |
Автор: | SII [ 08 авг 2010, 18:46 ] |
Заголовок сообщения: | Re: Не слишком ли много системных вызовов для микроядра |
Микроядро -- понятие ну очень расплывчатое, а посему и объём функций, им реализуемых, тоже очень и очень расплывчат. Так что много или нет -- решать Вам, основываясь на Вашем видении системы в целом и его микроядра в частности. |
Автор: | Oxyd [ 24 сен 2011, 09:09 ] |
Заголовок сообщения: | Re: Не слишком ли много системных вызовов для микроядра |
По мне, так слишком много. Но это по мне, привыкшему к L4... У L4 всего 11 системных вызовов. Код: KernelInterface() -- позволяет получить адрес таблицы KIP ExchangeRegisters() -- заменяет или возвращает состояние регистров треда ThreadControl() -- служит для добавления или удаления тредов в адресное пространство. SystemClock() -- получает системное время. Schedule() -- используется шедулерами для задания значения кванта времени, приоритета и других параметров ThreadSwitch() -- вызывающий тред освобождает процессор и дает возможность передачи управления другому треду Unmap() -- выполняет операцию unmap для указанных flexpages (виртуальных страниц памяти) SpaceControl() -- управляет адресными пространствами IPC() -- выполняет операцию приема/передачи сообщения. ProcessorControl() -- управляет параметрами процессора(-ов). Может менять внешнюю и внутреннюю частоту процессора и его вольтаж MemoryControl() -- управляет атрибутами страниц памяти Всё остальное(включая шедулер(ы) и менеджер(ы) памяти), по идеологии честных микроядерных систем, вынесено в юзерспейс. Вобще, рекомендую почитать вот эту статью... Микроядро L4 как основа ядра ОС. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |