Рефераты. Лекция: Теория Операционных Систем

Лекция: Теория Операционных Систем

Теория операционных систем

Введение. Основные понятия и определения.

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

ОС, выполняя роль посредника, служит двум целям:

эффективно использовать компьютерные ресурсы.

создавать условия для эффективной работы пользователя

В качестве ресурсов компьютера обычно рассматривают:

время работы процессора

адресное пространство основной памяти

оборудование ввода - вывода

файлы, хранящиеся во внешней памяти

На рисунке приведены основные компоненты ОС как системы разделения
ресурсов.

Таким образом, основные компоненты ОС:

управление процессами (распределяет ресурс — процессорное время);

управление памятью (распределяет ресурс — адресное пространство основной
памяти);

управление устройствами (распределяет ресурсы) — оборудование
ввода - вывода;

управление данными (распределяет ресурс — данные или файлы).

Функционирование компьютера после включения питания начинается с
запуска программы первоначальной загрузки — Boot Track. Программа Boot
Track инициализирует основные аппаратные блоки компьютера и регистры
процессора (CPU), накопитель памяти, контроллеры периферийного
оборудования. Затем загружается ядро ОС, то бишь Operating System
Kernel. Дальнейшее функционирование ОС осуществляется как реакция на
события, происходящие в компьютере. Наступление того или иного события
сигнализируется прерываниями - Interrupt. Источниками прерываний могут
быть как аппаратура (HardWare), так и программы (SoftWare).

Аппаратура “сообщает” о прерывании асинхронно (в любой момент времени)
путем пересылки в CPU через общую шину сигналов прерываний. Программа
“сообщает” о прерывании путем выполнения операции System Call. Примеры
событий, вызывающих прерывания:

попытка деления на 0

запрос на системное обслуживание

завершение операции ввода - вывода

неправильное обращение к памяти

Каждое прерывание обрабатывается соответственно обработчиком прерываний
(Interrupt handler), входящим в состав ОС.

Главные функции механизма прерываний — это:

распознавание или классификация прерываний

передача управления соответственно обработчику прерываний

корректное возвращение к прерванной программе

Переход от прерываемой программы к обработчику и обратно должен
выполняться как можно быстрей. Одним из быстрых методов является
использование таблицы, содержащей перечень всех допустимых для
компьютера прерываний и адреса соответствующих обработчиков. Такая
таблица называется вектором прерываний (Interrupt vector) и хранится в
начале адресного пространства основной памяти (UNIX/MS DOS).

Для корректного возвращения к прерванной программе перед передачей
управления обработчику прерываний, содержимое регистров процессора
запоминается либо в памяти с прямым доступом либо в системном стеке —
System Stack.

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

1. Управление процессами.

Процесс — это программный модуль, выполняемый в CPU. Операционная
система контролирует следующую деятельность, связанную с процессами:

создание и удаление процессов

планирование процессов

синхронизация процессов

коммуникация процессов

разрешение тупиковых ситуаций

1.1 Понятие Процесс. Состояния процесса

Не следует смешивать понятия процесс и программа. Программа — это план
действий, а процесс — это само действие. Понятие процесс включает:

программный код

данные

содержимое стека

содержимое адресного и других регистров CPU.

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

Различают следующие состояния процесса:

новый (new, процесс только что создан)

выполняемый (running, команды программы выполняются в CPU)

ожидающий (waiting, процесс ожидает завершения некоторого события, чаще
всего операции ввода - вывода)

готовый (ready, процесс ожидает освобождения CPU)

завершенный (terminated, процесс завершил свою работу)

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

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

На рисунке схематически показано, каким образом операционная система
использует process control block для переключения процессора с одного
процесса на другой.



time



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

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

Очередь к

первый

PCB5





терминалу









№ 1

последний



















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

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

Готовые к выполнению процессы располагаются в основной памяти и связаны
очередью готовых процессов или ready queue. Процессы в этой очереди
ожидают освобождения ресурса процессорное время.

