Новости
Главная / 2ИСиП / Лекция № 4. УПРАВЛЕНИЕ РЕСУРСАМИ

Лекция № 4. УПРАВЛЕНИЕ РЕСУРСАМИ

4.1 Понятие ресурса

Концепция процесса преследует цель выработки механизма распределения и управления ресурсами. При разработке первых систем ресурсами считались:

  • процессорное время,
  • память,
  • каналы ввода-вывода,
  • периферийные устройства.

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

Рис. 4.1. Классификация ресурсов

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

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

4.2 Способы управления памятью

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

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

Многозадачность вносит проблему переадресации. Во время компоновки программы компоновщик должен знать, с какого адреса будет начинаться программа в памяти. На рис. 4.2 показаны разделы памяти, используемые различными процессами, стоящими на очередь для обработки в пакетном режиме. Допустим, что в данном примере операционная система занимает адресное пространство 0-100К в памяти компьютера.

Предположим, что первая команда программы представляет собой вызов процедуры с абсолютным адресом 100 внутри двоичного файла, создаваемого компоновщиком. Если эта программа загрузится в раздел 1 (по адресу 100К), команда обратится к абсолютному адресу 100, принадлежащему операционной системе. А нужно вызвать процедуру по адресу 100К+100. Если же программа загрузится в раздел 2, команду нужно переадресовать по адресу 200К+100 и т.д. Эта проблема известна как проблема переадресации.

Одним из возможных решений является модификация команд во время загрузки программы в память. В программе, загружаемой в раздел 1, к каждому адресу прибавляется значение 100К, в программе, которая попадет в раздел 2, к адресам добавляется значение 200К и т.д. Чтобы выполнить подобную переадресацию во время загрузки, компоновщик должен включить в двоичную программу список или битовую карту с информацией о том, какие слова в программе являются адресами (их нужно перераспределить), а какие – кодами машинных команд, которые не нужно изменять. Так работает операционная система OS/MFT.

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

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

В операционной системе Windows существует файл подкачки, в котором временно сохраняются процессы, для которых не хватает места в оперативной памяти компьютера. Имеется возможность настроить режим работы этого файла. Для этого необходимо открыть «Панель управления > Производительность и обслуживание > Система > Дополнительно > Быстродействие (параметры) > Дополнительно > Виртуальная память > Изменить». Если на компьютере с объемом оперативной памяти 512 Мбайт установлена операционная система Windows XP, то, в принципе, можно обойтись без файла подкачки вообще – это только повысит быстродействие системы. Если объем оперативной памяти меньше этой величины, рекомендуется установить одинаковый исходный и максимальный размер файла подкачки.  Тем самым, можно снизить фрагментацию диска и избавиться от распространенной проблемы, когда из-за разросшегося файла подкачки на диске не хватает места. Теперь он будет занимать фиксированный размер, и распределить место на диске будет гораздо проще. Вполне приемлемая цифра – размер файла подкачки в 2-4 раза больше объема физической оперативной памяти компьютера.

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

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

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

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

Например, программа размером 512 Мбайт сможет работать на машине с объемом памяти 256 Мбайт, если тщательно продумать, какие 256 Мбайт должны находиться в памяти в каждый момент времени. При этом по мере необходимости части программы, находящиеся на диске, будут меняться местами с частями в памяти.

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

Адреса виртуальной памяти формируются программным путем с использованием для этой цели специальных регистров (базовых или сегментных). Программно формируемые адреса, называемые виртуальными, образуют виртуальное адресное пространство. На компьютерах без виртуальной памяти виртуальные адреса подаются непосредственно на шину памяти и при чтении или записи читается или записывается слово в физической памяти с тем же самым адресом. При  применении виртуальной памяти виртуальные адреса не передаются напрямую шиной памяти. Вместо этого они направляются в блок управления памятью (Memory Management Unit, MMU), который отображает виртуальные адреса на физические адреса (рис. 4.3).

Рис. 4.3. Расположение и функции блока управления памятью (MMU)

Большинство систем виртуальной памяти опираются на прием, называемый замещение страниц (paging). Пространство виртуальных адресов разделено на единичные блоки, называемые страницами. Соответствующие блоки в физической памяти называются страничными блоками (page frame). Размер страниц и их блоков всегда одинаков. Используются размеры от 512 байт до 64 Кбайт. Передача данных между ОЗУ и диском всегда происходит постранично.

4.4 Управление устройствами ввода-вывода

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

Устройства ввода-вывода можно грубо разделить на две категории: блочные и символьные. Блочными называются устройства, хранящие информацию в виде адресуемых блоков фиксированного размера. Обычно размеры блоков варьируются от 512 до 32 768 байт. Каждый блок может быть прочитан независимо от остальных блоков. Наиболее распространенными блочными устройствами являются диски.

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

Устройства ввода-вывода, как правило, состоят из механических и электронных компонентов. Электронный компонент называется контроллером устройства, или адаптером. В персональных компьютерах он обычно имеет вид печатной платы, вставляемый в слот расширения. Механический компонент – это само устройство. Плата контроллера снабжается разъемом, к которому подключается кабель, ведущий к самому устройству.

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

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

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

Процессор взаимодействует с регистрами управления и буферами данных устройств двумя способами. Первый предполагает назначение каждому регистру номера порта ввода-вывода – 8-ми или 16-ти разрядного числа. В других компьютерах регистры ввода-вывода являются частью обычного адресного пространства памяти. Такая организация называется вводом-выводом с отображением на память. Она была впервые применена в мини-компьютере PDP-11. Каждому регистру управления назначается уникальный адрес памяти, с которым обычная память не связана. В компьютерах с процессором Pentium диапазон адресов от 640 Кбайт до 1 Мбайт зарезервирован под буферы данных устройств, а область портов ввода-вывода занимает первые 64 Кбайт.

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

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

4.5 Прерывания

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

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

Прерывания осуществляются с помощью контроллера прерываний. Количество входов этого контроллера ограничено. Например, у персональных компьютеров Pentium только 15 линий прерывания доступны для устройств ввода-вывода. Некоторые из контроллеров устаревших компьютеров встроены в материнскую плату, как, например, контроллер клавиатуры на IBM PC. У тех контроллеров, что вставляются в разъем на объединительной плате, установить соответствие между IRQ сигналом и устройством иногда можно при помощи перемычек или переключателей. Если пользователь приобретал новую карту, он был вынужден вручную устанавливать линию прерывания, чтобы избежать ее конфликта с существующими устройствами. Большинство пользователей совершало в этом ошибки, что, в конечном счете, привело к появлению механизма автоконфигурирования (Plug and Play), благодаря которому BIOS самостоятельно назначает устройствам корректные линии прерывания на этапе загрузки системы.

         Главные функции механизма прерываний следующие:

  1. распознавание прерываний;
  2. передача управления соответствующему обработчику прерываний;
  3. корректное возвращение к прерванной программе.

Прерывания бывают внешние(асинхронные) и внутренние (синхронные).

Внешние прерывания – это:

  1. прерывания от таймера;
  2. прерывания от внешних устройств (прерывания по вводу-выводу);
  3. прерывания по нарушению питания;
  4. прерывания с пульта оператора вычислительной системы;
  5. прерывания от другого процессора или другой вычислительной системы.

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

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

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

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

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

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