
- •Лекция 1. Определение, классификация ос
- •Лекция 2. Управление задачами
- •Взаимодействие процессов и потоков
- •Лекция 5. Управление памятью, организация виртуальной памяти
- •Лекция 7 Управление процессами, модели состояний процессов
- •2Завершение процессов
- •Лекция 8 Управление процессами, описание процессов
- •Лекция 9 Управление процессами, модели управление процессами
- •Лекция 10 Управление процессами, выполнение кода операционной системы
- •Лекции 11-13 Файловые системы,
- •Лекции14-15. Управление вводом-выводом
- •Закрепление устройств, общие устройства ввода/вывода
Взаимодействие процессов и потоков
Сигналы представляют систему прерываний в рамках виртуальной машины процесса. Они предназначены для обработки исключительных ситуаций. Для них предусмотрены средства обработки и управления. Они могут быть синхронными, если инициатор сам процесс, и асинхронными, если инициатор пользователь или другой процесс. Существуют средства посылки и восприятия сигналов. При обработке возможна реакция по умолчанию, маскирование, перехват и обработка собственной программой. С помощью асинхронных сигналов можно передавать процессу информацию о событиях, произошедших в других процессах.
Синхронизация работающих задач
При использовании параллельно работающих задач возникает проблема синхронизации их выполнения. Средствами синхронизации задач являются критические секции, семафоры и мониторы.
Критические секции позволяют организовать внутри задачи фрагмент кода, который должен выполняться в монопольном режиме по отношению ко всем другим задачам. Фрагмент кода ограничен сверху и снизу вызовом соответствующих функций, не имеющих параметров. Критические секции предназначены для временной отмены мультизадачности в рамках одного процесса. Обычно они используются для организации доступа к таким ресурсам, которые можно использовать только последовательно.
Семафоры предназначены для организации правильной последовательности выполнения задач. По запросу задачи операционная система может создать один или несколько семафоров, пригодных для синхронизации задач, выполняющихся в рамках одного или разных процессов. При создании семафора ему присваивается идентификатор, который используется во всех последующих операциях, выполняемых над семафором. Семафор способен находиться в двух состояниях: установленном и сброшенном. При помощи специальных функций задача может переключать семафоры из одного состояния в другое, а также выполнять ожидание момента, когда семафор будет переключен другой задачей. С помощью семафоров удается организовать синхронизацию нескольких задач.
Мониторы представляют конструкцию языка программирования, инициализирующую последовательность одной или нескольких процедур. Локальные переменные доступны только его процедурам, процесс входит в монитор путем вызова одной из его процедур, в мониторе в определенный момент времени может выполняться только один процесс, любой другой процесс вызвавший монитор, будет приостановлен в ожидании доступности.
Обмен информацией
При запуске программы операционная система создает новый процесс, имеющий изолированное адресное пространство. Изоляция повышает надежность системы, так как ни в результате ошибки, ни намеренно одни процесс не сможет адресовать память другого процесса. Однако полностью изолированные процессы не смогут обмениваться данными через оперативную память, что очень неудобно. Передача данных в виде файла на диске работает слишком медленно.
Наиболее распространенными методами обмена информацией между процессами, выполняющими общую задачу являются разделяемая память, каналы и очереди.
Разделяемая память обеспечивает увеличение скорости обмена данными между процессами без использования ядра. При этом выделяется часть виртуального адресного пространства, куда помещаются и считываются данные. Предусмотрены процедуры создания сегмента, установки параметров, подсоединения и отсоединения сегмента. Отсутствие синхронизации является недостатком такого подхода.
Канал - это специальная область памяти, созданная операционной системой по запросу процесса специально для передачи данных между процессами. Канал может иметь имя, а может и не иметь. Работа с каналом напоминает работу со стандартным потоком ввода или вывода. Процесс создает канал, вызывая специально предназначенную для этого функцию, возвращающую идентификатор канала. Затем процесс может передавать данные в канал или принимать их из канала, вызывая функции. В процедуре передачи данных через канал должны участвовать два процесса. Канал же можно использовать только для последовательной передачи данных. Современные ОС позволяют создать каналы между процессами, запущенными на различных рабочих станциях.
Очереди позволяют организовать передачу данных от нескольких "передающих" процессов к одному "принимающему". Они также часто используются для передачи данных между различными задачами внутри одного процесса. Задача, создавшая очередь, называются серверным процессом для очереди. Серверный процесс является владельцем очереди и может извлекать или читать (без извлечения) из нее информацию в любом порядке. Остальные процессы, использующие очередь, называются клиентами. Они могут только записывать данные в очередь, но не читать их оттуда. Таким образом, очередь может служить для передачи данных только в одном направлении. Для синхронизации передачи данных для очереди можно использовать семафоры.
Лекции 3. Управление памятью, режимы адресации
Система управления памятью представляет собой сложный и совершенный механизм, с помощью которого процессы и задачи могут получать в свое распоряжение сотни мегабайт виртуальной памяти.
Реальный режим адресации. В этом режиме работы программы обращались непосредственно к физической памяти, используя двухкомпонентный адрес, состоящий из сегмента и смещения. Как сегмент, так и смещение имели разрядность 16 бит.
Для вычисления физического адреса сегментная компонента сдвигалась влево на 4 бита с заполнением младших бит нулями, а затем к 20-разрядному результату добавлялась 16-разрядное смещение.
-
Сегмент, 16 разрядов
0000
+
-
0000
Смещение, 16 разрядов
-
Физический адрес, 20 разрядов
Рисунок 1 - Адресация памяти в реальном режиме
Программы могли обращаться в любую область оперативной памяти, могли разрушить таблицу векторов прерываний или операционную систему. Размер сегмента памяти не превышал 64 Кбайт, при адресации объектов данных большого размера использовались различные модели памяти, а также ближние и дальние указатели, ближние и дальние функции.
Адресация в защищенном режиме. Этот режим стал возможен с появлением процессора i80286. Программы использовали для адресации таблицы глобальных и локальных дескрипторов. Эти таблицы готовились операционной системой. Был предусмотрен механизм защиты, который предотвращал доступ обычных программ к системной памяти и памяти других программ, а также аппаратная реализация мультизадачности (переключение задач).
Программы обращались к памяти, используя логический адрес, который состоял из двух компонент - селектора и смещения. Селектор служит индексом в таблицах дескрипторов, который содержит 24-разрядные базовые адреса сегментов, их размеры, поля доступа и другую информацию. Для получения 24-разрядного физического адреса базовый адрес складывается с 16-разрядным смещением.
Рисунок 2 - Адресация памяти в защищенном режиме
Создавая дескриптор, операционная система описывает в нем размер памяти. Еесли программа, адресуя блок памяти с помощью данного дескриптора, попытается выполнить чтение или запись за пределами сегмента, произойдет прерывание, и работа программы будет остановлена. Таким образом, надежность операционной системы в защищенном режиме значительно повышается.
Далее, для каждого сегмента памяти, описанного в таблице дескрипторов, хранится его тип. Выделяются сегменты кода, сегменты данных и системные сегменты Программа не может ничего записать в сегмент кода, ей можно даже запретить читать сегменты кода. Сегмент кода содержит программный код и потому может только вы подняться. Сегменты данных предназначены для хранения данных. К системным сегментам обычная программа не имеет доступа. Предусмотрено три уровня доступа, называемые кольцами защиты. Специальное поле доступа дескриптора сегмента памяти содержит номер кольца защиты, необходимый для доступа к сегменту.
Самым привилегированным является нулевое кольцо защиты, в котором располагаются сегменты операционной системы и драйверы. В первом и втором кольцах могут располагаться менее критичные системы, такие, например, как программы обслуживания, программы, работающие с портами аппаратуры, системы управления базами данных и т.п. Обычные программы располагаются в третьем, наименее привилегированном кольце защиты.
Максимальный размер сегмента равен 64 Кбайт, по-прежнему использовались различные модели памяти.
В системе может быть одна глобальная таблица дескрипторов и много локальных таблиц дескрипторов. В любой момент программа может адресоваться к глобальной таблице дескрипторов и к одной из локальных таблиц дескрипторов.
Глобальная таблица дескрипторов описывает сегменты памяти, принадлежащие операционной системе. Некоторые из содержащихся в ней дескрипторов имеют уровень привилегий, равный трем, поэтому к ним можно обращаться даже из обычных программ.
Для каждого процесса создается своя локальная таблица дескрипторов, поэтому адресные пространства процессов разделены физически. Каждый процесс может адресоваться к "разрешенным" сегментам системной памяти и к своим собственным сегментам.
Страничная адресация памяти. С появлением i80386 и более старших моделей процессоров стала возможной работа в 32-разрядном режиме с использованием страничной адресации памяти.
Программы оперируют с логическим адресом, состоящим из 16-разрядного селектора и 32-разрядного смещения. С помощью глобальной или локальной таблицы дескрипторов логический адрес преобразуется в 32-разрядный линейный адрес.
Рисунок 3 - Преобразование логического адреса в линейный
На следующем этапе преобразования 32-разрядный линейный адрес разбивается на компоненты 10-разрядного индекса в таблице страниц. 10-разрядною номера страницы и 12-разрядного смещения.
Операционная система создает в памяти каталог таблиц страниц, а также одну или несколько таблиц страниц. Каждый элемент таблицы страниц описывает один блок памяти размером 4 Кбайт.
Индекс в таблице страниц используется для выбора одной из таблиц страниц. Номер страницы, соответственно, является индексом в таблице страниц.
В таблице страниц среди прочей информации хранится физический базовый адрес страницы. Для получения физического адреса этот базовый адрес складывается с 12-разрядным смещением.
Рисунок.4 - Преобразование линейного адреса в физический
Заполнение таблиц дескрипторов, каталога таблиц страниц и самих таблиц страниц выполняется операционной системой. Программист работает только с логическим адресом. Операционная система имеет большую свободу при отображении физических страниц памяти в пространство логических адресов. Она может перемещать страницы в памяти или изменять физические адреса с сохранением логических адресов. Возможно отображение несмежных страниц памяти в непрерывное логическое адресное пространство, что уменьшает проблему дефрагментации оперативной памяти.
Появилась возможность организации так называемой виртуальной памяти, при использовании которой часть страниц можно разместить на диске в специальном файле и загружать в оперативную память при необходимости, заметая старые или больше ненужные страницы. Виртуальная память создает иллюзию присутствия в системе оперативной памяти очень большого объема.
Модель памяти FLAT. Схема преобразования адресов, начиная с процессоров i80386, позволяет работать с сегментами очень большого размера - порядка 4 Гбайт. Это позволяет отказаться от использования сегментированной модели памяти, достаточно установить базовый адрес, получаемый с помощью сегментных регистров процессора, равным нулю. После этого одним только изменением 32-разрядного смещения можно адресовать любую область памяти. Эта модель памяти называется FLAT или сплошной (несегментированной) моделью памяти. Однако, при использовании этой модели памяти процессор работает в защищенном режиме и размер сегментов может значительно превосходить 64 Кбайт.
Лекция 4. Управление памятью, распределение оперативной памяти
Для организации мультипрограммного режима необходимо обеспечить одновременное расположение в оперативной памяти как можно большего количества задач. При необходимости процессы должно быть предусмотрено обращение разными процессами к одной и той же области памяти для совместного использования. Физическая организация памяти должна обеспечить возможность перемещения информации между оперативной и вторичной памятью.
Память, незанятая ядром ОС, может быть разбита на несколько непрерывных частей. Это разбиение может быть фиксированным, либо динамическим.
Разделы с фиксированными границами
Разбиение оперативной памяти на несколько разделов может быть единовременным или изменяться оператором системы. Разделы с одинаковым размером т.к. все разделы одинакового размера, то не имеет значения в каком из свободных разделов будет размещен процесс;
разделы с разными размерами можно назначить каждый процесс наименьшему разделу, способном полностью вместить данный процесс;очередь для каждого раздела памяти одна очередь для всех процессов процессы распределяются так, чтобы минимизировать внутреннюю фрагментацию.
Распределение памяти при фиксированном распределении
В каждом разделе в каждый момент времени может располагаться по одной программе. В пределах раздела можно применять методы создания программ, которые используются для однопрограммных систем, например, использование оверлейных структур.
При небольшом объеме памяти увеличение количества параллельно выполняемых приложений осуществляется за счет свопинга, при котором из основной памяти во внешнюю (и обратно) перемешается вся программа.
Основным недостатком такого способа распределения памяти является наличие существенного объема неиспользуемой памяти в каждом разделе - это внутренняя фрагментация помяты. Сокращение потерь дают следующие решения:
- выделение для задач разделов такого объема, который им нужен;
- размещать задачи в нескольких областях.
Разделы с подвижными границами
Чтобы избавиться от фрагментации, задачи размещают в оперативной памяти одну за другой. При этом ведется список адресов свободной оперативной памяти. При освобождении раздела осуществляется его объединение со свободным смежным участком.
Список свободных участков может быть упорядочен либо по адресам, либо по объему. Выделение памяти под новый раздел может осуществляться одним из трех способов:
первый подходящий участок;
самый подходящий участок;
самый неподходящий участок.
В первом случае список свободных областей упорядочивается по адресам и память выделяется в области, которая первой подойдет по объему. В области старших адресов будут образовываться фрагменты достаточно большого объема.
При втором способе список свободных областей упорядочен по возрастанию объема этих фрагментов, что позволяет выделять фрагмент памяти, наиболее точно соответствующий требуемому.
Последний способ связан упорядочением свободных фрагментов по убыванию объема свободного фрагмента. С точки зрения производительности он самый эффективный.
Если нельзя выделить нужный объем свободной памяти, хотя суммарный объем свободных областей будет достаточен, организуют уплотнение памяти, что требует дополнительных затрат времени.