mirror of https://github.com/0Nera/BMOSP.git
Обновление сайта
This commit is contained in:
parent
839bc8459f
commit
9bc836e801
25
API.md
25
API.md
|
@ -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.
|
||||||
|
|
||||||
|
|
16
HOMEWORK.md
16
HOMEWORK.md
|
@ -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` для удаления потока выполнения.
|
||||||
|
|
||||||
## Матрица
|
## Матрица
|
||||||
|
|
||||||
|
|
74
index.md
74
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)
|
[![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>
|
||||||
|
|
Loading…
Reference in New Issue