ОСИ шпорно

advertisement
1. Понятие и структура ОС. Эволюция вычислительных и ОС. Основные
функции ОС.
2. Классификация ОС. Архитектурные особенности ОС.
3. Мультипрограммирование. Особенности реализации
мультипрограммирования в системах пакетной обработки, разделения
времени, реального времени, с мультипроцессорной обработкой.
4. Роль прерываний при мультипрограммировании.
5. Понятие процесса и потока. Создание процессов и потоков.
Управляющие структуры процессов и потоков.
6. Контекст процесса и его состояния.
7. Планирование процессов и потоков: критерии, виды, алгоритмы
планирования.
8. Параллельные процессы, синхронизация процессов, пример
необходимости синхронизации, критическая секция.
9. Механизмы синхронизации: блокирующие переменные, семафоры,
мониторы.
10. Проблемы синхронизации(тупики) и способы их разрешения.
11. Механизмы межпроцессного взаимодействия (каналы, очереди
сообщений, разделяемая память)
12. Управление памятью: задачи управления, типы адресации.
13. Распределение памяти: общие принципы управления памятью в
однопрограммных ОС, распределение памяти фиксированными,
динамическими, перемещаемыми разделами.
14. Сегментное распределение памяти.
15. Страничное распределение памяти.
16. Особенности эффективного использования таблицы страниц:
многоуровневые таблицы страниц, ассоциативная память,
инвертированная таблица страниц, хеширование.
17. Сегментно - страничное распределение памяти.
18. Физическая организация жёсткого диска.
19. Принципы построения файловой системы: интерфейс,
функциональная схема, типовая структура файловой системы.
20. Способы выделения дискового пространства. Управление
дисковым пространством. Размер логического блока.
21. Особенности организации некоторых файловых систем.
1. Понятие и структура ОС. Эволюция вычислительных и ОС. Основные
функции ОС.
2. Классификация ОС. Архитектурные особенности ОС.
3. Мультипрограммирование. Особенности реализации
мультипрограммирования в системах пакетной обработки, разделения
времени, реального времени, с мультипроцессорной обработкой.
4. Роль прерываний при мультипрограммировании.
5. Понятие процесса и потока. Создание процессов и потоков.
Управляющие структуры процессов и потоков.
6. Контекст процесса и его состояния.
7. Планирование процессов и потоков: критерии, виды, алгоритмы
планирования.
8. Параллельные процессы, синхронизация процессов, пример
необходимости синхронизации, критическая секция.
9. Механизмы синхронизации: блокирующие переменные, семафоры,
мониторы.
10. Проблемы синхронизации(тупики) и способы их разрешения.
11. Механизмы межпроцессного взаимодействия (каналы, очереди
сообщений, разделяемая память)
12. Управление памятью: задачи управления, типы адресации.
13. Распределение памяти: общие принципы управления памятью в
однопрограммных ОС, распределение памяти фиксированными,
динамическими, перемещаемыми разделами.
14. Сегментное распределение памяти.
15. Страничное распределение памяти.
16. Особенности эффективного использования таблицы страниц:
многоуровневые таблицы страниц, ассоциативная память,
инвертированная таблица страниц, хеширование.
17. Сегментно - страничное распределение памяти.
18. Физическая организация жёсткого диска.
19. Принципы построения файловой системы: интерфейс,
функциональная схема, типовая структура файловой системы.
20. Способы выделения дискового пространства. Управление
дисковым пространством. Размер логического блока.
21. Особенности организации некоторых файловых систем.
1. Понятие и структура ОС. Эволюция вычислительных и ОС. Основные
функции ОС
Операционная система (ОС) – это программа, которая обеспечивает возможность
рационального использования оборудования компьютера удобным для пользователя
образом.
ОС - базовый комплекс компьютерных программ, обеспечивающий управление
аппаратными средствами компьютера, работу с файлами, ввод и вывод данных, а
также выполнение прикладных программ и утилит.
Понятия ОС. Существуют различные точки зрения:
ОС как виртуальная машина
ОС как менеджер ресурсов
ОС как защитник пользователей и программ
ОС как постоянно функционирующее ядро
Эволюция вычислительных систем
Первый период (1945–1955 гг.)
Ламповые машины. Операционных систем нет.
Созданы первые ламповые вычислительные устройства и появился принцип
программы, хранящейся в памяти машины (1945 г.).
Характеризуется тем, что:
 В проектировании, эксплуатации и программировании вычислительной машины
участвует одна и та же группа людей.
 Компьютеры в качестве инструмента решения практических прикладных задач
используются не регулярно.
 Программирование осуществляется исключительно на машинном языке.
 Задачи организации вычислительного процесса решаются вручную, строго
последовательно, с пульта управления с использованием перфокарт
 Вычислительная система выполняет одновременно только одну операцию.
В целом период характеризуется крайне высокой стоимостью вычислительных
систем, их малым количеством и низкой эффективностью использования.
В конце периода появляется первое системное ПО.
Второй период (1955 г.– нач. 60-х)
Компьютеры на основе транзисторов. Пакетные ОС
Появляется новая техническая база – полупроводниковые элементы, что привело
к:
 повышению надежности
 возможности решения серьезных прикладных задач
 снижению потребления электроэнергии, совершенствованию системы охлаждения
 уменьшению размеров
 снижению стоимости эксплуатации и обслуживания
Все это способствовало:
 бурному развитию алгоритмических языков (COBOL, PL-1 и т.д.).
 появлению первых настоящих компиляторов, редакторов связей, библиотеки
математических и служебных подпрограмм
 упрощению процесса программирования
 существенное изменение процесса отладки программ.
Появляется прообраз современных ОС - первые системы пакетной обработки,
которые просто автоматизируют запуск одной программы из пакета за другой,
увеличивая коэффициент загрузки процессора.
Минусы:
 Использование части машинного времени на выполнение системной
управляющей программы
 Программа, получившая доступ к процессору, обслуживается до ее
завершения. При передаче данных между внешними устройствами и памятью
процессор простаивает, а при работе процессора простаивают внешние
устройства.
Третий период (нач. 60-х – 1970 г.)
Компьютеры на основе интегральных микросхем. Первые многозадачные ОС
В технической базе произошел переход от отдельных полупроводниковых
элементов типа транзисторов к интегральным микросхемам, что привело к еще
большему:
 повышению надежности;
 уменьшению стоимости;
 повышению производительности;
Повышению эффективности использования процессорного времени мешает низкая
скорость работы механических устройств ввода-вывода (1200 перфокарт/мин.)
В пакетные системы вводится прием «spooling» или «подкачки-откачки» данных,
что позволило совместить реальные операции ввода-вывода одного задания с
выполнением другого задания.
При обработке пакета заданий на носителях непрямого доступа появилась
возможность выбора очередного выполняемого задания.
В пакетных системах начинается развитие функций планирования.
Дальнейшее повышение эффективности использования процессора достигается за
счет идеи мультипрограммирования - пока одна программа выполняет операцию
ввода-вывода, процессор не простаивает, а выполняет другую программу. После
окончании операции ввода-вывода, процессор возвращается к выполнению
предыдущей программы.
Четвертый период (с 1970 – 80 гг.)
Персональные компьютеры.
Следующий период в эволюции вычислительных систем связан с появлением
больших интегральных схем (БИС).
Компьютер с достаточно развитой архитектурой стал доступен отдельному
человеку.
Период характеризуется тем, что:
 компьютеры стали использоваться не только специалистами, что
потребовало разработки «дружественного» программного обеспечения
 рост сложности и разнообразия решаемых на ПК задач привели к
возрождению практически всех черт, характерных для архитектуры больших
вычислительных систем.
Появляется:
 вытесняющая многозадачность
 использование концепции баз данных для хранения и распределенной
обработки больших объемов информации
 приоритетное планирование
 выделение квот на использование ограниченных ресурсов компьютеров
 системы разделения времени: процессор переключается между задачами
через определенные интервалы времени
Пятый период (с 1980 г. по н.в.)
стоимость компьютеров и увеличивается
Уменьшается
стоимость труда
программиста.
Благодаря широкому распространению вычислительных сетей и средств
оперативной обработки (работающих в режиме on-line), пользователи получают
доступ к территориально распределенным компьютерам.
В середине 80-х стали бурно развиваться сети компьютеров работающих под
управлением сетевых и распределенных ОС.
Сетевые (классические) ОС характеризуются:
 возможностью доступа к ресурсам другого сетевого компьютера
 каждый ПК в сетевой ОС работает под управлением ОС, отличающейся от
ОС
автономного
компьютера
наличием
дополнительных
средств
(программной поддержкой для сетевых интерфейсных устройств и доступа к
удаленным ресурсам), которые, однако, не меняют структуру ОС
Распределенные ОС:
 «внешне» выглядят как обычные автономные системы (пользователь может
не знать где хранятся файлы – на локальной или удаленной машине – и где
выполняются программы)
 «внутреннее» строение распределенной ОС имеет существенные отличия от
автономных систем
Функции ОС
Все функции ОС можно условно разделить на две различные группы –
интерфейсные и внутренние.
Интерфейсные функции ОС:
 управление аппаратными средствами
 управление устройствами ввода-вывода
 управление файловой системой
 поддержка многозадачности
 планирование доступа пользователей к общим ресурсам;
 интерфейс пользователя
 поддержка работы в локальных и глобальных сетях
Внутренние функции ОС:
 обработки прерываний
 управления виртуальной памятью
 планирования использования процессора
 обслуживания драйверов устройств
