Выбери формат для чтения
Загружаем конспект в формате doc
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Лекции по операционным системам и оболочкам.
Карамова Людмила Михайловна.
Лекция №1
Введение.
Все ПО условно можно разделить на:
1 Прикладное
2 Системы программирования
3 Управляющая и обслуживающая программа
Это и есть Операционная Система (ОС).
ОС - это набор программ как обычных так и микропрограмм, которые обеспечивают возможность использования аппаратуры компьютера имея целью сделать ее более доступной, и по возможности удобной для пользователя (микропрограммы размещаются в специальной управляющей памяти очень высокого быстродействия; состоят из индивидуальных микрокоманд, которые более элементарны, чем команды машинного языка).
Команды машинного языка реализуются с помощью микропрограмм, причем каждой команде соответствует целая, возможно большая микропрограмма.
Основные функции ОС – управление ресурсами и интерфейс пользователя. В них входят такие функции как:
• Разделение ресурсов между пользователями
• Обеспечение возможности работы с общими данными
• Планирование доступа к общим ресурсам
• Эффективное выполнение операций ввода-вывода
• Защита ресурсов
• Восстановление информации в случае возможных ошибок
Ресурсы – это процессор или процессоры, память, устройство ввода-вывода, данные.
ОС взаимодействует с:
• Операторами
• Прикладными и системными программами
• Администрацией
• Программами
• Аппаратными средствами
Сама ОС имеет статус самого полномочного пользователя: ей разрешен доступ ко всем аппаратным средствам, ко всем программам и данным и у нее самый высокий авторитет.
Типы ОС:
1) ОС пакетной обработки
2) Системы разделения времени (интерактивные)
3)Системы реального времени
Это реагирование по времени ответа.
По количеству процессоров:
1) Однопроцессорные
2) Многопроцессорные
По количеству пользователей:
1) Однопрограммные
2) Мультипрограммные
Поколения ОС:
a) Нулевое 40-е гг. ОС не было
b) Первое 50-е гг. системы пакетной обработки, они после окончания очередного задания «прочищали» ЭВМ и запускали следующее задание.
c) Второе 60-е гг. первые мультипрограммные и мультипроцессорные системы и системы реального времени.
d) Третье сер 60-х – сер 70-х гг. многорежимные системы – они связаны с появлением мощной ЭВМ System360 общего назначения. Они обеспечивали работу в режимах пакетов, интерактивном и реального времени одновременно, очень большие, имели сложный язык управления и требовали значительной подготовки пользователя.
e) Четвертое от сер 60-х – до наших дней
Характеристики современных ОС:
▪ Сети
▪ Возможность доступа к территориально удаленным компьютерам
▪ Появление ПК
▪ Дружественный интерфейс
▪ Поддержка БД
▪ Концепция виртуальных машин
▪ Концепция распределенной обработки данных (целесообразно иметь вычислительную мощность там, где это необходимо, вместо того , чтобы передавать данные для обработки в большие ВЦ ).
Перспективы развития ОС: цены на аппаратуру и габариты будут падать, скорость производства и емкость ОП расти. Переход к ультробольшим интегральным схемам. Распространение многопроцессорных архитектур, языков параллельного типа. Реальные машины будут скрыты от пользователя (виртуальные машины).
Совместимость – возможность выполнения программ на многих компьютерах.
Повышение надежности, понятности ОС и удобства сопровождения. Скорость средств передачи данных будет расти, а стоимость падать, повысятся требования к эффективности управления данными.
Широкое внедрение принципа распределенной обработки данных: отдельные ЭВМ будут реализованы в различных процессорах входящих в состав крупных сетей. Максимально полная загрузка компьютера будет иметь гораздо меньшее значение, чем его постоянная готовность к работе, надежность гибкости и простота в использование.
Концепции проектирования ОС
1) Целью ОС является: обеспечение максимальной производительности труда всего сообщества пользователей, а не каждого в отдельности.
2) ОС стремиться удовлетворить наиболее общие потребности всех пользователей а не конкретные требования их конкретных представителей.
3) Пользователь согласен оплачивать издержки за предоставленные издержки за предоставленные услуги, к которым относятся : оперативная память (ОП) под ядро ОС, внешняя память под ядро ОС, время исполнения программ ОС.
Спорные концепции
1) Чем определить производительность труда?
Варианты: 1. Количество вычислений в единицу времени (пропускная способность)
2. Время ожидания ответа
2) Какие операции следует разрешать выполнять пользователям?
Варианты: 1. Любые (тогда пользователь должен быть хорошо подготовлен; система будет уязвимой)
2. Ограниченный набор операций (уменьшается вероятность ошибок, но и уменьшается эффективность программирования)
3) Какими ресурсами управлять?
Варианты: 1. Любыми (тогда пользователь должен быть хорошо подготовлен; система будет уязвимой)
2. Ограниченный набор операций (уменьшается вероятность ошибок, но и уменьшается эффективность программирования)
4) Должна ли ОС заменять оператора или только помогать ему?
5) Какого рода услуги предоставлять с помощью управляющих программ, какого уровня мощности они должны бать?
6) Следует ли тратить дополнительные средства на обеспечение справедливого распределения ресурсов между пользователями.
7) На сколько универсальной должна быть операционная система.
Структура объектной программы.
1) Заголовок (имя, длина) нужен для вычисления.
2) Перечень внешних ссылок (в объектных программах определенных и не определенных)
3) Непосредственный код программы и ее данные
4) Модификаторы
5) Концевая запись.
Загрузчики.
1) Абсолютные загрузчики загружают программу с фиксированного адреса всегда с одного и того же. Самые простые.
2) Перемещающие загрузчики запрашивают у ОС адрес начала загрузки программы; считывают поочередно все записи объектной программы; увеличивают адрес записи на адрес начала загрузки программы (start) и размещают запись по полученному адресу; считывают все модификаторы, адрес каждого модифицированного поля увеличивает на start и выполняет модификацию.
3) Связывающие загрузчики обычно делают два просмотра. На первом просмотре запоминается таблица внешних имен; входной поток представляет собой набор объектных программ. Как правило связывающие загрузчики бывают двухпроходные. На вход таким загрузчикам поступает набор объектных моделей. На первом просмотре анализируются записи H (heard), а также записи содержащие перечень внешних разрешенных и неразрешенных ссылок. Все разрешенные ссылки имеют вид : имя значение
К значению добавляется адрес начала загрузки очередного модуля и полученная пара имя – значение заносится в таблицу внешних ссылок. Адрес начала загрузки очередного модуля находится как сумма адреса начала загрузки предыдущего модуля и длины этого модуля. В результате получается таблица внешних имен.
Пример : входной поток
H PROG1 1000
D P11 200 P12 400 // РАЗРЕШЕННЫЕ
R P21 P22 P31 P32 // НЕРАЗРЕШЕННЫЕ
T……………….. // ТЕЛО ПРОГРАММЫ
M……………… // МОДИФИКАТОРЫ
E 200 // КОНЕЦ
H PROG2 500
D P21 10 P22 20
R P11 P12 P31 P32
T………………..
M………………
E ……………….
H PROG3 1200
D P31 500 P32 150
R P11 P12 P12 P22
T………………..
M………………
E ……………….
На первом просмотре будет сгенерированна таблица
DEFTAB
PROG1 2000 //адрес загрузчик получит у ОС
P11 2200
P12 2400
PROG2 3000 //2000+ длина предыдущего модуля
P21 3010
P22 3020
PROG3 3500
P31 3А00
P32 3650
Иногда в таблицу включается также информация о том, является ли ссылка модулем , и если нет в каком модуле она определена. Такие таблицы называются таблицами перекрестных ссылок. На этом этапе загрузчик обнаруживает ошибки типа дважды определенное имя и если анализирует записи R то ошибки типа неопределенное имя. На втором этапе происходит непосредственная загрузка модификация кода. При этом используются записи Т и М. последним действием загрузчика является передача управления команде адрес которой находится в одной из записи Е.
4) Динамическое связывание существуют загрузчики которые выполняют связывание программ во время их выполнения. Накладные расходы: приходится хранить DEFTAB и модификаторы все время выполнения программы.
Достоинства : некоторые модули могут вообще не использоваться при выполнение программ с конкретным набором данных.
5) Раскручивающие загрузчики как загрузить сам загрузчик на пустой машине?
Возможные подходы:
1) «Запомнить» код загрузчика в ПЗУ (это абсолютный загрузчик который будет загружать ОС). При старте машины он будет автоматически запускаться.
Недостаток: трудно модифицировать.
2) Поручить загружать некий простой загрузчик оператору.
Недостатки: потенциальные ошибки.
3) Раскручивающие загрузчики. В ПЗУ зашивается запись на загрузку другой записи фиксированной длинны с определенного места. Если весь загрузчик не помещается в эту незагруженную запись, то в конце ее помещается команда на загрузку следующей записи и т.д. Такого рода загрузчики должны помещаться в начале любой программы, которая будет работать на пустой машине.
6) Оверлейная загрузка (структура с перекрытием) Пусть программа имеет следующую структуру
некий модуль A
B C
D I/H K R
ИМЯ ДЛИНА START
A 1000 2000
B 1000 3000
C 1000 3000
D 1000 4000
E 1000 5000
I 1000 4000
H 1000 5000
K 1000 4000
M 1000 4000
Одновременно в модуле не более 4 модулей. В этом случае одновременно может понадобиться максимум 4000 байтов. Если загружены все модули то нужны будут 9000 байтов. Можно заметить что модули В и С не нужны одновременно и могут загружаться с одного и того же адреса. Чтобы обеспечить это структуру программы описывают с помощью специального языка.
Пример: PARENT A
CHILD B
PARENT A
CHILD C
PARENT B
CHILD D
PARENT B
CHILD I,H
…………………..
Далее связывание происходит по обычным правилам с той лишь разницей, что адрес начала загрузки очередной акции будет вычислен как адрес начала загрузки ее отца + длина отца.
Сгенерированные коды хранятся во внешней памяти. Оверлейный загрузчик хранит во время использования таблицу начальных адресов. В своем первом сегменте в специальной области он имеет команды передачи управления, а так же всю таблицу секций с их начальными адресами и полем признаков загрузки. При обращении к секции происходит активизация команд передачи управления. Они анализируют поле загрузки данной секции. Если она загружена, то передают ей управление. Иначе загружают ее, корректируют таблицу и передают управление к загруженной секции.
Управление памятью.
Память это один из основных ресурсов.
Часто используют методы позволяющие рассматривать внешнюю память, как расширение оперативной. Создается видимость большого объема ОП (оперативная память). Это существенно упрощает программирование, повышает эффективность использования ресурсов, но за счет уменьшения скорости выполнения программ. Часть ОП всегда должна быть занята ядром ОС – базовым набором управляющих программ. ОС работают безошибочно в отличие от программ пользователя. Важными задачами ОС являются защита программ и данных от потерь и искажений вызванных ошибками пользовательских программ. Управление ОП зависит от того, каким образом она организована. Под организацией понимают то, как ОП предоставляется пользователям и используется:
• Скольким программам одновременно предоставляется ОП
• Каких размеров предоставлены программам блоки памяти. Можно ли менять эти размеры.
• Непрерывны ли участки памяти выделенные программами.
• Предоставляют ли программам один и тот же участок памяти или можно ее двигать.
Стратегии управления ОП определяют каким образом будет работать память конкретной организации при различных решениях следующих вопросов:
• Когда следует помещать новую программу памяти
• Будем ли загружать программу в память после следующего запроса ОС или будем упреждать запросы
• В какое именно место ОП помещать очередную программу для исполнения
• Будем ли стремиться забивать плотно всю ОП или будем экономить время за счет более быстрого размещения.
• Если ОП заполнена, но необходимо загрузить новую программу, то какую из уже загруженных вытолкнуть.
Стратегии управления направлены на то , чтобы обеспечить наилучшее возможной использование памяти и делятся на стратегии выборки (выборка по запросу и выборка упреждающая), стратегии замещения и стратегии размещения.
Связное и несвязное распределение памяти.
Связное когда каждой программе выделяется сплошной блок ОП. При несвязном программа разбивается на несколько блоков (сегментов), которые размещаются на необязательно соседствующих участках ОП. Несвязное распределение труднее обеспечить, но оно имеет преимущества позволяющие загружать программу в несколько свободных кусков памяти не заставляя ее ждать, когда освободиться один большой кусок. Память распределяет планировщик.
Простое непрерывное распределение.
Пользователю выделяется вся ОП кроме некоторой фиксированной части занимающей ядром ОС. Обычно ядро размещают с нулевого адреса (так как ОП бывает разных размеров), поэтому программа загружается с фиксированного адреса равного размеру ядра. Значит можно использовать абсолютный загрузчик. Программы ожидающие искажения хранятся в очереди. Простая управляющая программа следит за очередью, определяет момент завершения очередной программы и загрузки следующей.
Достоинства: минимальные затраты на реализацию: дешевые трансляторы, абсолютный загрузчик, можно отказаться от защиты памяти.
Недостатки: вызывает два вида потерь: 1) простой процессора во время когда исполненный процесс ожидает наступления события. 2) нерациональное использование ОП. Большие программы вообще не возможно выполнить.
Распределение с несколькими непрерывными разделами.
MFT - мультипрограммы с фиксированным числом задач.
В ОП одновременно загружаются несколько программ. Первоначально при загрузке ОС вся оставшаяся от ядра память делиться на несколько разделов фиксированной длины. Длину указывает оператор при загрузке. Обычно один раздел маленький, один большой и несколько средних. Задачи стартуют в тот раздел, который им назначен.
Достоинства: обеспечивается мультипрограммирование, а следовательно уменьшается простой процессора.
Недостатки: не используется часто ОП и большие программы вообще не возможно выполнить.
Распределение с переменным числом разделов.
MTV
Первоначально вся ОП за исключением ядра ОС разбивается на разделы согласно потоку заданий. После окончания работы очередного задания в занимаемый им раздел памяти могут стартовать следующие задания.
Планировщик ведет список адресов свободной памяти, выделяет разделы для работ. Выбор подходящего раздела для загрузки процесса планировщик может осуществлять либо по принципу первый подходящий либо по принципу наиболее подходящий. В последнем случае система работает хуже в среднем: со временем появляются много маленьких кусочков свободной памяти и для поиска наиболее подходящего кусочка требуется просмотр всего списка кусков свободной памяти. В первом случае поиск подходящего куска или места требует в среднем просмотр половины списка, однако в этом случае большой кусок может быть использован на маленькую программу, затем должен был ждать освобождения места.
Достоинства: 1.Относительная простота реализации в частности требуются настраивающие загрузчики
2. Обеспечивается мультипрограммирование.
Недостатки:
1.Фрагментация памяти
2. Невозможность выполнения больших программ.
Подвижные разделы.
Хотя в системе могут иметься какое-либо большое количество свободной памяти (например 54 КБ), но программа (например Р = 50 КБ) стартовать не может, так как свободная память разбита на небольшие разделы. Если бы уплотнить разделы, то можно было стартовать и Р. Такую работу по уплотнению разделов ведут ОС с перемещающимися разделами. Очевидно, что другую программу нельзя просто скопировать на новое место, некоторые адреса его надо будет скорректировать (динамическая настройка). Перемещение разделов имеет смысл применять лишь на ЭВМ с неявным базированием: при работе программы используется регистр в который помещается адрес начала ее загрузки; этот адрес прибавляется ко всем целевым адресам программы. При перемещение программы таким образом достаточно поменять значение базового регистра. Проблема тем не менее остается: некоторые адреса могут быть переданы подпрограммами или находиться на регистрах процессора. Поэтому ОС должна ждать окончания операции ввода – вывода и окончания работы порожденных задач, прежде чем начать сдвигать разделы.
Достоинства: осуществляет глобальную оптимизацию памяти (сдвиг разделов происходит лишь тогда, когда очередному процессу не хватает памяти, а сумма кусков свободной памяти достаточна для его загрузки )
Недостатки: высокая стоимость ЭВМ с базовыми регистрами, расходы на перемещение разделов, невозможность выполнения больших программ.
Проблемы связанные с делением ОП на разделы.
Основная проблема – это защита памяти.
Меры по защите должны быть приняты самые жесткие. Нельзя допустить чтобы задание из одного раздела испортило данные из другого раздела.
a) Защита с помощью граничных регистров. Есть два дополнительных граничных регистра, на которых хранятся начало и конец области активного процесса. Каждое обращение процесса к ОП контролируется ОС : оно должно быть в диапазоне заданном граничными регистрами.
b) Ключи защиты памяти. С каждым разделом связывается свой ключ защиты (какое-то число). Этот же ключ присваивается процессу стартовавшим в этот раздел. Каждое обращение памяти контролируются на предмет совпадения ключей.
Своппинг.
Рассматривая внешнюю память, на расширение ОП можно повысить эффективность использования ОП. Например, при перемещение работы можно сначала откачать ее во внешнюю память, а затем из внешней в ОП. Можно так организовать своппинг, что в одном разделе будут одновременно несколько работ или одна работа будет выполнена в нескольких разделах. Своппинг позволяет перераспределять ресурсы не запуская при этом работы с самого начала. Он позволяет выполнять одновременно много малоактивных работ, а так же быстро стартовать высоко приоритетные работы.
Методы управления свободной памятью.
Планировщик должен вести учет свободных разделов. В большинстве случаев планировщики ведут список свободных разделов.
a) Список упорядочивается по размерам разделов. Этот способ удобен при выборе раздела по принципу наиболее подходящий (например, бинарный поиск). Используется редко.
b) Список упорядочивается по адресам. Удобен для слияния разделов.
c) Система близнецов. Ведутся несколько списков, каждый из которых хранит блоки размеров 2ª . при запросе просматривается список наиболее близкий по размерам запроса. Если этот список пуст, то a увеличивается на единицу, и просматривается новый список. Если он не пуст, то первый свободный блок разбивается на два близнеца. Один выделяется по запросу, второй заносится в список блоков размером 2ª. Если список пуст, то a еще увеличивается на единицу и т.д. Все списки упорядочены по адресам. Если в список попадают два смежных блока, то они сливаются и переводятся в новый список блоков большего размера.
Разрывное распределение.
Один из методов борьбы с внешней фрагментацией. Это выделение работе нескольких областей ОП необязательно смежной. При таком подходе эффективность использования ОП растет, не зависимо от того используются внешняя память, как расширение ОП или нет. В этом случае у пользователя отпадает необходимость знать о физических адресах своей программы.
Отображения и память.
Физическая (абсолютная, фактическая, реальная) память – это фиксированное число упорядоченных ячеек, обращение к которым осуществляются с помощью уникального числа фиксированной длины (адреса).
ОП называется абсолютным адресным пространством. Программист обращается к ОП с помощью множества логических имен для которых характерна неупорядоченность и символьное изображение. Это пространство имен.
Система программ должна связывать логические имена абсолютными адресами. Обычно такое связывание происходит в два этапа. ОС проводит соответствие между виртуальным адресом и абсолютным адресом программы. Если они совпадают, то генерируется абсолютный код и далее он будет загружаться абсолютным загрузчиком. Если абсолютное адресное пространство совпадает с пространством имен, то фактически работают интерпретаторы. После настройки на абсолютное адресное пространство виртуальные адреса могут теряться или храниться. Более гибкое решение задачи эффективного использования памяти достигается если транслятор формирует виртуальный адрес, а ОС выполняет второе отображение не один раз, а несколько при каждом обращении. Такие системы должны хранить виртуальные адреса все время исполнения, адреса же соответствующие физическим ячейкам могут изменяться.
Сегментная организация памяти.
Пользователь может рассмотреть свою работу, как совокупность логически связных частей (данные, процедуры, набор процедур и функций). Длина сегмента может меняться. Обращение к элементам сегмента осуществляется в терминах: начало сегмента, смещение в нем. Адресация внутри одного сегмента непрерывна, но в целом сегменты одного пользователя могут и не составлять непрерывной области памяти. Вообще не обязательно чтобы они все были загружены одновременно. Если все сегменты обязаны быть в ОП, то это распределение принимает форму подвижных разделов. Более общий подход, это когда сегментации разрешено бать то в ОП, то во внешней памяти, таким образом здесь осуществляется неявное перекрытие
Достоинства метода:
1. Реализуются перекрытия, даже если программист их явно не задал;
2. Возрастает коэффициент мультипрограммирования;
3. Могут выполняться большие программы.
Недостатки метода:
1. Накладные расходы (оперативная память под таблицу сегментов + аппаратные регистры таблицы сегментов + время работы программ + время работы управляющих программ);
2. Внешняя фрагментация памяти.
Ограниченное распределение памяти
Вся ОП (оперативная память) разбивается на страницы фиксированной длины (=2k).
Виртуальное адресное пространство также разбивается на страницы фиксированной длины. Всякое обращение имеет вид (p,d), где p - № стра-ницы, d – смещение в ней. Каждой виртуальной странице ставится в соответствие физическая страница с помощью таблицы страниц. Для каждого задания в ОС заводится таблица страниц, в p-ой записи таблицы хранятся признак загрузки и номер соответствующей физической страницы для p-ой виртуальной страницы задания. В таблице страниц каждого задания столько записей сколько страниц в задании.
Обращение к ОП осуществляется так: в специальном регистре страниц хранится адрес начала таблицы страниц PMT (page map table) активного задания. По виртуальному адресу (p,d) берется p-ая запись этой таблицы, анализируется загружена ли таблица в ОП, если “да”, то p меняется на f (№ физической страницы); если ”нет”, то вызывается страничное прерывание, процесс блокируется, при помощи ОП подгружается p-ая страница, процесс ставится в очередь готовых процессов. Если свободной памяти нет, то процесс либо ожидает освобождения страницы, либо какая-то из страниц выталкивается. Для поиска свободной страницы ОС ведет глобальную таблицу страниц. В простейшем случае это битовый массив. Каждой странице соответствует 1 бит в этом массиве, он равен единице, если страница занята, и 0, если свободна. В более сложных случаях для каждой физической памяти может отводиться несколько битов.
Достоинства:
те же, что ив сегментной организации.
Недостатки:
1. Накладные расходы (таблицы страниц, регистры таблицы страниц, время доступа к исполнительному адресу, время работы управляющих программ; программы ведут глобальную таблицу страниц);
2. Внутренняя фрагментация памяти: длина каждого процесса не обязательно кратна длине страницы.
Проблемы:
1. Какого размера страницу выбрать: с одной стороны, чем больше размер страницы, тем больше внутренняя фрагментация; с другой стороны, чем меньше размер страницы, тем больше размеры таблиц.
2. Сколько страниц каждого задания хранить в ОП одновременно.
3. Если процессу нужна страница, а загрузить ее некуда, то вытолкнуть ли страницу того же процесса или просмотреть и страницы других процессов, например, менее приоритетных.
Стратегия вытеснения страниц
Какую страницу вытеснить в ситуации нехватки страниц:
1 стратегия: FIFO (first input-first output) – легко реализуется, но плохо ведет себя.
Все остальные стратегии придерживаются гипотезы о локальности ссылок: следующие обращения к ОП будут вблизи от того, которое только что случилось.
2 стратегия: LRU () – вытесняется страница, которая дольше всего не использовалась. Для каждой страницы заводится интервальный таймер. Через каждый квант времени для страниц к которым не было обращения он возрастает на единицу. При загрузке страницы таймер равен нулю.
3 стратегия: LFU(list frequently used) – вытесняется страница, к которой реже всего обращались за определенный промежуток времени.
Для ответа на вопрос о числе страниц, которое надо отвести каждому процессу, некоторые системы используют идею рабочего множества страниц. (W-такое количество страниц, при котором число страничных прерываний за квант времени приемлемо. Выше которого число страничных прерываний уменьшается несущественно, но ниже которого это число возрастает существенно.)
Сегментно-страничное распределение памяти
Учитывает плюсы сегментного распределения с учетом логики программы и плюсы страничного распределения от разбиения ОП на куски небольшой стандартной длины.
Реализация:
Программа разбита на сегменты, сегменты на страницы. Каждому процессу соответствует своя таблица сегментов, она содержит адрес начала таблицы страниц данного сегмента. Т.о. каждому сегменту соответствует своя таблица страниц. Обращение к ОП имеет вид (s,p,d), где s-№ сегмента, p-№ страницы, d-смещение в этой странице. Есть регистр таблицы сегментов активного задания.
Без аппаратной поддержки такое обращение тройки к ОП займет много времени, поэтому используют различные способы аппаратной поддержки, например, кэш-память. Это очень быстрая память, адресуемая по назначению. В нее помещают наиболее часто используемые страницы процессов. Поиск требуемой страницы ведется одновременно в кэш и обычной ОП, чтобы не потерять время, если страницы в кэш нет.
Недостатки:
Организация – это значительные накладные расходы.
Управление процессором
Для исполнения каждой работы необходимы ОП и процессор.
Исполнение программы с ее данными называют процессом.
Фактический и виртуальный микропроцессор(МП)
В мультипрограммном режиме создается иллюзия того, что каждый процесс независимо от других имеет свой собственный МП. Этот МП называется виртуальным.
На самом деле процессы по очереди владеют одним МП – фактическим.
Как и за виртуальной ОП за виртуальным МП приходится расплачиваться и снижением скорости исполнения программы и расходами на выполнение обслуживающих программ.
Состояние процессов
В простой мультипрограммной системе каждый процесс может находиться в одном из 3-х состояний:
1. готовый;
2. исполняемый (активный);
3. заблокированный.
В состоянии исполнения находится лишь один процесс, которому выделен МП. В других состояниях могут находиться много процессов одновременно.
Готовый – это процесс, который может исполняться как только ему выделяет МП. Все остальные ресурсы у него уже есть. Говорят что готовый процесс обладает виртуальным МП.
Исполняемый – обладает фактическим МП.
Заблокированный – процесс, который не может исполняться, т.к. ждет наступления определенного события (освобождения ресурсов, подкачки страницы, окончания операции ввода-вывода).
Чтобы заблокированный процесс не занимал активную память, его можно откачивать во внешнюю (например, в диалоговых системах). В некоторых системах во внешнюю память откачивают и готовые процессы, переводя их в заблокированное состояние (например, в системах реального времени).
В каком бы состоянии ни находился процесс системы он получил часть необходимых ему ресурсов. Такое выделение части ресурсов наз-ся созданием процесса.
Интерактивные процессы создаются каждый раз, когда пользователю разрешается войти в систему.
Пакетная работа поступает в очередь работ и находится там в состоянии ввода до тех пор, пока о не выделяются все ресурсы.
Существуют три причины выхода процесса из активного состояния:
1. завершился;
2. блокирует сам себя;
3. снимается с фактического процессора управляющей программой ОС ( причины: страничное прерывание, закончился квант времени).
Выбор процесса наз-ся планированием, его делает планировщик: работе выделяется ОП и внешняя память, файлы и другие ресурсы. Она заполнится во все таблицы ОС. Созданный процесс переводится в состояние готовности. Планировщик делает обратные действия, связанные с завершением процесса.
Выделение МП осуществляет диспетчер (supervisor или монитор).
Для управления процессов ОС ведет таблицу дескрипторов процессов или блоков управления процессов РSВ. Эти блоки могут быть организованы по-разному. В них включается такая информация как:
• уникальный идентификатор процесса
• приоритет процесса
• указатели памяти
• указатели выделенных ресурсов
• область сохранения ресурсов и др.
В РSВ сосредоточена вся ключевая информация о процессах и она используется ОС для управления процессом. Например, при переключения процессов будет использована область сохранения регистров, а также изменено поле состояния. РSВ – объект представления процесса в ОС.
Во многих вычислительных системах есть специальный регистр, хранящий адрес РSВ активного процесса. Часто также аппаратно реализуются операции, обеспечивающие быструю загрузку и восстановления информации в ряд РSВ.
ОС выполняет следующие операции над процессами:
• создание
• уничтожение
• возобновление
• изменение приоритета
• блокирование
• деблокирование
• запуск
Создание включает присвоение имени, включение этого имени известных системе, определения начального приоритета, выделение начальных ресурсов, формирование РSB. В случаях, когда первый процесс порождает другие, поддерживается иерархическая структура процесса.
Уничтожение возвращает ресурсы выделенные процессу, стирается имя процесса во всех таблицах и списках системы, освобождается PSB. Уничтожение процесса усложнено, если он родительский: дочерние процессы могут при этом уничтожаться или оставаться жить самостоятельно.
Возобновление это подготовка процесса к запуску с той точки, в которой он был приостановлен.
Изменение приоритета модификация PSB
Приостановка может быть на короткое или длительное время. Причиной может быть решение системы разгрузиться в пиковых ситуациях или появление высокоприоритетного процесса. Реализуется по-разному в различных ОС. Ресурсы могут полностью отбираться или частично. Приостановка может быть вызвана также ненадежной работой системы, сомнениями пользователя в результатах работы процессов и в тупиковых ситуациях.
Диспетчеризация процессов.
Диспетчер выбирает из очереди готовых процессов те которые предоставляет процессор. Можно для этого учитывать приоритет (эффективно, но мало). Для выбора используют также информацию о:
• времени создания процесса
• время появления родительского процесса
• заказанное время обслуживания
• время который процесс не обслуживается
• объем и вход заказанных и используемых ресурсов
факторы могут использоваться различными способами, что приводит к существованию множества дисциплин диспетчеризации.
Дисциплины с одной очередью.
Все они стремятся предоставить пользователю равные услуги: ни один не должен ждать дольше в среднем, чем другой. Более точная формулировка основана на положение среднего времени ожидания. Пусть система работает с некоторой смесью процессов в установленном режиме. Тогда для некоторого готового процесса можно измерить время ожидания. Повторить эти измерения много раз получим последовательность времени, среднем временем ожидания называют среднее значение элементов последовательности при бесконечном числе измерений. Существуют алгоритмы нахождения среднего времени ожидания (теория очередей).
Стратегию предоставления равных услуг можно определить как стратегию обеспечивающую для всех процессов одно и то же среднее время ожидания.
1. можно обслуживать процессы в порядке их появления до конца, если только они не заблокируют себя (дисциплина FIFO)
2. поскольку процессы все таки переходят в заблокированные, то дисциплина FCFS является модификацией FIFO.
Стоимость реализации обеих дисциплин низка: очередь готовых процессов здесь поддерживается в порядке возрастания времен создания процесса. Перераспределение не происходящего процесса.
Недостатки: короткие процессы должны ждать в среднем столько же сколько и длинные, нельзя считать равное время средним эквивалентом равных услуг для коротких и длинных процессов. Среднее время ожидания может неограниченно расти, когда система приближается к пределу своей загрузки. С увеличением дисперсии времен ожидания среднее время ожидания увеличивается (это следует из теории очередей).
Обе дисциплины не применимы для интерактивных систем, которые должны поддерживать допустимое время ответа.
3. SJN минимального общего среднего времени ожидания. Приоритет учитываемый при диспетчеризации основан на заказанном времени выполнения. Обычно SJN реализуется без перераспределения процессора. Можно показать, что при SJN срок общего времени средний по сравнению с FCFS. При этом время ожидания коротких становится меньше, а длинных большим. Растет дисперсия времени ожидания. SJN быстро избавляется от коротких процессов, но трудно предсказать, когда будет обслужен длинный. Можно ввести в SJN перераспределение МП: снимать с МП активный процесс, если в очереди появился более короткий.
4. неразумно снимать с МП длинный процесс, который осталось выполнить немного, если в очереди появился короткий. SRT(Shortest remained time). Делает активным процесс до конца исполнения которого осталось наименьшее время. Оставшееся время – это разность между запушенным и использованным; понадобятся встроенные часы для измерения использованного процессом времени. SRT реализуют обычно с перераспределением МП. Здесь короткие процессы выигрывают еще больше, чем SJN. Показано, что достаточно минимальное общее время среднего ожидания.
Недостатки SRT и SJN:
1.бесконечное откладывание длинных процессов, непредсказуемость времени ожидания.
2.непригодность для интерактивных процессов.
3.у пользователя появляется желание завидеть заказанное время ожидания (можно снять процесс как только кончиться заказанное время или повышать планку и использовать сверх заказанного времени).
Можно также уменьшить среднее время если предоставлять МП в первую очередь те процессы, которые потребуют мало процессорного времени. Например, процессы с большим числом обменов. Но это должно быть известно системе. Например, очередь готовых процессов можно организовать в порядке интервалов времени с момента последней команды.
5.если к SRTдобавить требования гарантийного обслуживания, то можно получить новую дисциплину RR (round - robin) циклическая дисциплина с перераспределением МП и простым управлением очередью. В ней каждому процессу по очереди предоставляется фиксированный квант времени q. За это время процесс может закончиться если заблокирован. Если этого не случилось, то он снимается с МП и ставиться в конец очереди. Процесс – готов. Дале приоритет процесса растет с ростом его времени нахождения в очереди готовых. Если в системе n процессов, то каждый из них получит 1/n часть времени МП. Неявно здесь отделяется предпочтение коротким процессам, но без ущемления интересов длинных. Общее среднее время ожидания может быть больше чем в остальных дисциплинах из-за переключения процессов. Дисциплина мирно используется в интерактивных системах. Эффективность ее зависит от выбора кванта q. С ростом q дисциплина становится похожа на FCFS. При маленьких квантах будут большие расходы на переключение процессов.
Дисциплины с несколькими очередями.
Используя информацию из дескриптора МП можно разделить процесс на разные классы и каждый класс обслуживается с помощью своей дисциплины. Стандартными считается деление на три класса: пакетные, интерактивные, real – time. В каждом классе может быть своя очередь готовых и заблокированных или же одна очередь заблокированных для всех классов. Обычно очередь real – time и интерактивная обслуживаются с помощью RR, с разными квантами t. Очередь пакетных процессов обслуживается с помощью FCFS. Часть МП времени отдается каждому классу процесса. Связь между очередью и процессом может быть статична. Расходы на введение очередей можно сократить следующим способами:
1. Уменьшить число очередей и ранжировать очереди по приоритетам. Сначала процесс попадает в очередь с самым высоким приоритетом, некоторое время остается в ней, затем постепенно спускается в очереди с более низким приоритетом.
2. Все очереди обслуживаются циклически, увеличивая квант времени с понижением приоритета очереди. Для последней очереди квант возможен бесконечность. Можно использовать обратную связь (информацию о процессе). Так у процесса с большим числом операций обмена можно повысить приоритет, у вычислительных процессов – понизить.
Планирование работ.
Заключается в выделение и изъятии ресурсов отличных от МП.
В первую очередь планирование решает допустить ли процесс в систему.
Причины отказа:
1. Ограничены физические ресурсы.
2. Не хочется ухудшать характеристики обслуживания.
Планировщик может принять решение об удаление некоторых процессов из системы.
Выделяемые ресурсы:
• Файлы и устройства
• Конкретные программы (компиляторы…)
• Память (ВП,ОП)
При выборе дисциплины планирования можно использовать также подходы, что и при диспетчеризации. Приоритет планирования назначается из информации об требуемых ресурсах, необходимости установки редкой программы, использования резидентного компилятора и т.д.
Средства гарантирующие выбор могут быть :
1. увеличение приоритета всякий раз при отказе
2. увеличение приоритета с ростом времени ожидания
3. установка максимального количества возможных отказов.
Обработка прерываний
Прерывание – это событие, при котором изменяется нормальная последо-вательность выполняемых процессором команд.
Сигнал прерываний обрабатывается аппаратурой ВС.
Действия по обработке прерываний:
1. В некоторую фикс. ячейку памяти заносятся характеристики произошед-шего прерывания.
2. Запоминается состояние прерванного процесса ( значение IP, PC, спецификация режима – супервизора или пользователя, содержимое регистров и т.д.). Во многих ЭВМ запоминание производится в РСВ прерванного процесса.
3. В IP заносится фикс. адрес – уникальное для каждого типа прерывания.
4. Обрабатывается прерывание.
5. Возобновляется нормальная работа процесса.
Шаги 1-3 обычно выполняются аппаратно; 4-5 – программами DC.
Шаг 4 выполняется спец. стандартной программой – обработчиком преры-ваний.
1. Она запоминает ту часть состояния процесса, которая не была заполнена аппаратной частью, при этом часто довольно большой объем информации запоминается в спец. области ОП.
2. Идентифицирует поступившее прерывание.
3. Выполняет соответствующее прерыванию действие.
4. Восстанавливает состояние процесса, включая и аппаратно-запомненную информацию, и возобновляет нормальную работу процесса.
Некоторые действия по обработке прерываний должны выполняться немедленно: это запоминание состояния процесса, идентификация типа прерывания, обработка программных ошибок, обслуживание устройств, критичных ко времени обслуживания. Соответствующие части обработчиков прерываний должны храниться резидентно в ядре ИС. Эту часть называют обработчиком прерываний первого уровня. Может существовать и вторая не резидентная часть второго уровня.
Инициатором прерывания может оказаться сам процесс, а также события с ним связанные, или несвязанные. В крупных компьютерах IBM принята следующая схема классификации типов прерываний:
1. SVC ( super visor call ) – по вызову super visor. Инициатором является сам процесс, выполняющий SVC-запрос на предоставление конкретной системной услуги ( н-р: на выполнение ввода- вывода, увеличение или выделение ОП, взаимодействия с оператором и т.д.). Механизм SVC помогает защитить ОС от пользователя, не позволяя ему свободно входить в ОС.
2. прерывания ввода–вывода – инициализируются аппаратурой ввода – вывода, которая сигнализирует процессору об изменении состояния канала или устройства ввода-вывода ( ошибка завершения операции ввода-вывода, переход в состояние готовности )
3. внешние прерывания – причиной их являются внешние события, такие как истечение кванта времени, нажатие клавиши на пульте оператора, сигнал от другого процессора и т.д.
4. прерывание по рестарту ( restart )
5. прерывание по контролю программы – деление на 0, попытка выполнить привилегированную команду, неверный код команды, выход за диапазон команды.
6. Прерывание по контролю машины называются аппаратными ошибка-ми.
Действия по запоминанию состояния процесса и старту обработчика прерываний называются переключением контекста. При этом используется PSW ( program status word – словосостояние процесса). В PSW содержится:
• IP – счетчик команд;
• маска прерываний ( какие прерывания разрешены, какие запрещены );
• флаги;
• др. важная информация о процессе.
Существует 3 типа PSW:
• текущая;
• новая;
• старая.
В однопроцессорной машине есть одна текущая, шесть новых и шесть старых PSW.
Новая PSW содержит постоянный адрес по которому находится соответствующий обработчик прерываний (резидентные части).
Когда происходит прерывание (если оно не запрещено), выполняется аппаратное переключение слов состояний: текущее PSW заполняется в старом PSW данного типа, новое PSW этого типа становится текущим, т.о. управление получает резидентную часть конкретного обработчика прерываний. По окончанию обработки выполняется обратные действия.
Нельзя прервать обработчик прерывания данного типа прерыванием этого же типа (запортится старое PSW), поэтому в каждый момент времени некоторые прерывания м.б. маскированы (запрещены).
ЯДРО ОС
Это резидентная часть ОС – содержащая наиболее интенсивно используемые компоненты ОС.
Одна изсамых важных функций ядра – обработка прерываний. Кроме того в программе ядра выполняются:
• создание и уничтожение процессов;
• переключение процессов из состояния в состояние;
• диспетчирование приостановки и активизации процессов;
• синхронизация;
• взаимодействие процессов;
• работа с PCB;
• поддержка операций ввода-вывода;
• распределение и перераспределение памяти;
• часть работы файловой системы;
• поддержка механизма вызова возврата;
• определенные функции по ведению учета работы ЭВМ.
Всю ОС рассматривают как имеющую иерархическую систему (3-х-уровневую):
1. “чистая машина” – аппаратура;
2. “расширенная машина” = “чистая” + ядро. Функции, предоставленные расширенной машиной наз. примитивами;
3. функции поддержки процессов пользователя.
Наблюдается тенденция все большую часть функций ядра реализовывать в виде микропрограмм с высокой скоростью исполнения.
Выполнение одного из них может повлиять на результат работы другого (переменные –файлы, БД и др.). Взаимодействовать могут конкурирующие процессы, или процессы, выполняющие совместную работу.
Пример конкурирующих программ: программа обработки отсутствия страницы и супервизор ввода-вывода. Обе они добавляют свои запросы на чтение с конкретного диска в очередь запросов на ввод-вывод.
Пример взаимодействующих программ: пара программ производитель-потребитель. Производитель каким-либо образом производит данные, записывает их в буфер, потребитель затем считывает эти данные. Например: программа сбора информации об использовании ресурсов и программа подготовки счетов к оплате. Чтобы сгладить разницу в областях работы производителя и потребителя, они обычно используют общий буфер, который содержит данные, выработанные производителями, но еще несчитанные потребителем.
Влияние, которое могут оказывать друг на друга взаимодействующие процессы непредсказуемо и не воспроизводимо. Причиной являются разные относительные скорости исполнения процесса, которые не подвластны ни одному из процессов (эти скорости зависят от решения планировщика, диспетчера, от ситуации, сложившейся на данный момент в ОС). Возникающие при этом ошибки трудно воспроизвести и исправить. Еще хуже то, что на первый взгляд работающая программа может дать неправильный результат.
Пример: программа обработки от отсутствия страницы StrVeed и supervisor ввода-вывода. Обе они добавляют свои запросы на ввод с диска в конец очереди. Очередь имеет указатель на начало и конец. Эти указатели позволяют легко добавлять к очереди и выбирать из нее. Если эти два процесса не перекрываются во времени, то они будут работать корректно.
Ситуация: STR-need выполнил установку указателя на свой запрос, затем он был прерван диспетчером.
Можно потребовать, чтобы процесс не прерывали друг друга, но это будет не разумно ко всей смеси процессов.
Пример 2: процесс address и процесс pay изменяют различные поля записи о служащих предприятия. Они считывают запись в свою рабочую область, корректируют свое поле и записывают запись обратно. Иванов поменял адрес и ему изменили з/п. Процесс address считал запись о нем в свое рабочее поле, изменил адрес и был прерван. Процесс pay считал запись со старым адресом в свое рабочее поле, в итоге, ошибка.
В рассмотренных примерах ошибки произошли из-за одновременного использования общих переменных. Чтобы избежать таких ошибок нужно исключить одновременный доступ к этим общим переменным. Это называется взаимным исключением.
Другая задача возникает в примере производитель-потребитель. Здесь существует опасность, что потребитель может попытаться читать из пустого буфера. Если буфер считается пустым, когда все записи в нем прочитаны, то потребитель может сделать преждевременный вывод об окончании работы или прочесть запись второй раз. Производитель может попытаться записать полный буфер и затереть еще непрочитанную запись. В этом случае сложность порождена различными скоростями работы процессов, и требуется синхронизация их работы. Для простейшей синхронизации достаточно, чтобы процессы обменивались сигналами. Однако чаще всего требуется более информативный обмен. Запрос на ввод-вывод содержит информацию о том, что и куда ввести, средства связи могут рассматриваться как своего рода синхронизация. Многие современные языки программирования включают средства взаимного исключения синхронизации и связи. Прерывания могут рассматриваться как средства взаимодействия процессов.
Управляющая конструкция для указания параллелизма.
Обычно это парные операторы. Один указывает, что последовательное течение программы должно быть разделено на несколько параллельных цепочек, другой оператор указывает, что параллельно исполняемые цепочки закончены и должны быть слиты воедино, а также возобновлено последовательное выполнение программ.
Взаимоисключение
Причиной неправильной работы программ может быть то, что обе они совместно использовали указатель “конец” и элемент на который он указывал. Для правильной работы оператора:
конец .next:= адрес_запроса
конец:= адрес_запроса
не должны прерываться во время исполнения других процессов. Т.о. существуют некоторые особенные участки программ, для которых требуется непрерывность их исполнения. Они называются критическими интервалами. Концепция таких интервалов была предложена в 1965 году Дейкстрой. Каждый интервал содержит в себе требования взаимного исключения по отношению к некоторой переменной.
Лекция №6
Обработка прерываний
Прерывание – это событие, при котором изменяется нормальная последо-вательность выполняемых процессором команд.
Сигнал прерываний обрабатывается аппаратурой ВС.
Действия по обработке прерываний:
6. В некоторую фикс. ячейку памяти заносятся характеристики произошед-шего прерывания.
7. Запоминается состояние прерванного процесса ( значение IP, PC, спецификация режима – супервизора или пользователя, содержимое регистров и т.д.). Во многих ЭВМ запоминание производится в РСВ прерванного процесса.
8. В IP заносится фикс. адрес – уникальное для каждого типа прерывания.
9. Обрабатывается прерывание.
10. Возобновляется нормальная работа процесса.
Шаги 1-3 обычно выполняются аппаратно; 4-5 – программами DC.
Шаг 4 выполняется спец. стандартной программой – обработчиком преры-ваний.
5. Она запоминает ту часть состояния процесса, которая не была заполнена аппаратной частью, при этом часто довольно большой объем информации запоминается в спец. области ОП.
6. Идентифицирует поступившее прерывание.
7. Выполняет соответствующее прерыванию действие.
8. Восстанавливает состояние процесса, включая и аппаратно-запомненную информацию, и возобновляет нормальную работу процесса.
Некоторые действия по обработке прерываний должны выполняться немедленно: это запоминание состояния процесса, идентификация типа прерывания, обработка программных ошибок, обслуживание устройств, критичных ко времени обслуживания. Соответствующие части обработчиков прерываний должны храниться резидентно в ядре ИС. Эту часть называют обработчиком прерываний первого уровня. Может существовать и вторая не резидентная часть второго уровня.
Инициатором прерывания может оказаться сам процесс, а также события с ним связанные, или несвязанные. В крупных компьютерах IBM принята следующая схема классификации типов прерываний:
7. SVC ( super visor call ) – по вызову super visor. Инициатором является сам процесс, выполняющий SVC-запрос на предоставление конкретной системной услуги ( н-р: на выполнение ввода- вывода, увеличение или выделение ОП, взаимодействия с оператором и т.д.). Механизм SVC помогает защитить ОС от пользователя, не позволяя ему свободно входить в ОС.
8. прерывания ввода–вывода – инициализируются аппаратурой ввода – вывода, которая сигнализирует процессору об изменении состояния канала или устройства ввода-вывода ( ошибка завершения операции ввода-вывода, переход в состояние готовности )
9. внешние прерывания – причиной их являются внешние события, такие как истечение кванта времени, нажатие клавиши на пульте оператора, сигнал от другого процессора и т.д.
10. прерывание по рестарту ( restart )
11. прерывание по контролю программы – деление на 0, попытка выполнить привилегированную команду, неверный код команды, выход за диапазон команды.
12. Прерывание по контролю машины называются аппаратными ошибка-ми.
Действия по запоминанию состояния процесса и старту обработчика прерываний называются переключением контекста. При этом используется PSW ( program status word – словосостояние процесса). В PSW содержится:
• IP – счетчик команд;
• маска прерываний ( какие прерывания разрешены, какие запрещены );
• флаги;
• др. важная информация о процессе.
Существует 3 типа PSW:
• текущая;
• новая;
• старая.
В однопроцессорной машине есть одна текущая, шесть новых и шесть старых PSW.
Новая PSW содержит постоянный адрес по которому находится соответствующий обработчик прерываний (резидентные части).
Когда происходит прерывание (если оно не запрещено), выполняется аппаратное переключение слов состояний: текущее PSW заполняется в старом PSW данного типа, новое PSW этого типа становится текущим, т.о. управление получает резидентную часть конкретного обработчика прерываний. По окончанию обработки выполняется обратные действия.
Нельзя прервать обработчик прерывания данного типа прерыванием этого же типа (запортится старое PSW), поэтому в каждый момент времени некоторые прерывания м.б. маскированы (запрещены).
ЯДРО ОС
Это резидентная часть ОС – содержащая наиболее интенсивно используемые компоненты ОС.
Одна изсамых важных функций ядра – обработка прерываний. Кроме того в программе ядра выполняются:
• создание и уничтожение процессов;
• переключение процессов из состояния в состояние;
• диспетчирование приостановки и активизации процессов;
• синхронизация;
• взаимодействие процессов;
• работа с PCB;
• поддержка операций ввода-вывода;
• распределение и перераспределение памяти;
• часть работы файловой системы;
• поддержка механизма вызова возврата;
• определенные функции по ведению учета работы ЭВМ.
Всю ОС рассматривают как имеющую иерархическую систему (3-х-уровневую):
4. “чистая машина” – аппаратура;
5. “расширенная машина” = “чистая” + ядро. Функции, предоставленные расширенной машиной наз. примитивами;
6. функции поддержки процессов пользователя.
Наблюдается тенденция все большую часть функций ядра реализовывать в виде микропрограмм с высокой скоростью исполнения.
Выполнение одного из них может повлиять на результат работы другого (переменные –файлы, БД и др.). Взаимодействовать могут конкурирующие процессы, или процессы, выполняющие совместную работу.
Пример конкурирующих программ: программа обработки отсутствия страницы и супервизор ввода-вывода. Обе они добавляют свои запросы на чтение с конкретного диска в очередь запросов на ввод-вывод.
Пример взаимодействующих программ: пара программ производитель-потребитель. Производитель каким-либо образом производит данные, записывает их в буфер, потребитель затем считывает эти данные. Например: программа сбора информации об использовании ресурсов и программа подготовки счетов к оплате. Чтобы сгладить разницу в областях работы производителя и потребителя, они обычно используют общий буфер, который содержит данные, выработанные производителями, но еще несчитанные потребителем.
Влияние, которое могут оказывать друг на друга взаимодействующие процессы непредсказуемо и не воспроизводимо. Причиной являются разные относительные скорости исполнения процесса, которые не подвластны ни одному из процессов (эти скорости зависят от решения планировщика, диспетчера, от ситуации, сложившейся на данный момент в ОС). Возникающие при этом ошибки трудно воспроизвести и исправить. Еще хуже то, что на первый взгляд работающая программа может дать неправильный результат.
Пример: программа обработки от отсутствия страницы StrVeed и supervisor ввода-вывода. Обе они добавляют свои запросы на ввод с диска в конец очереди. Очередь имеет указатель на начало и конец. Эти указатели позволяют легко добавлять к очереди и выбирать из нее. Если эти два процесса не перекрываются во времени, то они будут работать корректно.
Ситуация: STR-need выполнил установку указателя на свой запрос, затем он был прерван диспетчером.
Можно потребовать, чтобы процесс не прерывали друг друга, но это будет не разумно ко всей смеси процессов.
Пример 2: процесс address и процесс pay изменяют различные поля записи о служащих предприятия. Они считывают запись в свою рабочую область, корректируют свое поле и записывают запись обратно. Иванов поменял адрес и ему изменили з/п. Процесс address считал запись о нем в свое рабочее поле, изменил адрес и был прерван. Процесс pay считал запись со старым адресом в свое рабочее поле, в итоге, ошибка.
В рассмотренных примерах ошибки произошли из-за одновременного использования общих переменных. Чтобы избежать таких ошибок нужно исключить одновременный доступ к этим общим переменным. Это называется взаимным исключением.
Другая задача возникает в примере производитель-потребитель. Здесь существует опасность, что потребитель может попытаться читать из пустого буфера. Если буфер считается пустым, когда все записи в нем прочитаны, то потребитель может сделать преждевременный вывод об окончании работы или прочесть запись второй раз. Производитель может попытаться записать полный буфер и затереть еще непрочитанную запись. В этом случае сложность порождена различными скоростями работы процессов, и требуется синхронизация их работы. Для простейшей синхронизации достаточно, чтобы процессы обменивались сигналами. Однако чаще всего требуется более информативный обмен. Запрос на ввод-вывод содержит информацию о том, что и куда ввести, средства связи могут рассматриваться как своего рода синхронизация. Многие современные языки программирования включают средства взаимного исключения синхронизации и связи. Прерывания могут рассматриваться как средства взаимодействия процессов.
Управляющая конструкция для указания параллелизма.
Обычно это парные операторы. Один указывает, что последовательное течение программы должно быть разделено на несколько параллельных цепочек, другой оператор указывает, что параллельно исполняемые цепочки закончены и должны быть слиты воедино, а также возобновлено последовательное выполнение программ.
Взаимоисключение
Причиной неправильной работы программ может быть то, что обе они совместно использовали указатель “конец” и элемент на который он указывал. Для правильной работы оператора:
конец .next:= адрес_запроса
конец:= адрес_запроса
не должны прерываться во время исполнения других процессов. Т.о. существуют некоторые особенные участки программ, для которых требуется непрерывность их исполнения. Они называются критическими интервалами. Концепция таких интервалов была предложена в 1965 году Дейкстрой. Каждый интервал содержит в себе требования взаимного исключения по отношению к некоторой переменной.