diff --git a/API.md b/API.md new file mode 100644 index 0000000..ad2d57d --- /dev/null +++ b/API.md @@ -0,0 +1,84 @@ +# Системные вызовы + +## mem::alloc(size_t size) + +Выделение блока памяти размером `size`. +Вовзращает адрес на блок памяти или 0 в случае ошибки. + +Коды ошибок: + +- `-1 не хватает ОЗУ`; +- `-2 неправильный размер блока`. + +## mem::free(uintptr_t mem) + +Освобождение блока памяти `mem`. +Вовзращает 0 в случае успеха или -1 в случае ошибки. + +Коды ошибок: + +- `-1 блок не найден`. + + +## sys::alloc_framebuffer() + +Выделяет память под буфер кадра для отображения графического интерфейса. +Возвращает указатель на структуру `framebuffer_t` или 0, если произошла ошибка. + +Коды ошибок: + +- `-1 не удалось выделить память для буфера кадра`. + +## sys::free_framebuffer(framebuffer_t *frame) + +Освобождает ранее выделенную память `frame` для буфера кадра. Возвращает 0 в случае успеха или -1, если произошла ошибка. + +Коды ошибок: + +- `-1 ошибка при освобождении памяти для буфера кадра`. + +## sys::exit(int code) + +Завершает выполнение текущего потока с кодом `code`. + +## sys::get_error() + +Получает код ошибки последней операции. Возвращает целочисленное значение, представляющее код ошибки. + +## sys::get_info() + +Получает информацию о текущей системе. Возвращает структуру `sys::info_t` содержащую информацию о системе. + +## sys::get_module(uid_t module_id) + +Получает информацию о модуле `module_id`. Возвращает структуру, содержащую информацию о модуле. + +## sys::new_thread(func_t func) + +Создает новый поток выполнения для функции `func`. Возвращает идентификатор созданного потока или 0 в случае ошибки. + +Коды ошибок: + +- `-1 ошибка при создании потока`. + +## sys::delete_thread(uid_t thread_id) + +Удаляет указанный поток выполнения `thread_id`. Возвращает 0 в случае успеха или -1 в случае ошибки. + +Коды ошибок: + +- `-1 поток не найден`. + + \ No newline at end of file diff --git a/HOMEWORK.md b/HOMEWORK.md new file mode 100644 index 0000000..2dc3cfa --- /dev/null +++ b/HOMEWORK.md @@ -0,0 +1,70 @@ +# Задания для домашней работы + +## Ковальски, анализ + +Напишите программу, которая использует функцию `sys::get_info` для получения информации о текущей системе. + +Выведите полученную информацию в удобочитаемом формате. + +## Что мы можем? + +Напишите программу, которая использует функцию `sys::get_module` для получения информации о произвольном модуле. + +Выведите полученную информацию на экран. + +## От 1 до миллиона + +Напишите программу, которая использует функцию `mem::alloc` для выделения блока памяти размером 4000000 байт. + +Заполните этот блок памяти числами от 1 до 1 000 000 и найдите сумму всех чисел. + +Используйте функцию `mem::free` для освобождения блока памяти. Проверьте, что блок памяти успешно освобожден. + +## Улыбочку + +Напишите программу, которая использует функцию `sys::alloc_framebuffer` для выделения памяти под буфер кадра. + +Затем нарисуйте смайлик заполняя буффер. + +Используйте функцию `sys::free_framebuffer` для освобождения памяти. + +## Многопоточность + +Напишите программу, которая использует функцию `sys::new_thread` для создания нового потока выполнения. + +В этом потоке выполнения реализуйте алгоритм сортировки массива чисел. Выведите отсортированный массив на экран. Используйте функцию `sys::exit` для завершения выполнения потока или функцию `sys::delete_thread` для удаления потока выполнения. + +## Матрица + +Напишите программу, которая использует двумерный массив для создания и отображения матрицы размером 3x3. + +Попросите пользователя ввести значения элементов матрицы, а затем выведите ее на экран. + +## Проверка на палиндром + +Напишите программу, которая проверяет, является ли введенная пользователем строка палиндромом. + +Палиндром - это строка, которая читается одинаково слева направо и справа налево. Выведите сообщение "Это палиндром" или "Это не палиндром" в зависимости от результата проверки. + +## Проверка на анаграмму + +Напишите программу, которая проверяет, являются ли две введенные пользователем строки анаграммами, то есть состоят ли они из одних и тех же символов. Выведите сообщение "Это анаграммы" или "Это не анаграммы" в зависимости от результата проверки. + +## Генератор псевдослучайных чисел + +Напишите программу, которая генерирует и выводит на экран псевдослучайное число от 1 до 100. + +Пример функции для генерации псевдослучайных чисел: + +```C +static unsigned long int next = 1; + +int rand() { + next = next * 1103515245 + 12345; + return (unsigned int)(next / 65536) % 32768; +} +``` + +## Перевод числа в двоичную систему счисления + +Напишите программу, которая позволяет пользователю ввести число в десятичной системе счисления и выводит его в двоичной системе счисления. \ No newline at end of file diff --git a/KERNEL.md b/KERNEL.md new file mode 100644 index 0000000..e69de29 diff --git a/STD.md b/STD.md new file mode 100644 index 0000000..e69de29 diff --git a/index.md b/index.md index cec2cb0..29cd9e8 100644 --- a/index.md +++ b/index.md @@ -1 +1,51 @@ -# MSEOS \ No newline at end of file +# MSEOS: минимальная студенческая обучающая операционная система + +[![CI BUILD](https://github.com/0Nera/MSEOS/actions/workflows/build.yml/badge.svg?branch=master)](https://github.com/0Nera/MSEOS/actions/workflows/build.yml) +[![Github pages](https://github.com/0Nera/MSEOS/actions/workflows/pages/pages-build-deployment/badge.svg?branch=pages)](https://github.com/0Nera/MSEOS/actions/workflows/pages/pages-build-deployment) + +MSEOS - минимальная студенческая обучающая операционная система с открытым исходным кодом для платформы x86_64(BIOS/UEFI). + +- [Системные вызовы](/API.md) +- [Стандартная библиотека](/STD.md) +- [Ядро](/KERNEL.md) +- [Задания для домашней работы](/HOMEWORK.md) + +Система: +- [ ] Менеджер памяти +- [ ] Менеджер видеопамяти +- [ ] Менеджер потоков +- [ ] Загрузчик модулей + + +Модули: +- [ ] Отладчик + +Драйвера: +- [ ] COM +- [ ] PS/2 (Мышь + клавиатура) +- [ ] SATA (ACHI) +- [ ] EXT2 +- [ ] ISOFS (ISO 9660) +- [ ] SIMD (SSE, SSE2, SSE3, SSE4, AVX) + +Общая работа: +- [ ] Ядро +- [ ] Модули +- [ ] Драйвера +- [ ] Документация +- [ ] Вебсайт +- [ ] Примеры +- [ ] Видеоуроки + +## Ресурсы + +- Страница вконтакте +- Вебсайт +- Страница на вики + +### Зеркала + +- - доверенный сервер(главный репозиторий) +- - основной репозиторий +- - зеркало +- - неактивное зеркало \ No newline at end of file