2. Классификация ОС. Архитектурные особенности ОС
ОС – это программа, которую можно реализовать с использованием процедур и
функций. Если при этом составные части реализованы не в виде отдельных модулей
или подсистем, а объединены в виде одной программы, то такая архитектура
построения ОС называется монолитным ядром.
Архитектурные особенности ОС
Монолитное ядро
Характеризуется тем, что:
каждая процедура может вызвать каждую
все процедуры работают в привилегированном режиме
все части монолитного ядра работают в одном адресном пространстве
ядро «совпадает» со всей ОС
сборка ядра осуществляется отдельно для каждого компьютера при установке
при добавлении, исключении отдельных компонент требуется перекомпиляция
старейший способ организации ОС
Пример систем с монолитным ядром - большинство Unix-подобных систем.
Многоуровневые системы.
Всю вычислительную систему можно разбить на ряд более мелких уровней с хорошо
определенными связями между ними, так чтобы объекты уровня N могли вызывать
только объекты уровня N-1.
Виртуальные машины
Виртуальная машина реализует для пользователя имитацию hardware в
вычислительной системе. При обращении к «виртуальному hardware» на уровне
привилегированных команд в действительности происходит системный вызов
реальной ОС, которая и производит все необходимые действия.
Системный вызов – обращение прикладной программы к ядру ОС для
выполнения какой-либо операции. Обычно выглядит как вызов подпрограммы или
функции из системной библиотеки. Однако системный вызов как частный случай
вызова такой функции или подпрограммы следует отличать от более общего
обращения к системной библиотеке, поскольку последнее может и не требовать
выполнения привилегированных операций.
Микроядерная архитектура
При разработке ОС существует тенденция, состоящая в перенесении значительной
части системного кода на уровень пользователя и одновременной минимизации
ядра.
При этом построение ядра ОС в микроядерной архитектуре осуществляется так,
что большинство составляющих ОС являются самостоятельными программами.
В этом случае взаимодействие между ними обеспечивает специальный модуль
ядра – микроядро, работающее в привилегированном режиме и обеспечивающее
взаимодействие между программами, планирование использования процессора,
первичную обработку прерываний, операции ввода-вывода и базовое управление
памятью.
Характеризуется(+):
высокой степенью модульности ядра, что существенно упрощает добавление и
отладку компонентов (не требуется перезапуск всей ОС).
возможностью без прерывания работы, загружать и выгружать новые драйверы,
файловые системы и т. д.
возможностью отладки компонентов ядра с помощью обычных программных
средств
повышенной надежностью системы
Характеризуется: (-)
дополнительными накладными расходами, связанными с передачей сообщений
усложнение процесса проектирования при попытке снижения возможных
накладных расходов
Смешанные системы
В большинстве случаев современные ОС используют различные комбинации
рассмотренных подходов.
Например, ядро ОС Linux представляет собой монолитную систему с элементами
микроядерной архитектуры.
Совместно элементы микроядерной архитектуры и элементы монолитного ядра
используются в ядре Windows NT:
Классификация ОС.
Особенности алгоритмов управления ресурсами
В зависимости от особенностей использованного алгоритма управления
процессором, ОС делят на:
многозадачные и однозадачные
многопользовательские и однопользовательские
поддерживающие многонитевую обработку / не поддерживающие
на многопроцессорные и однопроцессорные
Поддержка многозадачности
Однозадачные ОС (MS-DOS, MSX):
выполняют функцию предоставления пользователю виртуальной машины, делая
более простым и удобным процесс взаимодействия пользователя с компьютером
включают средства управления периферийными устройствами, средства
управления файлами, средства общения с пользователем.
Многозадачные ОС (OC EC, OS/2, UNIX, Windows 95), кроме вышеперечисленных
функций, управляют разделением совместно используемых ресурсов, таких как
процессор, оперативная память, файлы и внешние устройства.
Поддержка многопользовательского режима
Однопользовательские: MS-DOS, Windows 3.x, ранние версии OS/2;
Многопользовательские: UNIX, Windows NT.
Главным отличием многопользовательских систем от однопользовательских
является наличие средств защиты информации каждого пользователя от
несанкционированного доступа других пользователей.
(!) Не всякая многозадачная система является многопользовательской, и не всякая
однопользовательская - однозадачной.
Вытесняющая и невытесняющая многозадачность
Среди множества существующих вариантов реализации многозадачности можно
выделить две группы алгоритмов:
невытесняющая многозадачность (NetWare, Windows 3.x) - механизм
планирования процессов целиком сосредоточен в ОС;
вытесняющая многозадачность (Windows NT, OS/2, UNIX) - механизм
планирования процессов распределен между системой и прикладными программами.
При невытесняющей многозадачности активный процесс выполняется до тех
пор, пока он сам, по собственной инициативе, не отдаст управление ОС для того,
чтобы та выбрала из очереди другой готовый к выполнению процесс.
При вытесняющей многозадачности решение о переключении процессора с
одного процесса на другой принимается ОС, а не самим активным процессом.
3. Мультипрограммирование. Особенности реализации
мультипрограммирования в системах пакетной обработки, разделения
времени, реального времени, с мультипроцессорной обработкой
Для повышения эффективности использования процессора была применена идея
мультипрограммирования – пока одна программа выполняет операцию вводавывода, процессор не простаивает, а выполняет другую программу. После окончания
операции ввода-вывода, процессор возвращается к выполнению предыдущей
программы.
Мультипрограммирование, или многозадачность – это способ организации
вычислительного процесса, при котором на одном процессоре попеременно
выполняются сразу несколько программ. Эти программы совместно используют не
только процессор, но и другие ресурсы компьютера, оперативную и внешнюю память,
устройства ввода-вывода, данные.
Мультипрограммирование требует революции в строении вычислительной
системы:
1) Реализация защитных механизмов.
Программы не должны иметь самостоятельного доступа к распределению
ресурсов,
а
должно
быть
обеспечено
изолирование
конкурирующих
пользовательских программ друг от друга, а ОС – от программ пользователей.
Появляются привилегированные (с доступом к оборудованию и ресурсам) и
непривилегированные («пользовательские») команды и режимы работы ОС.
2) Наличие прерываний.
Внешние прерывания оповещают ОС о том, что произошло асинхронное событие,
например, завершилась операция ввода-вывода. Внутренние прерывания возникают,
когда выполнение программы привело к ситуации, требующей вмешательства ОС,
например деление на ноль.
3) Развитие параллелизма в архитектуре.
Прямой доступ к памяти и организация каналов ввода-вывода позволили
освободить центральный процессор от рутинных операций.
Не менее важна в организации мультипрограммирования роль ОС, реализующей:
организацию интерфейса между прикладной программой и ОС при помощи
системных вызовов
организацию очереди из заданий в памяти и планирование выделение процессора
одному из заданий
переключение заданий требует сохранения содержимого регистров и структур
данных, необходимых для выполнения задания
стратегии управления памятью, включая упорядочение процессов размещения,
замещения и выборки информации из памяти
организация хранения информации на внешних носителях в виде файлов и
обеспечение доступа к конкретному файлу только определенным категориям
пользователей
обеспечение средствами коммуникации программ для санкционированного обмена
данными и синхронизации.
Мультипрограммирование призвано повысить эффективность использования
вычислительной системы, однако эффективность может пониматься по-разному.
Наиболее характерными критериями эффективности вычислительных систем
являются:
– пропускная способность – количество задач, выполняемых вычислительной
системой в единицу времени;
– удобство работы пользователей, заключающееся, в частности, в том, что они
имеют возможность интерактивно работать одновременно с несколькими
приложениями на одной машине;
– реактивность системы – способность системы выдерживать заранее заданные
(возможно, очень короткие) интервалы времени между запуском программы и
получением результата.
В зависимости от выбранного критерия эффективности ОС делятся на системы
пакетной обработки, системы разделения времени и системы реального времени.
Мультипрограммирование в системах пакетной обработки.
Цель мультипрограммирования – минимизация простоев всех устройств
компьютера (прежде всего центрального процессора). Такие простои могут возникать
из-за приостановки задачи по ее внутренним причинам, связанным, например, с
ожиданием ввода данных для обработки. Естественное решением проблемы –
переключение процессора на выполнение другой задачи, у которой есть данные для
обработки – пакетные системы.
Критерий эффективности систем пакетной обработки – максимальная пропускная
способность, то есть решение максимального числа задач в единицу времени.
Для достижения этой цели в системах пакетной обработки используется
следующая схема функционирования: в начале работы формируется пакет заданий,
каждое задание содержит требование к системным ресурсам; из этого пакета
заданий формируется мультипрограммная смесь, то есть множество одновременно
выполняемых задач. Для одновременного выполнения выбираются задачи,
предъявляющие разные требования к ресурсам, так, чтобы обеспечивалась
сбалансированная загрузка всех устройств вычислительной машины. Например, в
мультипрограммной смеси желательно одновременное присутствие вычислительных
задач и задач с интенсивным вводом-выводом. Таким образом, выбор нового
задания из пакета заданий зависит от внутренней ситуации, складывающейся в
системе, то есть выбирается «выгодное» задание. Следовательно, в
вычислительных системах, работающих под управлением пакетных ОС, невозможно
гарантировать выполнение того или иного задания в течение определенного периода
времени.
В системах пакетной обработки переключение процессора с выполнения одной
задачи на выполнение другой происходит по инициативе самой активной задачи,
например, когда она отказывается от процессора из-за необходимости выполнить
операцию ввода-вывода. Поэтому существует высокая вероятность того, что одна
задача может надолго занять процессор и выполнение интерактивных задач станет
невозможным. Взаимодействие пользователя с вычислительной машиной, на
которой установлена система пакетной обработки, сводится к тому, что он приносит
задание, отдает его диспетчеру-оператору, а в конце дня после выполнения всего
пакета заданий получает результат. Очевидно, что такой порядок повышает
эффективность функционирования аппаратуры, но снижает эффективность работы
пользователя.
Мультипрограммирование в системах разделения времени.
Повышение удобства и эффективности работы пользователя является целью
систем разделения времени. Пользователям (или одному пользователю)
предоставляется возможность интерактивной работы сразу с несколькими
приложениями.
Для этого каждое приложение должно регулярно получать возможность «общения»
с пользователем. Эта проблема решается так, что ОС принудительно периодически
приостанавливает приложения, не дожидаясь, когда они добровольно освободят
процессор. Всем приложениям попеременно выделяется квант процессорного
времени, таким образом пользователи, получают возможность поддерживать с ними
диалог.
Данные системы исправляют недостаток систем пакетной обработки – изоляцию
пользователя-программиста от процесса выполнения его задач. Каждому
пользователю предоставляется терминал, для диалога с программой.
Т.к. каждой задаче выделяется только квант процессорного времени, ни одна
задача не занимает процессор надолго и время ответа оказывается приемлемым.
Если квант выбран достаточно небольшим, то у всех пользователей, одновременно
работающих на одной и той же машине, складывается впечатление, что каждый из
них единолично использует машину.
Недостаток систем разделения времени – меньшая пропускная способность, чем у
систем пакетной обработки, т.к. на выполнение принимается каждая запущенная
пользователем задача; меньшая производительность из-за возросших накладных
расходов вычислительной мощности на более частое переключение процессора с
задачи на задачу.
Критерий эффективности систем разделения времени – удобство и эффективность
работы пользователя. Мультипрограммное выполнение интерактивных приложений
повышает и пропускную способность компьютера (хоть и не в такой степени, как
пакетные системы). Аппаратура загружается лучше, т.к., пока одно приложение ждет
сообщения пользователя, другие приложения могут обрабатываться процессором.
Мультипрограммирование в системах реального времени.
Системы реального времени – предназначены для управления компьютером
различными техническими объектами (станком) или технологическими процессами
(доменным процессом). В данном случае существует предельно допустимое время, в
течение которого должна быть выполнена та или иная управляющая объектом
программа. Иначе, может произойти авария: например, спутник выйдет из зоны
видимости. Критерий эффективности здесь – способность выдерживать заранее
заданные интервалы времени между запуском программы и получением результата
(управляющего воздействия).
Это время – время реакции системы, а соответствующее свойство системы –
реактивность. Требования ко времени реакции зависят от специфики управляемого
процесса. Контроллер робота может требовать от встроенного компьютера ответ в
течение менее 1 мс, в то время как при моделировании полета может быть приемлем
ответ в 40 мс.
В системах реального времени мультипрограммная смесь (множество
одновременно выполняемых задач) представляет собой фиксированный набор
заранее разработанных программ, а выбор программы на выполнение
осуществляется по прерываниям (исходя из текущего состояния объекта) или в
соответствии с расписанием плановых работ.
Способность аппаратуры компьютера и ОС к быстрому ответу зависит в основном
от скорости переключения с одной задачи на другую и, в частности, от скорости
обработки сигналов прерывания. Если при возникновении прерывания процессор
должен опросить сотни потенциальных источников прерывания, то реакция системы
будет слишком медленной. Время обработки прерывания в системах реального
времени часто определяет требования к классу процессора даже при небольшой его
загрузке.
При проектировании программ под системы реального времени закладывается
некоторый «запас» вычислительной мощности на случай пиковой нагрузки.
Например, в системе управления атомной электростанцией в случае
возникновения крупной аварии атомного реактора многие аварийные датчики
сработают одновременно и создадут коррелированную нагрузку. Если система не
спроектирована для поддержки пиковой нагрузки, то система не справится с работой
именно тогда, когда она нужна в наибольшей степени.
Мультипроцессорная обработка – способ организации» вычислительного
процесса в системах с несколькими процессорами, при котором несколько задач
(процессов, потоков) могут одновременно выполняться на разных процессорах
системы.
Не следует путать мультипроцессорную обработку с мультипрограммной
обработкой. В мультипрограммных системах ведется обработка нескольких
программ, но при этом в процессоре в каждый момент времени выполняется только
одна программа. А в мультипроцессорных системах несколько задач выполняются
действительно одновременно, т.к. имеется несколько процессоров. Хотя и на каждом
из процессоров может попеременно выполняться некоторый закрепленный за
данным процессором набор задач.
Недостатки такой организации системы:
– усложнение всех алгоритмов управления ресурсами (например, планирование
процессов не для одного, а для нескольких процессоров)
– возрастание числа конфликтов по обращению к устройствам ввода-вывода,
данным, общей памяти и совместно используемым программам.
Проблемы решаются ОС путем синхронизации процессов, ведения очередей и
планирования ресурсов и сама ОС должна быть спроектирована так, чтобы
уменьшить существующие взаимозависимости между собственными компонентами.
Примеры ОС с мультипроцессорной – Sun Solaris 2.x, IBM OS/2, Microsoft Windows
NT и т.д.
Различают симметричную и ассиметричную архитектуру таких систем.
Симметричная архитектура – однородность всех процессоров и единообразие
включения процессоров в общую схему мультипроцессорной системы, разделение
одной большой памяти между всеми процессорами.
Черты: возможность наращивания числа процессоров ограничена, т.к. все они
пользуются одной и той же оперативной памятью и, следовательно, должны
располагаться в одном корпусе – масштабируемость по вертикали до 4 или 8
процессоров; процессоры очень быстро обмениваются данными.
Асимметричная архитектура – разные процессоры могут отличаться как своими
характеристиками (производительностью, надежностью и т.д.), так и функциональной
ролью, которая поручается им в системе. Одни процессоры – основные вычислители,
другие – управляют подсистемой ввода-вывода, третьи – еще для каких-то особых
целей.
Т.к. здесь требование единого корпуса отсутствует, система может состоять из
нескольких устройств, каждое из которых содержит один или несколько процессоров
– масштабирование по горизонтали. Каждое такое устройство – кластером, а
система – кластерная.
По способу организации вычислительного процесса мультипроцессорные системы
делятся также на симметричные и ассиметричные.
Асимметричное мультипроцессирование – наиболее простой способ организации
вычислительного процесса в системах с несколькими процессорами, его называют
также «ведущий-ведомый».
Принцип «ведущий-ведомый» предполагает выделение одного из процессоров в
качестве «ведущего», на котором работает операционная система и который
управляет всеми остальными «ведомыми» процессорами. Ведущий процессор
распределяет задачи и ресурсы, а ведомые процессоры работают только как
обрабатывающие устройства и никаких действий по организации работы
вычислительной системы не выполняют. Такая организация не намного сложнее ОС
однопроцессорной системы.
Асимметричная организация вычислительного процесса может быть реализована
как для симметричной мультипроцессорной архитектуры, так и для несимметричной.
Симметричное мультипроцессирование – способ организации вычислительного
процесса, который может быть реализован в системах только с симметричной
мультипроцессорной архитектурой.
При такой организации для всех процессоров существует общая операционная
система. Все процессоры равноправно участвуют и в управлении вычислительным
процессом, и в выполнении прикладных задач. Операционная система полностью
децентрализована – модули ОС выполняются на любом доступном процессоре.
Как только процессор завершает выполнение очередной задачи, он передает
управление планировщику задач, который выбирает из общей для всех процессоров
системной очереди задачу, которая будет выполняться на данном процессоре
следующей. Все ресурсы выделяются для каждой выполняемой задачи по мере
возникновения в них потребностей и никак не закрепляются за процессором.
Все процессоры работают с одной и той же динамически выравниваемой
нагрузкой. Одна задача может решаться сразу несколькими процессорами, если она
допускает такое распараллеливание, например, путем представления в виде
нескольких потоков.
Большой плюс: в случае отказа одного из процессоров симметричные системы, как
правило, сравнительно просто реконфигурируются.
Симметричная и асимметричная организация вычислительного процесса в
мультипроцессорной системе определяется типом операционной системы. Так, в
симметричных архитектурах вычислительный процесс может быть организован как
симметричным образом, так и асимметричным. Однако асимметричная архитектура
непременно влечет за собой и асимметричный способ организации вычислений.
4. Роль прерываний при мультипрограммировании.
Мультипрограммирование, или многозадачность (multitasking), — это способ
организации вычислительного процесса, при котором на одном процессоре
попеременно выполняются сразу несколько программ.
Прерывание – это способ переключения процессора на выполнение потока команд,
отличного от того который выполнялся, с последующим возвратом.
Различают следующие типы прерываний:
внешние (аппаратные),
внутренние (исключения -exception),
программные
Внешние прерывания происходят асинхронно, т.е. происходят в случайный момент
времени в процессе выполнения программы (например, от внешних устройств),
внутренние – синхронно, т.е. возникают по конкретной причине и можно предугадать
возникновение такого прерывания (например, при делении на ноль).
Программные прерывания не являются "истинными" прерываниями. Они возникают
при выполнении определенной команды процессора и применяются в том случае,
когда необходимо выполнить некоторые привилегированные действия (например
обратится к порту компьютера).
При мультипрограммировании, аппарат прерываний крайне важен. Поскольку
мультипрограммирование задумывалось как увеличение производительности
компьютера при тех же аппаратных затратах. Где пока один процесс простаивает в
ожидании какой-либо операции, другой выполняет свои действия. То единственным
способом информировать процессор о каких-либо произошедших событиях –
оказывается аппарат прерываний, который, в принципе, и придумывался для этих
целей. Когда процессор был освобождён от рутинных операций ввода-вывода, тогда
и появилась возможность выполнять другую программу, во время ввода информации
первой. Этот эволюционный момент потребовал развития железа и софта.
5. Понятие процесса и потока. Создание процессов и потоков. Управляющие
структуры процессов и потоков
Понятие процесса
Понятие процесса характеризует некоторую совокупность набора исполняющихся
команд, ассоциированных с ним ресурсов (выделенная для исполнения память или
адресное пространство, стеки, используемые файлы и устройства ввода-вывода и т.
д.) и текущего момента его выполнения (значения регистров, программного счетчика,
состояние стека и значения переменных), находящуюся под управлением ОС.
Понятие потока
Потоки – последовательности команд.
Поток можно определить как часть процесса, включающую управляющую
последовательность команд и использующую системные ресурсы этого процесса.
Существует две основных категории реализации потоков:
Пользовательские потоки – потоки, реализуемые через специальные библиотеки
потоков.
Потоки уровня ядра – потоки, реализуемые через системные вызовы.
Каждый процесс имеет как минимум один поток, при этом самый первый поток,
создаваемый при рождении нового процесса, принято называть начальным или
главным потоком этого процесса.
Основное отличие процесса от потока заключается в способе использования
системных ресурсов. Дочерний процесс практически независим от родительского,
для него системой выделяется отдельное адресное пространство, и он на равных
правах с родительским процессом «конкурирует» за процессорное время. При этом
можно уничтожить родительский процесс, не затронув дочерний, который может
выполняться и после завершения родительского процесса. В отличие от дочернего
процесса, поток, порожденный данным процессом, полностью зависим от процесса и
завершение процесса влечет уничтожение всех созданных им потоков, поскольку
происходит освобождение системных ресурсов, выделенных для этого процесса.
Еще одним отличием является невозможность изменить права доступа для потока,
тогда как дочерний процесс в редких случаях (например, при смене пароля для входа
в систему) может обладать правами доступа отличными от прав родительского
процесса.
Потоки, как и процессы, могут порождать дочерние потоки, правда, только внутри
своего процесса, и переходить из одного состояния в другое. Состояния потоков
аналогичны состояниям процессов. Поскольку потоки одного процесса разделяют
существенно больше ресурсов, чем различные процессы, то операции создания
нового потока и переключения контекста между потоками одного процесса
занимают значительно меньше времени, чем аналогичные операции для процессов в
целом.
Создать процесс – создать описатель процесса(контекст), в качестве которого
выступает одна или несколько информационно управляющих структур, содержащих
все сведения о процессе, необходимые ОС для управления им.
Управляющие структуры процессов
Для управления процессами ОС должна располагать всей необходимой для этого
информацией, для чего каждому процессу необходим дескриптор, содержащий:
 идентификатор процесса (PID);
 тип (или класс) процесса, который определяет для супервизора некоторые
