Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПЗ / posobie.doc
Скачиваний:
55
Добавлен:
07.02.2016
Размер:
419.33 Кб
Скачать

Взаимодействие процессов и потоков

Сигналы представляют систему прерываний в рамках виртуальной машины процесса. Они предназначены для обработки исключительных ситуаций. Для них предусмотрены средства обработки и управления. Они могут быть синхронными, если инициатор сам процесс, и асинхронными, если инициатор пользователь или другой процесс. Существуют средства посылки и восприятия сигналов. При обработке возможна реакция по умолчанию, маскирование, перехват и обработка собственной программой. С помощью асинхронных сигналов можно передавать процессу информацию о событиях, произошедших в других процессах.

Синхронизация работающих задач

При использовании параллельно работающих задач возникает проблема синхро­низации их выполнения. Средствами синхронизации задач являются критические секции, семафоры и мониторы.

Критические секции позволяют организовать внутри задачи фрагмент кода, который должен выполняться в монопольном режиме по отношению ко всем другим задачам. Фрагмент кода ограничен сверху и снизу вызовом соответствующих функций, не имею­щих параметров. Критические секции предназначены для временной отмены мульти­задачности в рамках одного процесса. Обычно они используются для организации доступа к таким ре­сурсам, которые можно использовать только последовательно.

Семафоры предназначены для организации правильной последовательности выполнения задач. По запросу задачи операционная система может создать один или несколько сема­форов, пригодных для синхронизации задач, выполняющихся в рамках одного или разных процессов. При создании семафора ему присваивается идентификатор, кото­рый используется во всех последующих операциях, выполняемых над семафором. Семафор способен находиться в двух состояниях: установленном и сброшенном. При помощи специальных функций задача может переключать сема­форы из одного состояния в другое, а также выполнять ожидание момента, когда се­мафор будет переключен другой задачей. С помощью семафоров удается организовать синхронизацию несколь­ких задач.

Мониторы представляют конструкцию языка программирования, инициализирующую последовательность одной или нескольких процедур. Локальные переменные доступны только его процедурам, процесс входит в монитор путем вызова одной из его процедур, в мониторе в определенный момент времени может выполняться только один процесс, любой другой процесс вызвавший монитор, будет приостановлен в ожидании доступности.

Обмен информацией

При запуске программы операционная система создает но­вый процесс, имеющий изолированное адресное пространство. Изоляция повышает надежность системы, так как ни в результате ошибки, ни намеренно одни процесс не сможет адресовать память другого процесса. Однако полностью изолированные процессы не смогут обмениваться данными через оперативную память, что очень неудобно. Передача данных в виде файла на диске работает слишком медленно.

Наиболее распространенными методами обмена информацией между процессами, выполняющими общую задачу являются разделяемая память, каналы и очереди.

Разделяемая память обеспечивает увеличение скорости обмена данными между процессами без использования ядра. При этом выделяется часть виртуального адресного пространства, куда помещаются и считываются данные. Предусмотрены процедуры создания сегмента, установки параметров, подсоединения и отсоединения сегмента. Отсутствие синхронизации является недостатком такого подхода.

Канал - это специальная область памяти, созданная операционной системой по запросу процесса специально для передачи данных между процессами. Канал может иметь имя, а может и не иметь. Работа с каналом напоминает работу со стандартным потоком ввода или вывода. Процесс создает канал, вызывая специально предназначенную для этого функцию, возвращающую идентификатор канала. Затем процесс может передавать данные в канал или принимать их из канала, вызывая функции. В процедуре передачи данных через канал должны участвовать два процесса. Канал же можно использовать только для последовательной передачи данных. Современные ОС позволяют создать каналы между процессами, запущенными на различных рабочих станциях.

Очереди позволяют организовать передачу данных от нескольких "передающих" процессов к одному "принимающему". Они также часто используются для передачи данных между различными задачами внутри одного процесса. Задача, создавшая очередь, называются серверным процессом для очереди. Серверный процесс является владельцем очереди и может извлекать или читать (без извлечения) из нее информацию в любом порядке. Остальные процессы, использующие очередь, называются клиентами. Они могут только записывать данные в очередь, но не читать их оттуда. Таким образом, очередь может служить для передачи данных только в одном направлении. Для синхронизации передачи данных для очереди можно использовать семафоры.

Лекции 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. Управление памятью, распределение оперативной памяти

Для организации мультипрограммного режима необходимо обеспечить одновре­менное расположение в оперативной памяти как можно большего количества задач. При необходимости процессы должно быть предусмотрено обращение разными процессами к одной и той же области памяти для совместного использования. Физическая организация памяти должна обеспечить возможность перемещения информации между оперативной и вторичной памятью.

Память, незанятая ядром ОС, может быть разбита на не­сколько непрерывных частей. Это разбиение может быть фиксиро­ванным, либо динамическим.

Разделы с фиксированными границами

Разбиение оперативной памяти на несколько разделов может быть единовременным или изменяться оператором системы. Разделы с одинаковым размером т.к. все разделы одинакового размера, то не имеет значения в каком из свободных разделов будет размещен процесс;

разделы с разными размерами можно назначить каждый процесс наименьшему разделу, способном полностью вместить данный процесс;очередь для каждого раздела памяти одна очередь для всех процессов процессы распределяются так, чтобы минимизировать внутреннюю фрагментацию.

Распределение памяти при фиксированном распределении

В каждом разделе в каждый момент времени может располагаться по одной про­грамме. В пределах раздела можно приме­нять методы создания программ, которые используются для однопрограммных систем, например, использование оверлейных структур.

При небольшом объеме памяти увеличение количества параллельно выполняемых приложений осуществляется за счет свопинга, при котором из основной памяти во внешнюю (и обратно) перемешается вся программа.

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

- выделение для задач разделов такого объема, который им нужен;

- размещать задачи в нескольких областях.

Разделы с подвижными границами

Чтобы избавиться от фрагментации, задачи размещают в оператив­ной памяти одну за другой. При этом ведется список адресов свободной оперативной памяти. При освобождении раздела осуществляется его объединение со свободным смежным участком.

Список свободных участков может быть упорядочен либо по адресам, либо по объему. Выделение памяти под новый раздел может осуществляться од­ним из трех способов:

  • первый подходящий участок;

  • самый подходящий участок;

  • самый неподходящий участок.

В первом случае список свободных областей упорядочивается по адресам и память выделяется в области, которая первой подойдет по объему. В области старших адресов будут образовываться фрагменты достаточно большого объема.

При втором способе список свободных областей упо­рядочен по возрастанию объема этих фрагментов, что позволяет выделять фрагмент памяти, наиболее точно соответствующий требуемому.

Последний способ связан упорядочением свободных фрагментов по убыванию объема свободного фрагмента. С точки зрения производительности он самый эффективный.

Если нельзя выделить нужный объем свободной памяти, хотя суммарный объем свободных областей будет достаточен, организуют уплотнение памяти, что требует дополнительных затрат времени.

Соседние файлы в папке СПЗ