Logo GenDocs.ru

Поиск по сайту:  


Загрузка...

Ответы на вопросы к зачету по ОВП - файл ОВП.doc


Ответы на вопросы к зачету по ОВП
скачать (19.7 kb.)

Доступные файлы (1):

ОВП.doc103kb.13.01.2007 03:02скачать

содержание
Загрузка...

ОВП.doc

Реклама MarketGid:
Загрузка...
1. Понятие процесс. Создание и завершение процессов.

Существует много определений процесса, например:

1.Выполняющаяся программа;

2.Экземпляр процесса выполняющегося на компьютере;

3.Объект, который можно идентифицировать и выполнять на процессоре.

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

Процесс делится на 3-и компонента:

1.Выполняющаяся программа.

2.Данные, необходимые для работы.

3.Контекст выполняющейся программы (информация, необходимая ОС для управления процессом)

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


2. Состояния процессов.

1.Выполняющийся.

2.Готов к выполнению.

3.Блокированные. Процесс, который не может выполнятся пока не произойдет какое-то событие.

4.Новый. Процесс, который только что создан ОС и еще не помещён в список выполняющихся процессов.

5.Завершаеющейся. Процесс, удалённый ОС из списка выполняющихся процессов.

Продолжение – стр 4


3. Приостановленные процессы.

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

- он не м/б запущен в данный момент времени.

- процесс может ожидать какое-либо событие.

- приостанавливается самостоятельно, ОС или родительским процессом.

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


4. Местоположение процесса.

Информация о каждом процессе находится в управляющем блоке процессов.


5. Атрибуты процессов.

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

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

2.Информация по состоянию процесса (информация о регистрах доступных пользователю, управляющих регистрах и регистрах состояния)

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


6. Принципы параллельных вычислений.

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

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

При распараллеливании вычислений, возникают следующие трудности:

1.Разделение глобальных ресурсов.

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

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


7. Взаимодействие процессов.

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

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

2.Процессы косвенно осведомлены о наличии друг друга (они разделяют доступ к некоторому объекту).

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

а. Конкуренция процессов в борьбе за ресурсы:

Проблемы (подробнее стр 8-9)

- необходимость взаимных исключений («принтер»)

- взаимоблокировка

- голодание

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

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

Доступ к данным осуществляется в режиме чтения и записи. В этом случае вводится новое требование согласования данных.

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


8. Взаимоисключения: программный подход. Алгоритм Деккера

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


9. Взаимоисключения: аппаратная поддержка.

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

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

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

^ Инструкция проверки и установки значения Инструкция проверяет значение своего параметра i. Если i = 0, то функция заменяет его на 1 и возвращает true. Иначе значение аргумента не изменяется и функция возвращает значение false. Данная функция выполняется автономно, т.е. ее выполнение не может быть прервано.

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

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

Недостатки: пережидание занятости; возможно голодание; возможна взаимоблокировка.


10. Принципы взаимного блокирования.

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

Все взаимоблокировки предполагают наличие конфликта в борьбе за ресурс между 2мя и более процессами. ^ Ресурсы: повторно используемые; расходуемые.

Условия осуществления взаимоблокировок:

- взаимное исключение

- удержание и ожидание

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

- циклическое ожидание.

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


11. Предотвращение взаимоблокировок.

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

Избежать взаимоисключения невозможно. Если доступ к ресурсам д.б. исключительным, то ОС должна поддерживать взаимоисключение.

^ Удержании и ожидание. Избегается, потребовав чтоб процесс запрашивал все ресурсы одновременно и блокировать процесс, пока запрос не будет полностью удовлетворён. Метод не эффективен (долгое время ожидания; ресурсы могут оставаться неиспользуемыми долгое время, когда они могли бы использоваться другими процессами; может быть неизвестно заранее какие ресурсы могут понадобиться процессу)

^ Отсутствие перераспределений. 2 пути:

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

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

^ Циклическое ожидание. Избегается путем упорядочивания ресурсов.


12. Устранение взаимоблокировок.

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

^ Имеется 2-а подхода:

- не запускать процесс, если его запросы могут привести к взаимоблокировки.

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

a. Запрещение запуска процесса

Определяются:

- вектор-ресурс, т.е. общее количество ресурсов в системе

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

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

- матрица распределения, определяет текущее распределение ресурсов.

Процесс запускается только тогда, когда : Ri ≥ C(n+1) + сумма( по n, при к=1) Cik

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

b. Запрет выделения ресурса. В каждый момент времени процесс может иметь несколько выделенных ему ресурсов или не иметь ни одного. Состояние системы представляет собой текущее распределение ресурсов по процессам. Состояние можно представить как два вектора: ресурсы и доступность. И две матрицы: требования и распределения.

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

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

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

- д/б заранее указаны максимальные требования каждого процесса;

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

- должно иметься фиксированное количество распределяемых ресурсов;