правила предоставления ресурсов;
 приоритет процесса, в соответствии с которым супервизор предоставляет
ресурсы (в рамках одного класса процессов в первую очередь, обслуживаются
более приоритетные процессы);
 переменную состояния, которая определяет, в каком состоянии находится
процесс (готов к работе, исполняется, ожидает устройства ввода-вывода и т.д.);
 контекст задачи, т.е. защищённую область памяти (или адрес такой области), в
которой хранятся текущие значения регистров процессора, когда процесс
прерывается, не закончив работу;
 информацию о ресурсах, которыми процесс владеет и/или имеет право
пользоваться (указатели на открытые файлы, информация о незавершённых
операциях ввода-вывода и др.);
 место (или его адрес) для организации общения с другими процессами;
 параметры времени запуска (момент времени, когда процесс должен
активизироваться, и периодичность этой процедуры);
 адрес задачи на диске (в случае отсутствия системы управления файлами) в её
исходном состоянии и адрес на диске, куда она выгружается из ОП, если её
вытесняет другая задача.
Операции над процессами
Изменением состояния процессов занимается ОС, совершая операции над
ними.Основные операции над процессами удобно объединить в три пары:
 создание процесса – завершение процесса (одноразовые);
 приостановка процесса (перевод из состояния исполнение в состояние
готовность) – запуск процесса (перевод из состояния готовность в состояние
исполнение);
 блокирование процесса (перевод из состояния исполнение в состояние ожидание)
– разблокирование процесса (перевод из состояния ожидание в состояние
готовность).
Необходимо помнить, что существует еще одна (непарная) операция: изменение
приоритета процесса.
6. Контекст процесса и его состояния
Контекст процесса.
Информация, для хранения которой предназначен блок управления процессом
состоит из:
регистрового контекста (содержимое всех регистров процессора);
системного (запись в таблице процессов, управляющая информация о процессе и
т.д.);
пользовательского (код и данные).
Совокупность регистр, сист и польз-го контекстов называется просто контекстом
процесса Контекст-информация, полностью характеризуя процесс в любой момент
времени.
Переключение контекста.
Деят-ть мультипрограммной ОС состоит из цепочек операций, выполняемых над
различными процессами, и сопровождается переключением процессора с одного
процесса на другой.
Для корректного переключения процессора с одного процесса на другой
необходимо сохранить контекст исполнявшегося процесса и восстановить
контекст процесса, на который будет переключен процессор. Такая процедура
сохранения/восстановления
работоспособности
процессов
называется
переключением контекста.
Состояния процесса
Простейшая диаграмма состояний процесса
Процесс, выбранный для исполнения, может всё ещё ждать события, из-за
которого он был приостановлен, и реально к выполнению не готов. Для того чтобы
избежать такой ситуации, разобьём состояние «процесс не исполняется» на два
новых состояния: готовность и ожидание.
В состоянии исполнение происходит непосредственное выполнение программного
кода процесса. Выйти из этого состояния процесс может по трем причинам:
 завершает свою деятельность;
 он не может продолжать свою работу, пока не произойдет некоторое событие,
и операционная система переводит его в состояние ожидание;
 в результате возникновения прерывания в вычислительной системе
(например, прерывания от таймера по истечении предусмотренного времени
выполнения) его возвращают в состояние готовность.
С учетом состояния рождение и закончил исполнение модель состояний может
быть представлена более детально.
Более детальная схема
Рождение->готовность: выполняются при готовности ОС к обработке
дополнительных
процессов,
что
позволяет
предотвратить
снижение
производительности, которое может произойти, если будет загружено слишком много
активных процессов.
Готовность-> исполнение: осуществляется выбор процесса для исполнения в
соответствии с установленной дисциплиной обслуживания.
Исполнение->готовность: обычно происходит в результате окончания
выделенного кванта времени не работы или в результате появления процесса с
более высоким приоритетом.
Ожидание->готовность: блокированный процесс переходит в состояние
готовности к выполнению в момент появления некоторого ожидаемого события
Исполнение->ожидание: перевод процесса в заблокированное состояние
осуществляется в случае, если для продолжения его работы требуется наступление
некоторого события.
Исполнение-> завершение: если процесс сигнализирует об окончании своей
работы или происходит его аварийное завершение, ОС прекращает его выполнение.
Дополнительное состояние приостановлен->готов может в некоторых случаях
существовать в OCPB:
 при пиковой нагрузке вычислительной системы, когда она не может
