УТС 4 семестр / задание_os1
.docДисциплина «Операционные системы»
Лекции 18
Практические занятия 18 (9 работ)
Диф. зачет (ТК с оценкой)
Литература
Таненбаум Э., Бос Х. Современные операционные системы. 4-е изд. — СПб.: Питер, 2015.
Уорд Б. Внутреннее устройство Linux. — СПб.: Питер, 2016.
Фуско Д. Linux. Руководство программиста. — СПб.: Питер, 2011.
Лав Р. Linux. Системное программирование. 2-е изд. — СПб.: Питер, 2014.
Керриск Майкл. Linux API. Исчерпывающее руководство. — СПб.: Питер, 2018.
Содержание дисциплины
Раздел 1. Общая характеристика операционных систем
Раздел 2. Механизмы последовательного выполнения программ в ОС
Раздел 3. Параллельное выполнение программ в ОС
Раздел 4. Взаимодействие процессов в ОС
Раздел 5. Управление памятью в ОС
Раздел 6. Управление внутренними коммуникациями в ОС
Раздел 7. Управление внешними коммуникациями в ОС
Раздел 8. Управление файлами в ОС
Раздел 9. Управление информацией в ОС
Раздел 1. Общая характеристика операционных систем
4-уровневая модель информационной системы
Будем называть Информационной Системой (ИС) совокупность аппаратных и программных средств, обеспечивающих выполнение требуемых прикладных функций ИС.
Сами прикладные функции можно разделить на два уровня:
Нижний уровень - это собственно прикладная функция, такая как, например, управление объектом, ведение базы данных, разработка программного обеспечения, передача и прием информации и т. д.;
Верхний уровень - набор сервисных функций, повышающих качество и удобство выполнения первых.
Примеры:
- файловый менеджер - ОС;
- интегрированная среда разработки - отдельные редактор, транслятор, компоновщик;
- программа-администратор базы данных - собственно база данных.
Отсюда формируется два верхних уровня архитектуры ИС:
Оболочка (пользовательский интерфейс) |
Прикладная задача |
Это самая общая схема, которую целесообразно уточнить, добавив снизу еще два уровня в соответствие с нашим определением ИС:
Оболочка (пользовательский интерфейс) (4) |
Прикладная задача (3) |
Операционная система (2) |
Аппаратура (1) |
Дадим краткую характеристику каждого уровня. А затем до конца курса остановимся на 2-ом уровне представленной архитектуры – Операционной Системе.
Уровень аппаратуры (1)
Подробное рассмотрение этого уровня проводится в других дисциплинах, отметим только, что развитие аппаратных средств компьютеров идет гигантскими темпами в направлениях увеличения разрядности обрабатываемых данных, тактовой частоты процессора размеров внутреннего КЭШа и т. д.
Но среди этого в определенном смысле количественного роста характеристик аппаратных средств компьютера хотелось бы выделить один качественный скачек.
Это переход от процессора 8086 к процессору 80286 в 1982 г., аппаратно поддерживающему многозадачность и управление виртуальной памятью.
Вот эта самая концепция многозадачности будет красной нитью проходить через весь курс, через призму многозадачности мы будем рассматривать все разделы курса.
Уровень операционной системы (2)
Операционные системы в своем развитии прошли через ряд этапов:
Отсутствие ОС;
ОС пакетной обработки IBM 360;
ОС разделения времени PDP 11;
ОС персональных ЭВМ - DOS, Windows;
Сетевые ОС - NetWare, UNIX, Linux, OS X, Windows;
ОС мобильных устройств.
Первой особенностью развития операционных систем является тесная связь с развитием аппаратуры. Т. е. для каждого поколения процессора есть операционная система, наиболее эффективно использующая его возможности, например:
8080 - CP/M;
8086 - MS DOS - однозадачные ОС, а т. к. после появляются процессоры, аппаратно поддерживающие многозадачность и управление виртуальной памятью, появляются и ОС, поддерживающие эти свойства,
80286 – Unix, Windows и другие.
Второй особенностью операционных систем является стремление на любом этапе развития реализовать многозадачность. Эта особенность всегда отражалась наличием некоторого “довеска” к ОС, обеспечивающего многозадачность в однозадачных системах, например:
СР/М - МР/М;
DOS - Task swapper + система прерываний.
Далее этот довесок просто не нужен, т. к. такие ОС, как UNIX, NetWare, Windows, Linux являются подлинно многозадачными.
Классификация ОС по признаку многозадачности выглядит следующим образом:
Операционные системы
Однозадачные ОС
Многозадачные ОС
По каким причинам появилась потребность в многозадачности.
В природе физические процессы протекают одновременно, параллельно во времени, поэтому параллельное протекание вычислительных процессов в компьютере является объективным отражением реального мира.
Важным вопросом является соотношение числа процессоров и числа процессов. Если процессов больше, чем процессоров, то имеет место разделение времени.
Как мы уже упоминали, стремление к организации многозадачности имело место всегда, даже в однопроцессорных системах.
Интерес к многозадачным системам непрерывно рос, особенно с учетом снижения цен на процессоры, но есть целый ряд объективных проблем:
Человеку свойственно мыслить последовательными категориями.
В языках программирования долгое время не было средств выражения параллелизма, что также обусловлено первым фактором. О том, какие средства существуют, мы будем говорить в дальнейшем.
Базовая аппаратная архитектура процессора первоначально ориентировалась на последовательную обработку.
Отладка программ с элементами параллелизма чрезвычайно сложна.
Все эти и другие сложности в настоящее время интенсивно исследуются, а многозадачные системы интенсивно развиваются.
Концептуального прогресс связан с появлением средств автоматического распараллеливания программ и автоматического распределения параллельных веток по процессорам.
Дадим краткую характеристику того, что называется автоматическим распараллеливанием.
Обнаружение параллелизма, как программистом, так и программно-техническими средствами - компиляторами, интерпретаторами, ОС, является чрезвычайно сложной задачей.
В ряде наиболее простых случаев он может быть указан явно программистом. Тогда фрагмент программы с элементами параллелизма будет выглядеть примерно так:
cobegin
statement_1;
statement_2;
...
statement_N;
coend;
Такая запись может означать, что приведенные операторы могут выполняться каждый на своем процессоре. Однако, не ясно, как распределять операторы по процессорам, особенно в случае, если процессоров меньше, чем операторов, и какова будет переносимость программы, если на одной машине, например, 5 процессоров, а на другой 10, и что делать, если программист ошибся с распараллеливанием.
Поэтому компиляторы используют, как правило, неявный параллелизм программ, одним из примеров которого является алгоритм расщепления цикла. Рассмотрим следующий цикл:
for (int i = 0; i < 5; i++) {
A[i] = B[i] + C[i];
}
Ясно, что такой цикл можно разбить на 5 параллельно выполняемых фрагментов. Но что делать опять, если число итераций не будет совпадать с числом процессоров, и как распределять итерации по процессорам?
Другим примером распараллеливания является «редукция высоты дерева», например, последовательность операций:
((p + q) + s) + r,
можно преобразовать следующим образом:
(p + q) + (s + r),
и выполнить операции в скобках одновременно.
Название метода происходит из графового способа описания операций.
Для первого варианта граф выглядит следующим образом:
r
s
p q
Для второго варианта граф выглядит следующим образом:
p q s r
Общее правило - изменение порядка выполнения операций за счет использования ассоциативных, коммутативных и дистрибутивных свойств операций.
Наука о параллельном программировании идет в основном в этом направлении. Но существует еще одна очень большая ветвь в параллельном программировании - это системы реального времени. Здесь речь идет о системах управления технологическими процессами самой различной природы и задача параллельного программирования здесь несколько иная, а именно, создание параллельных процессов в компьютере, адекватно отражающих параллельные процессы в физическом объекте. В этом направлении были созданы такие языки с элементами параллельного программирования, как Ада, Модула-2, С++ 11, и именно с этой точки зрения мы с вами будем рассматривать параллельное выполнение программ.
На определенном логическом уровне рассмотрения безразлично на скольких процессорах на одном или на нескольких выполняются параллельные программы.
Это приводит к появлению универсальных понятий многозадачных ОС - понятий ПРОЦЕСС и СИНХРОНИЗАЦИЯ, которые мы подробно будем рассматривать в нашем курсе.
Уровень прикладной задачи (3)
Прикладные задачи охватывают все разнообразие программируемого реального мира. Можно дать общую архитектуру прикладной задачи, которая всем известна и поэтому несет мало полезной информации:
Любую прикладную задачу можно представить подобным образом. На основе анализа практических примеров, можно дать следующую характеристику особенностей данного уровня:
Наличие связи с аппаратурой объекта, т. е. важным аспектом рассмотрения должно стать изучение всевозможных датчиков и способов ввода информации в машину; на первое место здесь выходит знакомство с системой прерываний компьютера;
Многофункциональность объекта приводит к тому, что вычислительная система, управляющая им, должна быть многозадачной;
Наличие, кроме основной функции, множества дополнительных сервисных функций;
Унификация архитектуры прикладной программы, т. е. ОС предоставляет программисту интерфейс для доступа к ресурсам машины (API - Application Programming Interface), только через который и можно работать. Обойти этот интерфейс становится все сложнее для развитых ОС. Однако цель этого интерфейса благородная - облегчить переносимость приложения в различные аппаратные и операционные среды.
Оболочка - пользовательский интерфейс (4)
Четвертый - верхний - уровень операционной среды характеризуется следующими тенденциями:
Совершенствование интерфейса пользователя, например:
Интерпретатор команд, например в Unix;
Оконное меню в текстовом режиме, например, файловый менеджер типа mc (Midnight Commander);
Графический пользовательский интерфейс.
Унификация архитектуры всей прикладной программы обусловливает и унификацию следующих ее компонентов:
Пользовательского интерфейса, стандарт CUA – Common User Access касается взаимодействия пользователя и программы. Цель CUA - облегчить освоение новых программ пользователем. Например, во всех программах нажатие одних и тех же клавиш должно приводить к аналогичным действиям: F1 - всегда вызов Help, или Esc - возврат на один уровень вверх;
Унификацию средств обмена данными между приложениями, появляются такие средства как Clipboard;
Унификацию средств связи для обмена по сетям, целью которой является возможность подключения к единой сети машин с различными аппаратными и операционными платформами.
1.2. Модели операционных систем
Поскольку операционная система - это сложная программно-аппаратная система, для ее описания можно применить принцип структурирования.
Код ОС может быть структурирован различными способами.
Простейшим является способ, при котором ОС состоит из набора процедур, каждая из которых может вызывать другую процедуру.
Вторым подходом к структурированию ОС является деление ее на модули и слои, расположенные один над другим – иерархическое структурирование.
Третьим подходом к структурированию ОС является модель клиент-сервер.
Во всех, кроме самых простейших ОС, приложения отделены от самой ОС. Код ОС выполняется в привилегированном режиме (режиме ядра) и имеет доступ к данным и аппаратному обеспечению. Приложения выполняются в непривилегированном режиме (режиме пользователя) с ограниченным доступом к системным данным и с ограниченным набором системных интерфейсов. Когда программа пользователя запрашивает обслуживание системой, процессор перехватывает запрос и переключает вызывающий поток в режим ядра. После завершения системного обслуживания операционная среда переключает поток назад, в режим пользователя, и позволяет продолжить выполнение вызвавшей программы.
С учетом сказанного, первый вариант структурирования выглядит следующим образом:
В такую систему очень трудно вносить изменения, т. к. незначительная модификация одной из процедур может повлечь за собой целый ряд ошибок в местах, на первый взгляд совершенно не связанных с данной процедурой.
Режим пользователя - наименее привилегированный режим, он не имеет прямого доступа к оборудованию и у него ограниченный доступ к памяти.
Режим ядра - привилегированный режим. Те части ОС, которые исполняются в режиме ядра, такие как драйверы устройств и подсистемы типа Диспетчера Виртуальной Памяти, имеют прямой доступ ко всей аппаратуре и памяти.
Различия в работе программ пользовательского режима и режима ядра поддерживаются аппаратными средствами компьютера (а именно - процессором).
Вторым подходом к структурированию ОС является деление ее на модули и слои, расположенные один над другим – иерархическое структурирование. Обобщенная схема такой системы представлена ниже:
Приложение
Приложение
Режим пользователя
Режим ядра
Системные службы
Файловая система
Управление памятью
Планирование процессов
Ввод / вывод
Аппаратное обеспечение
Именно этой моделью будем пользоваться мы, поэтому позже рассмотрим ее более подробно.
Если в иерархической модели выхватить три соседних уровня системы, как показано на рисунке ниже,
i + 1 |
i |
i - 1 |
то можно выделить следующие свойства уровней:
Каждый уровень представим в виде набора объектов аппаратных или программных и набора операций над объектами данного уровня;
Каждый уровень предоставляет вышележащему уровню интерфейс - набор примитивов - базовых операций, которые может выполнять вышележащий уровень с нижележащим уровнем;
Вышележащий уровень не вникает в детали реализации нижележащего уровня, а пользуется только предоставленными примитивами.
Уровень i + 1 не пользуется непосредственно средствами уровня i - 1, а пользуется ими только через уровень i;
Допустима модификация любого уровня, при этом, если сохраняется интерфейс, то такая модификация проходит безболезненно для вышележащих уровней.
Третьим подходом к структурированию ОС является модель клиент-сервер. Суть его состоит в том, что вся система разбивается на несколько независимых процессов, каждый из которых выполняет определенные функции, например, обслуживание памяти, создание процессов, управление файловой системой и т. д. Каждый из таких процессов-серверов выполняется в режиме пользователя и циклически проверяет, есть ли запросы на выполнение конкретных функций. Клиент, которым может быть либо другая часть ОС, либо прикладная программа, выдает запрос на обслуживание путем посылки сообщения серверу. Ядро ОС выполняется в режиме ядра (привилегированном) и доставляет это сообщение серверу. Сервер выполняет операцию, после чего ядро возвращает клиенту другое сообщение-ответ. Различные серверы могут выполняться на разных процессорах и даже на разных машинах, что делает такую ОС идеальной для работы в распределенной сети. Схема такой системы представлена ниже:
Еще одним признаком классификации ОС является доля функций, выполняемых в режиме пользователя и в режиме ядра.
Если в режиме ядра выполняется мало функций ОС, то говорят о микроядерной архитектуре. Такая архитектура близка к модели клиент-сервер.
Если все функции ОС выполняются в режиме ядра, то говорят о монолитной архитектуре. По нашей классификации такая архитектура близка к модели иерархического структурирования.
Компромиссным вариантом являются гибридные архитектуры. В этом случае часть функций ОС выполняется в режиме пользователя, а часть – в режиме ядра.
Это модели операционных систем. Реальные системы объединяют в себе черты моделей иерархической и клиент-сервер. Поэтому более подробно мы будем останавливаться на этих моделях.
Модели ОС мы с вами рассмотрели не просто так, а для того чтобы выявить функции ОС. Функции ОС мы будем выявлять на основе анализа иерархической модели ОС.
1.3. Функции операционных систем
Если вернуться к иерархической модели ОС, то следует отметить еще одно свойство этой модели, а именно, каждый уровень представляет собой некоторую функцию операционной системы, если перед перечнем объектов некоторого уровня поставить слово «управление», то и получим соответствующую функцию. Эта функция определена согласно ее сложности, временному масштабу выполнения и уровню абстракции.
Поэтому для перечисления функций ОС просто более подробно распишем иерархическую модель ОС.
№№ |
НАЗВАНИЕ |
ОБЪЕКТ |
ПРИМЕРЫ ДЕЙСТВИЯ |
13 |
Оболочка |
Интерфейс пользователя |
Действия на языке обол. Цикл опрса событий |
12 |
Процессы пользователя |
Виртуальная машина |
Создать, приостанвить, возобновить, уничтожить |
11 |
Каталоги |
Таблицы соотв. внешн. и внутр. имён |
Создать, связать, модиф, прочитать, читать, записать |
10 |
Устройства |
Дисплей, принтер, клавиатура |
Создать, уничтожить, откр., закрыть, читать, записать |
9 |
Файловая система |
Файлы |
То же, что и на 10 |
8 |
Коммуникации |
Конвейер, буфер |
То же, что и на 10 |
7 |
Виртуальная память |
Страницы, сегменты |
Загрузить, выгрузить, прочитать, записать |
6 |
Локальная внешняя память |
Диск, сектор, дорожка |
Прочитать, записать |
5 |
Элементарные процессы |
Семафоры, сигналы, дескрипторы,очереди |
Создать, уничтожить, возобновить, приостановить процесс |
4 |
Прерывания |
Процедуры обработки прерываний |
Вызов, возврат, маскирование, размаскирование, уст. Вектор |
3 |
Процедуры |
Логическое завершение, набор команд, стеки |
Вызов, возврат, прочит. из стека, записать в стек |
2 |
Система команд |
Инструкции, директивы |
Чтение,запись, пересылка, сравнение, арифмет. операции |
1 |
Физическая машина |
Регистры, процессор, ячейки памяти |
Сброс, установка, запись, чтение |
Уровень 1. Уровень электронных схем, на котором определены такие объекты, как регистры, счетчики, логические схемы, сумматоры и т. д.
Известны и операции, определенные на этих схемах: сброс, установка, чтение, запись. Таким образом, первой функцией ОС является управление физической аппаратурой.
Уровень 2. Управление аппаратурой производится с помощью выполнение команд процессора, это несколько более абстрактный уровень, чем уровень аппаратуры. Вспомним, например, программную модель процессора.
Уровень 3. На этом уровне отдельные инструкции системы команд объединяются в логически законченные участки, выполняющие определенные функции, и называемые процедурами. Процедура – это базовый элемент любой программной системы. Выполнение любой программы - это последовательность вызовов процедур.
Уровень 4. На этом уровне появляются прерывания как средство взаимодействия процессора с периферийной аппаратурой. Проблема взаимодействия с аппаратурой состоит в том, что сигналы от аппаратуры могут появляться в произвольный момент времени относительно потока выполняемых команд. Система прерываний и позволяет преодолеть эту асинхронность появления сигналов от аппаратуры. Реакция на сигналы - это определенным образом организованные процедуры - процедуры обработки прерываний.
Первые четыре уровня - это уровни, очень сильно зависящие от аппаратуры машины. Далее идет более высокий уровень абстракции.
Уровень 5. На этом уровне появляются средства, связанные с попытками одновременного выполнения нескольких задач. Например, печать, редактирование текста и обмен данными через модем. Если процессор один, а задач требуется выполнять несколько, то появляется некоторая надстройка, обеспечивающая переключение задач. Здесь появляется понятие - контекст. При этом одна задача приостанавливается, ее контекст сохраняется в специальной структуре данных, а другая возобновляется и ее контекст восстанавливается. Большая роль здесь отводится вопросам взаимодействия задач, например, одна задача не может продолжить выполнение с какой-то точки, пока другая задача не пройдет через определенную точку в своей программе. Все средства организации многозадачности и взаимодействия задач объединены на этом уровне элементарных процессов.