Обновление сайта

This commit is contained in:
Aren Elchinyan 2023-10-21 21:33:09 +03:00
parent 839bc8459f
commit 9bc836e801
3 changed files with 83 additions and 46 deletions

25
API.md
View File

@ -1,6 +1,6 @@
# Системные вызовы # Системные вызовы
## mem::alloc(size_t size) ## mem_alloc(size_t size)
Выделение блока памяти размером `size`. Выделение блока памяти размером `size`.
Вовзращает адрес на блок памяти или 0 в случае ошибки. Вовзращает адрес на блок памяти или 0 в случае ошибки.
@ -10,7 +10,7 @@
- `-1 не хватает ОЗУ`; - `-1 не хватает ОЗУ`;
- `-2 неправильный размер блока`. - `-2 неправильный размер блока`.
## mem::free(uintptr_t mem) ## mem_free(uintptr_t mem)
Освобождение блока памяти `mem`. Освобождение блока памяти `mem`.
Вовзращает 0 в случае успеха или -1 в случае ошибки. Вовзращает 0 в случае успеха или -1 в случае ошибки.
@ -19,8 +19,7 @@
- `-1 блок не найден`. - `-1 блок не найден`.
## sys_alloc_framebuffer()
## sys::alloc_framebuffer()
Выделяет память под буфер кадра для отображения графического интерфейса. Выделяет память под буфер кадра для отображения графического интерфейса.
Возвращает указатель на структуру `framebuffer_t` или 0, если произошла ошибка. Возвращает указатель на структуру `framebuffer_t` или 0, если произошла ошибка.
@ -29,7 +28,7 @@
- `-1 не удалось выделить память для буфера кадра`. - `-1 не удалось выделить память для буфера кадра`.
## sys::free_framebuffer(framebuffer_t *frame) ## sys_free_framebuffer(framebuffer_t *frame)
Освобождает ранее выделенную память `frame` для буфера кадра. Возвращает 0 в случае успеха или -1, если произошла ошибка. Освобождает ранее выделенную память `frame` для буфера кадра. Возвращает 0 в случае успеха или -1, если произошла ошибка.
@ -37,23 +36,23 @@
- `-1 ошибка при освобождении памяти для буфера кадра`. - `-1 ошибка при освобождении памяти для буфера кадра`.
## sys::exit(int code) ## sys_exit(int code)
Завершает выполнение текущего потока с кодом `code`. Завершает выполнение текущего потока с кодом `code`.
## sys::get_error() ## sys_get_error()
Получает код ошибки последней операции. Возвращает целочисленное значение, представляющее код ошибки. Получает код ошибки последней операции. Возвращает целочисленное значение, представляющее код ошибки.
## sys::get_info() ## sys_get_info()
Получает информацию о текущей системе. Возвращает структуру `sys_info_t` содержащую информацию о системе. Получает информацию о текущей системе. Возвращает структуру `sys_info_t` содержащую информацию о системе.
## sys::get_module(uid_t module_id) ## sys_get_module(uid_t module_id)
Получает информацию о модуле `module_id`. Возвращает структуру, содержащую информацию о модуле. Получает информацию о модуле `module_id`. Возвращает структуру, содержащую информацию о модуле.
## sys::new_thread(func_t func) ## sys_new_thread(func_t func)
Создает новый поток выполнения для функции `func`. Возвращает идентификатор созданного потока или 0 в случае ошибки. Создает новый поток выполнения для функции `func`. Возвращает идентификатор созданного потока или 0 в случае ошибки.
@ -61,7 +60,7 @@
- `-1 ошибка при создании потока`. - `-1 ошибка при создании потока`.
## sys::delete_thread(uid_t thread_id) ## sys_delete_thread(uid_t thread_id)
Удаляет указанный поток выполнения `thread_id`. Возвращает 0 в случае успеха или -1 в случае ошибки. Удаляет указанный поток выполнения `thread_id`. Возвращает 0 в случае успеха или -1 в случае ошибки.
@ -70,11 +69,11 @@
- `-1 поток не найден`. - `-1 поток не найден`.
<!-- <!--
## sys::get_time() ## sys_get_time()
Получает текущее время системы в формате timestamp. Возвращает целое число, представляющее количество секунд с начала эпохи. Получает текущее время системы в формате timestamp. Возвращает целое число, представляющее количество секунд с начала эпохи.
## sys::set_alarm(time_t time, func_t func) ## sys_set_alarm(time_t time, func_t func)
Устанавливает сигнал будильника на время time. При наступлении указанного времени будет вызвана функция func. Устанавливает сигнал будильника на время time. При наступлении указанного времени будет вызвана функция func.

View File