обеспечить требуемое быстродействие, при расходах времени на смену
состояний, превышающих полезную работу;
 при ненадёжной работе системы и возможном её отказе;
 в случаях, когда промежуточные результаты работы процесса вызывают
сомнение в правильности работы программы.
Следует помнить, что количество состояний процесса в различных ОС может быть
различно:
 в ОС Windows NT – 7 состояний
 в ОС UNIX – 9 состояний
7. Планирование процессов и потоков: критерии, виды, алгоритмы
планирования
Планирование – работа по определению того, в какой момент времени прервать
выполнение одного процесса и какому процессу предоставить возможность
выполняться.
Планирование процессов включает в себя решение следующих задач:
 определение момента времени для смены выполняемого процесса;
 выбор процесса на выполнение из очереди готовых процессов;
 переключение контекстов "старого" и "нового" процессов.
Диспетчеризация – реализация решения, найденного в результате планирования.
Задачи диспетчеризации:
 сохранение контекста текущего потока
 загрузка контекста нового потока
 запуск нового потока на выполнение
Выделяют следующие уровни планирования:
 долгосрочное
 краткосрочное
 среднесрочное
Долгосрочное планирование
 отвечает за порождение новых процессов в системе, определяя ее степень
мультипрограммирования
 осуществляется достаточно редко
 оказывает влияние на функционирование вычислительной системы на
протяжении достаточно длительного времени
 в некоторых ОС сведено к минимуму или отсутствует вовсе
Краткосрочное планирование
 осуществляется, как правило, не реже одного раза в 100 миллисекунд.
 оказывает влияние на функционирование системы до наступления очередного
аналогичного события, т. е. в течение короткого промежутка времени
 при планировании использования процессора
Среднесрочное планирование
Применяется в вычислительных системах для повышения производительности при
«swapping»: временное удаление какого-либо частично выполнившегося процесса из
оперативной памяти на диск, а позже – его возвращение для дальнейшего
выполнения.
Критерии планирования и требования к алгоритмам
Каждый уровень планирования процессов может быть реализован с помощью
различных алгоритмов, определяемых в конкретных случаях спецификой решаемых
вычислительной системой задач, и целями, которых хотим достичь при
планировании.
Цели планирования
Справедливость
Гарантировать каждому заданию или процессу определенную часть времени
использования процессора в компьютерной системе, стараясь не допустить
возникновения ситуации, когда процесс одного пользователя постоянно занимает
процессор, в то время как процесс другого пользователя фактически не начинал
выполняться.
Эффективность
Постараться занять процессор на все 100% рабочего времени, не позволяя ему
простаивать в ожидании процессов, готовых к исполнению.
В реальных вычислительных системах загрузка процессора: 40% - 90%
Сокращение полного времени выполнения (turnaround time)
Обеспечить минимальное время между стартом процесса или постановкой задания
в очередь для загрузки и его завершением
Сокращение времени ожидания (waiting time)
Сократить время, которое проводят процессы в состоянии готовность и задания в
очереди для загрузки
Сокращение времени отклика (response time)
Минимизировать время, которое требуется процессу в интерактивных системах
для ответа на запрос пользователя
Равномерная
загрузка
ресурсов
вычислительной
системы,
отдавая
предпочтение тем процессам, которые будут занимать малоиспользуемые ресурсы.
Масштабируемость. Рост количества процессов в системе в два раза не должен
приводить к увеличению полного времени выполнения процессов на порядок.
Свойства алгоритмов планирования
Независимо от целей планирования алгоритмы должны обладать следующими
свойствами:
 Предсказуемость.
Одно и то же задание должно выполняться приблизительно за одно и то же время.
 Минимальные накладные расходы.
