Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lectures_OS.doc
Скачиваний:
17
Добавлен:
23.09.2019
Размер:
826.88 Кб
Скачать

Многоразовые операции

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

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

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

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

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

Переключение контекста

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

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

Рис. 9.  Выполнение операции разблокирования процесса. Использование термина "код пользователя" не ограничивает общности рисунка только пользовательскими процессами

Для корректного переключения процессора с одного процесса на другой необходимо сохранить контекст исполнявшегося процесса и восстановить контекст процесса, на который будет переключен процессор. Такая процедура сохранения/восстановления работоспособности процессов называется переключением контекста. Время, затраченное на переключение контекста, не используется вычислительной системой для совершения полезной работы и представляет собой накладные расходы, снижающие производительность системы. Оно меняется от машины к машине и обычно колеблется в диапазоне от 1 до 1000 микросекунд. Существенно сократить накладные расходы в современных ОС позволяет расширенная модель процессов, включающая в себя понятие threads of execution (нити исполнения и ли просто нити).

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

Планирование и диспетчеризация потоков.

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

  • определение момента времени для смены текущего активного потока;

  • выбор для выполнения потока из очереди готовых потоков.

В ОС универсального назначения планирование осуществляется динамически на основе анализа текущей ситуации.

Статический тип планирования может использоваться, если весь набор одновременно выполняемых задач определен заранее ( в системах реального времени).

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

  • сохранение контекста текущего потока, который нужно сменить;

  • загрузка контекста нового потока, выбранного в результате планирования;

  • запуск нового потока на выполнение.

В мультипрограммной системе поток может находиться в одном из 3-х состояний:

  • выполнение - активное состояние, во время которого он имеет все необходимые ресурсы и непосредственно выполняется процессором;

  • ожидание – пассивное состояние, находясь в котором поток заблокирован по своим внутренним причинам (ожидает осуществление события), например: завершение ввода/вывода.

  • готовность – пассивное состояние, в котором поток заблокирован в связи с внешними по отношению к нему обстоятельствами ( он имеет все ресурсы, но процессор занят выполнением другого потока.

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

Алгоритмы планирования.

С общих позиций их можно разделить на 2 класса :

  • не вытесняющие – алгоритмы, основанные на том, что активному потоку позволяется выполняться пока он сам по своей инициативе не отдаст управление Ос, чтобы она выбрала из очереди другие потоки;

  • вытесняющие - при их использовании решение о переключении процессора с потока на поток принимает сама ОС, а не активный поток.

Почти во всех современных ОС применяются вытесняющие алгоритмы. В основе таких алгоритмов имеет концепция квантования, в соответствии с которой каждому потоку поочередно предоставляется ограниченный и непрерывный период процессорного времени – квант.

Смена активного потока происходит если:

а) поток завершился и покинул систему;

б) произошла ошибка;

в) поток перешел в состояние ожидания;

г) исчерпан квант процессорного времени, отведенного потоку.

Кванты могут иметь фиксированную длительность одинаковую для всех потоков. Но длительность кванта может зависеть от текущего состояния потока и всей системы.

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

Во многих ОС есть возможность изменения приоритета в процессе жизни потока. Используются так же смешанные подходы к планированию потоков.

Мультипрограммирование на основе прерываний.

Прерывание (hardware interrupt) – это (экстренное событие в системе) событие, генерируемое внешним (по отношению к процессору) устройством. Посредством аппаратных прерываний аппаратура либо информирует центральный процессор о том, что произошло какое-либо событие, требующее немедленной реакции (например, пользователь нажал клавишу), либо сообщает о завершении асинхронной операции ввода-вывода (например, закончено чтение данных с диска в основную память). Важный тип аппаратных прерываний – прерывания таймера, которые генерируются периодически через фиксированный промежуток времени. Прерывания таймера используются операционной системой при планировании процессов. Каждый тип аппаратных прерываний имеет собственный номер, однозначно определяющий источник прерывания (все прерывания пронумерованы от 0 до 255, поэтому можно адреса процедур обработки прерываний собрать в массив. ОС, зная номер прерывания, может определить какое это прерывание. Interrupt Descriptop Table - IDT - таблица прерываний, ее начало и размер можно найти в регистре системных адресов IDTR). Аппаратное прерывание – это асинхронное событие, то есть оно возникает вне зависимости от того, какой код исполняется процессором в данный момент. Обработка аппаратного прерывания не должна учитывать, какой процесс является текущим.

