# Операционная система
### Архитектура ОС

### Виды операционных систем:
1. Процедурная ограничена или ограничивает действия пользователя (Windows нельзя форматировать диск)
2. Проектная ОС - дает возможность делать все (Linux)
### Архитектура ОС Windows

Режим ядра
* HAL - предназначен для скрытия различий в аппаратном обеспечении от основной части ядра операционной системы, таким образом, чтобы большая часть кода, работающая в режиме ядра, не нуждалась в изменении при её запуске на системах с различным аппаратным обеспечением.
* Ядро - низкоуровневая основа любой ОС, выполняемая аппаратурой в особом привилегированном режиме. Ядро загружается в память один раз и находится в памяти резидентно – постоянно, по одним и тем же адресам
* Драйвера - содержат аппаратно-зависимый код и обеспечивают трансляцию пользовательских вызовов, запросы специфичные для конкретных устройств
* Исполняемые компоненты - все что должно контролироваться ОС.
Режим пользователя - системы передают запросы ввода-вывода соотвевтсвующему драйверу с помощью менеджера ввода-вывода.
1. Внутренняя подсистема
1.1 подсистема безопаности - разрешает или запрещает доступ к учетной записи пользователя
1.2 Служба рабочая станция - доступ к сети
1.3 Служба сервер - позволяет предоставить сетевые ресурсы
2. Внешняя подсистема
Типы пользовательяских приложений, которые могут быть запущены на системе Windows
### Архитектура Linux

### Ядро





Ядро - виртуальная машина для процессоров
### Подсистемы ядра
1. Планировщик процессов - контроль над доступом процессов к центрального процессору
2. Менеджер памяти - обеспечивает различным процессам безопасный доступ к основной памяти системы, работа вирутальной памяти(Swapping)
3. Виртуальная файловая система - создает абстрактный слой, скрывая детали оборудования (в линукс все что в компе - файлы)
4. Сетевые интерфейсы - обеспечивает работу с разными сетевыми стандартами и оборудованием
5. Межпроцессорная подсистема - подсистема, которая используется процессами для поддержания различных механизмов обмена внутри системы.

### Уровни потоков
Потоки на уровне пользователя - ядро думает, что работает только 1 процесс, а информация о потоков отсутвует. система хранит таблицу потоков для отслеживания.
+: потоки могут быть реализованы на всех ОС которые поддерживают эти потоки, переключение потоков происходит быстрее, тк не надо обращаться к ядру.
-: при выполнение блокирующего вызова блокируются все потоки, невозможно планировать промежутка времени потокам
Потоки на уровне ядра - на стороне ядра происходит отслеживание всех потоков.
+: блокируется только 1 поток
-: создание и уничтожение требуют высоких затрат
### Виды синхронизации потоков
1. взаимоисключения (mutex) - флаг переходящий к потоку, который может работать с ресурсом. Заставляет приложение каждый раз обращаться к ядру ОС
2. Семафор - ограничивает число потоков, имеющих доступ к потоку
3. События - пользователь определяет условие, при котором наступает передача управления нудному потоку
4. Кретическая секция - ядро задействуется если секция занята и нужно включить семафор, в остальном поток выполняется в пользовательском режиме, секция можно использовать в рамках 1 процесса.
### Планировщик
Планировщик используется в многопоточных системах - выбрает какой поток будет работать
Вызывается при создании нового потока, завершении потока, при блокировке, прерывание ввода-вывода.

1. Обработчик прерывания - функция запускается ядром в ответ на постулпение определенного прерывания
2. Планировщик - вызвал прерывание
3. Переключение контекста - процесс сохранения состояния прерванного потока и загрузка состояния следующего потока.
### Ядро Linux