Процесс в состоянии ожидания завершения операции ввода - вывода
находится в одной из очередей к оборудованию ввода - вывода, которая
носит название devices queue.

При прохождении через компьютер процесс мигрирует между различными
очередями под управлением программы, которая называется планировщик.
(scheduler) Операционная система, обеспечивающая режим
мультипрограммирования, обычно включает два планировщика — долгосрочный
(long term scheduler) и краткосрочный (short term scheduler/CPU
scheduler).

Основное отличие между долгосрочным и краткосрочным планировщиками
заключается в частоте запуска, например: краткосрочный планировщик может
запускаться каждые 100 мс, долгосрочный — один раз за несколько минут.

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

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

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

1.3. Взаимодействие процессов. Пользовательский уровень.

Совместно выполняемые процессы могут быть либо независимыми (independed
processes), либо взаимодействующими (cooperating processes).
Взаимодействие процессов часто понимается в смысле взаимного обмена
данными через общий буфер данных.

Взаимодействие процессов удобно рассматривать в схеме производитель -
потребитель (produces - consumer). Например, программа вывода на печать
производит последовательность символов, которые потребляются драйвером
принтера или компилятор производит ассемблерный текст, который затем
потребляется ассемблером.

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

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

буфер заполнен; ожидает процесс - производитель

буфер пуст; ожидает процесс - потребитель

Буфер может предоставляться и поддерживаться самой ОС, например с
помощью средств коммуникации процессов (IPC — Inter Process
Communication), либо организовать прикладным программистом. При этом оба
процесса используют общий участок памяти, например процесс -
производитель и процесс - потребитель могут использовать следующие
переменные:

Var n;

type item=...;

Var buffer:array[0..n-1] of item;

in, out:0..n-1;, где n - количество адресуемых элементов буфера, Item -
имя типа элементов буфера, in, out - указатели, характеризующие
заполнение буфера.

Буфер представлен в виде циклически связанного массива адресуемых
элементов с двумя указателями - in, out. Указатель in содержит номер
первого свободного элемента буфера, а out - первого занятого элемента
буфера.



0 1 2 3 4 5



n-1



















Пуст. in=out. Очевидно, что буфер пуст в том случае, если выполняется
это условие.

Буфер будет полностью заполнен, если выполняется условие

(in+1) mod n = out

Процесс - производитель должен выполнять процедуру записи в буфер типа

Repeat

...

продуцируется очередной элемент в Next p

...

while (in+1) mod n = out do no_op;

buffer (in):=next p;

in:=(in+1) mod n;

until false

где Next p - локальная переменная процесса - производителя, в которой
хранится очередной продуцируемый элемент

no_op - пустой оператор

Процесс - потребитель должен выполнять процедуру чтения из буфера типа

Repeat

while in out do no_op;

next p := buffer (out);

out:=(out+1) mod n;

...

потребляется очередной элемент из Next с

...

until false

2. Планирование процессора.

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

2.1. Критерии планирования процессора.

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

утилизация CPU (использование) CPU utilization. утилизация CPU
теоретически может находиться пределах от 0 до 100%. В реальных системах
утилизация CPU колеблется в пределах 40% для легко загруженного CPU, 90%
для тяжело загруженного CPU.

пропускная способность CPU throughput. Пропускная способность CPU может
измеряться количеством процессов, которые выполняются в единицу времени.

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

время ожидания (waiting time). под временем ожидания понимается
суммарное время нахождения процесса в очереди готовых процессов.

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

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

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

2.2. Стратегии планирования процессора.

2.2.1.Первый пришел — первый обслуживается FIFO. first come — first
served (FCFS).

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

Когда процесс попадает в очередь готовых процессов, process control
block присоединяется к хвосту очереди.

Среднее время ожидания для стратегии FCFS часто весьма велико и зависит
от порядка поступления процессов в очередь готовых процессов.

Пример № 1

