**Операционная система** - программное обеспечение, управляющее аппаратными ресурсами и предоставляющее прикладным программам удобные абстракции ^bd03ae
- Как *менеджер ресурсов* - управляет ресурсами, отслеживая их состояние и планируя их использование. 
  Виды ресурсов:
	- вычислительные ресурсы (ЦП)
	- оперативная память и уст-ва долговременного хранения данных (жесткий диск и т.д.)
	- устройства ввода/вывода
	- сетевые соединения
- Как *виртуальная машина* - выполняет абстрагирование аппаратного обеспечения до уровня логических ресурсов ОС с четко определенными интерфейсами. Поддерживает абстракции, которых не существует на аппаратном уровне.
	- Аппаратные ресурсы - абстракции ОС
	- Жёсткий диск - ФС
	- Принтеры - очередь печати
	- ЦП - поток
	- ОЗУ - процесс

[[#^bd03ae|ОС]] формирует **операционную среду** - среду выполнения ПО
	Условия выполнения программ: ^ed3cc0
	- Мн. команд ЦП, доступное ПО
	- Мн. сис. функ. ОС, доступное ПО
	- Тип и структура ВАП (Виртуальное Адресное Пространство) ПО, использующей модель адресации

**Spool** - одновременное выполнение нескольких операций в переферии

**Многозадачность** - свойство ОС, позволяющее обрабатывать несколько задач параллельно.

В ОЗУ загружаются несколько процессов. IO одного процесса выполняется параллельно с вычислениями другой
Цель - оптимизация пропускной способности системы

**ОС разделения времени** - подход, который требуется для интерактивной работы, при котором у одной ЭВМ несколько терминалов и каждый пользователь считает, что ему польностью выделена вычислительная система
Для её реализации, была создана идея разделения времени - *Timeslicing*. Задачи:
 - Распределение времени ЦП равномерно между пользователями
 - Если задача интерактивная, нужно переключаться между пользователями и ПО быстрее, чем пользователи производят ввод
 - Пользователи могут интерактивно просматривать, редактировать и отдаэивать выполняющиеся программы

Классификация ОС по назначению:
- Системы пакетной обработки (максимальная пропускная способность)
- Системы разделения времени (удобство и эффективность работы пользователя)
- ОС реального времени (способность выдерживать заданные интервалы времени между возникновением события и завершения его обработки)

По режиму обработки задач:
- По поддержке многозадачности
	- однозадачные
	- многозадачные
- По поддержке многопоточности
- По поддержке многопроцессорной обработки

По организации пользовательской работы
- Однопользовательские и многопользовательские
- Односессионные и многосессионные

**Монолитная архитектура ОС** - система, построенная с помощью монолитного ядра
**Монолитное ядро** - множество процедур, которые
 - выполняются на одном уровне привелегий
 - используют одно множество данных
 - вызывают друг друга непосредственно (без спец. механизмов)

**Многослойная (уровневая) архитектура ОС** - ОС разбивается на несколько компонентов, между которыми выстраивается вертикальная архитектура (каждый компонент может взаимодействовать только со своими соседями)

**Микроядерная архитектура ОС** - архитектура, основная идея которой минимизация объёма кода, выполняющегося на уровне ядра. На микроядре реализуют минимальный функционал ОС. Всё остальное - прикладные программы
*Плюсы*:
- понятная архитектура
- устойчивая система
- возможность скомпоновать ОС под определённые нужны

*Минусы*:
- низкая производительность
- медленная работа из-за переходов между компонентами через ядро

**Архитектура, основанная на ВМ** - архитектура, основная идея которой является то, что ОС поддерживает отдельные копии [[#^ed3cc0|операционных сред]] для разных работающих приложений (для разделение работы)
Позже появилась поддержка аппаратного виртуального обеспечения, которое произволится с помощью специального ПО
*Плюсы*:
 - падение одного приложение не повлечёт отказ остальных
*Минусы*:
 - низкая производительность реальной ОС при IO-операциях

**Паравиртуализация** - идея, суть которой в том, что при выполнении некоторого набора операций ОС, работающая на ВМ, напрямую вызывает хостовую ОС, которая работает с реальным аппаратным обеспечением
*Ограничение*: хостовая и гостевая ОС должны быть одинаковыми

**Расширяемость** - возможность модификации, ничего не сломав (модульность, объектная и микроядерная архитектура)

**Переносимость** - возможность переноса кода на другую аппаратную платформу. Повысить переносимость можно:
- использовав ЯВУ
- оптимизировав код
- локализировав и изолировав код

**Совместимость** - способность выполнять программы, написанные для других ОС (или более старых версий себя), а также другой архитектуры

**Безопасность** - защиты ресурсов пользователей друг от друга. Категории:
- D - нет требований
- C - наличие подсистемы учёта событий безопасности
	- C2 = есть средство входа, права к объектам, аудит безопасности, защита памяти
- B - использование помеченных данных и распределение пользователей по категориям
- A - наличие формального доказательства соответствия системы требованиям безопасности

**Windows NT**
*Уровень аппаратной абстракции* - обеспечивает вышележащим уровням приемлимые абстракции hardware
*Ядро* - планирование, обработка прерываний и исключений, многопроцессорность, обработка сбоев
*Менеджер объектов* - создаёт, удаляет и управляет объектами (выделение памяти, управление дескрипторами, каталогами объектов)
*Монитор безопасности* - устанавливает правила защиты на локальный компьютер
*Менеджер процессор* - управляет процессами и потоками
*Средства LPC* - оптимизированный вариант более общего средства - удалённого вызова процедур (передача коротких и длинных сообщений)
*Менеджер виртуальной памяти* - управление физической памятью, поддержка АП ядра и процессов
*Менеджер IO* - представляет средства IO, независимо от их устройств

**UNIX**
*Аппаратный контроль* - обеспечивает вышележащим уровням приемлимые абстракции hardware
*Взаимодействие процессов* - реализация механизмов IPC
*Планировщик* - управление (распределение) временем ЦП
*Управление памятью* - управление физической памятью, поддержка АП ядра и процессов

**Поток** - абстракция: последовательное выполнение команд программы во времени ^308759

Совместно используют глобальные и статические переменные, динамическую память и системные ресурсы, выданную [[#^c7de0d|процессу]]
Имеет собственные счётчик (IP), значения регистров и локальные переменные


**Процесс** - абстракция: программа во время выполнения; совокупность потоков и ресурсов ^c7de0d

ОС выделяет процессу ресурсы:
- Адресное пространство
- Файлы
- IO

**Многопоточные процессы** - процессы с несколькими потоками

**Контекст** - множество информации, полностью описывающее состояние состояние объекта
*Контекст [[#^c7de0d|процесса]]*:
- Информация о процессе
- АП процесса
- Структура и содержимое пользовательской части АП процесса
- Множество ресурсов, выделенных процессу, и их состояние

*Контекст [[#^308759|потока]]*:
- Информация о потоке
- Множество ресурсов, выделенных потоку, и их состояние
- Аппаратные контекст исполнения потока

**Переключение контекста** происходит при переходе к исполнению другого потока

При переключении необходимо:
1. Сохранить контекст текущего потока
2. Если следующий поток принадлежит другому процессу:
	1. Сохранить контекст текущего процесса
	2. Загрузить контекст следующего процесса
3. Загрузить контекст следующего потока

**Диаграмма состояний потока в однозадачной среде**
*Создание* - ОС обслуживает запрос на создание потока
*Завершение* - ОС обслуживает запрос на завершение потока
*Выполнение* - состояние работающего потока, выполняющегося на ЦП
*Ожидание* - выполнение потока заблокировано до наступление некого внешнего события

**Диаграмма состояний потока во многозадачной среде**
*Выполнение* - состояние работающего потока, обладающими всеми необходимыми ресурсами, в т.ч. возможностью использования ЦП
*Готов к выполнению* - поток обладает всеми нелюходимыми для выполнения ресурсами, кроме времени ЦП

**Дескриптор [[#^c7de0d|процесса]]** - структура данных, которая используется для описания процесса Включает в себя: ^6b0413
- Идентификатор процесса
- Групповые параметры процесса
- Состояние процесса
- Статистические данные
- Описание АП процесса
- Контекст IO
- Контекст безопасности
- Текущие системные параметры выполнения
- Код завершения процесса
- Параметры, используемые в случае конкуренции между процессами за ресурс для определения приоритета

**Дескриптор [[#^308759|потока]]** - структура данных, которая используется для описания процесса. Включает в себя:
- Идентификатор потока
- Идентификатор владельца - процесса
- Параметры, используемые в случае конкуренции между потоками за ресурс для определения приоритета
- Статистические данные
- Аппаратные контекст выполнения потока
- Код завершения потока

**Создание процесса в Windows**
1. Создание и инициализация (всех полей) дескриптора
2. Создание и заполнение необходимыми данными ВАП
3. Выделение ресурсов, которые он может использовать сразу после создания
4. Оповещение подсистем, занимающимися управлением процессов, о создании нового процесса
5. Создание первичного потока

**Завершение процесса в Windows**
1. Завершение выполнения всех потоков процесса
2. Сохранение статистических данных и кода возврата процессора в дескрипторе
3. Перевод всех ресурсов, принадлежащих процессу, в стабильное и непротиворечивое состояние
4. Освобождение этих ресурсов
5. Освобождение ВАП, а затем его уничтожение
6. Оповещение подсистем, занимающимися управлением процессов, о завершении процесса
7. Установка состояние процесса `завершён`
Остаётся только [[#^6b0413|дескриптор]]. Его уничтожение зависит от реализации

**Создание потока в Windows**
1. Создание и инициализация (всех полей) дескриптора
2. Создание структур данных, необходимых потоку
3. Инициализация аппаратного контекста
4. Оповещение подсистем, занимающимися управлением потоков, о создании нового потока
5. Установка состояние потока `готов к исполнению`

**Завершение потока в Windows**
