Учебно-практическое пособие Москва 2009

Вид материалаУчебно-практическое пособие

Содержание


Рис. 2.5. Пример многозадачности
Таблица 2.1. Свойства трех программ-примеров
Тип задания
Требуемая память
Требуется ли терминал
Требуется ли принтер
Использование процессора
Использование диска
Затраченное время
Среднее время отклика
Системы, работающие в режиме разделения времени
Основная цель
Источник указаний операционной системе
2.3. Основные достижения
Управление памятью
Изоляция процессов
Автоматическое размещение и управление
Поддержка модульного программирования
Защита и контроль доступа
Долгосрочное хранение
...
Полное содержание
Подобный материал:
1   2   3   4   5   6   7   8

Р
ис. 2.5. Пример многозадачности


Приведем простой пример, иллюстрирующий преимущества многозадачности. Рассмотрим компьютер, имеющий 256 К слов памяти, не используемых операционной системой, диск, терминал и принтер. На обработку одновременно приняты три программы, JOB1, JOB2 и JOB3, атрибуты которых перечислены в табл. 2.1. Предположим, что для выполнения заданий JOB2 и JOB3 использование процессора минимально, и задание JOB3 постоянно обращается к диску и принтеру. В простой среде с пакетной обработкой эти задания выполняются последовательно. Для завершения JOB1 требуется 5 мин. Задание JOB2 должно ждать, пока пройдут эти 5 мин, после чего оно выполняется в течение 15 мин. По истечении 20 мин начинает работу задание JOB3; его выполнение заканчивается через 30 мин после того, как оно было принято на обработку. Средний процент использования ресурсов, производительность и время отклика показаны в столбце табл. 2.2, соответствующем однозадачности, а на рис. 2.6,а показано использование различных устройств в этом режиме. Очевидно, что эффективность использования всех ресурсов, усредненная по всему периоду времени (30 мин), является крайне низкой.

Таблица 2.1. Свойства трех программ-примеров





JOB1

JOB2

JOB3

Тип задания


Интенсивные

вычисления

Интенсивный

ввод-вывод

Интенсивный

ввод-вывод

Продолжительность

5 мин

15 мин

10 мин

Требуемая память

50 К


100 К

80 К

Требуется ли диск

Нет

Нет

Да

Требуется ли терминал

Нет

Да

Нет

Требуется ли принтер

Нет

Нет

Да

Таблица 2.2. Влияние многозадачности на использование ресурсов




Однозадачность

Многозадачность

Использование процессора


22%

43%

Использование памяти

30%

67%

Использование диска

33%

67%

Использование принтера

33%

67%

Затраченное время

30 мин

15 мин

Производительность

6 заданий/час

12 заданий/час

Среднее время отклика

18 мин

10 мин

Теперь предположим, что задания выполняются одновременно под управлением многозадачной операционной системы. Из-за того что они используют разные ресурсы, их совместное выполнение на компьютере длится минимальное время (при условии, что заданиям JOB2 и JOB3 предоставляется достаточно процессорного времени для поддержки осуществляемого ими ввода и вывода в активном состоянии). Для выполнения задания JOB1 потребуется 5 мин, но к этому времени задание JOB2 будет выполнено на треть, а задание JOB3 — на половину. Все три задания будут выполнены через 15 мин. Если посмотреть на столбец табл. 2.2, соответствующий многозадачному режиму, его преимущества станут очевидны, как и из гистограммы, приведенной на рис. 2.6,б.

Р
ис. 2.6. Гистограммы использования ресурсов

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

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

Системы, работающие в режиме разделения времени

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

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

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

Таблица 2.3. Пакетная многозадачность и разделение времени




Пакетная многозадачность

Разделение времени

Основная цель


Максимальное использование процессора


Уменьшение времени отклика

Источник указаний операционной системе

Команды языка управления заданиями, помещаемые в задание

Команды, вводимые с терминала

Одной из первых операционных систем разделения времени была система CTSS (Compatible Time-Sharing System), разработанная в Массачусетском технологическом институте группой, известной как Project MAC. Первоначально система была разработана для IBM 709, а затем перенесена на IBM 7094.