Пусть три процесса попадают в очередь одновременно в момент 0 и имеют
следующие значения времени последующего обслуживания в CPU.

вариант 1:

П1(24 мс)

П2(3 мс)

П3(3 мс)

вариант 2:

П2(3 мс)

П3(3 мс)

П1(24 мс)

На рисунке приведены диаграммы Ганга очереди готовых процессов

вариант 1:

П1 П2 П3 WT=17 мс

WT1=0 мс WT2=24 мс WT3=27 мс

вариант 2:

П2 П3 П1 WT=3 мс

WT2=0 мс WT3=3 мс WT1=6 мс

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

2.2.2. Стратегия наиболее короткая работа — вперед к победе коммунизма !
SJF

SJF — Shortest Job First. Одним из методов борьбы с “эффектом конвоя”
является стратегия, позволяющая процессу из очереди выполняться первым.

Пример № 2

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

П1(6 мс)

П2(8 мс)

П3(7 мс)

П4(3 мс)

На рисунке приведена диаграмма Ганга, построенная в соответствии со
стратегией SJF.

П4 П1 П3 П2 WT=7 мс

WT4=0 мс WT1=3 мс WT3=9 мс WT2=16 мс

Легко посчитать, что при использовании FCFS - стратегии среднее время
ожидания для тех же процессов равно 10.25 мс, таким образом стратегия
SJF снижает время ожидания очереди. Наибольшая трудность в практической
реализации SJF заключается в невозможности заранее определить величину
времени последующего обслуживания.

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

2.2.3. Приоритетное планирование.

Описанные ранее стратегии могут рассматриваться как частные случаи
стратегии приоритетного планирования. Эта стратегия предполагает, что
каждому процессу приписывается приоритет, определяющий очередность
предоставления ему CPU. Например, стратегия FCFS предполагает, что все
процессы предполагает, что все процессы имеют одинаковые приоритеты, а
стратегия SJF предполагает, что приоритет есть величина, обратная
времени последующего обслуживания.

Приоритет — это целое положительное число, находящееся в некотором
диапазоне, например от 0 до 7, от 0 до 4095. Будем считать, что чем
меньше значение числа, тем выше приоритет процесса.

Пример №3. приоритет

П1(10 мс) 3

П2(1 мс) 1

П3(2 мс) 3

П4(1 мс) 4

П5(5 мс) 2

На рисунке приведена диаграмма Ганга, располагающая процессы в очереди
в соответствии со стратегией приоритетного планирования

П2 П5 П1 П3 П4

WT2=0 мс WT5=1 мс WT1=6 мс WT3=16 мс WT4=18 мс

Приоритеты определяются исходя из совокупности внутренних и внешних по
отношению к операционной системе факторов.

Внутренние факторы:

требования к памяти

количество открытых файлов

отношение среднего времени ввода - вывода к среднему времени CPU и так
далее

Внешние факторы:

важность процесса

тип и величина файлов, используемых для оплаты

отделение, выполняющее работы и так далее

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

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

Известен случай, когда в 1973 году в Массачусетском технологическом
институте MIT при остановке компьютера IBM 7094 в очереди готовых
процессов были обнаружены процессы, представленные в 1967 и все еще не
выполненные.

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

2.2.4. “Карусельная” стратегия планирования.

RR-Round Robin

Round Robin стратегия применяется в системах разделения времени.
Определяется небольшой отрезок времени, названный квантом времени
(10..100 мс). Очередь готовых процессов рассматривается как кольцевая.
Процессы циклически перемещаются по очереди, получая CPU на время,
равное одному кванту. Новый процесс добавляется в хвост очереди. Если
процесс не завершился в пределах выделенного ему кванта времени, его
работа принудительно прерывается, и он перемещается в хвост очереди.

Пример 4

П1(24 мс)

П2(3 мс)

П3(3 мс)

q=4 мс.

Диаграмма Ганга соответственно Round Robin стратегии для этого случая
имеет вид:

