Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ОС_Методические указания

.pdf
Скачиваний:
38
Добавлен:
11.03.2016
Размер:
378.26 Кб
Скачать

Министерство образования Российской Федерации Казанский государственный технологический университет Нижнекамский химико-технологический институт

ОПЕРАЦИОННЫЕ СИСТЕМЫ

Методические указания к лабораторным работам

Казань 2000

Составитель: канд. физ.-мат. наук. Н.Н.Саримов Операционные системы: Метод. указ. к лаб. работам / Казан. матем. общ-во; Сост.

Н.Н.Саримов. Казань, 2000.

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

Методические указания предназначены для лабораторного обеспечения курса «Операционные системы» по специальности 220200 - «Автоматизированные системы обработки информации и управления».

Подготовлены на кафедре автоматизации технологических процессов и производств Нижнекамского химико-технологического института.

Печатаются по решению методической комиссии Нижнекамского химикотехнологического института.

Рецензенты: проф. И.З.Батыршин, доц Е.М.Федотов

ВВЕДЕНИЕ

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

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

прикладные;

системные.

Всвою очередь, в системных программах можно условно выделить два уровня:

средства и услуги (компиляторы, загрузчики, редакторы, служебные программы);

операционная система (ОС).

Среди функций ОС можно отметить следующие основные функции:

последовательное или параллельное выполнение программ;

управление информацией (структурирование, обеспечение сохранности, использование имен, ввод-вывод);

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

Другими словами, ОС предназначена для выполнения всей рутинной работы по управле-

нию аппаратурными и программными средствами ИВС.

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

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

1.номер и тема лабораторной работы;

2.для каждого задания:

2.1.номер задания и постановка задачи;

2.2.подробное описание метода (алгоритма) решения задачи;

2.3.внешние спецификации разработанных для данной задачи процедур и функций;

2.4.исходные тексты процедур и функций;

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

3.1.исходные тексты процедур и функций в виде файлов;

-3 -

3.2.набор тестов для проверки правильности работы алгоритмов;

3.3.результаты тестирования;

4.выводы.

Методические указания составлены на основе монографий [2;4].

- 4 -

РАБОТА 1. ПОСЛЕДОВАТЕЛЬНОЕ ВЫПОЛНЕНИЕ ПРОГРАММ

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

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

Определение 1.1

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

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

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

Определение 1.2

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

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

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

1.1. ПРОЦЕДУРЫ. АКТИВНОСТЬ. КОНТЕКСТ

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

Определение 1.3

Активностью называют состояние непрерывного выполнения одной процедуры.

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

Определение 1.4

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

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

- 5 -

Вызов процедуры и возврат из процедуры

Пусть процедура P ( вызывающая ) вызывает выполнение процедуры Q ( вызываемой ). Вызов осуществляется с помощью последовательности действий, которая включает следующие этапы:

подготовка параметров, передаваемых из P в Q;

сохранение части контекста P до возврата из процедуры;

замена контекста P на контекст Q.

Для возврата схема симметрична, но с потерей контекста Q:

подготовка результатов, возвращаемых из Q в P;

восстановление контекста P, сохраняемого при вызове.

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

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

Пусть P и Q - сопрограммы, имеющие вид:

Листинг 1.1

 

 

 

coroutine P;

coroutine Q;

begin

procedure q1;

---

---

restart Q;

restart P;

---{точка 1}

---{точка 2}

restart Q;

return;

---

end q1;

end P

begin

 

---

 

call q1;

 

---

 

end Q

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

Допустим, в данном примере выполнение начинается с сопрограммы P. Первая инструкция restart Q производит первый вызов сопрограммы Q, где вызывается процедура q1. В процедуре q1 выполняется инструкция restart P, которая прерывает работу сопрограммы Q, восстанавливает контекст сопрограммы P и продолжает ее работу с точки 1. Пока все действия были аналогичны вызову процедуры и возврату из нее, за исключением того, что здесь контекст сопрограммы Q при возврате в P не теряется, а сохраняется. Далее, вторая инструкция restart Q восстанавливает контекст процедуры q1 и продолжает ее работу с точки 2.

1.2.МЕХАНИЗМ ПОСЛЕДОВАТЕЛЬНОГО ВЫЗОВА ПРОЦЕДУР

Вкачестве используемой структуры данных применяется стек выполнения. Возможны разные варианты стека, отличающиеся в основном деталями спецификаций контекста и его изменениями при вызове процедуры и возврате из нее. Общим у них является принцип LIFO (Last In First Out - последним вошел, первым вышел) организации хранения данных и доступа к ним.