Система прерываний позволяет ОС реагировать на внешние события, происходящие асинхронно вычислительному процессу: сигналы готовности устройств вв/ выв., аварийные сигналы аппаратуры и т.д.

В зависимости от источника прерывания делятся на 3 группы:

  • внешние – связанные с сигналами от внешних устройств;

  • внутренние – возникающие в результате ошибок вычислений;

  • программные – представляющие собой удобный способ вызова процедур ОС.

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

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

Синхронизация процессов и потоков.

Синхронизация необходима для исключения « гонок» и « тупиков» при обмене данными между потоками, при доступе к устройствам вызовов. Во многих ОС эти средства – называются средствами межпроцессорного взаимодействия. Синхронизация лежит в основе любого взаимодействия потоков. Она заключается в согласовании их скоростей путем приостановки потока до наступления некоторого события и последующей активации его после наступления события.

Важным понятием в синхронизации потоков является понятие « критической секции» программы. Критическая секция - это часть программы, результат выполнения которой может непредсказуемо меняться, если переменные, относящиеся к этой части программы, применяются другими потоками в то время, когда выполнение этой части программы еще не завершено.

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

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

Еще одной проблемой синхронизации является распознавание тупиков ( временных блокировок).

Поток А Поток В

ресурс 1 ресурс 2

ресурс 2 ресурс 1

Пусть поток А обращается к ресурсам в порядке номеров 1 и 2 , а поток В наоборот.

Возможна ситуация, когда поток А получил ресурс 1 и квант его времени завершился, затем запустился поток в и захватил ресурс 2. В итоге после получения кванта времени каждый поток пытается получить следующий ресурс, но он уже занят другим потоком – возникает тупик.

Управление памятью. Функции ОС по управлению памятью.

Особая роль объясняется тем, что процессор может выполнять инструкции программы только тогда, когда они находятся в памяти. В мультипрограммной среде ОС выполняет функции по управлению памятью:

  1. отслеживание свободной и занятой памяти;

  2. выделение памяти процессом и освобождение ее после завершения;

  3. выполнение кодов и данных, принадлежащих процессам из ОП на диск ( полное или частичное), когда размеры основной памяти недостаточно для размещения в ней всех процессов и возвращение их в ОП, когда в ней освобождается место;

  4. настройка программы на конкретную область физической памяти;

  5. защита памяти процессов от взаимного вмешательства.

Типы адресов.

Для идентификации переменных и команд на разных этапах жизненного цикла программы используется:

  1. символические имена (метки) – их присваивает пользователь при написании программы на языке программирования;

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

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

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

Существует два принципиально разных подхода к преобразованию виртуальных адресов в физические:

  • преобразование при загрузке программы в оперативную память выполняется с помощью перемещающего загрузчика (выполняется только один раз).

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

Виртуальная память.

Виртуализация оперативной памяти (т.е. подмена ее дисковой памятью) осуществляется совокупностью программных модулей ОС и аппаратных схем процессора и включает решение задач:

  • размещение данных в ЗУ разного типа (часть кода программы - в оперативную память, часть на диске);

  • выбор образов процессов или их частей для перемещения из оперативной памяти на диск и обратно.

Примечание: образ процесса – содержимое назначенного процессу виртуального адресного пространства, то есть коды команд, исходные и промежуточные данные, а так же результаты вычислений.

  • преобразование виртуальных адресов в физические.

  • перемещение данных по мере необходимости между памятью и диском.

Виртуализация памяти может быть осуществлена на основе двух различных подходов:

  • свопинг (swopping) – образы процесса выгружается на диск, возвращаются обратно в память полностью;

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

Свопинг – частный случай виртуальной памяти. Ему присуща избыточность. В настоящее время все множество реализаций виртуальной памяти может быть представлено тремя классами:

  1. страничная виртуальная память (организуется перемещение данных между памятью и диском страницами, т.е. частями виртуального адресного пространства, имеющими фиксированный небольшой размер, 4 Кб.). Достоинства: возрастает скорость обмена; уменьшается уровень фрагментации. Недостатки: сложно организовать защиту данных, разделенных на части механически.

  2. сегментная виртуальная память - предусматривает перемещение данных сегментами, т.е. частями виртуального адресного пространства, произвольного размера, полученными с учетом смыслового значения данных.