П1 П2 П3 П1 П1 П1 П1 П1

WT1=0 мс 7 10 14 18 22 26 30

Свойства Round Robin стратегии сильно зависят от величины временного
кванта q. Чем больше временной квант, тем дольше Round Robin стратегия
приближается к FCFS стратегии. (для рассмотренного примера, если q>24
мс, то -> FCFS.) При очень малых значениях временного кванта Round Robin
стратегия называют разделением процессора — processor sharing.
Теоретически это означает, что каждый из N процессов работает со своим
собственным процессором, производительность процессора равна 1/N от
производительности физического процессора.

2.2.5. ПЛАНИРОВАНИЕ с использованием многоуровневой очереди.(Multilevel
queue scheduling)

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

Интерактивные и пакетные процессы имеют различные требования к
краткосрочному планировщику, например по отношению ко времени отклика.

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

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

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

2.2.6. Программирование с использованием многоуровневой очереди с
обратными связями (multilevel feedback queue sheduling)

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

Процессы первоначально попадают в очередь 0, где каждому из них
предоставляется квант времени, равный 8 мс. Те процессы, которые не
успели выполниться в течение этого времени, перемещаются в очередь 1.
Процессы из очереди 1 начинают обрабатываться только тогда, когда
очередь 0 становиться пустой. Те процессы, которые не выполнились в
очереди 1 (q=16 мс) перемещаются в очередь 2. Процессы из очереди 2
будут обрабатываться только в том случае, если становятся пустыми
очереди 0 и 1.

Рассмотренная стратегия является наиболее универсальной и сочетает в
себе свойства всех рассмотренных раньше стратегий.

FCFS

SJF

приоритетная

Round Robin

многоуровневая очередь

3. Управление невиртуальной памятью.

3.1. Своппинг. (swapping)

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

Процесс, которому выделен CPU, временно перемещается в основную память
(swap in/roll in).

В случае прерывания работы процесса он перемещается обратно во внешнюю
память (swap out/roll out).

Замечание: при своппинге из основной памяти во внешнюю (и обратно)
перемещается вся программа, а не её отдельная часть.

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

Основное применение своппинг находит в системах разделения времени, где
он используется одновременно с Round Robin стратегией планирования CPU.

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

Метод своппинга влияет на величину временного кванта Round Robin
стратегии.

Пример.

пусть очередной загружаемый в память процесс имеет размер 100Кб.

диск позволяет читать данные со скоростью 1 Мб в секунду

следовательно, 100 Кб могут быть загружены за 100 мс.

будем считать, что для первоначального подвода головки чтения - записи
потребуется 8 мс

таким образом, операция своппинг займет 108 мс, а общее время своппинга
- 216 мс.

Для эффективной загруженности процессора время своппинга должно быть
существенно меньше времени счета. Следовательно, для рассмотренного
примера квант времени должен быть существенно больше, чем 216 мс. Ясно,
что это число значительно увеличится, если перемещаемый процесс имеет
размер, например, 1 Мб.

Недостаток “чистого” своппинга в больших потерях времени на загрузку
или выгрузку процессов. Поэтому в современных операционных системах
используется модифицированные варианты своппинга.

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

3.2. Смежное размещение процессов.

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

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

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

3.2.1. Однопрограммный режим.

Рисунок иллюстрирует смежное размещение (contiguous allocation) одной
программы в основной памяти.

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

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

Оверлейную структуру программы и последовательность загрузки оверлейных
сегментов планирует сам программист.

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

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

3.2.2 Мультипрограммный режим с ФИКСИРОВАННЫМИ границами.

Мультипрограммирование с фиксированными разделами (Multiprogramming
with a fixed number of tasks) предполагает разделение адресного
пространства на ряд разделов фиксированного раздела. В каждом разделе
размещается один процесс.

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

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

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

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

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

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

а < Адр. < б

При выходе любого адреса программы за отведенные ей границы, работа
программы прерывается.