Впростейшем случае стек состоит из сплошного участка памяти для хранения данных и указателя вершины (УВ), указывающего на начало свободного участка в стеке (рис. 1.1):

-6 -

Свободно

Занято

УВ

Рис. 1.1. Простейший стек

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

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

Свободно

Занято Занято

УБ УВ

Рис. 1.2. Стек с указателем базы

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

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

параметры процедуры передаются по значению, при возврате передается последний результат;

процедуры могут вызываться рекурсивно (явно или неявно).

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

Пусть выполняется процедура P, которая вызывает процедуру Q, тогда содержимое стека выполнения до и после вызова будет таким, как представлено на рис. 1.3.

Свободно

(выполняется P до вызова Q)

 

Среда P

 

УВ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

УБ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Свободно

(после вызова Q)

 

 

 

 

 

 

 

Среда P

 

Среда Q

 

 

 

 

 

УВ

 

 

 

 

УБ

 

 

Рис. 1.3. Стек выполнения

Среда содержит следующую информацию:

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

фактические параметры (n+1 ячеек, в первой из которых содержится число n, а в последующих

-значения n параметров;

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

-7 -

При вызове процедуры и возврате из нее выполняются следующие операции:

1.выделить в стеке зону для среды:

ВРЕМ:=УБ;

УБ:=УВ;

УВ:=УВ+РАЗМЕР СРЕДЫ;

2.сохранить информацию для возврата:

ПРЕДЫДУЩАЯ БАЗА:=ВРЕМ;

РАЗМЕСТИТЬ АДРЕС ВОЗВРАТА;

3.разместить параметры;

4.выполнить переход к выполняемой процедуре.

При вызове возврате из процедуры последовательность операций будет следующей:

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

2.восстановить информацию возврата и очистить среду:

ВРЕМ:=АДРЕС ВОЗВРАТА;

ВЕРШИНА:=БАЗА;

БАЗА:=ПРЕДЫДУЩАЯ БАЗА;

3.возврат:

ПЕРЕХОД *ВРЕМ { неявный переход по адресу}.

Возможное сохранение и восстановление регистров осуществляется вызывающей проце-

дурой.

1.3. ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

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

function push_word(rec:word):boolean;

Назначение: Занести запись rec в стек.

Входные параметры:

rec - запись длиной в слово, заносимая в стек.

Выходные параметры: нет. Выдаваемые значения:

true - операция завершилась успешно, false - стек переполнен, операция прервана.

function pop_word(var rec:word):boolean;

Назначение: Извлечь запись из стека.

Входные параметры: нет Выходные параметры:

rec - запись длиной в слово, извлекаемая из стека.

Выдаваемые значения:

true - операция завершилась успешно, false - стек пуст, операция прервана.

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

function push_record(const rec; n:integer):boolean;

Назначение: Занести запись rec в стек.

Входные параметры:

- 8 -

rec - запись длиной n байт, заносимая в стек; n - длина записи в байтах.

Выходные параметры: нет. Выдаваемые значения:

true - операция завершилась успешно, false - стек переполнен, операция прервана.

function pop_record(var rec; m:integer):integer;

Назначение: Извлечь запись из стека.

Входные параметры:

m - максимальная длина буфера rec байтах.

Выходные параметры:

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

Выдаваемые значения:

«0» - стек пуст, операция прервана;

«-1» - длина m буфера оказалась недостаточной для размещения извлекаемой записи; положительное значение является длиной извлеченной записи в случае успешного завершения операции.

3. Листинг 1.2 содержит программу на языке Pascal, выдающую содержимое указателя вершины стека SP до вызова процедуры p1 и во время ее активности. Наберите и выполните эту программу. Модифицируйте эту программу для вложенных вызовов процедур, для процедур с локальными переменными и процедур с формальными параметрами. Проанализируйте результаты и ответьте на следующие вопросы:

Как функционирует стек выполнения, в какую сторону идет его заполнение?

Что включает в себя среда процедуры в Turbo Pascal?

Листинг 1.2

program Example1; const

StackPtr:word=0;

procedure p1;{процедура без параметров

и локальных переменных}

begin

asm

mov StackPtr,SP

end;

WriteLn('УВ в процедуре p1:',StackPtr);

end;

begin

asm

mov StackPtr,SP

end;

WriteLn('УВ в главной процедуре:', StackPtr); p1;{--вызов p1}

asm

mov StackPtr,SP

end;

WriteLn('УВ после вызова процедуры p1:',

- 9 -

StackPtr);

end.

4.Проверьте, пригоден ли стек выполнения как средство для реализации механизма функционирования сопрограмм? Если нет, разработайте такие средства.

- 10 -