tисполнения процесса>>tвыбора процесса Если на каждые 100 миллисекунд, выделенные
процессу для использования процессора, будет приходиться 200 миллисекунд на
определение того, какой именно процесс получит процессор в свое распоряжение, и
на переключение контекста, то такой алгоритм, очевидно, применять не стоит.
Независимо от целей планирования алгоритмы должны обладать следующими
свойствами:
Алгоритмы планирования
First-Come, First-Served (FCFS)
Когда процесс переходит в состояние готовность, он, а точнее, ссылка на его PCB
помещается в конец этой очереди. Выбор нового процесса для исполнения
осуществляется из начала очереди с удалением оттуда ссылки на его контекст.
(+) : простота реализации
(-): среднее время ожидания и среднее полное время выполнения для этого
алгоритма существенно зависят от порядка расположения процессов в очереди.
Выполнение процессов при порядке p0,p1,p2:
t1=13, t2=4, t3=1 => среднее время ожидания: (0+13+17)/3=10 единиц времени
среднее полное время выполнения: (13+17+18)/3=16 единиц времени
Выполнение процессов при порядке p2, p1, p0:
Среднее время ожидания: (5+1+0)/3=2 (в 5 раз <)
Среднее полное время выполнения: (18+5+1)/3=8 (в 2 раза <)
Round Robin (RR)
По сути дела, это тот же самый алгоритм,
только
реализованный
в
режиме вытесняющего
планирования
(очередной
процесс
передаётся
на
исполнение по таймеру по истечении
определённого кванта времени)
Процессы на карусели
На производительность алгоритма RR сильно влияет величина кванта времени:
при очень больших величинах кванта алгоритм RR вырождается в алгоритм FCFS
При очень малых – создаётся иллюзия того, что каждый из n процессов работает
на собственном виртуальном процессоре с производительностью
~ 1/n от производительности реального процессора.
Shortest-Job-First (SJF)
Если выбирать процесс не по порядку (как в FCFS и RR), а основываясь на его
минимальном времени непрерывного использования процессора, то это позволит
повысить производительность алгоритма планирования использования процесса.
Описанный алгоритм получил название «кратчайшая работа первой».
Основную сложность при реализации алгоритма SJF представляет невозможность
точного значения времени выполнения очередного процесса.
8. Параллельные процессы, синхронизация процессов, пример необходимости
синхронизации, критическая секция.
Параллельные процессы
Параллельные процессы – последовательные вычислительные процессы, которые
одновременно находятся в каком-либо активном состоянии (осуществляют борьбу за
ресурсы).
Выделяют:
1. Независимые
Множества переменных (файлы данных, области ОП) не пересекаются, не влияют на
результаты работы друг друга (могут только задерживать исполнение друг друга)
2. Взаимодействующие
Используют совместно некоторые (общие) переменные, и влияют на результаты
выполнения друг друга.
Синхронизация процессов
Приведение двух или более процессов к такому их протеканию, когда определенные
стадии разных процессов совершаются в определенном порядке, либо
одновременно.
Необходима в случаях, когда параллельно протекающим процессам (потокам)
необходимо взаимодействовать – для исключения гонок и тупиков при обмене
данными между потоками, разделении данных, при доступе к устройствам вводавывода и т.д.
Для синхронизации процессов прикладных программ программист может
использовать:
- собственные средства и приемы синхронизации (например, два потока одного
процесса могут координировать свою работу с помощью доступной для них обоих
глобальной логической переменной)
- средства ОС (часто более эффективные или единственно возможные: потоки
разных процессов, не имеют возможности вмешиваться в работу друг друга)
Пример необходимости синхронизации
Пренебрежение вопросами синхронизации процессов, выполняющихся в режиме
мультипрограммирования, может привести к их неправильной работе или даже к
краху системы.
Переменная NEXT, доступная всем процессам-клиентам, содержит номер первой
свободной для записи имени файла позиции файла “Заказов”.
Процессы-клиенты считывают эту переменную, записывают в соответствующую
позицию файла “заказов” имя своего файла и наращивают значение NEXT на
единицу.
При передаче управления процессу R, он, в соответствии со считанным ранее
значением текущей свободной позиции запишет имя файла для печати в файл
“заказов” в позицию поверх имени файла процесса S и файл процесса S напечатан
не будет.
Критическая секция
Критическая секция – часть программы, результат выполнения которой может
непредсказуемо меняться, если переменные, относящиеся к ней, изменяются
другими потоками в то время, когда выполнение этой части еще не завершено. В
примере критическая секция – файл “заказов”, являющийся разделяемым ресурсом
для процессов R и S.
9. Механизмы синхронизации: блокирующие переменные, семафоры,
мониторы.
Блокирующие переменные (мьютексы):
С каждым разделяемым ресурсом связывается двоичная переменная, которая
принимает значение 1, если ресурс свободен, и значение 0, если ресурс занят.
Неделимая операция обеспечивает
принцип взаимного исключения:
Т.е. исключает случай, когда
процесс 1 определил, что ресурс
свободен, но, не успев установить
переменную в 0, был прерван;
Процесс 2 сделал то же самое и
был прерван, после чего
управление возвращено процессу 1
для выполнения своей критической
секции.
«Неделимая операция» может быть
реализована использованием
неделимой команды анализа и
присвоения значения логической
переменной (например, команды
BTC, BTR, BTS процессора
Pentium) или с помощью
специальных системных
примитивов – базовых функций ОС,
которые бы запрещали прерывания
на протяжении всей операции
проверки и установки.
«-»:
В течение времени, когда один
процесс находится в критической
секции, другой процесс, которому
требуется тот же ресурс, будет
выполнять рутинные действия по
опросу блокирующей переменной,
бесполезно растрачивая процессорное время.
Семафоры
Для устранения этого недостатка во многих ОС предусматриваются специальные
системные вызовы (аппарат для работы с критическими секциями.
В разных ОС аппарат событий реализован по своему, но в любом случае
используются системные функции, которые условно называют WAIT(x) и POST(x), где
x – идентификатор некоторого события (например, освобождение ресурса).
Обобщающее средство синхронизации процессов предложил Дейкстра, который ввел
новые примитивы, обозначаемые V (“открытие”) и P (“закрытие”), оперирующие над
целыми неотрицательными переменными, называемыми семафорами.
Доступ любого процесса к семафору, за исключением момента его инициализации,
может осуществляться только через эти две атомарные операции.
Смысл P(S) заключается в проверке текущего значения семафора S, и если S>0, то
осуществляется переход к следующей за примитивом операции, иначе процесс
переходит в состояние ожидания.
P(S):
Пока S==0
Процесс блокируется;
S=S-1;
Операция V(S) связана с увеличением значения S на 1 и переводом одного или
нескольких процессов из состояния готовности к исполнению процессором.
V(S):
S=S+1;
В простом случае, когда семафор работает в режиме 2-х состояний (S>0 и S=0), его
алгоритм работы полностью совпадает с алгоритмом работы мьютекса и S выполняет
роль блокирующей переменной.
“+”: пассивное ожидание (постановка в очередь и автоматическая выдача ресурсов)
 возможность управления группой однородных ресурсов
“-”: не указывают непосредственно на критический ресурс
 некорректное использование операций может привести к нарушению
работоспособности (например, переставив местами операции P(e) и P(b) в
функции Writer()).
Мониторы (условные переменные)
Для облегчения работы программистов при создании параллельных программ без
усилий на доказательства правильности алгоритмов и отслеживание
взаимосвязанных объектов (что характерно при использовании семафоров)
предложено высокоуровневое средство синхронизации, называемое мониторами.
Мониторы – тип данных, обладающий собственными переменными, значения
которых могут быть изменены только с помощью вызова функций-методов монитора.
Функции-методы могут использовать в работе только данные, находящиеся внутри
монитора, и свои параметры.
Доступ к мониторам в каждый момент времени имеет только один процесс.
Для организации не только взаимоисключений, но и очередности процессов, подобно
семафорам f(full) и e(empty), было введено понятие условных переменных, над
которыми можно совершать две операции wait и signal, отчасти похожие на операции
P и V над семафорами.
Функция монитора выполняет операцию wait над какой-либо условной переменной.
При этом процесс, выполнивший операцию wait, блокируется, становится
неактивным, и другой процесс получает возможность войти в монитор.
Когда ожидаемое событие происходит, другой процесс внутри функции совершает
операцию signal над той же самой условной переменной. Это приводит к
пробуждению ранее заблокированного процесса, и он становится активным.
Исключение входа нескольких процессов в монитор реализуется компилятором, а не
программистом, что делает ошибки менее вероятными.
Требуются специальные языки программирования и компиляторы (встречаются в
языках, “параллельный Евклид”,”параллельный Паскаль”,Java).
Следует отметить, что условные переменные мониторов не запоминают
предысторию, поэтому операцию signal всегда должна выполняться после операции
wait(иначе выполнение операции wait всегда будет приводить к блокированию
процесса).
10. Проблемы синхронизации(тупики) и способы их разрешения.
Тупик возникает при перестановке местами операций P(e) и P(b) в примере с
процессами “читатель” и “писатель”, рассмотренном выше – ни один из этих потоков
не сможет завершить начатую работу и возникнет тупиковая ситуация, которая не
может разрешиться без внешнего воздействия.
Тупиковые ситуации следует отличать от простых очередей хотя те и другие
возникают при совместном использовании ресурсов и внешне выглядят схоже.
Однако очередь – неотъемлемый признак высокого коэффициента использования
ресурсов при случайном поступлении запросов а тупик – “неразрешимая” ситуация.
Проблема тупиков требует решения следующих задач:
-распознавание тупиков,
-предотвращение тупиков,
-восстановление системы после тупиков.
Распознавание тупиков
В случаях, когда тупиковая ситуация образована многими процессами,
использующими много ресурсов, распознавание тупика является не тривиальной
задачей. Существуют формальные, программно-реализованные методы
распознавания тупиков, основанные на ведении таблиц распределения ресурсов и
таблиц запросов к занятым ресурсам, анализ которых позволяет обнаружить
взаимные блокировки.
Предотвращение тупиков
Тупики могут быть предотвращены на стадии проектирования и разработки
программного обеспечения, чтобы тупик не мог возникнуть ни при каком соотношении
взаимных скоростей процессов.
Существует подход динамического предотвращения тупиков, заключающийся в
использовании определенных правил при назначении ресурсов процессам
(например, ресурсы могут выделяться в определенной последовательности, общей
для всех процессов, как диск и принтер в примере).
Восстановление системы после тупиков
При возникновении тупиковой ситуации не обязательно снимать с выполнения все
заблокированные процессы, а можно:
снять только часть из них, при этом освобождая ресурсы, ожидаемые остальными
процессами
вернуть некоторые процессы в область «свопинга»
совершить «откат» некоторых процессов до т.н. контрольной точки, в которой
запоминается вся информация, необходимая для восстановления выполнения
программы с данного места.
Контрольные точки расставляются в программе в местах, после которых
возможно возникновение тупика.
11. Механизмы межпроцессного взаимодействия (каналы, очереди сообщений,
разделяемая память)
Каналы
Один из методов взаимодействия между процессами получил название канал
связи, конвейер или транспортер (pipe) - однонаправленный механизм передачи
данных (неструктурированного потока байтов) между процессами без необходимости
создания файла на диске. Канал представляет собой буфер в ОП, поддерживающий
очередь байт согласно FIFO. Для программиста, использующего канал, этот буфер
выглядит как безымянный файл, в который можно писать и читать, осуществляя тем
самым обмен данными. Обычный канал получил развитие – появился именованный
канал или именованный конвейер – зарегистрированный в системе, которой
разрешено использовать различным процессам или потокам. Реализуется это путем
создания одним, а чтения – другим процессом (потоком) файла типа FIFO с одним и
тем же указанным в процессах именем.
Именованный канал существует в ОС и после завершения процесса, поэтому
после окончания использования он должен быть «отсоединен» или удален. Следует
иметь в виду, что именованные каналы используют файловую систему только для
хранения имени конвейера, а данные между процессами передаются через буфер в
оперативной памяти, как и в случае обычного канала.
Очереди сообщений
Механизм очередей сообщений (queues) в целом схож с механизмом каналов, но
позволяет процессам и потокам обмениваться структурированными сообщениями.
При этом синхронизация осуществляется по сообщениям, то есть процесс,
пытающийся прочитать сообщение, переводится в состояние ожидания в том случае,
если в очереди нет ни одного полного сообщения (в распределенных системах,
состоящих из нескольких процессоров и неразделяемых блоков памяти,
использование таких средств синхронизации как блокирующие переменные,
семафоры, сигналы является непригодным, а синхронизация реализуется с помощью
очереди сообщений).
Один или несколько процессов независимым образом могут посылать сообщения
процессу – приемнику. При этом только процесс-приемник может читать и удалять
сообщения из очереди, а процессы-клиенты имеют право лишь помещать в очередь
свои сообщения. Таким образом, очередь работает только в одном направлении, а
если необходима двухсторонняя связь, то следует создать две очереди.
Работа с очередями сообщений имеет ряд отличий от работы с каналами:
Очередь сообщений представляет возможность использовать несколько
дисциплин обработки сообщений (FIFO, LIFO, приоритетный доступ, произвольный
доступ); каналы обеспечивают лишь дисциплину FIFO
Если при чтении сообщений оно удаляется из канала, то при чтении сообщения из
очереди этого не происходит, и сообщение может быть прочитано несколько раз
В очереди присутствуют не сами сообщения, а их адреса в памяти и размер. Эта
информация размещается системой в сегменте памяти, доступном для всех задач,
общающихся с помощью данной очереди
Основные функции управления очередью:
Создание новой очереди
Открытие существующей очереди
Чтение и удаление сообщений из очереди Чтение без последующего удаления
Добавление сообщения в очередь
Завершение использование очереди
Удаление из очереди всех сообщений Определение числа элементов в очереди
Разделяемая память(РП)
Представляет собой сегмент физической памяти, отображенной в виртуальное
адресное пространство двух или более процессов. Механизм разделяемой памяти
поддерживается подсистемой виртуальной памяти, которая настраивает таблицы
отображения адресов для процессов, запросивших разделение памяти так, что одни
и те же адреса некоторой области физической памяти соответствует виртуальным
адресам разных процессов.
Для работы с разделяемой памятью используют четыре системных вызова:
shmget - создает новый сегмент РП или находит существующий сегмент с тем же
ключом
shmat - подключает сегмент с указанным дескриптором к виртуальной памяти
обращающегося процесса
shmdt - отключает от виртуальной памяти ранее подключенный к ней сегмент с
указанным виртуальным адресом начала
shmctl - служит для управления разнообразными параметрами, связанными с
существующим сегментом
12. Управление памятью: задачи управления, типы адресации
Задачи по управлению памятью
отслеживание свободной и занятой памяти
выделение и освобождение памяти процессам
вытеснение процессов из ОП на диск, когда размеры основной памяти не
достаточны для размещения в ней всех процессов
возвращение процессов в оперативную память, когда в ней освобождается место
настройка адресов программы на конкретную область физической памяти
зашита памяти (не позволит выполняемому процессу записывать или читать
данные из памяти, назначенной другому процессу). Функция, как правило,
реализуется программно – аппаратными средствами
Типы адресации
Отобрание осуществляется
в два этапа:
1) системой
программирования с
использованием
библиотечных модулей
(компиляция трансляция)
2) ОС (подсистема
управления памятью, которая
использует дополнительную
информацию от ОС)
Логическое (символьное имя)
Преобразование имен прпограммы
Виртуальное адресное
пространство
Виртуальное пространство
Система
программирования
Операционная
система
Физическая память
компьютера
Ячейка оперативной памяти
Между первым и вторым этапами обращения к памяти имеют форму
виртуального адреса. Множество всех допустимых значений виртуального адреса
для некоторой программы определяет ее виртуальное адресное пространство.
Возможны различные варианты перехода от символьных имен к физическим
адресам.
Частным случаем отображения пространства имен является полная
тождественность виртуального адресного пространства и физической памяти
(система программирования генерирует абсолютную двоичную программу)
Часть программных модулей любой ОС обязательно должны быть абсолютными
двоичными программами (например, программы загрузки)
13. Распределение памяти: общие принципы управления памятью в
однопрограммных
ОС,
распределение
памяти
фиксированными,
динамическими, перемещаемыми разделами
Распределение памяти в однопрограммных ОС:
Непрерывное
Оверлейное (структура с перекрытием)
Непрерывное распределение – это самая простая и распространенная схема,
согласно которой вся память условно может быть разделена на три области:
Область, занимаемая ОС
Область, в которой размещается исполняемый процесс
Свободная область памяти
Такая схема распределения влечет за собой два вида потерь вычислительных
ресурсов:
Потерю процессорного времени, потому что процессор простаивает, пока задача
ожидает завершения операций ввода-вывода
Потерю самой ОП, потому что далеко не каждая программа использует всю
память, а режим работы в этом случае однопрограммный
(+)
Недорогая реализация, которая позволяет отказаться от многих второстепенных
функций ОС, например, защита памяти – единственное, что следует защищать программные модули и области памяти самой ОС)
Оверлейное распределение. Если логическое адресное пространство программы
должно быть больше, чем свободная область памяти, или весь возможный объем
ОП, то вся программа может быть разбита на главный и второстепенные сегменты, а
в ОП одновременно могут находится только ее главная часть и один или несколько
неперекрывающихся сегментов (структуры с перекрытием)
Образное представление организации памяти с использованием структуры с
перекрытием
Поочередно
можно
загружать
в
память
ветви А-В, А-С-D и А-СЕ программы
Мультипрограммные ОС
Для организации мультипрограммного режима необходимо обеспечить
одновременное расположение в ОП нескольких задач (целиком или частями)
При решении этой задачи ОС должна учитывать целый ряд моментов:
Следует ли назначать каждому процессу одну непрерывную область физической
памяти или фрагментами
Должны ли сегменты программы, загруженные в память, находится в одном месте
в течении всего периода выполнения процесса или можно ее время от времени
сдвигать
Что следует предпринять, если сегменты программы не помещаются в имеющуюся
память
РАСПРЕДЕЛЕНИЕ ПАМЯТИ ФИКСИРОВАННЫМИ РАЗДЕЛАМИ
Простейший способ управления ОП состоит в том, что память разбивается на
несколько областей фиксированной величины, называемых разделами. Разбиение
может быть выполнено вручную оператором во время старта системы или во время
ее установки.
В каждом разделе и в каждый момент времени может располагаться по одной
задаче, и к каждому разделу в отдельности можно применить методы, используемые
при распределении памяти в однопрограммных ОС.
Очередной новый процесс, поступивший на выполнение помещается либо в общую
очередь(а), либо в очередь к некоторому разделу(б)
Подсистема управления памятью в этом случае выполняет следующие задачи:
Сравнивает объем памяти, требуемый для вновь поступившего процесса, с
размерами свободных разделов и выбирает подходящий раздел
Осуществляет загрузку программы в один из разделов и настройку и настойку
адресов
(+): простота
(-):Существенные потери памяти от внутренней фрагментации
Учитывая то, что в каждом разделе может выполняться только один процесс, то
уровень мультипрограммирования заранее ограничен числом разделов, так как
независимо от размера программы она будет занимать весь раздел
Применялся в ранних мультипрограммных ОС, сейчас – в ОСРВ за счет
детерминированности вычислительного процесса и небольших затрат на реализацию
РАСПРЕДЕЛЕНИЕ ПАМЯТИ ПЕРЕМЕЩАЕМЫМИ РАЗДЕЛАМИ
Чтобы уменьшить потери от внутренней фрагментации, целесообразно размещать
в ОП задачи «плотно», одну за другой, выделяя ровно столько памяти, сколько
задача потребует (распределение памяти динамическими разделами)
Обобщенный алгоритм:
Вся память свободна. Каждому вновь поступающему процессу выделяется вся
необходимая память (если достаточный объем памяти отсутствует, то процесс не
создается)
После завершения процесса память освобождается, и на это место может быть
загружен другой процесс
Задачами операционной системы при реализации данного метода управления
памятью является:
ведение таблиц свободных и занятых областей, в которых указываются начальные
адреса и размеры участков памяти,
при поступлении новой задачи - анализ запроса, просмотр таблицы свободных
областей и выбор раздела, размер которого достаточен для размещения
поступившей задачи,
загрузка задачи в выделенный ей раздел и корректировка таблиц свободных и
занятых областей,
после завершения задачи корректировка таблиц свободных и занятых областей.
Выбор раздела для вновь поступившей задачи может осуществляться по разным
правилам. Например:
"первый попавшийся раздел достаточного размера"(first fit)
"раздел, имеющий наименьший достаточный размер"(best fit)
"раздел, имеющий наибольший достаточный размер"(worst fit)
(+)
Значительная гибкость
(-)
Внешняя фрагментация памяти – наличие большого числа несмежных участков
свободной память небольшого
РАСПРЕДЕЛЕНИЕ ПАМЯТИ ДИНАМИЧЕСКИМИ РАЗДЕЛАМИ
Одним из методов борьбы с фрагментацией является перемещение всех занятых
участков («сжатие», «уплотнение», «дефрагментация») в сторону старших либо в
сторону младших адресов, так, чтобы вся свободная память образовывала единую
свободную область (рисунок).
Дефрагментация может выполняться:
При каждом завершении задачи (меньше однократной вычислительной работы)
В случае, когда для вновь поступившей задачи нет свободного раздела
достаточного размера (процедура выполняется реже)
(+) более эффективное использование памяти
(-) требует значительных временных затрат
14. Сегментное распределение памяти
Первым среди разрывных методов распределения памяти был сегментный:
Программу необходимо разбивать на части и уже каждой такой части выделять
физическую память. Естественным способом разбиения программы на части
является разбиение её на логические элементы – сегменты.
Разбиение на сегменты позволяет дифференцировать способы доступа к разным
частям программы(сегментам). Можно запретить обращаться с операциями записи и
чтения в кодовый сегмент программы, а для сегмента данных разрешить только
чтение. Разбиение программы на «осмысленные» части делает принципиально
возможным разделением одного сегмента несколькими процессами.
Логически обращение к элементам программы в этом случае будет состоять из
имени сегмента и смещения относительно начала этого сегмента.
Вся информация о текущем размещении сегментов задачи в памяти сводится в
таблицу сегментов (таблицу дескрипторов сегментов задачи), формируемую для
каждого исполняемого процесса.
При размещении каждого из сегментов в оперативной или внешней памяти ОС
отмечает в дескрипторе текущее местоположение сегмента.
При передаче управления следующей задаче ОС должна занести в
соответствующий регистр адрес таблицы дескрипторов сегментов этой задачи.
Сама таблица дескрипторов сегментов, в свою очередь, также представляет собой
сегмент данных, который обрабатывается диспетчером памяти ОС.
Поэтому:
общий объём виртуального адресного пространства задачи может превосходить
объём физической памяти компьютера, на котором эта задача будет выполняться.
Даже если потребности в памяти не так велики, можно размещать в памяти больше
задач, поскольку любой задаче, как правило, все её сегменты одновременно не
нужны.
Решение проблемы замещения (определения того сегмента, который должен быть
либо перемещён во внешнюю память, либо просто замещён новым) используются
следующие дисциплины:
FIFO (First In First Out) первый пришёл – первый ушёл
LRU (Least Recently Used ) не используемый дольше других
LFU (Least Frequently Used) используемый реже других
Random-случайный выбор сегмента
15. Страничное распределение памяти
страничный способ при котором все фрагменты задач считаются равными, причем
длина фрагмента в идеале должна быть кратна степени 2, чтобы операции сложения
можно было заменить операциями конкатенации.
Часть виртуальных страниц задачи могут быть размещены в ОП, а часть – во
внешней памяти.
Место во внешней памяти называют файлом подкачки, или страничным
файлом(paging file). Иногда это файл называют swap – файлом, тем самым
подчеркивая, что записи этого файла – страницы – замещают друг друга в ОП
Подпись «Nвс» в таблицах страниц означает «номер виртуальной страницы»,
подпись «Nфс» – «номер физической страницы».
Разбиение всей ОП на страницы одинаковой величины, причем кратной степени
двойки, приводит к тому, что вместо одномерного адресного пространства памяти
можно говорить о двумерном. Первая координата адресного пространства – это
номер страницы, вторая координата – номер ячейки внутри выбранной страницы
(индекс).
Таким образом, физический адрес определяется парой (Рр, i), а виртуальный
адрес – парой (Pv, i), где Pv – номер виртуальной страницы, Рр – номер физической
страницы, i – индекс ячейки внутри страницы
Виртуальный адрес
Регистр таблицы страниц
32000
17
P (Page)
612
I (index)
Таблица страниц текущей задачи
32017
P
Номер
физической
страницы
Права
доступа
1
23
R-X
P – Бит
присутствия
Страница №23
23000
23612
Количество битов, отводимое под индекс, определяет размер страницы, а
количество битов, отводимое под номер виртуальной страницы, - объем
потенциально доступной для программы виртуальной памяти. Для отображения
виртуального адресного пространства задачи на физическую память, как и в случае
сегментного способа организации, для каждой задачи необходимо иметь таблицу
страниц для трансляции адресных пространств, отличающихся от дескриптора
сегмента прежде всего тем, что в ней нет поля длины – все страницы имеют
одинаковый размер. При обращении к виртуальной странице, не оказавшейся в
данный момент в ОП, возникает прерывание и управление передается диспетчеру
памяти, который должен найти свободное место.
Обычно предоставляется первая же свободная страница. Если свободной
физической страницы нет, то диспетчер памяти по одной из дисциплин замещения
(LRU,
LFU,FIFO,
случайный доступ)
определит
страницу, подлежащую
расформированию или сохранению во внешней памяти. На ее месте он разместит
новую виртуальную страницу, к которой было обращение из задачи, но которой не
оказалось в ОП. Для абсолютного большинства современных ОС характерна
дисциплина замещения страниц LRU как наиболее эффективная. Так, именно эта
дисциплина использована в OS/2 и Linux.
Однако в ОС Windows NT/2000/XP разработчики, желая сделать их максимально
независимыми от аппаратных возможностей процессора, отказались от этой
дисциплины и применили правило FIFO. Поэтому, чтобы компенсировать ее
неэффективность была введена «буферизация» тех страниц, которые должны быть
записаны в файл подкачки на диск или просто расформированы. Принцип
буферизации следующий: прежде чем замещаемая страница действительно
окажется во внешней памяти или просто расформированной, она помечается как
«кандидат на выгрузку».
Если в следующий раз произойдет обращение к странице, находящейся в таком
«буфере», то страница никуда не выгружается и уходит в конец списка FIFO
В противном случае страница действительно выгружается, а на ее место в
«буфер» попадает следующий «кандидат».
Величина «буфера» не может быть большой, поэтому эффективность страничной
реализации памяти в Windows NT/2000/XP намного ниже, чем в других ОС, и явление
пробуксовки проявляется даже при относительно большом объеме ОП
16.
Особенности
эффективного
использования
таблицы
страниц:
многоуровневые таблицы страниц, ассоциативная память, инвертированная
таблица страниц, хеширование
Особенности эффективного использования таблицы страниц
Одним из основных элементов, необходимых при страничном распределении
памяти и существенно влияющих на эффективность ее использования в целом,
является таблица страниц.
Существуют различные варианты организации и использования таблиц страниц,
отличающихся как структурой таблиц (многоуровневые, инвертированные), так и
способом доступа к их записям (ассоциативный).
Многоуровневые таблицы страниц
Основную проблему для эффективной реализации таблицы страниц создают
большие размеры виртуальных адресных пространств современных компьютеров,
которые обычно определяются разрядностью архитектуры процессора.
В 32-битном адресном пространстве при размере страницы 4 Кбайт (Intel)
получаем 232/212=220, то есть приблизительно 106 страниц – таблица должна иметь
примерно 106 строк, а запись в строке состоит из нескольких байтов. Каждый процесс
нуждается в своей таблице страниц.
Для того чтобы избежать размещения в памяти огромной таблицы, ее разбивают
на ряд фрагментов.
В ОП хранят лишь некоторые, необходимые для конкретного момента исполнения
фрагмента таблицы страниц.
В силу свойства локальности число таких фрагментов относительно невелико.
Локальность – способность в течение ограниченного отрезка времени работать с
небольшим набором адресов памяти.
Различают временную локальность (высокая вероятность повторного обращения
по одному и тому же адресу в ближайшее время) и пространственную локальность
(высокая вероятность повторного обращения по соседнему адресу в ближайшее
время).
Одним из наиболее распространенных способов разбиения является организация
так называемой многоуровневой таблице страниц.
Виртуальный адрес
P1
P2
d
Таблица первого
уровня
Таблица второго
уровня
Страничные
кадры по 4Кб
При помощи одной таблицы второго уровня можно охватить 4Мбайт ОП. Для
размещения процесса с большим объемом занимаемой памяти достаточно иметь в
ОП одну таблицу первого уровня и несколько таблиц второго уровня. Очевидно, что
суммарное количество строк в этих таблицах много меньше 220.
Количество уровней в таблице страниц зависит от конкретных особенностей
архитектуры.
Примером реализации одноуровневого (DEC PDP-11), двухуровневого (Intel, DEC
VAX), трехуровневого (Sun SPARC, DEC Alpha) пейджинга, а также пейджинга с
заданным количеством уровней (Motorola).
Инвертированная таблица страниц
В этой таблице содержится по одной записи на каждый страничный кадр
физической памяти. Достаточно одной таблицы для всех процессов. Для хранения
функции отображения требуется фиксированная часть основной памяти, независимо
от разрядности архитектуры, размера и количества процессоров.
Например, для Pentium с
256 Мбайт ОП нужна таблица размером 64 Кбайт
строк.
Несмотря на экономию ОП, применение инвертированной таблицы имеет
существенный минус – записи в ней (как и в ассоциативной памяти) не
отсортированы по возрастанию номеров виртуальных страниц, что усложняет
трансляцию адреса.
Один из способов решения данной проблемы – использование хеш-таблицы
виртуальных адресов.
Часть виртуального адреса, представляющая собой номер страницы,
отображается в хеш-таблицу с использованием функции хеширования.
Хеш и хеш-функция
Хеш – число фиксированной длины, которое ставится в соответствие данным
произвольной длины таким образом, чтобы вероятность появления различных
данных с одинаковым хешем стремилась к нулю, а восстановить данные по их хешу
было как можно труднее.
Хеш-функции – функция, выполняющая одностороннее преобразование
(хеширование) входных данных.
Инвертированная таблица страниц
Каждой странице физической памяти соответствует одна запись в хеш-таблице и
инвертированной таблице страниц.
Виртуальные адреса, имеющие одно значение хеш-функции, сцепляются друг с
другом. Обычно длина цепочки не превышает двух записей.
Ассоциативная память
Поиск номера кадра, соответствующего нужной странице, в многоуровневой
таблице страниц требует нескольких обращений к основной памяти, поэтому
занимает много времени. В некоторых случаях такая задержка недопустима.
Решение проблемы ускорения – снабдить компьютер (процессор) аппаратным
устройством для отображения виртуальных страниц в физические без
обращения к таблице страниц, то есть иметь небольшую быструю кеш-память,
хранящую необходимую на данный момент часть таблицы страниц.
Это устройство называют ассоциативной памятью или буфером поиска трансляции
(translation lookaside buffer - TLB).
Высокое значение вероятности нахождения данных в ассоциативной памяти
связано с наличием у данных объективных свойств: пространственной и
временной локальности.
«медленный»
ответ
ОПЕРАТИВНАЯ
ПАМЯТЬ
ЦП
запрос
«быстрый»
ответ
КЭШ
Адрес данных
в ОП
Структура кэш памяти
Данные
Управл. информация
бит модиф.
бит обращ.
Общая схема функционирования
В первый момент времени осуществляется поиск информации о необходимой
странице в ассоциативной памяти. Если нужная запись найдена, то производится
отображение этой страницы в физическую память (за исключением случаев
нарушения привилегий, когда запрос на обращение к памяти отклоняется).
Если запись в ассоциативной памяти отсутствует, отображение осуществляется
через таблицу страниц: происходит замена одной из записей в ассоциативной памяти
найденной записью из
таблицы страниц (конструкция ассоциативной памяти
должна позволять выявлять те «старые» записи, которые могут быть замещены
«новыми»).
Одна запись таблицы в ассоциативной памяти содержит информацию об одной
виртуальной странице: ее атрибуты и кадр, в котором она находится (поля в точности
соответствуют полям в таблице страниц).
Число удачных поисков номера страницы в ассоциативной памяти по отношению к
общему числу поисков называется hit ratio («процент попаданий в кэш»).
Обращение к одним и тем же страницам повышает hit ratio (чем больше hit ratio,
тем меньше среднее время доступа к данным, находящимся в ОП).
Пример: Если для доступа к памяти через таблицу страниц необходимо 100 нс, а
для доступа через ассоциативную память – 20 нс. Если hit ratio = 90%, то среднее
время доступа -> 0,9x20+0,1x100=28нс.
Минус: При переключении контекста процесса при использовании ассоциативной
памяти требуется ее «очистка», что ведет к увеличению времени переключения
контекста.
17. Сегментно - страничное распределение памяти
Метод представляет собой комбинацию сегментного и страничного распределения
памяти и сочетает в себе достоинства обоих подходов.
Виртуальное пространство процесса делится на сегменты, а каждый сегмент в
свою очередь делиться на виртуальные страницы, которые нумеруются в пределах
сегмента. ОП делиться на физические страницы.
Загрузка процесса выполняется ОС постранично, при этом часть страниц
размещается в ОП, а часть на диске.
Для каждого сегмента создается своя таблица страниц, структура которой
идентична структуре таблицы страниц при страничном распределении.
Для каждого процесса создается таблица сегментов, в которой указываются
адреса таблиц страниц для всех сегментов данного процесса. Адрес таблицы
сегментов загружается в специальный регистр процесса, когда активизируется
соответствующий процесс.
Виртуальный адрес состоит из двух составляющих:
1. указание на номер сегмента
2. смещение относительно начала сегмента
2.1. виртуальная страница
2.2. индекс
Другими словами, получается, что виртуальный адрес теперь состоит из трех
компонентов: сегмента, страницы и индекса.
Плюсы:
 Разбиение программы на сегменты позволяет размещать отдельные сегменты