3.2.3. Мультипрограммирование с переменными разделами. (multiprogramming
with a variable number of tasks (MVT).

Метод Multiprogramming with a Variable number of Tasks предполагает
разделение памяти на разделы и использование загрузочных модулей в
перемещаемых адресах, однако, границы разделов не фиксируются.







Раздел 3







Раздел 4







80 Кб

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

П7 П6 П5

100 Кб











Раздел 4







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

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

3.2.4. Мультипрограммирование с переменными разделами и уплотнением
памяти.

Ясно, что метод Multiprogramming with a Variable number of Tasks
порождает в памяти множество малых фрагментов, каждый из которых может
быть недостаточен для размещения очередного процесса, однако суммарный
размер фрагментов превышает размер этого процесса.

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

На практике реализация уплотнения памяти сопряжена с усложнением
операционной системы и обладает следующими недостатками:

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

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

3.2.5. Основные стратегии заполнения свободного раздела.

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

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

стратегия наиболее подходящего (best fit strategy) выбирает процесс,
которому в освободившемся разделе наиболее тесно (выигрыш в памяти).

стратегия первого подходящего (first fit strategy) выбирает первый
процесс, который может разместить в освободившемся разделе.

стратегия наименее подходящего (last fit strategy) выбирает процесс,
которому в освободившемся разделе наиболее свободно (в этом случае
остающийся фрагмент часто достаточен для размещения еще одного процесса)

3.3. Страничная организация памяти.

Страничная организация памяти (paging) относится к методам несмежного
размещения процессов в основной памяти.

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

3.3.1. Базовый метод.

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

Каждый адрес, генерируемый процессором, состоит из двух частей: П -
номер страницы (page number) и Д - смещение в пределах страницы
(off set). Номер страницы может использоваться как индекс для таблицы
страниц (page table).

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



Вторичная память

Таблица















стр. 3

Рисунок показывает, что страничная организация памяти полностью
исключает внешнюю фрагментацию. Внутренняя фрагментация не превышает
величины page_size-Q_Elem, где page_size — размер страничной рамки, а
Q_Elem — минимальный адресуемый элемент основной памяти.

Для ускорения вычисления физического адреса операцию суммирования
заменяют операцией конкатенации.

старшие разряды младшие разряды



2n+1 2n

f





2n-1

2n Д

На рисунке заштрихованы незаполненные нулевые разряды. Для того, чтобы
операция конкатенации была возможна, необходимо, чтобы базовые адреса
страничных рамок располагались только в старших разрядах (2n+1), а
следующие — только младших разрядов (20, 21, 22).

Например, при n=9 базовые адреса страничных рамок — это следующий ряд:
512, 1024, 1536. Следовательно, размер страничной рамки равен 512 байт.

В современных операционных системах типичный размер страницы составляет
2 Кб или 4 Кб.

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

3.3.2. Аппаратная поддержка страничной организации памяти.

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

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

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

Защита страничной памяти основана на контроле уровня доступа к каждой
странице, возможны следующие уровни доступа:

только чтение

и чтение и запись

только выполнение

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

3.4. Сегментная организация памяти.

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

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

3.4.1. Базовый метод сегментной организации памяти.

Обычно сегменты формируются компилятором, а на этапе загрузки им
присваиваются идентифицирующие номера. Таким образом, логический адрес
при сегментной организации памяти состоит из двух частей: S и d, где S —
номер сегмента, а d — смещение в пределах сегмента.

Трансформация логического адреса в физический осуществляется с помощью
таблицы сегментов (segment table).

Количество строк таблицы сегментов равно количеству сегментов
программы: S, limit, base. Limit — размер сегмента, base — начальный
адрес сегмента в памяти.

Номер сегмента S используется в качестве индекса для таблицы сегментов.
С помощью таблицы сегментов определяется его начальный адрес base в
основной памяти. Значение limit используется для защиты памяти. Смещение
d должно удовлетворять неравенству 0 за границы сегмента работа программы прерывается. Физический адрес
определяется как сумма начального адреса base и смещения d. В том
случае, если таблица сегментов имеет значительные размеры, она
располагается в основной памяти, а её начальный адрес и длина хранятся в
специальных регистрах STBR (segment table base register), STLR (segment
table length register). Для ускорения трансформации логического адреса в
физический операция суммирования часто заменяется операцией конкатенации
(для этого необходимо, чтобы начальные адреса сегментов были кратны
некоторому числу 2n).Таблица сегментов (или её часть) располагается в
ассоциативной памяти.

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

3.4.2. Разделение сегмента между НЕСКОЛЬКИМИ процессами.

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

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

таблица сегментов процесса 1



таблица сегментов процесса 2



90003



limit base

данные



25286 43062

98553 2



8550 90003













3.4.3. Фрагментация.

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

Очень часто сегментация комбинируется со страничированием. Это
позволяет сочетать преимущества обоих методов. Низкая фрагментация при
страничной организации и естественное расчленение программы по
сегментам.

Сегментация и страничирование используется о операционных системах OS/2
для управления компьютерами.

4. Управление виртуальной памятью.

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

4.1. Страничирование по запросу (demand paging).

Виртуальная память чаще всего реализуется на базе страничной
организации памяти, совмещенной со своппингом страниц.

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

программа может выполняться CPU, когда часть страниц находится в
основной памяти, а часть — во внешней.

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

Для учёта распределения страниц между внешней и основной памятью каждая
строка таблицы страниц дополняется битом местонахождения страницы.
Valid/invalid bit.



























15





В том случае, если процессор пытается использовать страницу, помеченную
значением invalid, возникает событие, называемое страничная
недостаточность (paging fault).

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







свободная рамка







На рисунке показаны основные этапы обработки события страничная
недостаточность.

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

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

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

требуемая страница загружается в выбранную страничную рамку.

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

управление передается прерванному процессу

Замечание 1: метод страничирования по запросу позволяет начать
выполнение процесса даже в том случае, когда ни одна страница этого
процесса не загружена в основную память.

Замечание 2: вторичная память, используемая при страничировании по
запросу — это высокоскоростное дисковое устройство, часто называемое
swap — оборудованием (device), а часть используемого дискового
пространства — swap — пространство (swap space).

4.2. Замещение страниц.

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

Метод замещения страниц означает, что в основной памяти выбирается
наименее важная/используемая страница, называется страница — жертва
(victim page), которая временно перемещается в swap space, а на её место
загружается страница, вызываемая страничной недостаточностью.

Обработка страничной недостаточности с учетом замещения осуществляется
по следующему алгоритму:

определяется местонахождение страницы путем анализа бита местонахождения

если значение бита invalid, то разыскивается свободная страничная рамка.

если имеется свободная страничная рамка, то она используется.

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

страница — жертва перемещается в swap space и редактируется таблица
страниц.

требуемая страница загружается на место страницы — жертвы и
соответствующим образом редактируется таблица страниц.

Управление передается прерванному процессу. Приведенный алгоритм
замещения требует двухстраничных перемещений.

страница — жертва перемещается в swap space.

требуемая страница перемещается в освободившуюся страничную рамку.

Страницу — жертву можно не копировать в swap space в том случае, если
за время, прошедшее от последнего перемещения её содержимое не
модифицировалось. В этом случае время замещения уменьшается примерно
вдвое.

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

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

алгоритм распределения страничных рамок (from allocation algorithm).

алгоритм замещения страниц (page replacement algorithm).

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

Алгоритм замещения страниц решает, какую из страниц выбрать в качестве
жертвы.

4.3.1. FIFO.

Наиболее простым алгоритмом замещения страниц является алгоритм FIFO.
Этот алгоритм ассоциирует с каждой страницей время, когда эта страница
была помещена в память. Для замещения выбирается наиболее старая
страница.

Учет времени необязателен, когда все страницы в памяти связаны в
FIFO-очередь, а каждая помещаемая в память страница добавляется в хвост
очереди.





























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

4.3.2. Оптимальный алгоритм.

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

4.3.3. LRU — алгоритм (least recently used)

Алгоритм выбирает для замещения ту страницу, на которую не было ссылки
на протяжении наиболее длинного периода времени. Least recently used
ассоциирует с каждой страницей время последнего использования этой
страницы. Для замещения выбирается та страница, которая дольше всех не
использовалась. Этот алгоритм наиболее часто используется в системах
страничирования по запросу. Обычно применяется два подхода при внедрении
этого алгоритма.

подход на основе логических часов (счетчика)

подход на основе стека номеров страниц



ассоциируют с каждой строкой таблицы поле “время использования” а в CPU
добавляются логические часы. Логические часы увеличивают своё значение
при каждом обращении к памяти. Каждый раз, когда осуществляется ссылка
на страницу, значение регистра логических часов копируется в поле “время
использования”. Заменяется страница с наименьшим значением в отмеченном
поле путем сканирования всей таблицы страниц. Сканирование отсутствует
при использовании подхода на основе стека.

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

W

Теория операционных систем



W



Автор И.А.Чмырь Подготовил Д.С.Холод



Аппаратура

Операционная система

Прикладные программы

Пользователь № 4

Пользователь № 3

Пользователь № 2

Пользователь № 1

БД

текст. ред.

ассемблер

компилятор

4

3

2

1

периферийная

часть

центральная

часть

аппаратура

взаимодействие с прикладными

программами и пользователем

автоматическое распределение ресурсов

Прикладные программы

ожидание

ввода - вывода

выход

принят

завершение ввода - вывода

Ожидаемый

прерывание

отсылка планировщика

Готовый

Выполняемый

Завершенный

Новый

прерывание.

сохраняется состояние П1 в PCB1, активизируется PCB2

прерывание.

сохраняется состояние П3 в PCB3, активизируется PCB1

прерывание.

сохраняется состояние П2 в PCB2, активизируется PCB3

Указатель

OUT

Указатель

IN

приоритет

интерактивные

(“редактируемые”)

интерактивные (“чистые”)

системные

процессы

пакетные

процессы

студенческие

процессы

2

1

0

q=8 ms

q=16 ms

FCFS

б

а

0

операционная система

программа пользователя

свободный участок

оверлейная область

операционная система

корневой сегмент

0

а

б

корневой сегмент

а

оверлейный сегмент

№ 3

б

оверлейный сегмент

№ 2

б

оверлейный сегмент

№ 1

б

операционная система

программа пользователя

фрагмент

CPU

Регистр

границы a

б

а

0

операционная система

раздел № 1

0

а

раздел № 2

б

раздел № 3

в

П31

П21

П11

П31

П21

П11

П31

П21

П11

входные очереди к разделам

Очередь процессов в перемещаемых адресах

операционная система

раздел № 1

0

а

раздел № 2

б

в

П3

П2

П1

Регистр

границы б

Регистр

границы a

CPU

операционная система

раздел N

б

а

0

раздел № 2

раздел № 1

операционная система

0

а

операционная система

раздел № 1

0

а

раздел № 2

Страничная рамка

f

Основная память

Д

f

f

Таблица страниц

CPU

П

Д

Логический адрес

f

П

f

Д









П f















матрица ассоциативных регистров

Таблица страниц

f

Страничная рамка

f

Основная память

Д

f

CPU

П

Д

Логический адрес

сегмент

base

ошибка адреса

(смещение выходит за границу сегмента)

нет

да

+


base

limit

таблица сегментов

CPU

S

d

d

1

6

5

4

страница

3

ОС

2

i

таблица

страниц

load M

CPU

поток ссылок на страницы

страничные рамки. 11 замещений, 14 ссылок



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.