From 9bc836e801590b6a7aa32859e979ee4f4253d3b4 Mon Sep 17 00:00:00 2001 From: Aren Elchinyan Date: Sat, 21 Oct 2023 21:33:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=81=D0=B0=D0=B9=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API.md | 37 +++++++++++++------------- HOMEWORK.md | 16 +++++------ index.md | 76 +++++++++++++++++++++++++++++++++++++++-------------- 3 files changed, 83 insertions(+), 46 deletions(-) diff --git a/API.md b/API.md index 7c0efe5..a5c1aa1 100644 --- a/API.md +++ b/API.md @@ -1,8 +1,8 @@ # Системные вызовы -## mem::alloc(size_t size) +## mem_alloc(size_t size) -Выделение блока памяти размером `size`. +Выделение блока памяти размером `size`. Вовзращает адрес на блок памяти или 0 в случае ошибки. Коды ошибок: @@ -10,26 +10,25 @@ - `-1 не хватает ОЗУ`; - `-2 неправильный размер блока`. -## mem::free(uintptr_t mem) +## mem_free(uintptr_t mem) -Освобождение блока памяти `mem`. +Освобождение блока памяти `mem`. Вовзращает 0 в случае успеха или -1 в случае ошибки. Коды ошибок: -- `-1 блок не найден`. +- `-1 блок не найден`. +## sys_alloc_framebuffer() -## sys::alloc_framebuffer() - -Выделяет память под буфер кадра для отображения графического интерфейса. -Возвращает указатель на структуру `framebuffer_t` или 0, если произошла ошибка. +Выделяет память под буфер кадра для отображения графического интерфейса. +Возвращает указатель на структуру `framebuffer_t` или 0, если произошла ошибка. Коды ошибок: - `-1 не удалось выделить память для буфера кадра`. -## sys::free_framebuffer(framebuffer_t *frame) +## sys_free_framebuffer(framebuffer_t *frame) Освобождает ранее выделенную память `frame` для буфера кадра. Возвращает 0 в случае успеха или -1, если произошла ошибка. @@ -37,23 +36,23 @@ - `-1 ошибка при освобождении памяти для буфера кадра`. -## sys::exit(int code) +## sys_exit(int code) Завершает выполнение текущего потока с кодом `code`. -## sys::get_error() +## sys_get_error() Получает код ошибки последней операции. Возвращает целочисленное значение, представляющее код ошибки. -## sys::get_info() +## sys_get_info() Получает информацию о текущей системе. Возвращает структуру `sys_info_t` содержащую информацию о системе. -## sys::get_module(uid_t module_id) +## sys_get_module(uid_t module_id) Получает информацию о модуле `module_id`. Возвращает структуру, содержащую информацию о модуле. -## sys::new_thread(func_t func) +## sys_new_thread(func_t func) Создает новый поток выполнения для функции `func`. Возвращает идентификатор созданного потока или 0 в случае ошибки. @@ -61,7 +60,7 @@ - `-1 ошибка при создании потока`. -## sys::delete_thread(uid_t thread_id) +## sys_delete_thread(uid_t thread_id) Удаляет указанный поток выполнения `thread_id`. Возвращает 0 в случае успеха или -1 в случае ошибки. @@ -70,15 +69,15 @@ - `-1 поток не найден`. \ No newline at end of file +--> diff --git a/HOMEWORK.md b/HOMEWORK.md index 2dc3cfa..d116fd4 100644 --- a/HOMEWORK.md +++ b/HOMEWORK.md @@ -2,37 +2,37 @@ ## Ковальски, анализ -Напишите программу, которая использует функцию `sys::get_info` для получения информации о текущей системе. +Напишите программу, которая использует функцию `sys_get_info` для получения информации о текущей системе. Выведите полученную информацию в удобочитаемом формате. ## Что мы можем? -Напишите программу, которая использует функцию `sys::get_module` для получения информации о произвольном модуле. +Напишите программу, которая использует функцию `sys_get_module` для получения информации о произвольном модуле. Выведите полученную информацию на экран. ## От 1 до миллиона -Напишите программу, которая использует функцию `mem::alloc` для выделения блока памяти размером 4000000 байт. +Напишите программу, которая использует функцию `mem_alloc` для выделения блока памяти размером 4000000 байт. Заполните этот блок памяти числами от 1 до 1 000 000 и найдите сумму всех чисел. -Используйте функцию `mem::free` для освобождения блока памяти. Проверьте, что блок памяти успешно освобожден. +Используйте функцию `mem_free` для освобождения блока памяти. Проверьте, что блок памяти успешно освобожден. ## Улыбочку -Напишите программу, которая использует функцию `sys::alloc_framebuffer` для выделения памяти под буфер кадра. +Напишите программу, которая использует функцию `sys_alloc_framebuffer` для выделения памяти под буфер кадра. Затем нарисуйте смайлик заполняя буффер. -Используйте функцию `sys::free_framebuffer` для освобождения памяти. +Используйте функцию `sys_free_framebuffer` для освобождения памяти. ## Многопоточность -Напишите программу, которая использует функцию `sys::new_thread` для создания нового потока выполнения. +Напишите программу, которая использует функцию `sys_new_thread` для создания нового потока выполнения. -В этом потоке выполнения реализуйте алгоритм сортировки массива чисел. Выведите отсортированный массив на экран. Используйте функцию `sys::exit` для завершения выполнения потока или функцию `sys::delete_thread` для удаления потока выполнения. +В этом потоке выполнения реализуйте алгоритм сортировки массива чисел. Выведите отсортированный массив на экран. Используйте функцию `sys_exit` для завершения выполнения потока или функцию `sys_delete_thread` для удаления потока выполнения. ## Матрица diff --git a/index.md b/index.md index f13f4e4..1c81ea9 100644 --- a/index.md +++ b/index.md @@ -3,28 +3,36 @@ [![CI сборка](https://github.com/0Nera/BMOSP/actions/workflows/build.yml/badge.svg?branch=master)](https://github.com/0Nera/BMOSP/actions/workflows/build.yml) [![Github pages сайт](https://github.com/0Nera/BMOSP/actions/workflows/pages/pages-build-deployment/badge.svg?branch=pages)](https://github.com/0Nera/BMOSP/actions/workflows/pages/pages-build-deployment) -БМПОС - Базовая Модульная Платформа Операционных Систем для платформы x86_64 (BIOS/UEFI). Это отечественное программное обеспечение, созданное при поддержке Синапс ОС на языке программирования C++. +БМПОС - Базовая Модульная Платформа Операционных Систем для платформы x86_64 (BIOS/UEFI). Это отечественное программное обеспечение, созданное при поддержке Синапс ОС на языке программирования C. -## Реализовано +![Скриншот вывода ядра в эмуляторе Qemu](https://0nera.github.io/BMOSP/assets/0_0.1.231.png) + +* [API.md](/API) +* [HOMEWORK.md](/HOMEWORK) +* [KERNEL.md](/KERNEL) +* [STD.md](/STD) + +## Реализовано Ядро: + - [x] Менеджер памяти - [x] Менеджер видеопамяти - [ ] Менеджер потоков - [x] Загрузчик модулей - Модули: + - [ ] Оболочка ввода-вывода - Драйвера: -- [ ] COM + - [ ] PS/2 (Клавиатура) - [ ] SATA (ACHI) (Чтение) - [ ] EXT2 Общая работа: + - [ ] Ядро - [ ] Модули - [ ] Драйвера @@ -36,6 +44,7 @@ ### Второстепенные задачи Модули: + - [ ] Отладчик - [ ] JavaScript - [ ] Lua @@ -43,6 +52,7 @@ - [ ] Криптограф Драйвера: + - [ ] PS/2 (Мышь) - [ ] SATA (ACHI) (Запись) - [ ] ISOFS (ISO 9660) @@ -52,6 +62,35 @@ - ООО "НПО ТЕ-ОН" +## Сборка из исходного кода + +### Ubuntu 18.04+ + +```bash +sudo apt install clang-format python3 git qemu-system-x86 +git clone https://git.synapseos.ru/Aren/BMOSP.git +cd BMOSP/ +chmod +x build.sh +./build.sh +``` + +## Запук + +### Qemu + +Стандартная конфигурация + +```bash +qemu-system-x86_64 -cpu max -m 1G -smp 1 -bios ovmf/OVMF.fd -hda bmosp.hdd -name "БМПОС" +``` + +Или + +```bash +chmod +x run.sh +./run.sh +``` + ## Предупреждение Использовать на свой страх и риск. Система расчитана на работу в эмулируемой среде Qemu под процессоры x86_64. @@ -59,23 +98,22 @@ ## Ресурсы -- https://vk.com/BMOSP Страница вконтакте -- https://mseos.ru Вебсайт -- https://0nera.github.io/BMOSP Зеркало вебсайта -- https://wiki.synapseos.ru/index.php?title=БМПОС Страница на вики +- Страница вконтакте +- Вебсайт +- Страница на вики ### Зеркала -- https://git.synapseos.ru/Aren/BMOSP - доверенный сервер(главный репозиторий) -- https://github.com/0Nera/BMOSP - зеркало -- https://tvoygit.ru/0Nera/BMOSP - зеркало -- https://hub.mos.ru/synapseos/BMOSP - неактивное зеркало +- - доверенный сервер(главный репозиторий) +- - зеркало +- - зеркало +- - неактивное зеркало ### Использованные ресурсы -- https://github.com/limine-bootloader/limine (BSD 2-Clause) -- https://github.com/nothings/stb (MIT, Общественное достояние) -- https://en.wikipedia.org/wiki/CPUID -- https://github.com/klange/toaruos (NCSA) -- https://wiki.osdev.org/Model_Specific_Registers -- https://sandpile.org/x86/msr.htm +- (BSD 2-Clause) +- (MIT, Общественное достояние) +- +- (NCSA) +- +-