в памяти целиком, что позволяет сократить число обращений к отсутствующим
страницам, так как вероятность выхода за пределы сегмента меньше
вероятности выхода за пределы страницы;
 Наличие сегментов облегчает разделение программных модулей между
параллельными процессами;
 Возможна динамическая компоновка задачи;
 Выделение памяти страницам позволяет минимизировать фрагментацию.
Минусы:
 Сложность реализации и высокие вычислительные затраты позволяют
использовать его редко в дорогих и мощных вычислительных системах.
 Этот способ организации доступа к памяти вносит еще большую временную
задержку, т.к. необходимо сначала вычислить адрес дескриптора сегмента и
прочитать его, затем определить адрес элемента таблицы страниц этого
сегмента и извлечь из памяти необходимый элемент и уже только после этого
можно приписать к номеру физической страницы номер ячейки в странице
(индекс).
 Задержка доступа к искомой ячейке получается, по крайней мере, в три раза
больше, чем при простой прямой адресации.
Принципиальная возможность реализации сегментно-страничной организации
памяти заложена в семейство микропроцессоров i80x86, однако вследствие слабой
аппаратной поддержки, трудностей при создании систем программирования и ОС в
ПК эта возможность не используется.
18. Физическая организация жёсткого диска
Совокупность дорожек одного радиуса на всех поверхностях всех пластин пакета
называется цилиндром (англ. cylinder). Каждая дорожка разбивается на фрагменты,
называемые секторами или блоками, так что все дорожки имеют равное число
секторов, в которые можно максимально записать одно и то же число байт. Сектор
имеет фиксированный для конкретной системы размер, выражающийся степенью
двойки (чаще всего – 512 байт).
Сектор – наименьшая адресуемая единица обмена данными дискового устройства
с ОП.
Для того чтобы контроллер мог найти на диске нужный сектор, необходимо задать
ему все соответствующие адреса сектора: номер цилиндра, номер поверхности и
номер сектора.
ОС при работе с диском использует, как правило, собственную единицу дискового
пространства, называемую кластером (логическим блоком). При создании файла
место на диске ему выделяется кластерами, который состоит из одного или
нескольких смежных секторов.
Например, если файл имеет размер 2560, а размер кластера в файловой системе
определен в 1024 байта, то файлу будет выделено на диске 3 кластера.
Дорожки и секторы создаются в результате выполнения процедуры физического
(низкоуровневого) форматирования диска.
Низкоуровневый формат диска не зависит от типа ОС, которая этот диск будет
использовать.
Структура 1-го физического сектора жесткого диска
Размер (байт)
Описание
446
Загрузочная запись (MBR)
16
Запись 1 раздела
16
Запись 2 раздела
16
Запись 3 раздела
16
Запись 4 раздела
2
Сигнатура 055AAh
Головная запись загрузки (master boot record, MBR) - зарезервирована для
программы начальной загрузки BIOS (ROM Bootstrap routine), которая при загрузке с
жесткого диска считывает и загружает в память первый физический сектор на
активном разделе диска, называемый загрузочным сектором (Boot Sector).
Каждая запись о разделах содержит начальную позицию и размер раздела на
жестком диске, а также информацию о том, первый сектор какого раздела содержит
загрузочный сектор.
Если информация о разделах будет повреждена, то не только не будет
загружаться ни одна из установленных на компьютере ОС, но станут недоступными
данные, расположенные в диске.
Последние два байта таблицы разделов имеют значение 055AA, то есть
чередующиеся значения 0 и 1 в двоичном представлении данных.
Эта сигнатура используется для того, чтобы убедится в том, что сектор
загрузочный и его можно использовать именно в этом качестве (загружать).
Многие ОС позволяют создавать расширенный (extended) раздел, который по
аналогии с разделами может разбиваться на несколько логических дисков.
19. Принципы построения файловой системы: интерфейс, функциональная
схема, типовая структура файловой системы
Файловая система - это часть ОС, организующей работу с данными,
хранящимися во внешней памяти, и обеспечивающей пользователю удобный
интерфейс при работе с такими данными.
Понятие «файловая система» включает:

совокупность всех файлов на диске;

наборы служебных структур данных для управления файлами (каталоги
файлов, дескрипторы файлов, таблицы распределения свободного и занятого
пространства на диске);

комплекс системных программных средств управления файлами
(создание, уничтожение, чтение, запись, именование, установка атрибутов, уровней
доступа, поиск и т.д.
Основные функции файловой системы.
1.Идентификация файлов. Связывание имени файла с выделенным ему
пространством внешней памяти.
2.Распределение внешней памяти между файлами. Для работы с конкретным
файлом пользователю не требуется иметь информацию о местоположении этого
файла на внешнем носителе информации. Например, для того чтобы загрузить
документ в редактор с жесткого диска, нам не нужно знать, на какой стороне какого
магнитного диска, на каком цилиндре и в каком секторе находится данный документ.
3.Обеспечение надежности и отказоустойчивости. Стоимость информации может во
много раз превышать стоимость компьютера.
4.Обеспечение защиты от несанкционированного доступа.
5.Обеспечение
совместного доступа к файлам, так чтобы пользователю не приходилось прилагать
специальных усилий по обеспечению синхронизации доступа.
6.Обеспечение
высокой производительности.
ФУНКЦИОНАЛЬНАЯ СХЕМА ФАЙЛОВОЙ СИСТЕМЫ
Функционирование
любой
файловой
системы
можно
представить
многоуровневой моделью, в которой каждый уровень предоставляет некоторый
интерфейс (набор функций) вышележащему уровню, а сам, в свою очередь, для
выполнения своей работы использует интерфейс (обращается с набором запросов)
нижележащего уровня.
Задачей символьного уровня является определение по символьному имени
файла его уникального имени. В файловых системах, в которых каждый файл может
иметь только одно символьное имя (например, MS-DOS), этот уровень отсутствует,
т.к. символьное имя, присвоенное файлу пользователем, является одновременно
уникальным и может быть использовано ОС.
В других файловых системах, в которых один и тот же файл может иметь
несколько символьных имен, на данном уровне просматривается цепочка каталогов
для определения уникального имени файла.
Например, в файловой системе Unix уникальным именем является номер
индексного дескриптора файла (i-node).
На следующем, базовом уровне по уникальному имени файла
определяются его характеристики: права доступа, адрес, размер и другие.
Характеристики файла могут входить в состав каталога или храниться в отдельных
таблицах. При открытии файла его характеристики перемещаются с диска в
оперативную память, чтобы уменьшить среднее время доступа к файлу.
Следующим этапом реализации запроса к файлу является проверка прав
доступа к нему. Для этого сравниваются полномочия пользователя или процесса,
выдавших запрос, со списком разрешенных видов доступа к данному файлу. Если
запрашиваемый вид доступа разрешен, то выполнение запроса продолжается, если
нет, то выдается сообщение о нарушении прав доступа.
В некоторых файловых системах (например, HPFS) при открытии файла вместе
с его характеристиками в оперативную память перемещаются несколько первых
блоков файла, содержащих данные.
На логическом уровне определяются координаты запрашиваемой логической
записи в файле, т.е. расстояние (в байтах) от начала файла где находится требуемая
логическая запись. При этом абстрагируются от физического расположения файла,
он представляется в виде непрерывной последовательности байт.
Алгоритм работы данного уровня зависит от логической организации файла.
Например, если файл организован как последовательность логических записей
фиксированной длины l, то n -ая логическая запись имеет смещение l * (n-1) байт.
Для определения координат логической записи в файле с индекснопоследовательной организацией выполняется чтение таблицы индексов (ключей), в
которой непосредственно указывается адрес логической записи.
На физическом уровне файловая система определяет номер физического
блока, который содержит требуемую логическую запись, и смещение логической
записи в физическом блоке.
Для этого используются результаты работы логического уровня - смещение
логической записи в файле, адрес файла на внешнем устройстве, а также сведения о
физической организации файла, включая размер блока.
После определения номера физического блока, файловая система обращается к
системе ввода-вывода для выполнения операции обмена с внешним устройством. В
ответ на этот запрос в буфер файловой системы будет передан нужный блок, в
котором, на основании смещения, полученного при работе физического уровня,
выбирается требуемая логическая запись.
ТИПОВАЯ СТРУКТУРА ФАЙЛОВОЙ СИСТЕМЫ
В начале раздела находится суперблок, содержащий общее описание
файловой системы, например:
 тип файловой системы;
 размер файловой системы в блоках;
 размер массива индексных узлов;
 размер логического блока.
Описанные структуры данных создаются на диске в результате его
форматирования (например, утилитами format, makefs и др.). Их наличие позволяет
обращаться к данным на диске как к файловой системе, а не как к обычной
последовательности блоков.
В файловых системах современных ОС для повышения устойчивости
поддерживается несколько копий суперблока. В некоторых версиях Unix суперблок
включал также и структуры данных, управляющие распределением дискового
пространства, в результате чего суперблок непрерывно подвергался модификации,
что снижало надежность файловой системы в целом. Выделение структур данных,
описывающих дисковое пространство, в отдельную часть является более
правильным решением.
Массив индексных узлов (ilist) содержит список индексов, соответствующих
файлам данной файловой системы. Размер массива индексных узлов определяется
администратором при установке системы. Максимальное число файлов, которые
могут быть созданы в файловой системе, определяется числом доступных индексных
узлов.
В блоках данных хранятся реальные данные файлов. Размер логического блока
данных может задаваться при форматировании файловой системы. Заполнение
диска содержательной информацией предполагает использование блоков хранения
данных для файлов директорий и обычных файлов и имеет следствием
модификацию массива индексных узлов и данных, описывающих пространство диска.
Отдельно взятый блок данных может принадлежать одному и только одному файлу в
файловой системе.
20. Способы выделения дискового пространства. Управление дисковым
пространством. Размер логического блока
Ключевой вопрос реализации файлов системы – способ связывания файлов с
блоками диска.
В ОС используют несколько способов выделения файлу дискового пространства,
для каждого и которых сведения о локации блоков данных файла можно извлечь из
записи в директории, соответствующей символьному имени файла.
Выделение непрерывной последовательностью блоков.
Простейший способ – хранить каждый файл как непрерывную последовательность
блоков диска. При непрерывном расположении файл характеризуется адресом и
длиной (в блоках). Файл, стартующий с блока b, занимает затем блоки b+1, b+2,…
b+n-1.
<<+>>:

Легкая реализация, т.к. выяснение местонахождения файла сводится к
вопросу , где находится первый блок;

Обеспечивает хорошую производительность, потому что целый файл
может быть считан за одну дисковую операцию.
<<->>:Трудности в поиске места для нового файла.

Наличие существенной внешней фрагментации.

Не применим, пока не известен максимальный размер файла.
Индексные узлы.
<<+>>:

При фиксированном, относительно небольшом размере индексного узла,
можно поддерживать работу с файлами, размер которых может меняться от
нескольких байт до нескольких гигабайт. Используется в ОС Unix, файловыми
системами HPFS, NTFS и др.
Управление дисковым пространством.
Одной из основных функций файловых систем является управление свободным и
занятым пространством внешней памяти, включая учет используемого места на
диске. Рассмотрим битовый вектор и связный список.
Битовый вектор. Список свободных блоков диска реализован в виде битового
вектора. Каждый блок представлен одним битом, принимающим значение 0 или 1, в
зависимости
от
того
занят
ли
он
или
свободен.
Например,
000111101111110000000111…
<<+>>:

Простота и эффективность при нахождении первого свободного блока или
n последовательных блоков на диске. Многие компьютеры имеют специальные
инструкции манипулирования битами, при помощи которых можно легко
реализовать первый единичный бит в слове.
<<->>:

Эффективен только если битовый вектор помещается в памяти целиком,
что возможно только для относительно небольших дисков. Используется
в
Apple Macintosh.
Связный список. Связывают в список все свободные
блоки, поддерживая
указатель на первый свободный блок в специальном месте диска, попутно
кэшируя в памяти эту информацию.
<<->>:

Если необходим не первый свободный блок, то схема не будет
эффективна, т.к. для трассирования списка нужно сделать достаточно много
обращений к диску.
Размер логического блока (кластера).
Размер логического блока
является одним из ключевых параметров,
влияющих в целом на эффективность работы файловой системы. В некоторых
системах (к примеру, Unix) он может быть задан при форматировании.
Небольшие размеры блока:
<<+>>: меньше внутренней фрагментации
<<->>: существенные задержки при чтении
Большие размеры блока:
<<+>>: более высокая скорость обмена с диском
<<->>: в среднем половина последнего блока каждого файла пропадает ->
снижается доля полезного дискового пространства.
Скорость
обмена с
диском (Кб/с)
Процент использования
дисковогопространства
100
200
Скорость
обмена с
диском
0 128
Утилизация
диска
1k
2k
4k
8k
Размер
блока
Большинство файлов имеет небольшой размер (в Unix около 85% файлов имеют
размер менее 8 Кбайт и 48% - менее 1 Кб).
Обычный компромисс – выбор блока размером 512 байт, 1 Кбайт, 2 Кбайт, 4 Кбайт.
21. Особенности организации некоторых файловых систем
Структура раздела FAT. Логический раздел отформатированный под файловую
систему FAT имеет следующую структуру.
Загрузочный сектор
Блок параметров BIOS
(BPB)
FAT
FAT
(копия)
Корневой
каталог
Область
файлов
Ограничения
NTFS
Размеры
Минимальный размер тома
тома
составляет 1,44МБ
Размеры
файлов
FAT16 и FAT 32
FAT поддерживает различные
размеры томов — от объема дискет
и до 2 ГБ.
На практике рекомендуется
FAT32 поддерживает тома объемом
создавать тома, размеры
от 2 ГБ до 2 ТБ. Работая под
которых не превышают 2 ТБ.
управлением Windows XP для
FAT32 можно отформатировать
тома, размер которых не
превышает 32 ГБ.
Windows не позволяет
В FAT32 не поддерживаются диски,
форматировать дискеты в NTFS размеры которых меньше 512 МБ.
(ntfsflp от Mark Russinovich
позволяет).
NTFS поддерживает
FAT не поддерживает ссылки.
жёсткие(Hardlinks) и
символьные ссылки, Junctions,
Volume Mount Point.
Максимальный размер файла
FAT16 поддерживает файлы
искусственно установлен
размером не более 2 ГБ. FAT32
Microsoft в 32 эксбибайт.
поддерживает файлы размером не
Теоретически размер файла
более 4 ГБ.
практически неограничен.
FAT
FAT является наиболее простой из поддерживаемых Windows NT файловых систем.
Основой файловой системы FAT является таблица размещения файлов, которая
помещена в самом начале тома. На случай повреждения на диске хранятся две
копии этой таблицы. Кроме того, таблица размещения файлов и корневой каталог
должны
храниться
в
определенном
месте
на
диске.
Диск, отформатированный в файловой системе FAT, делится на кластеры, размер
которых зависит от размера тома. Одновременно с созданием файла в каталоге
создается запись и устанавливается номер первого кластера, содержащего данные.
Такая запись в таблице размещения файлов сигнализирует о том, что это последний
кластер
файла,
или
указывает
на
следующий
кластер.
Обновление таблицы размещения файлов имеет большое значение и требует много
времени. Если таблица размещения файлов не обновляется регулярно, это может
привести к потере данных. Длительность операции объясняется необходимостью
перемещения читающих головок к логической нулевой дорожке диска при каждом
обновлении
таблицы
FAT.
Каталог FAT не имеет определенной структуры, и файлы записываются в первом
обнаруженном свободном месте на диске. Кроме того, файловая система FAT
поддерживает только четыре файловых атрибута: «Системный», «Скрытый»,
«Только чтение» и «Архивный».
Преимущества файловой системы FAT
В FAT-разделе, удаление файла можно отменить. Файловая система FAT лучше
всего подходит для использования на дисках и разделах размером до 200 МБ,
потому что она запускается с минимальными накладными расходами.
Недостатки файловой системы FAT
Не стоит использовать файловую систему FAT для дисков и разделов, чей размер
больше 200 МБ. Это объясняется тем, что по мере увеличения размера тома
производительность файловой системы FAT быстро падает. Для файлов,
расположенных в разделах FAT, невозможно установить разрешения.
Разделы FAT имеют ограничение по размеру: 4 ГБ под Windows NT и 2 ГБ под MSDOS.
ОБЗОР ФАЙЛОВОЙ СИСТЕМЫ NTFS
С точки зрения пользователя файловая система NTFS организует файлы по
каталогам и сортирует их так же, как и HPFS. Однако в отличие от FAT на диске нет
специальных объектов и отсутствует зависимость от особенностей установленного
оборудования (например, сектор размером 512 байт). Кроме того, на диске
отсутствуют
специальные
хранилища
данных.
Целью файловой системы NTFS является следующее.
 Обеспечение
надежности,
имеющей
большое
значение
для
высокопроизводительных систем и файловых серверов.
 Предоставление платформы дополнительной функциональности.
 Поддержка требований POSIX.
 Устранение ограничений, характерных для файловых систем FAT.
Надежность
Для обеспечения надежности файловой системы NTFS особое внимание было
уделено трем основным вопросам: способности к восстановлению, устранению
неустранимых
ошибок
одного
сектора
и
экстренному
исправлению.
Для обеспечения способности к восстановлению NTFS отслеживает все транзакции
в отношении файловой системы. Выполнение команды CHKDSK в файловой
системе FAT или HPFS служит для проверки последовательности указателей в
пределах каталога, размещения и таблицы файлов. Файловая система NTFS хранит
журнал операций с этими компонентами. Таким образом, для восстановления
связности системы необходимо с помощью команды CHKDSK выполнить «откат»
транзакций
до
последней
точки
фиксации.
При использовании FAT или HPFS сбой сектора, в котором хранится один из
специальных объектов файловой системы, приводит к возникновению неустранимой
ошибки одного сектора. В NTFS эта проблема решается двумя способами. Вопервых, специальные объекты не используются, а все имеющиеся на диске объекты
отслеживаются и защищаются. Во-вторых, существует несколько копий (число
зависит
от
размера
тома)
основной
таблицы
файлов.
NTFS поддерживает экстренное исправление.
Дополнительные функции
Основное предназначение конфигурации операционной системы Windows NT на
любом уровне является обеспечение платформы, которую можно использовать в
качестве модуля при построении других систем, и NTFS не является исключением.
Эта файловая система представляет собой гибкую платформу с широкими
функциональными возможностями, которую могут использовать другие файловые
системы. Кроме того, в NTFS полностью реализована модель безопасности Windows
NT и поддержка нескольких потоков данных. Файл данных перестал быть отдельным
потоком данных. Кроме того, пользователи могут добавлять собственные атрибуты
файлов.
Поддержка POSIX
Из всех поддерживаемых файловых систем NTFS наиболее полно соответствует
POSIX.1. В ней реализована поддержка следующих требований POSIX.1:
 назначение имен с учетом регистра;
 согласно POSIX. README.TXT, Readme.txt и readme.txt – это разные файлы;
 дополнительная отметка времени;
 дополнительный штамп времени для сохранения времени последнего доступа
к файлу;
 жесткие связи.
Устранение ограничений
Во-первых, в NTFS значительно – до 2^64 байт (16 экзабайт или 18 446 744 073 709
551 616 байт) – увеличен допустимый раздел файлов и томов. В NTFS для решения
проблемы фиксированного размера сектора снова применена концепция кластеров,
ранее использованная в файловой системе FAT. Это было сделано для улучшения
аппаратной независимости операционной системы Windows NT при ее
использовании с жесткими дисками, изготовленными по другой технологии. Таким
образом, была принята точка зрения, что деление диска на секторы размером 512
не всегда является оптимальным. Размер кластера определяется кратным числом
единичных блоков жесткого диска. Кроме того, для задания имен файлов
используется кодировка Юникод и наряду с длинными именами обеспечена
поддержка формата 8.3.
Преимущества файловой системы
NTFS лучше всего подходит для использования с томами размером более 400 МБ. С
увеличением размера тома производительность файловой системы NTFS не
падает,
как
у
FAT.
Благодаря способности к восстановлению в NTFS отсутствует необходимость
использования каких-либо программ восстановления диска.
Недостатки файловой системы NTFS
Из-за дополнительного расхода дискового пространства файловую систему NTFS не
рекомендуется использовать с томами размером менее 400 МБ. Такой расход
объясняется необходимостью хранения системных файлов NTFS (в разделе
размером
100
МБ
для
этого
требуется
около
4
МБ).
В настоящее время NTFS не имеет встроенного шифрования файлов.
Следовательно, можно загрузить MS-DOS (или другую операционную систему) и
воспользоваться низкоуровневой программой редактирования диска для просмотра
хранящихся
в
томе
NTFS
данных.
С помощью файловой системы NTFS нельзя форматировать дискеты. Windows NT
форматирует дискеты с помощью FAT, так как объем служебной информации,
необходимой для функционирования NTFS, не помещается на дискете.
Download