- ни один процесс не должен завершаться в состоянии захвата ресурса.


13. Обнаружение взаимоблокировок.

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

a. Алгоритм обнаружения. Используются: матрица распределения и вектор доступности, матрица запросов Q такая, что qij представляет собой количество ресурса типа j, затребованных процессом i.

Алгоритм:

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

2.Временный вектор W инициализирует значением вектора доступности.

3.Находим индекс i, такой что процесс i в настоящий момент не помечен и i строка матрицы не превышает временной интервал W. Если такой строки нет, то алгоритм прекратит свою работу.

4.Если строка имеется, то процесс i помечается и добавляется следующее условие:Wk=Wk+Aik, далее возврат к шагу №3.

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

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

b. Восстановление Подходы к решению этой проблемы:

1. Прекратить выполнение всех заблокированных процессов.

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

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

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


14. Миграция процессов. Механизм переноса процессов.

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

Причины переноса:

1.Распределение нагрузки (с более загруженной системы на менее)

2.Производительность обмена информацией

3.Работоспособность

4.Использование особых возможностей

Механизм переноса

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

^ Стратегии механизма переноса:

- интенсивная полная (переносится всё адресное пространство)

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

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

- копирование по запросу (страницы предоставляются в том случае, если на них поступил запрос)

- очистка (страницы процесса удаляются из памяти и переносятся на диск)


15. Распределенные глобальные состояния.

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

Вводим определения:

1.Канал – если два процесса обмениваются сообщениями, то между ними устанавливается канал (при обмене сообщениями 2-х процессов, считаем однонаправленным)

2.Состояние - последовательность сообщений, отправленных или принятых по всем его каналам.

3.Снимок – фиксирует состояние процесса.

4.Распределённый снимок – множество снимков каждого процесса.

Алгоритм распределения снимка

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

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

Если через какое-то время процесс P получит маркер от другого процесса R, то он запишет свое состояние от момента записи своего предыдущего состояния Sp до момента получения маркера от процесса R.

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

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


16. Распределенные взаимоисключения.

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

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

^ Свойства полностью распределенного алгоритма:

- каждый узел обладает одинаковым количеством информации;

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

- за принятие конечного решения все узлы отвечают в равной мере;

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

- в системе нет общих часов по которым можно координировать события.

b. Упорядочение событий в распределенной системе. Нам хотелось бы иметь возможность определить какое из событий произошло раньше: событие A в системе I или событие B в системе J. Данная формулировка не является точной по 2м причинам: между самим событием и его наблюдением в др. системах может возникнуть задержка и из-за отсутствия синхронизации возникает рассогласованность в локализации часов, установленная в разных системах.

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

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

В алгоритме 2 структуры данных:

- маркер (передается от одного процесса к другому) является массивом, в каждом элементе которого записана временная метка, соответствующая времени, когда маркер побывал в процессе Pk.

- массив запросов, в j-м элементе которого записана временная метка, соответствующая моменту получения запроса от процесса Pj.

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

В противном случае процесс рассылает всем другим процессам запрос с временной меткой и ждет пока другой процесс не пришлет ему маркер. Процесс Pj просматривает массив запросов в порядке: j+1, j+2,…,1,2,…,j-1 пока не найдет элемент k, в котором временная метка последнего запроса больше, чем k-e значение маркера.


17. Распределенная взаимоблокировка.

Виды распределенных взаимоблокировок:

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

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

a. Взаимоблокировка, связанная с распределением ресурсов (предотвращение; выявление)

2-а метода предотвращения:

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

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

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

^ Существуют методы, в которых предварительные сведения не нужны:

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

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

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

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

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

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

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

- иерархичное управление (узлы организованы в древовидную структуру)

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

b. Взаимоблокировки, возникающие при обмене сообщениями,

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

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


18. Сети массового обслуживания.

a. Вероятностный подход к исследованию вычислительных систем. Рассмотрим как 3-и класса недетерминированных процессов:

1.Пр-сы на входе ВС, к-е порождают заявки на выполнение опред-х программ.

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

3.Обслуживание заявок устройства.

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

^ Центр обслуживания – СМО, состоящая из A одинаковых устройств и буфера C.

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

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

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

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

Алгоритм

Поступающие сообщения с вероятностью a0 обслуживаются на первом этапе с вероятностью b0=1-a0. Длительность обслуживания считается равной 0.

После окончания обслуживания на i-м этапе, сообщение с вероятностью ai поступает на i+1 этап, либо с вероятностью bi=1-ai обслуживается на i-м этапе.

В зависимости от типа распределения, определяем функцию распределения.

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

^ Дисциплины обслуживания

- бесприоритетные – FCFS.

- приоритетные – LCFS

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

- обслуживание без ожидания IS (приборов больше, чем сообщений в данном центре)


Скачать файл (19.7 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации
Рейтинг@Mail.ru