
- •Лекция 1: Введение в системное программное обеспечение Билет 1
- •Системное программное обеспечение
- •Функции
- •Создание процесса
- •Завершение процесса
- •Создание процесса
- •Завершение процесса
- •9. Системные часы и таймеры, планирование выполнения процессов реального времени
- •Билет 37
- •Билет 38
- •Существуют программы, которые решают обратную задачу – перевод программы с низкоуровневого языка на высокоуровневый. Этот процесс называют декомпиляцией, а
- •Компоновщик
9. Системные часы и таймеры, планирование выполнения процессов реального времени
Таймеры (также называемые часами) очень важны для работы любой многозадачной системы по ряду причин. Среди многих других задач, они следят за временем суток и не позволяют одному процессу надолго занять центральный процессор. Программное обеспечение таймера может принимать форму драйвера устройства, несмотря на то, что таймер не является ни блочным устройством вроде диска, ни символьным устройством типа мыши.
Планирование периодических задач на одном процессоре – классическая проблема планирования в системах реального времени. Имеются два альтернативных подхода решения этой проблемы, основанные на фиксированном или динамическом назначении приоритета каждой задачи. В первом приоритет каждой задачи вычислен однажды и остается неизменным в течение жизни задачи. В динамическом подходе (также называемом управление крайними сроками), приоритет вычисляется динамически, и может быть изменен во время выполнения. Эти подходы вели к развитию разнообразия вытесняющих политик планирования (вытесняющая политика подразумевает возможность прерывания обработки задачи, если поступил запрос задачи с более высоким приоритетом). Они включают «Монотонизирующую норму» (RM) и «самый ранний крайний срок сначала» (EDF).
Аппаратная часть таймеров
В компьютерах широко применяются два типа таймеров. Обе схемы сильно отличаются от наручных и настольных часов. Наиболее простые компьютерные часы привязываются по частоте к линии питания переменного напряжения 110 или 220 В и вызывают прерывания при каждом цикле напряжения с частотой 50 или 60 Гц. Такие часы очень широко применялись ранее, но сейчас являются редкостью. Другой тип часов состоит из трех компонентов: кварцевого генератора, счетчика и регистра хранения, как показано на рис. 9.1. Если взять кусок кристалла кварца правильного размера и установить его в оправу под давлением, то можно заставить его колебаться и выдавать электрический сигнал с частотой в несколько сот мегагерц. Частота зависит от конкретного кристалла, но каждый кристалл выдерживает эту частоту с достаточно высокой точностью. С помощью электроники эту частоту можно поднять до 1 ГГц или даже до еще более высокой частоты. По крайней мере, одна такая схема обязательно присутствует в каждом компьютере, обеспечивая сигнал синхронизации для различных цепей компьютера. Этот сигнал подается на вход декрементного счетчика. Когда содержимое счетчика достигает нуля, он вызывает прерывание центрального процессора.
Рис. 9.1. Программируемый таймер
У программируемого таймера обычно есть несколько режимов работы. В режиме одновибратора при запуске таймера содержимое регистра хранения копируется в счетчик. Затем содержимое счетчика уменьшается на единицу при каждом импульсе от кристалла. Когда счетчик достигает нуля, он вызывает прерывание и останавливается до тех пор, пока он не будет снова явно запущен программным обеспечением. В режиме генератора прямоугольных импульсов при достижении счетчиком нуля инициируется прерывание, а содержимое регистра хранения автоматически копируется в счетчик, и весь процесс повторяется снова бесконечно.
Преимущество программируемого таймера состоит в том, что частота прерываний от него может управляться программно. Если используется кристалл с частотой колебаний 500 МГц, то счетчик получает импульс каждые 2 нс. При использовании 32-разрядного регистра можно запрограммировать возникновение прерываний через равные интервалы времени от 2 нс до 8,6 с, называемые тиками. Микросхемы программируемых таймеров обычно содержат два или три независимо программируемых счетчика и помимо этого обладают целым рядом других функций (например, могут увеличивать, а не уменьшать значение счетчика, не инициировать прерываний и т.д.).
Чтобы показания таймера не терялись, пока питание компьютера выключено, часы большинства компьютеров питаются от аккумулятора. Показания часов считываются при загрузке операционной системы. Если таких часов у компьютера нет, операционная система может запросить дату и время при запуске. Кроме того, система может узнать эти сведения по сети от удаленного хоста. В любом случае эти время и дата транслируются в количество интервалов таймера с какого-либо момента, например полуночи I января 1970 года по всеобшему скоординированному времени (UTC, Universal Coordinated Time), как это делает, например, система UNIX. До 1928 года время UTC называлось средним временем по Гринвичу (GMT, Greenwich Mean Time), В системе Windows время отсчитывается от I января 1980 года. При каждом прерывании от таймера счетчик времени увеличивается на единицу. В операционной системе обычно присутствуют программы, позволяющие скорректировать показания системных часов.
Программное обеспечение таймеров
Все, что делает таймер, аппаратно – он инициирует прерывания через определенные интервалы времени. Все остальное, связанное со временем, должно выполняться программно драйвером часов. Обязанности драйвера часов варьируются в зависимости от операционной системы, но обычными являются следующие функции:
Следят за временем суток.
Не позволяют процессам работать дольше, чем им разрешено.
Ведут учет использования центрального процессора.
Обрабатывают системный вызов alarm, инициированный процессом пользователя.
Поддерживают следящие таймеры для операционной системы.
Ведут наблюдение, анализ и сбор статистики.
Первая функция часов, поддерживающая время суток (также называемое истинным временем), не сложна. Она просто требует увеличения счетчика на единицу при каждом импульсе сигнала времени часов (рис. 9.2, а). Нужно только следить за количеством битов в счетчике времени суток. При частоте импульсов сигнала времени 60 Гц 32-разрядный счетчик переполнится уже за два года. Очевидно, система не может хранить значение истинного времени в тиках с 1 января 1970 года в 32 бит.
Для данной проблемы возможны три решения. Во-первых, можно использовать 64-разрядный счетчик, хотя это потребует больших затрат, так как увеличивать значение счетчика придется помногу раз в секунду (рис. 9.2, б). Второй способ состоит в хранении времени суток не в тиках (количестве импульсов сигнала времени), а в секундах, переводя импульсы сигнала времени в секунды при помощи дополнительного счетчика (рис. 9.2, в). Поскольку 232c – это больше, чем 136 лет, такой метод будет работать вплоть до 22-го века.
Третий метод состоит в том, чтобы учитывать импульсы сигнала времени, но относительно того момента, в который была загружена машина, а не от фиксированного внешнего момента. При этом система во время загрузки узнает текущее время, которое сохраняет в памяти в любом удобном виде. Позднее, при запросе времени, система складывает хранящееся время загрузки со значением счетчика, чтобы получить текущее время (рис. 9.2, в).
Рис. 9.2. Три способа реализации времени суток
Вторая функция часов состоит в недопущении слишком долгой работы процесса. При запуске процесса планировщик инициализирует счетчик, записывая в него выделенное этому процессу количество импульсов сигнала времени. При каждом прерывании от таймера драйвер таймера уменьшает значение счетчика на 1. Когда значение счетчика достигает нуля, драйвер таймера вызывает планировщик, чтобы тот запустил другой процесс.
Третья функция часов состоит в учете использования центрального процессора. Наиболее точно это может быть сделано, если при каждом запуске нового процесса запускать второй таймер, независимый от основных системных часов. Когда процесс останавливается, значение таймера считывается, чтобы определить, сколько времени работал процесс. Чтобы все было правильно, значения второго таймера должны сохраняться на время прерываний.
Не столь точный, но более простой метод учета состоит в создании указателя текущего процесса в таблице процессов в виде глобальной переменной. При каждом импульсе сигнала времени поле текущего процесса в таблице увеличивается на 1. Таким образом, каждый импульс сигнала времени «заботится» о текущем процессе. Недостаток этого метода состоит в том, что в случае частых прерываний во время работы процесса ему все равно будет засчитана работа в течение полного импульса сигнала времени. Точный учет использования времени центрального процессора во время прерываний является слишком сложным делом, отнимающим, в свою очередь, много процессорного времени.
Во многих системах процесс может попросить операционную систему выдать ему сигнал предупреждения после определенного интервала времени. Предупреждение может быть сигналом, прерыванием, сообщением и т. п. Такие предупреждения нужны, например, для работы в сети, при которой пакет, не получивший подтверждения в течение определенного интервала времени, должен быть передан повторно. Другим приложением может быть обучающая программа, ожидающая ответа на вопрос в течение установленного интервала времени.
Если драйвер часов управляет достаточным количеством таймеров, он может установить таймер для каждого запроса. Если физических таймеров недостаточно, они легко могут быть смоделированы программно. Один из способов реализации большого числа виртуальных таймеров состоит в создании таблицы, хранящей все времена сигналов для обрабатываемых таймеров, а также переменная, в которой хранится время срабатывания ближайшего таймера. При каждом обновлении времени суток драйвер проверяет, не пора ли подавать сигнал от ближайшего таймера. При этом ищется следующий по времени таймер.
Если ожидается много сигналов, то более эффективным считается реализовать их в виде сортированного связного списка, как показано на рис. 9.3. Каждый элемент списка содержит число импульсов сигнала времени относительно предыдущего таймера. В данном примере сигналы должны быть поданы в моменты времени 4203, 4207, 4213, 4215 и 4216.
Рис. 9.3. Моделирование нескольких виртуальных таймеров
На рис. 9.3 следующее прерывание произойдет через 3 тика. На каждом тике значение переменной Next signal, хранящей число тиков, оставшееся до подачи следующего сигнала, уменьшается на 1. Когда значение этой переменной достигает нуля, подается сигнал в соответствии с первым элементом списка, который затем удаляется из списка. После этого переменной Next signal присваивается значение следующего элемента списка, то есть 4 в нашем примере.
Следует отметить, что за время прерывания от таймера драйвер часов должен выполнить несколько действий: увеличить показания часов истинного времени, уменьшить значение кванта времени, выделенного текущему процессу, и сравнить его с нулем, выполнить операцию учета использования центрального процессора и уменьшить счетчик таймера тревоги. Однако все эти операции должны быть тщательно оптимизированы по времени исполнения, так как они будут повторяться много раз в секунду.
Операционной системе также требуются таймеры. Они называются сторожевыми таймерами. Например, гибкие диски не вращаются, пока ими не пользуются, чтобы избежать слишком быстрого изнашивания носителей и головок дисковода. Когда требуются данные с гибкого диска, следует запустить двигатель. Только если гибкий диск вращается с полной скоростью, может начаться операция ввода-вывода. Когда процесс пытается читать данные с находящегося в состоянии покоя гибкого диска, драйвер НГМД запускает двигатель и устанавливает сторожевой таймер, чтобы тот инициировал прерывание спустя время, достаточное для разгона диска. Сторожевой таймер необходим, так как накопители на гибких дисках не умеют формировать прерывания, сообщающие о том, что гибкий диск достаточно разогнался.
Механизм обработки сторожевых таймеров, используемый драйвером часов, тот же, что применяется для сигналов пользователя. Единственное отличие состоит в том, что когда таймер срабатывает, вместо подачи сигнала драйвер часов вызывает процедуру, предоставляемую обратившимся к нему процессом. Эта процедура является частью процесса. Она может сделать все, что нужно, даже вызвать прерывание, хотя внутри ядра прерывания часто бывают неудобны, а сигналов не существует. Вот почему предоставляется механизм сторожевых таймеров. Следует заметить, что этот механизм работает, только если драйвер таймера и вызываемая им процедура находятся в одном адресном пространстве.
Последняя функция таймеров в нашем списке – это сбор статистики. В некоторых операционных системах предоставляется механизм построения гистограммы, показывающей положение счетчика команд программы пользователя. Таким образом, пользователь может видеть, какие процедуры его программы какой процент процессорного времени потребляют. Ддя этого на каждом тике драйвер часов должен проверить, собирается ли статистика по текущему процессу, и если да, то определяет, в каком диапазоне адресов находится счетчик команд. После этого значение счетчика, соответствующее этому диапазону, увеличивается на единицу. Такой же метод может применяться для получения статистики по самой операционной системе.
Билет 18
Планирование в системах реального времени
В системах реального времени существенную роль играет время. Чаще всего одно или несколько внешних физических устройств генерируют входные сигналы, и компьютер должен адекватно на них реагировать в течение заданного промежутка времени.
Системы реального времени делятся на жесткие системы реального времени, что означает наличие жестких сроков для каждой задачи (в них обязательно надо укладываться), и гибкие системы реального времени, в которых нарушения временного графика нежелательны, но допустимы. В обоих случаях реализуется разделение программы на несколько процессов, каждый из которых предсказуем. Эти процессы чаще всего бывают короткими и завершают свою работу в течение секунды. Когда появляется внешний сигнал, именно планировщик должен обеспечить соблюдение графика.
Внешние события, на которые система должна реагировать, можно разделить на:
периодические (возникающие через регулярные интервалы времени);
непериодические (возникающие непредсказуемо).
Возможно наличие нескольких периодических потоков событий, которые система должна обрабатывать. В зависимости от времени, затрачиваемого на обработку каждого из событий, может оказаться, что система не в состоянии своевременно обработать все события. Если в систему поступает m периодических событий, событие с номером i поступает с периодом Pi, и на его обработку уходит Ci, секунд работы процессора, все потоки могут быть своевременно обработаны только при выполнении условия
.
Системы реального времени, удовлетворяющие этому условию, называются поддающимися планированию или планируемыми.
Алгоритмы планирования для систем реального времени могут быть как статическими, так и динамическими. В первом случае все решения планирования принимаются заранее, еще до запуска системы. Во втором случае решения планирования принимаются по ходу дела. Статическое планирование применимо только при наличии достоверной информации о работе, которую необходимо выполнить; и о временном графике, которого нужно придерживаться. Динамическое планирование не нуждается в подобных ограничениях.
Планирование нескольких конкурирующих процессов, у некоторых (или у всех) из них есть жесткие сроки выполнения работ, называется планированием реального времени.
Алгоритмы реального времени могут быть статическими или динамическими. Статические алгоритмы заранее назначают каждому процессу фиксированный приоритет, после чего выполняют приоритетное планирование с переключениями. У динамических алгоритмов нет фиксированных приоритетов. Мы изучим примеры обоих типов алгоритмов.
Алгоритм планирования RMS
Классическим примером статического алгоритма планирования реального времени для прерываемых, периодических процессов является алгоритм RMS (Rate Monotonic Scheduling – планирование с приоритетом, пропорциональным частоте). Этот алгоритм может использоваться для процессов, удовлетворяющих следующим условиям:
каждый периодический процесс должен быть завершен за время его периода;
ни один процесс не должен зависеть от любого другого процесса;
каждому процессу требуется одинаковое процессорное время на каждом интервале;
у непериодических процессов нет жестких сроков;
прерывание процесса происходит мгновенно, без накладных расходов.
Алгоритм планирования EDF
Другим популярным алгоритмом планирования является алгоритм EDF (Earliest Deadline First – процесс с ближайшим сроком завершения в первую очередь). Алгоритм EDF представляет собой динамический алгоритм, в отличие от предыдущего алгоритма не требующий от процессов периодичности. Он также не требует и постоянства временных интервалов использования центрального процессора. Каждый раз, когда процессу требуется процессорное время, он объявляет о своем присутствии и о своем сроке выполнения задания. Планировщик хранит список процессов, сортированный по срокам выполнения заданий. Алгоритм запускает первый процесс в списке, то есть тот, у которого самый близкий по времени срок выполнения. Когда новый процесс переходит в состояние готовности, система сравнивает его срок выполнения со сроком выполнения текущего процесса. Если у нового процесса график более жесткий, он прерывает работу текущего процесса.
_____________________ билет 19
Программист обращается к памяти с помощью некоторого набора логических имен. Имена переменных и входных точек модулей составляют область имен. Физическая память представляет собой множество ячеек, которые пронумерованы, к каждой ячейке можно обратиться, указав ее порядковый номер (адрес). Количество ячеек физической памяти ограничено и фиксировано. Системное программное обеспечение должно связать каждое указанное пользователем имя с физической ячейкой памяти, т.е. осуществить отображение пространства имен на физическую память компьютера. Это происходит в два этапа (рис. 10.1):
посредством системы программирования;
п
осредством операционной системы (с помощью специальных программных модулей управления памятью и использования соответствующих аппаратных средств вычислительной системы).
Рис. 10.1.
Между этими этапами обращение к памяти имеет форму виртуального или логического адреса. Множество всех допустимых значений виртуального адреса для некоторой программы определяет ее виртуальное адресное пространство или виртуальную память. Виртуальное адресное пространство зависит от:
архитектуры процессора;
системы программирования.
Виртуальное адресное пространство не зависит от объема реальной физической памяти, установленной в компьютере.
Адреса команд и переменных в готовой машинной программе, подготовленной к выполнению системой программирования, как раз и являются виртуальными адресами.
В результате работы системы программирования полученные виртуальные адреса могут иметь как двоичную, так и символьно-двоичную форму, т.е. привязка к физическим адресам производится на этапе загрузки программы в память перед ее непосредственным выполнением.
Если система программирования генерирует абсолютную двоичную программу, то виртуальные адреса точно соответствуют физическим. Часть программ любой ОС должны быть абсолютными двоичными программами, размещаться по фиксированным физическим адресам и обеспечивать размещение остальных программ на различных физических адресах.
Данный способ распределения памяти, тем не менее, применялся достаточно длительное время в нескольких операционных системах, поскольку в нем для задач выделяется непрерывное адресное пространство, а это упрощает создание систем программирования и их работу.
Методы распределения памяти, при которых задаче уже не предоставляется сплошная (непрерывная) область памяти, называются разрывными. Для реализации этого метода нужно иметь соответствующую аппаратную поддержку – относительную адресацию: если указать адрес начала текущего фрагмента программы и величину смещения относительно этого начального адреса, то можно указать необходимую переменную или команду. Виртуальный адрес можно представить состоящим из двух полей:
указатель на часть программы (с которой идет работы) для определения местоположения этой части;
относительный адрес нужной ячейки памяти (по отношению к найденному адресу).
Программист может самостоятельно разбивать программу на фрагменты или возложить эту задачу на систему программирования.
_______________________________
Билет 20
Для сегментного способа организации виртуальной памяти программу нужно разбить на части и уже каждой части выделить физическую память. Каждый программный модуль или их совокупность могут быть восприняты как отдельные сегменты. Каждый сегмент размещается в оперативной памяти как самостоятельная единица. Логически обращение к элементам программы производится как указание имени сегмента и смещения относительно его начала. Физически имя (или порядковый номер) сегмента соответствует некоторому адресу, с которого этот сегмент начинается при его размещении в памяти, и смещение должно прибавляться к этому адресу.
Таким
образом, виртуальный адрес для этого
способа будет состоять из двух полей –
номер сегмента и смещение относительно
начала сегмента. Соответствующая
иллюстрация приведена на рис. 10.2. На
этом рисунке изображен случай обращения
к ячейке, виртуальный адрес которой
равен сегменту с номером 11 и смещением
от начала этого сегмента, равным 612. Как
мы видим, операционная система разместила
данный сегмент в памяти, начиная с ячейки
с номером 19 700.
Рис. 10.2.
Каждый сегмент, размещаемый в памяти, имеет соответствующую информационную структуру, часто называемую дескриптором сегмента. Именно операционная система строит для каждого исполняемого процесса соответствующую таблицу дескрипторов сегментов и при размещении каждого из сегментов в оперативной или внешней памяти в дескрипторе отмечает его текущее
При использовании сегментного способа организации виртуальной памяти появляется несколько интересных возможностей. Во-первых, появляется возможность при загрузке программы на исполнение размещать её в памяти не целиком, а «по мере необходимости».
Однако у сегментного способа распределения памяти есть и недостатки. Прежде всего, из рис. 10.2 видно, что для получения доступа к искомой ячейке памяти необходимо потратить намного больше времени.
Несмотря на то, что этот способ распределения памяти приводит к существенно меньшей фрагментации памяти, нежели способы с неразрывным распределением, фрагментация остается.
Билет21
Страничный способ организации виртуальной памяти – способ разрывного размещения задач в памяти, при котором все фрагменты задачи имеют одинаковый размер, кратный степени двойки (чтобы вместо операции сложения для получения физического адреса можно было использовать операцию конкатенации). При таком способе все фрагменты программы, на которые она разбивается (кроме последней части) получаются одинаковыми. Одинаковыми должны быть и единицы памяти, предоставляемые для размещения фрагментов программы. Эти одинаковые части называются страницами:
оперативная память разбивается на физические страницы;
программа разбивается на виртуальные страницы.
Часть виртуальных страниц располагается в оперативной памяти, а часть – во внешней (файл подкачки, страничный файл, swap-файл).
Защита страничной памяти, как и в случае с сегментным механизмом, основана на контроле уровня доступа к каждой странице. Как правило, возможны следующие уровни доступа: только чтение; чтение и запись; только выполнение. В этом случае каждая страница снабжается соответствующим кодом уровня доступа. При трансформации логического адреса в физический сравнивается значение кода разрешенного уровня доступа с фактически требуемым. При их несовпадении работа программы прерывается.
При обращении к виртуальной странице, не оказавшейся в данный момент в оперативной памяти, возникает прерывание и управление передаётся диспетчеру памяти, который должен найти свободное место. Обычно предоставляется первая же свободная страница. Если свободной физической страницы нет, то диспетчер памяти по одной из вышеупомянутых дисциплин замещения (LRU, LFU, FIFO, random) определит страницу, подлежащую расформированию или сохранению во внешней памяти. На её место он разместит ту новую виртуальную страницу, к которой было обращение из задачи, но её не оказалось в оперативной памяти.
Рис.
10.3.
Для использования дисциплин LRU и LFU в процессоре должны быть соответствующие аппаратные средства. В дескрипторе страницы размещается бит обращения (подразумевается, что на рис. 10.3 этот бит расположен в последнем поле), и этот бит становится единичным при обращении к дескриптору.
Как и в случае с сегментным способом организации виртуальной памяти, страничный механизм приводит к тому, что без специальных аппаратных средств он будет существенно замедлять работу вычислительной системы. Поэтому обычно используется кэширование страничных дескрипторов.
Итак, основным достоинством страничного способа распределения памяти является минимально возможная фрагментация. Т.к. на каждую задачу может приходиться по одной незаполненной странице, поэтому память можно использовать достаточно эффективно; этот метод организации виртуальной памяти был бы одним из самых лучших, если бы не два следующих обстоятельства.
Первое – это то, что страничная трансляция виртуальной памяти требует существенных накладных расходов. В самом деле, таблицы страниц нужно тоже размещать в памяти. Кроме этого, эти таблицы нужно обрабатывать; именно с ними работает диспетчер памяти.
Второй существенный недостаток страничной адресации заключается в том, что программы разбиваются на страницы случайно, без учета логических взаимосвязей, имеющихся в коде. Это приводит к тому, что межстраничные переходы, как правило, осуществляются чаще, нежели межсегментные, и к тому, что становится трудно организовать разделение программных модулей между выполняющимися процессами.
Для того чтобы избежать второго недостатка, постаравшись сохранить достоинства страничного способа распределения памяти, был предложен ещё один способ – сегментно-страничный. Правда, за счёт дальнейшего увеличения накладных расходов на его реализацию.
_________________________ Билет 22
При сегментно-страничном способе организации виртуальной памяти программа разбивается на логически законченные части – сегменты, виртуальный адрес содержит указание на номер соответствующего сегмента. Вторая составляющая виртуального адреса – смещение относительно начала сегмента, может состоять из двух полей:
виртуальной страницы;
индекса.
Виртуальный адрес состоит из трех компонентов:
сегмента;
страницы;
индекса.
Получение
физического адреса и извлечение из
памяти необходимого элемента для этого
способа представлено на рис. 10.4.
Рис. 10.4.
этот способ организации виртуальной памяти вносит ещё большую задержку доступа к памяти. Необходимо сначала вычислить адрес дескриптора сегмента и прочитать его, затем вычислить адрес элемента таблицы страниц этого сегмента и извлечь из памяти необходимый элемент, и уже только после этого можно к номеру физической страницы приписать номер ячейки в странице (индекс). Задержка доступа к искомой ячейке получается по крайней мере в три раза больше, чем при простой прямой адресации. Чтобы избежать этой неприятности, вводится кэширование, причем кэш, как правило, строится по ассоциативному принципу. Другими словами, просмотры двух таблиц в памяти могут быть заменены одним обращением к ассоциативной памяти.
Принцип действия ассоциативного запоминающего устройства предполагает, что каждой ячейке памяти такого устройства ставится в соответствие ячейка, в которой записывается некий ключ (признак, адрес), позволяющий однозначно идентифицировать содержимое ячейки памяти. Сопутствующую ячейку с информацией, позволяющей идентифицировать основные данные, обычно называют полем тега. Просмотр полей тега всех ячеек ассоциативного устройства памяти осуществляется одновременно, то есть в каждой ячейке тега есть необходимая логика, позволяющая посредством побитовой конъюнкции найти данные по их признаку за одно обращение к памяти (если они там, конечно, присутствуют). Часто поле тегов называют аргументом, а поле с данными – функцией. В качестве аргумента при доступе к ассоциативной памяти выступают номер сегмента и номер виртуальной страницы, а в качестве функции от этих аргументов получаем номер физической страницы. Остается приписать номер ячейки в странице к полученному номеру, и мы получаем искомую команду или операнд.
Оценим достоинства сегментно-страничного способа. Разбиение программы на сегменты позволяет размещать сегменты в памяти целиком. Сегменты разбиты на страницы, все страницы сегмента загружаются в память. Это позволяет уменьшить обращения к отсутствующим страницам, поскольку вероятность выхода за пределы сегмента меньше вероятности выхода за пределы страницы. Страницы исполняемого сегмента находятся в памяти, но при этом они могут находиться не рядом друг с другом, а «россыпью», поскольку диспетчер памяти манипулирует страницами. Наличие сегментов облегчает реализацию разделения программных модулей между параллельными процессами. Возможна и динамическая компоновка задачи. А выделение памяти страницами позволяет минимизировать фрагментацию.
Однако, поскольку этот способ распределения памяти требует значительных затрат вычислительных ресурсов и его не так просто реализовать по сравнению с рассмотренными ранее способами, поэтому используется он в мощных вычислительных системах.
Билет 23
Управление памятью включает в себя следующий набор основных функций:
запрос на выделение блока памяти;
освобождение памяти;
изменение параметров блока памяти (например, память может быть заблокирована процессом либо предоставлена в общий доступ);
отображение файлов на память (имеется не во всех системах).
Рассмотрим управление памятью в ОС Windows.
Физическое и виртуальное (логическое) адресное пространство каждого процесса разделено на страницы – кванты памяти, размер которых зависит от компьютера. Ядро может перемещать страницы памяти в страничный файл на диске и обратно. Когда страница перемещается в физическую память, ядро обновляет таблицу страниц соответствующего процесса. Когда ядру требуется место в физической памяти, оно вытесняет самые старые страницы физической памяти в страничный файл. Все это происходит незаметно для приложения.
Билет 24
Файл – набор данных, организованных в виде совокупности записей одинаковой структуры. Файловая система – это набор спецификаций и соответствующее им программное обеспечение, которое отвечает за создание, удаление, организацию, чтение, запись, модификацию и перемещение файлов информации, а также за управление доступом к файлам и за управление ресурсами, которые используются файлами. Файловая система определяет способ организации данных на диске (или на другом носителе).
Все современные ОС имеют соответствующие системы управления файлами. Система управления файлами (СУФ) является основной подсистемой в абсолютном большинстве современных операционных систем:
через систему управления файлами связываются по данным все системные обрабатывающие программы;
с помощью СУФ решаются проблемы централизованного распределения дискового пространства и управления данными;
с помощью СУФ пользователям предоставляются возможности работать с файлами.
СУФ предоставляет пользователям следующие возможности:
создание, удаление, переименование и другие операции над именованными наборами данных (файлами) из своих программ или посредством специальных управляющих программ, реализующих В некоторых ОС может быть несколько систем управления файлами, что обеспечивает возможность работы с несколькими файловыми системами. СУФ, являясь компонентой системы, зависит от нее. Основное назначение файловой системы и соответствующей ей системы управления файлами – организация удобного доступа к данным, организованным в файлы. Иначе говоря, вместо низкоуровневого доступа к данным с указанием конкретных физических адресов нужной нам записи используется логический доступ с указанием имени файла и записи в нём. Файловая система определяет принципы доступа к данным. Любая СУФ не разрабатывалась сама по себе, а для конкретной ОС.
Для того чтобы можно было загрузить с магнитного диска собственно саму ОС, а уже с ее помощью и организовывать работу той или иной СУФ, были приняты специальные системные соглашения о структуре диска. Первый сектор магнитного диска содержит информацию о логической организации диска и простейшую программу, с помощью которой можно найти и вызвать программу загрузки самой ОС.
Информация на магнитных дисках размещается и передается блоками. Каждый блок называется сектором и располагается на концентрических дорожках поверхности диска. Группа дорожек одного радиуса, расположенных на поверхностях магнитных дисков, образуют цилиндры. Каждый сектор состоит из поля данных и поля служебной информации, ограничивающей и идентифицирующей его. Размер сектор (объем поля данных) устанавливается контроллером или драйвером. Физический адрес сектора на диске определяется с помощью трех «координат»:
номер цилиндра;
номер рабочей поверхности диска;
номер сектора на дорожке.
Обмен информацией между ОЗУ и дисками физически осуществляется только секторами. Диск может быть разбит на несколько разделов, которые могут использоваться как одной ОС, так и различными. На каждом разделе может быть организована своя файловая система. Для организации хотя бы одной файловой системы должен быть определен, по крайней мере, один раздел.
Разделы могут быть двух типов:
первичный;
расширенный.
Максимальное число первичных разделов – четыре, но обязательно должен быть хотя бы один. Если первичных разделов больше одного, то один должен быть активным, в нем находится загрузчик ОС. На одном диске может быть только один расширенный раздел, который в свою очередь может содержать большое количество подразделов – логических дисков.
Билет 25
характеристики FAT16, FAT32, NTFS.
Файловая система FAT
Аббревиатура FAT (file allocation table) означает «таблица размещения файлов». Этот термин относится к линейной табличной структуре со сведениями о файлах – именами файлов, их атрибутами и другими данными, определяющими местоположение файлов или их фрагментов в среде FAT. Элемент FAT определяет фактическую область диска, в котором хранится начало физического файла.
В файловой системе FAT логическое дисковое пространство любого логического диска делится на две области:
системную область;
область данных.
На
рис. 11.1 представлена структура логического
диска файловой системы FAT.
Рис. 11.1. Структура логического диска
Системная область создается при форматировании и обновляется при манипулировании файловой структурой. Область данных содержит файлы и каталоги, подчиненные корневому, и доступна через пользовательский интерфейс. Системная область состоит из следующих компонентов:
загрузочной записи (boot record, BR);
зарезервированных секторов (reserved sector, RS);
таблицы размещения файлов (file allocation table, FAT);
корневого каталога (root directory, RDir).
Таблица размещения файлов представляет собой карту (образ) области данных, в которой описывается состояние каждого участка области данных. Область данных разбивается на кластеры. Кластер – один или несколько смежных секторов в логическомnдисковом адресном пространстве (только в области данных). В таблице FAT кластеры, принадлежащие одному файлу (некорневому каталогу), связываются в цепочки. Для указания номера кластера в системе управления файлами FAT16 используется 16-битовое слово, следовательно, можно иметь до 65536 кластеров.
Кластер – минимальная адресуемая единица дисковой памяти, выделяемая файлу или некорневому каталогу. Файл или каталог занимает целое число кластеров. Последний кластер при этом может быть задействован не полностью, что приведет к заметной потере дискового пространства при большом размере кластера.
Так как FAT используется при доступе к диску очень интенсивно, она загружается в ОЗУ и находится там максимально долго.
Корневой каталог отличается от обычного каталога тем, что он размещается в фиксированном месте логического диска и имеет фиксированное число элементов. Для каждого файла и каталога в файловой системе хранится информация в соответствии со следующей структурой:
имя файла или каталога – 11 байт;
атрибуты файла – 1 байт;
резервное поле – 1 байт;
время создания – 3 байта;
дата создания – 2 байта;
дата последнего доступа – 2 байта;
зарезервировано – 2 байта;
время последней модификации – 2 байта;
номер начального кластера в FAT – 2 байта;
размер файла – 4 байта.
Структура системы файлов является иерархической.
Билет 26
Файловая система NTFS
Файловая система NTFS (New Technology File System) содержит ряд значительных усовершенствований и изменений, существенно отличающих ее от других файловых систем. С точки зрения пользователей файлы по-прежнему хранятся в каталогах, но работа на дисках большого объема в NTFS происходит намного эффективнее:
имеются средства для ограничения доступа к файлам и каталогам;
введены механизмы, существенно повышающие надежность файловой системы;
сняты многие ограничения на максимальное количество дисковых секторов и/или кластеров.
Основные характеристики файловой системы NTFS:
надежность. Компьютеры и системы совместного пользования (серверы) должны обладать повышенной надёжностью, которая является ключевым элементом структуры и поведения NTFS. NTFS обеспечивает безопасность на уровне файлов; это означает, что права доступа к томам, каталогам и файлам могут зависеть от учётной записи пользователя и тех групп, к которым он принадлежит. Каждый раз, когда пользователь обращается к объекту файловой системы, его права доступа проверяются по списку разрешений данного объекта. Если пользователь обладает достаточным уровнем прав, его запрос удовлетворяется; в противном случае запрос отклоняется. Эта модель безопасности применяется как при локальной регистрации пользователей на компьютерах с NT, так и при удалённых сетевых запросах. Одним из способов увеличения надёжности является введение механизма транзакций, при котором осуществляется журналирование1 файловых операций;
расширенная функциональность. В NTFS введены новые возможности: усовершенствованная отказоустойчивость, эмуляция других файловых систем, мощная модель безопасности, параллельная обработка потоков данных, создание файловых атрибутов, определенных пользователем;
поддержка стандарта POSIX2. К числу базовых средств относятся необязательное использование имен файлов с учетом регистра, хранение времени последнего обращения к файлу и механизм альтернативных имен, позволяющий ссылаться на один и тот же файл по нескольким именам;
гибкость. Распределение дискового пространства отличается большой гибкостью: размер кластера может изменяться от 512 байт до 64 Кбайт.
NTFS хорошо работает с большими массивами данных и большими томами.
Максимальный размер тома (и файла) – 16 Эбайт. (1 Эбайт равен 2**64 или 16000 млрд. гигабайт.) Количество файлов в корневом и некорневом каталогах не ограничено.
Поскольку в основу структуры каталогов NTFS заложена эффективная структура данных, называемая «бинарным деревом», время поиска файлов в NTFS не связано линейной зависимостью с их количеством.
Система NTFS обладает некоторыми средствами для самовосстановления и поддерживает различные механизмы проверки целостности системы, включая ведение журнала транзакций, позволяющий отследить по системному журналу файловые операции записи.
Файловая система NTFS поддерживает объектную модель безопасности и рассматривает все тома, каталоги и файлы как самостоятельные объекты NTFS. Права доступа к томам, каталогам и файлам зависит от учетной записи пользователя и той группы, к которой он принадлежит.
Файловая система NTFS обладает встроенными средствами сжатия, которые можно применять к томам, каталогам и файлам.
Рассмотрим структуру логического диска файловой системы NTFS (рис. 11.2).
MFT |
Зона MFT |
Зона для размещения файлов и каталогов |
Копия резервных 16 записей MFT |
Зона для размещения файлов и каталогов |
Рис. 11.2.
Всё дисковое пространство в NTFS делится на две неравные части (рис. 11.2). Первые 12 % диска отводятся под так называемую MFT-зону – пространство, которое может занимать главный служебный метафайл MFT. MFT (master file table) – это специальный файл, главная системная структура данных, которая и позволяет определять местонахождение всех остальных файлов. Запись каких-либо данных в эту область невозможна. MFT-зона всегда держится пустой – это делается для того, чтобы самый главный, служебный файл (MFT) по возможности не фрагментировался при своем рост. Остальные 88 % тома представляют собой обычное пространство для хранения файлов.
Билет27
Компонента ОС, выполняющая ввод/вывод называется супервизором ввода/вывода. Основные задачи супервизора следующие:
получение, проверка на корректность и выполнение запросов на ввод/вывод от прикладных задач и от модулей самой системы. Иначе говоря, супервизор ввода/вывода получает запросы на ввод/вывод от прикладных задач и от программных модулей самой операционной системы. Эти запросы проверяются на корректность, и если запрос выполнен по спецификациям и не содержит ошибок, он обрабатывается дальше, в противном случае пользователю (задаче) выдается соответствующее диагностическое сообщение о недействительности (некорректности) запроса;
планирование ввода/вывода: выполнение или постановка в очередь, т.е. супервизор ввода/вывода определяет очередность предоставления устройств ввода/вывода задачам, затребовавшим их;
инициирование ввода/вывода. Т.е. супервизор ввода/вывода передаёт управление соответствующим драйверам и в случае управления вводом/выводом с использованием прерываний предоставляет процессор диспетчеру задач с тем, чтобы передать его первой задаче, стоящей в очерёди на выполнение;
при получении сигналов прерывания передача управления соответствующей программе обработки прерывания;
передача сообщений об ошибках, если они появляются;
передача сигнала о завершении операции ввода/вывода, т.е. супервизор ввода/вывода посылает сообщения о завершении операции ввода/вывода запросившему эту операцию процессу и снимает его с состояния ожидания ввода/вывода, если процесс ожидал завершения операции.
Если устройство ввода/вывода является инициативным, управление со стороны супервизора ввода/вывода заключается в активизации соответствующего вычислительного процесса. Инициативное устройство – устройство, по сигналу прерывания от которого запускается соответствующая ему программа.
Билет 28
Имеются два основных режима ввода/вывода:
режим обмена с опросом готовности;
режим обмена с прерываниями.
Рассмотрим рис. 12.1.
Пусть для простоты управление вводом/выводом осуществляет центральный процессор (в этом случае часто говорят о наличии программного канала обмена данными между внешними устройством и оперативной памятью, в отличие от канала прямого доступа к памяти, при котором управление вводом/выводом осуществляет специальное дополнительное оборудование). Центральный процессор посылает устройству управления команду выполнить некоторое действие устройству ввода/вывода. Последнее исполняет
команду,
транслируя сигналы, понятные центральному
устройству и устройству управления в
сигналы, понятные устройству ввода/вывода.
Но быстродействие устройства ввода/вывода
намного меньше быстродействия центрального
процессора. Поэтому сигнал готовности
(транслируемый или генерируемый
устройством управления и сигнализирующий
процессору о том, что команда ввода/вывода
выполнена и можно выдать новую команду
для продолжения обмена данными) приходится
долго ожидать, постоянно опрашивая
соответствующую линию интерфейса на
наличие или отсутствие нужного сигнала.
Посылать новую команду, не дождавшись
сигнала готовности, сообщающего об
исполнении предыдущей команды,
бессмысленно. В режиме
опроса готовности
драйвер, управляющий процессом обмена
данными с внешним устройством, как раз
и выполняет в цикле команду «проверить
наличие сигнала готовности». До тех пор
пока сигнал готовности не появится,
драйвер ничего другого не делает. При
этом нерационально используется время
центрального процессора.
Режим обмена с прерываниями по своей сути является режимом асинхронного управления. Для того чтобы не потерять связь с устройством (после того как процессор выдал очередную команду по управлению обменом данными и переключился на выполнение других программ), может быть запущен отсчёт времени, в течение которого устройство обязательно должно выполнить команду и выдать таки сигнал запроса на прерывание. Максимальный интервал времени, в течение которого устройство ввода/вывода или его контроллер должны выдать сигнал запроса на прерывание, часто называют уставкой тайм-аута. Если это время истекло после выдачи устройству очередной команды, а устройство так и не ответило, то делается вывод о том, что связь с устройством потеряна и управлять им больше нет возможности. Пользователь и/или задача получают соответствующее диагностическое сообщение.
Билет29
Программирование задач управления вводом/выводом является наиболее сложным, требующим высокой квалификации, поэтому подпрограммы ввода/вывода:
оформляли в виде системных библиотечных процедур;
включили в операционную систему, чтобы не включать этот код в каждую программу, а только оформить обращение к нему.
Управление вводом/выводом – одна из основных функций любой операционной системы. Организация ввода/вывода в различных ОС имеет много общего, а реализация сильно отличается от системы к системе. Проблема усугубляется ещё тем, что в большинстве используемых систем эти моменты вообще, как правило, подробно не описаны, и исключение по этому вопросу касается только системы Linux, для которой имеются комментированные исходные тексты. Детально описываются функции API (application program interface – Интерфейс прикладного программирования), реализующие ввод/вывод. Поэтому рассмотрим только основные идеи и концепции.
Сложность проектирование ввода/вывода возникает из-за огромного числа устройств различной природы и назначения. Разработчик ввода/вывода должен решить две задачи:
обеспечить эффективное управление устройствами ввода/вывода;
создать удобный и эффективный интерфейс устройств ввода/вывода, позволяющий прикладным программистам просто считывать или сохранять данные.
Система ввода/вывода должна быть универсальной.
Главный принцип ввода/вывода – любые операции по управлению вводом/выводом объявляются привилегированными и могут выполняться только самой ОС. Для обеспечения этого принципа в большинстве процессоров вводятся два режима:
режим пользователя, выполнение команд ввода/вывода запрещено;
режим супервизора, выполнение команд ввода/вывода разрешено.
Использование команд ввода/вывода в пользовательском режиме вызывает исключение (прерывание) и управление передается ОС.
Непосредственное обращение к внешним устройствам из пользовательских программ не разрешено по трем причинам:
возможные конфликты при доступе к устройствам ввода/вывода. Например, две параллельно выполняющиеся программы пытаются вывести на печать результаты своей работы. Если не предусмотреть внешнее управление устройством печати, то в результате мы можем получить абсолютно нечитаемый текст, так как каждая программа будет время от времени выводить свои данные, которые будут перемежаться данными другой программы. Другой пример: ситуация, когда одной программе необходимо прочитать данные с некоторого сектора магнитного диска, а другой – записать результаты в другой сектор того же накопителя. Если операции ввода/вывода не будут отслеживаться каким-то третьим (внешним) процессом-арбитром, то после позиционирования магнитной головки для первого запроса может тут же появиться команда позиционирования головки для второй задачи, и обе операции ввода/вывода не смогут быть выполнены корректно;
повышение эффективности использования этих ресурсов. Например, у накопителя на магнитных дисках время подвода головки чтения/записи к необходимой дорожке и обращение к определенному сектору может значительно (до тысячи раз) превышать время пересылки данных. В результате, если задачи по очерёди обращаются к цилиндрам, далеко отстоящим друг от друга, то полезная работа, выполняемая накопителем, может быть существенно снижена;
ошибки в программах ввода/вывода могут привести к разрушению системы. В ряде ОС системный ввод/вывод имеет существенно более высокие привилегии, чем ввод/вывод задач пользователя. Поэтому системный код, управляющий операциями ввода/вывода, очень тщательно отлаживается и оптимизируется для повышения надёжности вычислений и эффективности использования оборудования.
____________________________________________________
Билет 30
По основному архитектурному принципу ОС разделяются на микроядерные и монолитные. В качестве примера микроядерной ОС привести ОСРВ QNX, в качестве монолитной можно назвать ОС семейства Windows, ОС Linux.
Микроядро – это минимальная стержневая часть операционной системы, служащая основой модульных и переносимых расширений.
Основная идея, заложенная в технологию микроядра, заключается в том, чтобы конструировать необходимую среду верхнего уровня, из которой можно легко получить доступ ко всем функциональным возможностям уровня аппаратного обеспечения. При такой структуре ядро служит стартовой точкой для создания системы. В микроядре содержится и исполняется минимальное количество кода, необходимое для реализации основных системных вызовов. В число этих вызовов входят передача сообщений и организация другого общения между внешними по отношению к микроядру процессами, поддержка управления прерываниями, а также ряд некоторых других функций. Остальные функции, характерные для «обычных» (не микроядерных) ОС, обеспечиваются как модульные дополнения-процессы, взаимодействующие главным образом между собой и осуществляющие взаимодействие посредством передачи сообщений.
Микроядро является маленьким, передающим сообщения модулем системного программного обеспечения, работающим в наиболее приоритетном состоянии компьютера и поддерживающим остальную часть операционной системы, рассматриваемую как набор серверных приложений.
Созданная в университете Карнеги Меллон технология микроядра Mach служит основой для многих ОС.
Исполняемые микроядром функции ограничены в целях сокращения его размеров и максимизации количества кода, работающего как прикладная программа. Микроядро включает только те функции, которые требуются для определения набора абстрактных сред обработки для прикладных программ и для организации совместной работы приложений в обеспечении сервисов и в действии клиентами и серверами. В результате микроядро обеспечивает только пять различных типов сервисов:
управление виртуальной памятью;
задания и потоки;
межпроцессные коммуникации (IPC1);
управление поддержкой ввода/вывода и прерываниями;
сервисы набора процессора.
Наиболее ярким представителем микроядерных ОС является ОС реального времени QNX. Микроядро QNX поддерживает только планирование и диспетчеризацию процессов, взаимодействие процессов, обработку прерываний и сетевые службы нижнего уровня. Микроядро обеспечивает всего лишь пару десятков системных вызовов, но благодаря этому оно может быть целиком размещено во внутреннем кэше даже таких процессоров, как Intel 486. Разные версии этой ОС имели и различные объемы ядер – от 8 до 46 Кбайт.
Билет 31
По основному архитектурному принципу ОС разделяются на микроядерные и монолитные. В качестве примера микроядерной ОС привести ОСРВ QNX, в качестве монолитной можно назвать ОС семейства Windows, ОС Linux.
Монолитные ОС являются прямой противоположностью микроядерным ОС. В монолитной ОС, несмотря на её возможную сильную структуризацию, очень трудно удалить один из уровней многоуровневой модульной структуры. Добавление новых функций и изменение существующих для монолитных ОС требует очень хорошего знания всей архитектуры ОС и чрезвычайно больших усилий. Поэтому более современный подход к проектированию ОС, который может быть условно назван как «клиент-серверная» технология, позволяет в большей мере и с меньшими трудозатратами реализовать перечисленные выше принципы проектирования ОС.
Модель клиент–сервер предполагает наличие программного компонента, являющегося потребителем какого-либо сервиса – клиента, и программного компонента, служащего поставщиком этого сервиса – сервера. Взаимодействие между клиентом и сервером стандартизируется, так что сервер может обслуживать клиентов, реализованных различными способами и, может быть, разными разработчиками. При этом главным требованием является использование единообразного интерфейса. Инициатором обмена обычно является клиент, который посылает запрос на обслуживание серверу, находящемуся в состоянии ожидания запроса. Один и тот же программный компонент может быть клиентом по отношению к одному виду услуг и сервером для другого вида услуг. Эта модель применяется не только при построении ОС, но и на всех уровнях программного обеспечения.
При поддержке монолитных ОС возникает ряд проблем, связанных с тем, что все функции макроядра работают в едином адресном пространстве. Во-первых, это опасность возникновения конфликта между различными частями ядра; во-вторых – сложность подключения к ядру новых драйверов. Преимущество микроядерной архитектуры перед монолитной заключается в том, что каждый компонент системы представляет собой самостоятельный процесс, запуск или остановка которого не отражается на работоспособности остальных процессов.
Билет 32
Операционные системы (ОС) классифицируют:
типу интерфейса: командные (текстовые) и объектно-ориентированные (графические);
типу доступа пользователя к ЭВМ: с пакетной обработкой, с разделением времени, реального времени;
по особенностям алгоритмов управления ресурсами: локальные и сетевые ОС. Локальные ОС управляют ресурсами отдельного компьютера. Сетевые ОС участвуют в управлении ресурсами сети;
по числу одновременно выполняемых задач: однозадачные и многозадачные. Однозадачные ОС выполняют функцию предоставления пользователю виртуальной вычислительной машины, обеспечивая его простым и удобным интерфейсом взаимодействия с компьютером, средствами управления периферийными устройствами и файлами. Многозадачные ОС, кроме вышеперечисленных функций, управляют разделением совместно используемых ресурсов, таких как процессор, оперативная память, файлы и внешние устройства;
по числу одновременно работающих пользователей: однопользовательские и многопользовательские. Основным отличием многопользовательских систем от однопользовательских является наличие средств защиты информации каждого пользователя от несанкционированного доступа других пользователей;
по способу построения ядра системы: монолитное ядро или микроядерный подход. ОС использующие монолитное ядро, компонуются как одна программа, работающая в привилегированном режиме и использующая быстрые переходы с одной процедуры на другую, не требующие переключения из привилегированного режима в пользовательский и наоборот. При построении ОС на базе микроядра, работающего в привилегированном режиме и выполняющего только минимум функций по управлению аппаратурой, функции более высокого уровня выполняют специализированные компоненты ОС – программные серверы, работающие в пользовательском режиме. При таком построении ОС работает более медленно, так как часто выполняются переходы между привилегированным режимом и пользовательским, но система получается более гибкой и ее функции можно модифицировать, добавляя или исключая серверы пользовательского режима;
по распределению функций операционной системы среди компьютеров сети. В распределенной ОС реализованы механизмы, обеспечивающие пользователя возможностью представлять и воспринимать сеть в виде однопроцессорного компьютера. Признаками распределенной ОС является наличие единой справочной службы разделяемых ресурсов и службы времени, использование механизма вызова удаленных процедур для распределения программных процедур по машинам, многонитевой обработки, позволяющей распараллеливать вычисления в рамках одной задачи и выполнять эту задачу одновременно на нескольких компьютерах сети, а также наличие других распределенных служб.
билет 33
Рассмотрим подробнее сетевые и распределенные операционные системы.
Компьютерная сеть – набор компьютеров, связанных коммуникационной системой и снабженных соответствующим ПО, позволяющим пользователям сети получать доступ к ресурсам этого набора компьютеров.
Компьютерная сеть позволяет пользователю работать со своим компьютером как с автономным и добавляет к этому возможность доступа к информационным и аппаратным ресурсам других компьютеров.
Сетевая ОС играет роль интерфейса, экранирующего от пользователя все детали низкоуровневых программно-аппаратных средств сети.
В зависимости от того, какой виртуальный образ создает ОС для того, чтобы подменить им реальную аппаратуру компьютерной сети, различают
сетевые ОС;
распределенные ОС.
Пользователь сетевой ОС всегда помнит, что он имеет дело с сетевыми ресурсами. Он всегда знает, где хранятся его файлы, знает, на какой машине выполняется его задание.
В идеальном случае сетевая ОС должна представить пользователю сетевые ресурсы в виде ресурсов единой централизованной виртуальной машины. Такие ОС называют распределенными ОС.
Распределенная ОС, распределяя работы по различным машинам системы, заставляет набор сетевых машин работать как виртуальный унифицированный процессор. Пользователь такой ОС, вообще говоря, не знает, на какой машине выполняется его задание.
Таким образом, распределенная ОС является единой ОС в масштабах вычислительной системы. Каждый компьютер сети, работающий под управлением распределенной ОС, выполняет часть функций этой ОС.
Сетевая ОС может рассматривается как набор ОС отдельных компьютеров, составляющих сеть, причем на разных компьютерах сети могут выполняться одинаковые или разные ОС. Каждая из этих ОС принимает независимые решения о создании и завершении своих собственных процессов и управлении локальными ресурсами. Но также и включает взаимно согласованный набор коммуникационных протоколов для организации взаимодействия процессов, выполняющихся на разных компьютерах сети, и разделения ресурсов компьютеров между пользователями сети.
С другой стороны, если ОС отдельного компьютера позволяет ему работать в сети, т.е. предоставлять свои ресурсы в общее пользование и потреблять ресурсы других компьютеров, то такая ОС отдельного компьютера также называется сетевой ОС.
Итак, термин сетевая ОС используется в двух значениях:
как совокупность ОС всех компьютеров сети;
ОС отдельного компьютера, способного работать в сети.
Функциональные компоненты сетевой ОС:
средства управления локальными ресурсами (реализуют функции ОС автономного компьютера);
сетевые средства:
серверная часть ОС (средства для предоставления локальных ресурсов и услуг в общее пользование);
клиентская часть ОС (средства запроса доступа к удаленным ресурсам и услугам);
транспортные средства ОС (совместно с коммуникационной системой обеспечивают передачу сообщений между компьютерами):
формируют сообщения,
разбивают сообщения на части (пакеты, кадры),
преобразуют имена компьютеров в числовые адреса,
организуют надежную доставку сообщений,
определяют маршрут в сложной сети и др.
Правила взаимодействия компьютеров при передачи сообщений по сети фиксируются в коммуникационных протоколах (Ethernet, IP, IPX и др.)
Подходы к построению сетевых ОС различаются глубиной внедрения сетевых служб в ОС:
сетевые службы глубоко встроены в ОС;
сетевые службы объединены в виде некоторого набора – оболочки;
сетевые службы производятся и поставляются в виде отдельного продукта.
Первоначально сетевые ОС представляли собой совокупность уже существующей локальной ОС и надстроенной над ней сетевой оболочки.
Компьютер в сети может выступать в трех разных ролях:
роль выделенного сервера сети (исключительно обслуживание запросов других компьютеров);
роль клиентского узла (обращается с запросами к ресурсам другой машины);
одноранговый узел – это компьютер, совмещающий функции клиента и сервера.
Сеть может быть построена по одной из следующих схем:
сеть на основе одноранговых узлов – одноранговая сеть;
сеть на основе клиентов и серверов – сеть с выделенными серверами;
сеть, включающая узлы всех типов, - гибридная сеть.
Каждая из этих схем обладает своими достоинствами и недостатками, определяющими их области применения.
В одноранговых сетях все компьютеры равны в возможностях доступа к ресурсам друг друга. Пользователь может объявить ресурс своего компьютера разделяемым, после чего другие пользователи могут его использовать. Таким образом, на всех компьютерах устанавливается такая ОС, которая предоставляет всем компьютерам сети потенциально равные возможности.
Сетевые ОС такого типа называют одноранговыми ОС.
Билет 34
Прерывания представляют собой механизм, позволяющий координировать параллельное функционирование отдельных устройств вычислительной системы и реагировать на особые состояния, возникающие при работе процессора. Таким образом, прерывание – это принудительная передача управления от выполняемой программы к системе (а через неё – к соответствующей программе обработки прерывания), происходящая при возникновении определенного события.
Идея прерываний была предложена в середине 50-х годов и внесла наиболее весомый вклад в развитие вычислительной техники. Основная цель введения прерываний – реализация асинхронного режима работы и распараллеливание работы отдельных устройств вычислительного комплекса.
Механизм прерываний реализуется аппаратно-программными средствами. Структуры систем прерывания (в зависимости от аппаратной архитектуры) могут быть самыми разными, но все они имеют одну общую особенность – прерывание непременно влечет за собой изменение порядка выполнения команд процессором.
Механизм обработки прерываний независимо от архитектуры вычислительной системы включает следующие элементы:
установление факта прерывания (прием сигнала на прерывание) и идентификация прерывания (в операционных системах иногда осуществляется повторно, на шаге 4);
запоминание состояния прерванного процесса. Состояние процесса определяется, прежде всего, значением счетчика команд, содержимым регистров процессора и может включать также спецификацию режима (например, режим пользовательский или привилегированный) и другую информацию;
управление аппаратно передаётся подпрограмме обработки прерывания. В простейшем случае в счётчик команд заносится начальный адрес подпрограммы обработки прерываний, а в соответствующие регистры – информация из слова состояния. В более развитых процессорах осуществляется достаточно сложная процедура определения начального адреса соответствующей подпрограммы обработки прерывания и не менее сложная процедура инициализации рабочих регистров процессора;
сохранение информации о прерванной программе, которую не удалось спасти на шаге 2 с помощью действий аппаратуры. В некоторых вычислительных системах предусматривается запоминание довольно большого объёма информации о состоянии прерванного процесса;
обработка прерывания. Эта работа может быть выполнена той же подпрограммой, которой было передано управление на шаге 3, но в ОС чаще всего она реализуется путем последующего вызова соответствующей подпрограммы;
восстановление информации, относящейся к прерванному процессу (этап, обратный шагу 4);
возврат в прерванную программу.
Шаги 1-3 реализуются аппаратно, а шаги 4-7 – программно.
На
рис.15.1 показано, что при возникновении
запроса на прерывание естественный ход
вычислений нарушается и управление
передаётся программе обработки возникшего
прерывания. При этом средствами аппаратуры
сохраняется (как правило, с помощью
механизмов стековой памяти) адрес той
команды, с которой следует продолжить
выполнение прерванной программы. После
выполнения программы обработки прерывания
управление возвращается прерванной
ранее программе посредством занесения
в указатель команд сохранённого адреса
команды. Однако такая схема используется
только в самых простых программных
средах. В мультипрограммных операционных
системах обработка прерываний происходит
по более сложным схемам, о чём будет
более подробно написано ниже.
Рис.15.1. Обработка прерывания
Главные функции механизма прерываний:
распознавание или классификация прерываний;
передача управления соответственно обработчику прерываний;
корректное возвращение к прерванной программе.
Прерывания, возникающие при работе вычислительной системы, можно разделить на два основных класса:
внешние (их иногда называют асинхронными);
внутренние (синхронные).
Внешние прерывания вызываются асинхронными событиями, которые происходят вне прерываемого процесса, например:
прерывания от таймера;
прерывания от внешних устройств (прерывания по вводу/выводу);
прерывания по нарушению питания;
прерывания с пульта оператора вычислительной системы;
прерывания от другого процессора или другой вычислительной системы.
Внутренние прерывания вызываются событиями, которые связаны с работой процессора и являются синхронными с его операциями. Примерами являются следующие запросы на прерывания:
при нарушении адресации (в адресной части выполняемой команды указан запрещённый или несуществующий адрес, обращение к отсутствующему сегменту или странице при организации механизмов виртуальной памяти);
при наличии в поле кода операции незадействованной двоичной комбинации;
при делении на нуль;
при переполнении или исчезновении порядка;
при обнаружении ошибок чётности, ошибок в работе различных устройств аппаратуры средствами контроля.
Могут ещё существовать прерывания при обращении к супервизору ОС – в некоторых компьютерах часть команд может использовать только ОС, а не пользователи. Соответственно в аппаратуре предусмотрены различные режимы работы, и пользовательские программы выполняются в режиме, в котором эти привилегированные команды не исполняются. При попытке использовать команду, запрещённую в данном режиме, происходит внутреннее прерывание и управление передаётся супервизору ОС. К привилегированным командам относятся и команды переключения режима работа центрального процессора.
Существуют собственно программные прерывания. Эти прерывания происходят по соответствующей команде прерывания, то есть по этой команде процессор осуществляет практически те же действия, что и при обычных внутренних прерываниях. Данный механизм был специально введен для того, чтобы переключение на системные программные модули происходило не просто как переход в подпрограмму, а точно таким же образом, как и обычное прерывание. Этим обеспечивается автоматическое переключение процессора в привилегированный режим с возможностью исполнения любых команд.
билет 36
Программное управление специальными регистрами маски (маскирование сигналов прерывания) позволяет реализовать различные дисциплины обслуживания:
с относительными приоритетами, то есть обслуживание не прерывается даже при наличии запросов с более высокими приоритетами. После окончания обслуживания данного запроса обслуживается запрос с наивысшим приоритетом. Для организации такой дисциплины необходимо в программе обслуживания данного запроса наложить маски на все остальные сигналы прерывания или просто отключить систему прерываний;
с абсолютными приоритетами, то есть всегда обслуживается прерывание с наивысшим приоритетом. Для реализации этого режима необходимо на время обработки прерывания замаскировать все запросы с более низким приоритетом. При этом возможно многоуровневое прерывание, т.е. прерывание программ обработки прерываний. Число уровней прерывания в этом режиме изменяется и зависит от приоритета запроса;
по принципу стека, или, как иногда говорят, по дисциплине LCFS (last come first served – последним пришёл – первым обслужен), то есть запросы с более низким приоритетом могут прерывать обработку прерывания с более высоким приоритетом. Дли этого необходимо не накладывать маски ни на один сигнал прерывания и не выключать систему прерываний.
Следует особо отметить, что для правильной реализации последних двух дисциплин нужно обеспечить полное маскирование системы прерываний при выполнении шагов 1-4 и 6-7. Это необходимо для того, чтобы не потерять запрос и правильно его обслужить. Многоуровневое прерывание должно происходить на этапе собственно обработки прерывания, а не на этапе перехода с одного процесса на другой.
Рис. 15.4. Дисциплины диспетчеризации
Диспетчеризация с динамическими приоритетами требует дополнительных расходов на вычисление значений приоритетов исполняющихся задач, поэтому во многих ОС реального времени используются методы диспетчеризации на основе статических (постоянных) приоритетов. Хотя надо заметить, что динамические приоритеты позволяют реализовать гарантии обслуживания задач.
Рассмотрим кратко некоторые дисциплины диспетчеризации.
Желательно, чтобы программы, с которыми сейчас непосредственно работают, имели лучшее время реакции, чем фоновые задания. При этом некоторые приложения, выполняясь без непосредственного участия пользователя (например, программа получения электронной почты, использующая модем и коммутируемые линии для передачи данных), гарантированно получали необходимую им долю процессорного времени. Для решения подобных проблем используется дисциплина обслуживания RR (round robin, круговая, карусельная) и приоритетные методы обслуживания.
Дисциплина
обслуживания RR предполагает, что каждая
задача получает процессорное время
порциями (квантами времени). После
окончания кванта времени задача снимается
с процессора и он передаётся следующей
задаче. Снятая задача ставится в конец
очерёди задач, готовых к выполнению.
Эта дисциплина обслуживания иллюстрируется
рис. 15.5.
Для оптимальной работы системы необходимо
правильно выбрать закон, по которому
кванты времени выделяются задачам.
Рис. 15.5. Карусельная дисциплина диспетчеризации
В своей простейшей реализации дисциплина карусельной диспетчеризации предполагает, что все задачи имеют одинаковый приоритет. Если же необходимо ввести механизм приоритетного обслуживания, то это, как правило, делается за счёт организации нескольких очерёдей. Процессорное время будет предоставляться в первую очередь тем задачам, которые стоят в самой привилегированной очерёди. Если она пустая, то диспетчер задач начнет просматривать остальные очерёди.
Диспетчеризация без перераспределения процессорного времени, т.е. не вытесняющая многозадачность (non-preemptive multitasking) – это такой способ диспетчеризации процессов, при котором активный процесс выполняется до тех пор, пока он сам, что называется «по собственной инициативе», не отдаст управление диспетчеру задач для выбора из очерёди другого, готового к выполнению процесса или треда. Дисциплины обслуживания FCFS, SJN, SRT относятся к не вытесняющим.
Дисциплина
FCFS
(first
come
– first
served),
согласно которой задачи обслуживаются
в порядке их появления. Те задачи, которые
были заблокированы в процессе работы
(попали в какое-либо из состояний
ожидания, например, из-за операций
ввода/вывода), после перехода в состояние
готовности ставятся в эту очередь
готовности перед теми задачами, которые
ещё не выполнялись. Другими словами,
образуются две очерёди (рис. 15.6): одна
очередь образуется из новых задач, а
вторая очередь – из ранее выполнявшихся,
но попавших в
состояние
ожидание.
Рис. 15.6. Дисциплина диспетчеризации FCFS
Дисциплина обслуживания SJN (shortest job next, т.е. следующим будет выполняться кратчайшее задание) требует, чтобы для каждого задания была известна оценка в потребностях машинного времени.
Дисциплина SRT (shortest remaining time, т.е. следующее задание требует меньше всего времени для своего завершения).
Все эти три дисциплины обслуживания могут использоваться для пакетных режимов обработки, когда пользователь не вынужден ожидать реакции системы, а просто сдает свое задание и через несколько часов получает свои результаты вычислений.
Диспетчеризация с перераспределением процессорного времени между задачами, т.е. вытесняющая многозадачность (preemptive multitasking) – это такой способ, при котором решение о переключении процессора с выполнения одного процесса на выполнение другого процесса принимается диспетчером задач, а не самой активной задачей. При вытесняющей многозадачности механизм диспетчеризации задач целиком сосредоточен в операционной системе, и программист может писать свое приложение, не заботясь о том, как оно будет выполняться параллельно с другими задачами. При этом операционная система выполняет следующие функции: определяет момент снятия с выполнения текущей задачи, сохраняет её контекст в дескрипторе задачи, выбирает из очерёди готовых задач следующую и запускает её на выполнение, предварительно загрузив её контекст. Дисциплина RR и другие, построенные на её основе, относятся к вытесняющим.
При не вытесняющей многозадачности механизм распределения процессорного времени распределен между системой и прикладными программами. Прикладная программа, получив управление от операционной системы, сама определяет момент завершения своей очередной итерации и передаёт управление супервизору ОС с помощью соответствующего системного вызова. При этом естественно, что диспетчер задач, так же как и в случае вытесняющей мультизадачности, формирует очерёди задач и выбирает в соответствии с некоторым алгоритмом (например, с учётом порядка поступления задач или их приоритетов) следующую задачу на выполнение. Такой механизм создает некоторые проблемы, как для пользователей, так и для разработчиков.
________________________