По сравнению с более поздними системами, CTSS была довольно примитивна. Она работала на машине с основной памятью емкостью 32000 36-битовых слов, из которых 5000 слов занимал монитор. Когда управление должно было быть передано очередному интерактивному пользователю, его программа и данные загружались в остальные 27000 слов основной памяти. Программа всегда загружалась так, что ее начало находилось в ячейке номер 5000, что упрощало управление как монитором, так и памятью. Приблизительно через каждые 0,2 с системные часы генерировали прерывание. При каждом прерывании таймера управление передавалось операционной системе, и процессор мог перейти в распоряжение другого пользователя. Таким образом, данные текущего пользователя через регулярные интервалы времени выгружались, а вместо них загружались другие. Перед считыванием программы и данных нового пользователя программа и данные предыдущего пользователя записывались на диск для сохранения до дальнейшего выполнения. Впоследствии, когда очередь этого пользователя наступит снова, код и данные его программы будут восстановлены в основной памяти.

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


Р
ис. 2.7. Работа CTSS

Сначала монитор загружает задание JOB1 и передает ему управление (а). Затем он принимает решение передать управление заданию JOB2. Из-за того, что JOB2 занимает больше памяти, чем JOB1, сначала нужно сохранить данные JOB1, а затем можно загружать JOB2 (б). Затем для обработки загружается JOB3. Но поскольку это задание меньше, чем JOB2, часть задания JOB2 может оставаться в основной памяти, сокращая время записи на диск (в). Позже монитор вновь передает управление заданию JOB1. Чтобы загрузить его в память, на диск необходимо записать еще часть задания JOB2 (г). При загрузке задания JOB4 в памяти остается часть заданий JOB1 и JOB2 (д). Если теперь будет активизировано задание JOB1 или JOB2, то потребуется лишь частичная его загрузка. Следующим в этом примере запускается задание JOB2. Для этого требуется, чтобы JOB4 и оставшаяся в памяти часть JOB1 были записаны на диск, а в память была считана недостающая часть JOB2.

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

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

2.3. Основные достижения

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

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

Управление памятью

Лучше всего потребности пользователя удовлетворяются вычислительной средой, поддерживающей модульное программирование и гибкое использование данных. Нужно обеспечить эффективный и систематичный контроль над размещением данных в запоминающем устройстве со стороны управляющих программ операционной системы. Исходя из сформулированных требований, операционная система должна выполнять такие функции.
  • Изоляция процессов. Операционная система должна следить за тем, чтобы ни один из независимых процессов не смог изменить содержимое памяти, отведенное другому процессу, и наоборот.
  • Автоматическое размещение и управление. Программы должны динамически размещаться в памяти в соответствии с определенными требованиями. Распределение памяти должно быть прозрачным для программиста. Таким образом, программист будет избавлен от необходимости следить за ограничениями, связанными с конечностью памяти, а операционная система повышает эффективность работы вычислительной системы, выделяя заданиям только тот объем памяти, который им необходим.
  • Поддержка модульного программирования. Программист должен иметь возможность определять модули программы, а также динамически их создавать, уничтожать и изменять их размер.
  • Защита и контроль доступа. При совместном использовании памяти на каждом ее иерархическом уровне есть вероятность, что одна программа обратится к пространству памяти другой программы. Такая возможность может понадобиться, если она заложена в принцип работы данного приложения. С другой стороны, это угроза целостности программ и самой операционной системы. Операционная система должна следить за тем, каким образом различные пользователи могут осуществлять доступ к различным областям памяти.
  • Долгосрочное хранение. Многим приложениям требуются средства, с помощью которых можно было бы хранить информацию в течение длительного периода времени после выключения компьютера.

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

Виртуальная память — это устройство, позволяющее программистам рассматривать память с логической точки зрения, не заботясь о наличии физической памяти достаточного объема. Принципы работы с виртуальной памятью были разработаны, чтобы задания нескольких пользователей, выполняясь параллельно, могли одновременно присутствовать в основной памяти. При такой организации процессов нет задержки между их выполнением: как только один из процессов заносится на вспомогательное запоминающее устройство, считывается следующий процесс. Из-за различий в количестве памяти, требующемся для разных процессов, при переключении процессора с одного процесса на другой трудно компактно разместить их в основной памяти. Поэтому были разработаны системы со страничной организацией памяти, при которой процесс разбивается на блоки фиксированного размера, которые называются страницами. Обращение программы к слову памяти происходит по виртуальному адресу (virtual address), который состоит из номера страницы и смещения относительно ее начала. Страницы одного и того же процесса могут быть разбросаны по всей основной памяти. Система разбивки на страницы обеспечивает динамическое соответствие между виртуальным адресом, использующимся программой, и реальным (real address), или физическим, адресом основной памяти.

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