Достоинства: упрощается защита сегментов. Недостатки: медленное преобразование адресов; высокий уровень фрагментации памяти.

  • сегментно- страничная виртуальная память - сочетает достоинства обоих подходов.

Сегменты виртуальной памяти могут быть разделяемы между несколькими процессами. Разделяемые сегменты используются либо для экономии физической памяти (когда несколько пользователей работают одним программным кодом), либо в качестве средства обмена данными между процессами.

Функции ОС по управлению памятью

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

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

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

Типы адресов

Для идентификации переменных и команд на разных этапах жизненного цикла программы используются символьные имена (метки), виртуальные адреса и физические адреса.

Символьные имена присваивает пользователь при написании программы на алгоритмическом языке или ассемблере.

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

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

Совокупность виртуальных адресов процесса называется виртуальным адресным пространством. Диапазон возможных адресов виртуального пространства у всех процессов является одним и тем же. Например, при использовании 32-разрядных виртуальных адресов этот диапазон задается границами 0000000016 и FFFFFFFF16. Тем не менее каждый процесс имеет собственное виртуальное адресное пространство − транслятор присваивает виртуальные адреса переменным и кодам каждой программы независимо.

Рис.10. Типы адресов

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

В разных операционных системах используются разные способы структуризации виртуального адресного пространства. В одних ОС виртуальное адресное пространство процесса подобно физической памяти представлено в виде непрерывной линейной последовательности виртуальных адресов. Такую структуру адресного пространства называют также плоской (flat). При этом виртуальным адресом является единственное число, представляющее собой смещение относительно начала (обычно это значение 000...000) виртуального адресного пространства. Адрес такого типа называют линейным виртуальным адресом.

В других ОС виртуальное адресное пространство делится на части, называемые сегментами (или секциями, или областями, или другими терминами). В этом случае помимо линейного адреса может быть использован виртуальный адрес, представляющий собой пару чисел (п, т), где п определяет сегмент, a m − смещение внутри сегмента. Существуют и более сложные способы структуризации виртуального адресного пространства, когда виртуальный адрес образуется тремя или даже более числами.

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

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

Второй способ заключается в том, что программа загружается в память в неизмененном виде в виртуальных адресах, то есть операнды инструкций и адреса переходов имеют те значения, которые выработал транслятор. Так например, в наиболее простом случае, когда виртуальная и физическая память процесса представляют собой единые непрерывные области адресов, операционная система выполняет преобразование виртуальных адресов в физические по следующей схеме. При загрузке программы операционная система фиксирует смещение действительного расположения программного кода относительно виртуального адресного пространства. Во время выполнения процесса при каждом обращении к оперативной памяти выполняется преобразование виртуального адреса в физический. Допустим, если VA есть виртуальный адрес программы, а S – смещение, то физический адрес ОП = VA + S.

У каждого способа есть свои преимущества и недостатки. Последний способ является более гибким: в то время как перемещающий загрузчик жестко привязывает программу к первоначально выделенному ей участку памяти, динамическое преобразование виртуальных адресов позволяет перемещать программный код процесса в течение всего периода его выполнения. Но использование перемещающего загрузчика более экономично, так как в этом случае преобразование каждого виртуального адреса происходит только один раз во время загрузки, а при динамическом преобразовании − при каждом обращении по данному адресу. В некоторых случаях (обычно в специализированных системах), когда заранее точно известно, в какой области оперативной памяти будет выполняться программа, транслятор выдает исполняемый код сразу в физических адресах. Манипулируя с адресами, необходимо различать максимально возможное виртуальное адресное пространство процесса и назначенное (выделенное) процессу виртуальное адресное пространство. В первом случае речь идет о максимальном размере виртуального адресного пространства, определяемом архитектурой компьютера, на котором работает ОС, и, в частности, разрядностью его схем адресации (32-битная, 64-битная и т. п.). Например, при работе на компьютерах с 32-разрядными процессорами Intel Pentium операционная система может предоставить каждому процессу виртуальное адресное пространство до 4 Гбайт (232). Однако это значение представляет собой только потенциально возможный размер виртуального адресного пространства, который редко на практике бывает необходим процессу. Процесс использует только часть доступного ему виртуального адресного пространства. Сегодня для машин универсального назначения типична ситуация, когда объем виртуального адресного пространства превышает доступный объем оперативной памяти. В таком случае операционная система для хранения данных виртуального адресного пространства процесса, не помещающихся в оперативную память, использует внешнюю память, которая в современных компьютерах представлена жесткими дисками. Именно на этом принципе основана виртуальная память – наиболее совершенный механизм, используемый в операционных системах для управления памятью.

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

