ОПЕРАЦИОННЫЕ СИСТЕМЫ Структура вычислительной системы Структура вычислительной системы Пользователь Прикладное ПО Операционная система Оборудование • Решение задач пользователя • • • Интерфейс между оборудованием и прикладным ПО. Распределение ресурсов между приложениями. Управление оборудованием. Структура вычислительной системы Пользователь Прикладное ПО Текстовый процессор Игра ERP система СУБД Библиотеки Пользовательское окружение Дополнительное системное ПО Системные библиотеки Операционная система Ядро Драйвер Драйвер Драйвер BT Процессор Память GPU HDD USB LAN KBD Структура вычислительной системы Пользователь Прикладное ПО Текстовый процессор Игра ERP система СУБД Библиотеки Дополнительное системное ПО Встроенное ПО Системные библиотеки Встроенное ПО Архитектура системы команд Операционная система Микропрограмма Ядро Микроархитектура Физический уровень Пользовательское окружение Драйвер CPU Драйвер RAM … CPU RAM ... Драйвер BT Процессор Память GPU HDD USB LAN KBD Оcновные задачи операционных систем Функции операционной системы ОС как виртуальная машина • Предоставление прикладным программам единообразного доступа к оборудованию: • оперативная память; • файловые системы; • HID; • графика; • печать; • сеть; • звук; • … ОС как система управления ресурсами • Распределение ресурсов вычислительной системы между процессами: • процессорное время; • оперативная память; • доступ к устройствам. • Изоляция процессов • Аутентификация и разграничение прав пользователей. Динамическое создание процесса Процесс, инициировавший создание нового процесса называется процессом-родителем (parent process). Созданный процесс – ребёнком (child process). Процесс 2 Процесс 1 Процесс 3 Процесс 5 Процесс 4 Процесс 6 Процесс 11 Процесс 6 Процесс 9 Процесс 7 Процесс 8 Процесс 10 Создание новых процессов Windows • Родительский процесс вызывает функцию CreateProcess(), указывая имя исполнимого файла для запуска в новом процессе. • Windows создаёт новый процесс и начинает выполнение заданной программы с начала. Unix • Родительский процесс вызывает функцию fork(). • Операционная система создаёт дочерний процесс, который является копией родительского. • Они выполняют одну и ту же программу в одном и том же месте, все переменные имеют одинаковые значения. • Отличаются значение, возвращаемое из fork(). • Если требуется запустить другую программу, дочерний процесс вызывает функцию exec(), указывая имя исполнимого файла. • Операционная система удаляет из процесса код работавшей там программы и запускает внутри него заданную программу с начала. Процессы Поток(и) выполнения программы Оперативная память Открытые файлы Другие ресурсы Иерархия памяти Регистры CPU Оперативная память Вторичная память Иерархия памяти Регистры CPU Оперативная память SSD HDD Быстродействие, Цена за бит Ёмкость устройства Кэш-память CPU Локальность Принцип локальности или локализации обращений: Реальные программы в течение ограниченного промежутка времени работают с небольшим набором адресов памяти. Схема работы кэш-памяти Запрос Запрос CPU ОЗУ КЭШ Быстрый ответ Медленный ответ Скорость доступа к памяти Скорость доступа к оборудованию Простые схемы распределения памяти Фиксированные разделы Переменные разделы • Память заранее разбивается на • При запуске процесса ему участки фиксированной величины. • Процесс может быть загружен, только если есть участок подходящего размера. • Неиспользованное место внутри каждого участка теряется. выделяется участок памяти из свободной области. • При завершении процесса его память освобождается. • Фрагменты свободной памяти могут быть слишком малы для использования. Виртуальная память Процесс 1 Физическая память Виртуальное адресное пространство Процесс 2 Виртуальное адресное пространство Диск Виртуальная память Преимущества • Нет необходимости иметь последовательный блок памяти для процесса. • Каждый процесс имеет в своём распоряжении адресное пространство, максимально возможного размера. • Можно использовать диск в случае нехватки оперативной памяти. • Память процессов полностью разделена. • Возможна реализация общей памяти. • Позволяет реализовать проецирование файлов в память. • Позволяет задать права доступа к памяти. Недостатки и сложности • Усложняет и замедляет все обращения к памяти. • Может замедлять работу программы в непредсказуемый момент. • Большие накладные расходы на хранение таблиц соответствия виртуальных и физических адресов. • Требуются алгоритмы, которые будут решать, какие страницы памяти следует вытеснить на диск при нехватке физической памяти. Адресные пространства в 32-битных ОС Программа в виртуальном адресном пространстве Параллельные вычисления Типы параллелизма вычислений • Параллелизм на уровне битов • Увеличение размера машинного слова. • 1970 – середина 80’х • Параллелизм на уровне инструкций • Выполнение нескольких инструкций одновременно. • Середина 80’x – середина 90’x. • Параллелизм данных • Одна операция выполняется сразу над несколькими элементами данных. • Параллелизм задач • Различные операции выполняются над одинаковыми или разными данными. Параллелизм на уровне инструкций загрузка (Fetch), основное декодирование (D1), вторичное декодирование или трансляция (D2), выполнение (EX), запись результата в регистры и память (WB) Многозадачность Однозадачные системы • Процессорное время предоставляется только одному приложению. CPU Невытесняюшая многозадачность • Переключение происходит только после того, как текущая задача объявит, что готова отдать управление. Процесс 2 Процесс 3 Процесс 1 Вытесняющая многозадачность • ОС может приостанавливать активную задачу и передавать управление другой. Процесс 4 Процесс 5 Уровни многозадачности Многозадачность на уровне процессов Процесс 1 Процесс 2 Процесс 3 Многозадачность на уровне потоков Процесс 1 Процесс 2 Процесс 3 Потоки могут быть реализованы: 1. на уровне ОС; 2. на уровне приложения. Распределение времени выполнения потока A=1 B=2 Read c Ожидание ввода A=A+C*B Print A Ожидание вывода CPU Burst I/O Burst CPU Burst I/O Burst Состояния потоков Допуск к планированию Рождение Ожидание Ожидание события Событие произошло Готовность Вытеснение Выполнение Выбран на исполнение Завершение потока Закончил исполнение Вытесняющее и невытесняющее планирование Вытесняющее планирование Невытесняющее планирование Когда может производится планирование: процесс переходит из состояния «исполнение» в состояние «закончил работу» процесс переходит из состояния «исполнение» в состояние «ожидание» процесс переходит из состояния «исполнение» в состояние «готовность» (например по прерыванию) процесс переходит из состояния «ожидание» в состояние «готовность» Недетерминированное выполнение Поток 1 Поток 2 count+=1: count+=1: MOV AX,count // ax=0 INC AX MOV AX,count; // ax=0; //ax=1 INC AX //ax=1 MOV count,AX // count=1 MOV count,AX // count=1 Недетерминированное выполнение Поток 1 Поток 2 count+=1: count+=1: MOV AX,count // AX=0 INC AX // AX=1 MOV count,AX // count=1 MOV AX,count; //AX=1 INC AX // AX=2 MOV count,AX // count=2 Немного терминологии • Атомарная операция – операция, которая выполняется как единое целое или не выполняется вообще. • В большинстве языков программирования все «обычные» операции не являются атомарными. • Если результат работы кода зависит от неконтролируемых условий на последовательность или продолжительность выполнения, говорят, что он находится в состоянии Race Condition. • Критическая секция (critical section) – фрагмент кода, который работает с разделяемым объектом, одновременный доступ к которому может привести к Race Condition. • В этом случае требуется исключение взаимного выполнения кода (англ. mutual exclusion). • Функция называется реентерабельной (англ. reentrant) если она разработана таким образом, что одна и та же копия инструкций функции может быть совместно использована в нескольких процессах. • Аналогично потоко-безопасная функция (англ. thread-safe) может быть использована в нескольких потоках, в настоящее время понятия реентерабельная и потоко-безопасная эквивалентны с практической точки зрения. • Функции, использующие глобальные переменные не будут потоко-безопасными, если не принять специальных мер. Таксономия Флинна Одиночный поток команд Одиночный поток данных Множество потоков данных Множество потоков команд Таксономия Флинна Одиночный поток команд Одиночный поток данных Множество потоков данных Множество потоков команд Таксономия Флинна Одиночный поток команд Одиночный поток данных Множество потоков данных Множество потоков команд История операционных систем Ранние операционные системы 1964 IBM OS/360 1961 Burroughs MCP 1981 Microsoft MS-DOS 1984 Apple Mac OS История OC семейства UNIX История ОС семейства Windows Лицензии на программное обеспечение Свободное и закрытое программное обеспечение Свободное программное обеспечение (Free Software, Libre Software) Ричард Столлман, основные права пользователя: 0. Программу можно использовать с любой целью. 1. Разрешается изучать работу программы и адаптировать её под свои нужды 2. Разрешается распространять копии программы. 3. Разрешается улучшать программу и распространять копии улучшенной версии. Свободы 1-3 требуют доступности исходного кода. Закрытое программное обеспечение 1. Могут устанавливаться ограничения на использование программ и оборудования. 2. Запрещается исследовать работу программы. 3. Запрещается модификация программы. 4. Запрещается копирование программы. 5. Запрещается передача программы другим лицам. 6. Исходный код программы не предоставляется пользователям. 7. От пользователя могут потребовать соглашение о неразглашении информации. «You should think of 'free' as in 'free speech', not as in 'free beer‘». Открытое программное обеспечение (Open Source) – термин который позволяет использовать открытый исходный код для повышения эффективности разработки ПО и не смущать предпринимателей. Некоторые открытые и свободные лицензии Лицензия GNU General Public License (GPL) 1. Улучшение и распространение программы разрешены только на основе свободной лицензии. 2. Авторы имеют право: • требовать сохранение своего имени при распространении и модификации. • запретить использование своих имён в рекламе. Лицензия GNU Lesser General Public License (LGPL) 1. Позволяет использовать программное обеспечение совместно с закрытым ПО, но не позволяет создавать закрытые модификации. 2. Предназначена для библиотек, имеющих доступные закрытые аналоги, например стандартных библиотек в составе компиляторов. Лицензия BSD, лицензия MIT (Expat), лицензия Apache • Позволяет распространять программу и модификации с любой целью при условии сохранения информации о исходных авторах и текста лицензии. Лицензия Mozilla Public License • Позволяет использовать в закрытом ПО, но с обязательным распространением использованных открытых частей в виде исходного кода и с сохранением MPL на них. Лицензия Eclipse Public License • Позволяет использование в закрытом ПО, при этом запрещает распространение изменений под другой лицензией. Некоторые открытые и свободные лицензии Лицензия Можно объединять с кодом с другой лицензией Можно распространять изменения с другой лицензией GPL Нет Нет LGPL Да Нет Да Нет BSD, MIT Да Да Да Да Apache Да Да Да Нет Да Да, сохраняя лицензию на части Да, если нет прямого запрета на совместимость с другими лицензиями. Нет Да Нет Нет Нет MPL EPL Совместима с GPL Признаётся Copyfree Initiative Нет