@ -2,37 +2,37 @@
## Ковальски, анализ ## Ковальски, анализ
Напишите программу, которая использует функцию `sys::get_info` для получения информации о текущей системе. Напишите программу, которая использует функцию `sys_get_info` для получения информации о текущей системе.
Выведите полученную информацию в удобочитаемом формате. Выведите полученную информацию в удобочитаемом формате.
## Что мы можем? ## Что мы можем?
Напишите программу, которая использует функцию `sys::get_module` для получения информации о произвольном модуле. Напишите программу, которая использует функцию `sys_get_module` для получения информации о произвольном модуле.
Выведите полученную информацию на экран. Выведите полученную информацию на экран.
## От 1 до миллиона ## От 1 до миллиона
Напишите программу, которая использует функцию `mem::alloc` для выделения блока памяти размером 4000000 байт. Напишите программу, которая использует функцию `mem_alloc` для выделения блока памяти размером 4000000 байт.
Заполните этот блок памяти числами от 1 до 1 000 000 и найдите сумму всех чисел. Заполните этот блок памяти числами от 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` для удаления потока выполнения.
## Матрица ## Матрица

View File

@ -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) [![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) [![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] Менеджер видеопамяти - [x] Менеджер видеопамяти
- [ ] Менеджер потоков - [ ] Менеджер потоков
- [x] Загрузчик модулей - [x] Загрузчик модулей
Модули: Модули:
- [ ] Оболочка ввода-вывода - [ ] Оболочка ввода-вывода
Драйвера: Драйвера:
- [ ] COM
- [ ] PS/2 (Клавиатура) - [ ] PS/2 (Клавиатура)
- [ ] SATA (ACHI) (Чтение) - [ ] SATA (ACHI) (Чтение)
- [ ] EXT2 - [ ] EXT2
Общая работа: Общая работа:
- [ ] Ядро - [ ] Ядро
- [ ] Модули - [ ] Модули
- [ ] Драйвера - [ ] Драйвера
@ -36,6 +44,7 @@
### Второстепенные задачи ### Второстепенные задачи
Модули: Модули:
- [ ] Отладчик - [ ] Отладчик
- [ ] JavaScript - [ ] JavaScript
- [ ] Lua - [ ] Lua
@ -43,6 +52,7 @@
- [ ] Криптограф - [ ] Криптограф
Драйвера: Драйвера:
- [ ] PS/2 (Мышь) - [ ] PS/2 (Мышь)
- [ ] SATA (ACHI) (Запись) - [ ] SATA (ACHI) (Запись)
- [ ] ISOFS (ISO 9660) - [ ] 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. Использовать на свой страх и риск. Система расчитана на работу в эмулируемой среде Qemu под процессоры x86_64.
@ -59,23 +98,22 @@
## Ресурсы ## Ресурсы
- https://vk.com/BMOSP Страница вконтакте - <https://vk.com/BMOSP> Страница вконтакте
- https://mseos.ru Вебсайт - <https://mseos.ru> Вебсайт
- https://0nera.github.io/BMOSP Зеркало вебсайта - <https://wiki.synapseos.ru/index.php?title=БМПОС> Страница на вики
- https://wiki.synapseos.ru/index.php?title=БМПОС Страница на вики
### Зеркала ### Зеркала
- https://git.synapseos.ru/Aren/BMOSP - доверенный сервер(главный репозиторий) - <https://git.synapseos.ru/Aren/BMOSP> - доверенный сервер(главный репозиторий)
- https://github.com/0Nera/BMOSP - зеркало - <https://github.com/0Nera/BMOSP> - зеркало
- https://tvoygit.ru/0Nera/BMOSP - зеркало - <https://tvoygit.ru/0Nera/BMOSP> - зеркало
- https://hub.mos.ru/synapseos/BMOSP - неактивное зеркало - <https://hub.mos.ru/synapseos/BMOSP> - неактивное зеркало
### Использованные ресурсы ### Использованные ресурсы
- https://github.com/limine-bootloader/limine (BSD 2-Clause) - <https://github.com/limine-bootloader/limine> (BSD 2-Clause)
- https://github.com/nothings/stb (MIT, Общественное достояние) - <https://github.com/nothings/stb> (MIT, Общественное достояние)
- https://en.wikipedia.org/wiki/CPUID - <https://en.wikipedia.org/wiki/CPUID>
- https://github.com/klange/toaruos (NCSA) - <https://github.com/klange/toaruos> (NCSA)
- https://wiki.osdev.org/Model_Specific_Registers - <https://wiki.osdev.org/Model_Specific_Registers>
- https://sandpile.org/x86/msr.htm - <https://sandpile.org/x86/msr.htm>