Обычно виртуальное адресное пространство процесса делится на две непрерывные части: системную и пользовательскую. В некоторых ОС (например, Windows NT) эти части имеют одинаковый размер − по 2 Гбайт, хотя в принципе деление может быть и другим, например 1 Гбайт − для ОС, и 2 Гбайт − для прикладных программ. Часть виртуального адресного пространства каждого процесса, отводимая под сегменты ОС, является идентичной для всех процессов. Поэтому при смене активного процесса заменяется только вторая часть виртуального адресного пространства, содержащая его индивидуальные сегменты, как правило, − коды и данные прикладной программы. Архитектура современных процессоров отражает эту особенность структуры виртуального адресного пространства. Например, в процессорах Intel Pentium существует два типа системных таблиц: одна − для описания сегментов, общих для всех процессов, а другая − для описания индивидуальных сегментов данного процесса. При смене процесса первая таблица остается неизменной, а вторая заменяется новой. Механизм страничной памяти в большинстве универсальных операционных систем применяется ко всем сегментам пользовательской части виртуального адресного пространства процесса. Системная часть виртуальной памяти в ОС любого типа включает область, подвергаемую страничному вытеснению (paged), и область, на которую страничное вытеснение не распространяется (non-paged). В невытесняемой области размещаются модули ОС, требующие быстрой реакции и/или постоянного присутствия в памяти, например диспетчер потоков или код, который управляет заменой страниц памяти. Остальные модули ОС подвергаются страничному вытеснению, как и пользовательские сегменты.

Кэширование.

Для ускорения доступа к данным в вычислительных системах используется принцип кэширования, при котором совместно функционируют два типа ЗУ, отличающихся временем доступа и стоимостью хранения данных; при этом из более медленного ЗУ данные динамически копируются в более быстрые ЗУ, что позволяет уменьшить среднее время доступа к данным. Неотъемлемым средством кэширования памяти является ее прозрачность для программистов и пользователей. Каждая запись кэш-памяти об элементе данных включает в себя:

  • значение этого элемента данных;

  • адрес, который этот элемент имеет в памяти;

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

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

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

Детерминированные (прямой) – любой элемент основной памяти всегда отображается в одно и тоже место кэш – памяти. В этом случае кэш – память разделена на строки, каждая из которых предназначена для хранения одной записи об элементе данных, имеет свой номер.

Аппаратная поддержка мультипрограммирования.

Семейство процессоров Pentium имеют разные механизмы для поддержки мультипрограммирования (многозадачность) режима:

  • набор привилегированных команд (например: команды для загрузки регистров системных адресов (таблицы дескрипторов процессов): LDTR, GDTR, IDTR, TR; команды запрета/разрешения аппаратных прерываний: CLT/STI).

  • средства защиты сегментов кодов и данных обеспечивающих 4 уровня привилегий.

  • сегментный и сегментно–страничный механизм виртуальной памяти.

  • механизм быстрого переключения процессов с сохранением контекстов.

  • встроенный кэш оперативной памяти.

  • векторная система прерываний.

Процессор Pentium при управлении памятью поддерживает 2 типа таблиц дескрипторов сегментов:

  • глобальную таблицу дескрипторов GDT (описывает сегменты ОС и разделяемые сегменты прикладных процессов).

  • локальные таблицы дескрипторов LDT (создаются для каждого пользовательского процесса).

При сегментном режиме работы виртуальное адресное производство состоит из 16 Кбайт сегментов по 4 на каждый. Всего 64 Тбайт. А при сегментно-страничном режиме все сегменты отображаются в общий диапазон адресов 4 Гбайт. Каждый сегмент виртуально – адресного пространства описывается дескриптором, который содержит базовый адрес, размер сегмента, а также ряд пунктов, в том числе: уровень привилегий сегмента DRL, определяющий права доступа к нему.

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

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

В процессоре Pentium применяется кэширование:

  • дескрипторов сегментов в скрытых регистрах процессора.

  • дескрипторов страниц в буфере ассоциативной трансляции TLB.

  • данных и инструкций в кэш-памяти первого и второго уровня.

Ввод/вывод и файловая система.

Основные задачи подсистемы ввода/ вывода в мультипрограммной ОС:

- организация параллельной работ устройств ввода/вывода и процессора.

- согласование скоростей обмена данными и кэширование данные.

- разделение устройств и данных между процессами.

- обеспечение удобного логического интерфейса между устройствами ввода/вывода и остальной частью системы.

- поддержка широкого спектра драйверов с возможностью простого включения в систему нового драйвера.

- динамическая загрузка и выгрузка драйвера.

- поддержка синхронных и асинхронных операций ввода/вывода.

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

Драйверы делятся на низкоуровневые ( и непосредственно управляющие работой контроллера внешних устройств) и высокоуровневые ( обеспечивают логический интерфейс между устройствами)

Например: драйвер файловых систем.

Для координации работы драйвера в подсистеме ввода/вывода может выделится особый модуль – менеджер ввода/вывода.

Аппаратные драйверы делятся на: блок-ориентированные (обеспечивают доступ к устройствам) и байт-ориентированные (управление устройствами, образуют побайтный, а не адресный обмен).

Файловая система – представляет собой комплекс системных программных средств. Под ФС понимают также набор всех файлов и служебных структур данных, хранящихся на внешнем устройстве.

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

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

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

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

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

Управление файлами Unix.

Ядро системы Unix рассматривает файлы, как потоки (последовательности ). Любая внутренняя логическая структура связана с конкретными приложениями. Unix же работает с физической структурой файла.

Различают 4 типа файлов в Unix:

  • обычные файлы;

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

  • специальные (используются для доступа к периферийным устройствам, каждое устройство связано с определенным файлом);

  • именованные каналы.

Индексные узлы.

Именование всеми типами файлов осуществляется посредством индексных узлов.

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

Информация содержащаяся на индексном узле ОС Unix.

Режим файла

16 битовый флаг, хранящий права доступа и использования файлов связанных с доступом

 

12-14 - тип файла (Спец. Файл, каталог…)

 

9-11 - флаги исполнения

 

8 - права владельца на чтение

 

7 - права владельца на запись

 

6 - права владельца на исполнение

 

5 - права на чтение для группы

 

4 - права на запись для группы

 

3 - права на исполнение для группы

 

2 - права на чтение для прочих

 

1 - права на запись для прочих

 

0 - права на исполнение для прочих

Счётчик связи

Количество ссылок на этот узел в различных каталогах или в одном

ID владельца

Владелец файла

ID группы

Группа связанная с файлом

Размер файла

Число байтов

Адрес файла

39 байтов адресной информации

Последнее обращение

Время последнего обращения к файлу

Последнее изменение

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

Изменение узла

Время последней модификации узла


Размещение файлов.

Размещение файлов происходит поблочно, динамически по мере необходимости отсюда следует блоки файлов на диске не обязательно образуют непрерывную область для отслеживания фалов используется индексный метод, при этом часть индекса храниться в индексной дескрипторе (inode).

Узел включает в себя 39 байт адресной информации, организованной как 13 трехбайтных адресов ( указателей).

Первые 10 адресов указывают на первые 10 блоков данных .

Если файл больше 10 блоков (больше 5-ти Кбайт), то используется 1,2 или 3 уровня косвенности.

11 адрес узла указывает на блок на диске ( блок 1-го уровня косвенности) содержащий следующую часть индекса этот блок содержит указатели на последние блоки файла.

Если файл содержит еще большее число блоков, то 12-й адрес узла укажет на 2-ой уровень косвенности. Этот блок содержит список адресов дополнительного уровня косвенности на следующие блоки. Если файл содержит еще больше блоков, то 13-й адрес – на третий уровень косвенности.

Емкость файлов в ОС Unix.

Уровень

Количество блоков

Количество байт

Прямой

10

10 кб

Один уровень коственности

256

256 кб

Два уровня коственности

256Х256=64 кб

64 Мб

Три уровня коственности

256Х64 кб= 16 мб

16 Гб


- такая схема имеет фиксированный относительно небольшой размер, отсюда следует может длительное время содержаться в ОЗУ.

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

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

inode адреса блоков данных блоки данных

Прямой указатель (0)

Прямой указатель (1)

Прямой указатель (9)

Указатель 1го уровня косвенности

Указатель 2го уровня косвенности

Указатель 3го уровня косвенности

адреса блоков с адресами блоков данных

рис 11. Схема адресации блоков в Unix.

 

Рис.12. Структура индексного узла

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]