Слайды () - Программирование

advertisement
ОПЕРАЦИОННЫЕ СИСТЕМЫ
Структура вычислительной
системы
Структура вычислительной системы
Пользователь
Прикладное
ПО
Операционная
система
Оборудование
•
Решение задач пользователя
•
•
•
Интерфейс между оборудованием и прикладным ПО.
Распределение ресурсов между приложениями.
Управление оборудованием.
Структура вычислительной системы
Пользователь
Прикладное
ПО
Текстовый
процессор
Игра
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
Нет
Download