Основными функциями операционной системы являются разработка программ

Функции операционных систем подробно раскрыты в данной статье.

Операционные системы относятся к системному программному обеспечению.

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

  • Прием от пользователя (или от оператора системы) заданий, или команд, сфор­мулированных на соответствующем языке, и их обработка. Задания могут пе­редаваться в виде текстовых директив (команд) оператора или в форме указа­ний, выполняемых с помощью манипулятора (например, с помощью мыши). Эти команды связаны, прежде всего, с запуском (приостановкой, остановкой) программ, с операциями над файлами (получить перечень файлов в текущем каталоге, создать, переименовать, скопировать, переместить тот или иной файл и др.), хотя имеются и иные команды.
  • Загрузка в оперативную память подлежащих исполнению программ.
  • Распределение памяти, а в большинстве современных систем и организация виртуальной памяти.
  • Запуск программы (передача ей управления, в результате чего процессор ис­полняет программу).
  • Идентификация всех программ и данных.
  • Прием и исполнение различных запросов от выполняющихся приложений. Операционная система умеет выполнять очень большое количество системных функций (сервисов), которые могут быть запрошены из выполняющейся про­граммы. Обращение к этим сервисам осуществляется по соответствующим пра­вилам, которые и определяют интерфейс прикладного программирования (Ap­plication Program Interface, API) этой операционной системы.
  • Обслуживание всех операций ввода-вывода.
  • Обеспечение работы систем управлений файлами (СУФ) и/или систем управ­ления базами данных (СУБД), что позволяет резко увеличить эффективность всего программного обеспечения.
  • Обеспечение режима мультипрограммирования, то есть организация параллель­ного выполнения двух или более программ на одном процессоре, создающая видимость их одновременного исполнения.
  • Планирование и диспетчеризация задач в соответствии с заданными стратеги­ей и дисциплинами обслуживания.
  • Организация механизмов обмена сообщениями и данными между выполняю­щимися программами.
  • Для сетевых операционных систем характерной является функция обеспече­ния взаимодействия связанных между собой компьютеров.
  • Защита одной программы от влияния другой, обеспечение сохранности дан­ных, защита самой операционной системы от исполняющихся на компьютере приложений.
  • Аутентификация и авторизация пользователей (для большинства диалоговых операционных систем). Под аутентификацией понимается процедура проверки имени пользователя и его пароля на соответствие тем значениям, которые хра­нятся в его учетной записи’. Очевидно, что если входное имя (login^) пользовате­ля и его пароль совпадают, то, скорее всего, это и будет тот самый пользователь. Термин авторизация означает, что в соответствии с учетной записью пользова­теля, который прошел аутентификацию, ему (и всем запросам, которые будут идти к операционной системе от его имени) назначаются определенные права (привилегии), определяющие, что он может, а что не может делать на компьютере.
  • Удовлетворение жестким ограничениям на время ответа в режиме реального времени (характерно для операционных систем реального времени).
  • Обеспечение работы систем программирования, с помощью которых пользова­тели готовят свои программы.
  • Предоставление услуг на случай частичного сбоя системы. Операционная система изолирует аппаратное обеспечение компьютера от приклад­ных программ пользователей. И пользователь, и его программы взаимодействуют с компьютером через интерфейсы операционной системы.

Источник: neudoff.net

Основные функции операционных систем. Классификация операционных систем

Назначение и функции операционных систем

4. Перечислите и поясните основные функции ОС, которые связаны с управлением задачами. Какие дисциплины диспетчеризации вы знаете?

1.) создание и удаление задач (создание и удаление задач осуществляется по соответствующим запросам от пользова-телей или от самих задач. Задача может породить новую задачу. При этом между процессами появляются «родственные» отношения. Порождающая задача называ-ется «предком», «родителем», а порожден-ная – «потомком», «сыном» или «дочерней задачей». «Предок» может приостановить или удалить свою дочернюю задачу, тогда как «потомок» не может управлять «предком»);

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

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

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

3.) синхронизация задач, обеспечение их средствами коммуникации.

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

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

Основные стратегии планирования:

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

2.) оказание предпочтения более коротким процессам;

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

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

Когда говорят о краткосрочном плани-ровании (диспетчеризации), то всегда в явном или неявном виде имеют ввиду понятие задачи (потока). Если ОС не поддерживает механизм тредов, то можно заменить понятие задачи понятием процесса.

Читайте также:
Программа для Андроид как достать соседа

discipl-dispetcher

Различают 2 больших класса дисциплин диспетчеризации: бесприоритетные и приоритетные.

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

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

Приоритеты имеют следующие свойства:

1.) приоритет, присвоенный задаче, может являться величиной постоянной (статичес-кий приоритет);

2.) приоритет задачи может изменяться в процессе ее решения (динамический приоритет).

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

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

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

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

Дисциплина FCFS (first come – first served) –

discipl-dispetcher2

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

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

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

Дисциплина обслуживания SJN (Shortest Job Next) – предполагает, что следующим будет выполняться кратчайшее задание. Для ее реализации необходимо, чтобы для каждого задания была известна оценка в потребностях машинного времени. Необходимость сообщать ОС характерис-тики задач, в которых описывались бы потребности в ресурсах вычислительной системы, привела к тому, что были разработаны соответствующие языковые средства. Одним из наиболее известных был, в частности, язык управления заданиями JCL (Job Control Language).

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

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

Для устранения этого недостатка была предложена дисциплина, описанная ниже:

Дисциплина SRT (Shortest Remaining Time) – следующим будет выполняться задание, требующее наименьшего времени для своего завершения.

Итоги описанных выше дисциплин:

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

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

Для решения подобных проблем исполь-зуется дисциплина обслуживания, называ-емая RR (Round Robin, круговая, карусель-ная), и приоритетные методы обслуживания.

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

discipl-dispetcher3

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

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

В своей простейшей реализации дисциплина карусельной диспетчеризации предполагает, что все задачи имеют одинаковый приоритет. Если же необходимо ввести механизм приоритетного обслуживания, то это, как правило, делается за счет организации нескольких очередей. Процессорное время будет предоставляться в первую очередь тем задачам, которые стоят в привилегированной очереди. Если она пуста, то диспетчер задач начнет просматривать остальные очереди. Именно по такому алгоритму действует диспетчер задач в операционных системах OS/2 и Windows NT.

Читайте также:
Как пользоваться программой settings

Диспетчеризация с использованием динамических приоритетов:

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

Механизм динамических приоритетов в ОС Unix:

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

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

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

Схема нумерации (числовых значений) текущих приоритетов различна для различных версий UNIX.

Рассмотрим частный случай, когда текущий приоритет процесса варьируется в диапазоне от 0 (низкий приоритет) до 127 (наивысший приоритет). Процессы, выполняющиеся в режиме задачи, имеют более низкий приоритет, чем в режиме ядра. Для режима задачи приоритет меняется в диапазоне 0–65, для режима ядра – 66–95 (системный диапазон). Процессы, приоритеты которых лежат в диапазоне 96 –127, являются процессами с фиксированным приоритетом, не изменяемым операционной системой, и предназначены для поддержки приложений

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

Нет похожих постов.

Источник: msbro.ru

Основные функции операционных систем, сред и оболочек

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

— управление распределением ресурсов вычислительной системы для обеспечения ее эффективной работы; ОС является менеджером ресурсов;

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

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

Рисунок 1.1 — ОС в организации вычислительного процесса

ОС как менеджер ресурсов должна обеспечивать:

— загрузку пользовательских программ в оперативную память;

— выполнение этих программ путем организуя работу процессора;

— работу с устройствами долговременной памяти, такими как магнитные диски, лен­ты, оптические диски и т.д. (как правило, ОС управляет свободным пространством на этих носителях и структурирует пользовательские данные.);

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

При этом в современных вычислительных системах реализуются следующие возможности:

— параллельное (или псевдопараллельное, если машина имеет только один процессор) исполнение нескольких задач;

— распределение ресурсов компьютера между задачами;

— организация взаимодействия задач друг с другом;

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

— организация межмашинного взаимодействия и разделения ресурсов;

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

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

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

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

— пользовательском, предназначенном для работы с готовыми приложениями; это все интерфейсные средства в диапазоне от командной строки до развитых гра­фических оболочек;

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

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

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

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

— работа с дисками (просмотр дерева каталогов, получение информации о состоя­нии диска, форматирование дисков);

— работа с файлами и каталогами (создание, просмотр содержимого, копирование, перенос, переименование, удаление, изменение атрибутов файлов и каталогов; ре­дактирование текстовых файлов; создание архивов);

Читайте также:
Программа фотошоп обнаружила ошибку в драйвере монитора как исправить

— дополнительные возможности (подключение к сети, создание пользовательских меню, подключение внешних редакторов и др.).

В соответствии со способом представления объектов оболочки можно разделить на два класса:

— графические, где используются визуальные средства представления (иконки, пиктограммы) и технология манипулирования объектами путем «перетаскивания»;

— неграфические (текстовые), где объекты представлены именами и обрабаты­ваются посредством команд, систем меню и горячих клавиш.

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

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

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

Классическим и наиболее известным представителем неграфических оболочек является Norton Commander — оболочка для ОС MS DOS, принципы построения и функ­ционирования которой легли в основу построения последующих оболочек. В настоя­щее время для ОС Windows в основном используются оболочки Far Manager и Total Commander, которые постоянно развиваются.

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

Здесь из популярных текстовых оболочек можно назвать, например, Midnight Commander. Работа с графическими оболочками реализуется несколько иначе, чем в Windows. Подсистема графического интерфейса имеет два компонента. Первый представлен модулем X-server, входящим в ядро ОС.

Второй компонент являет собой ряд приложений («менеджеров окон») под общим наименованием X-client; каждое из которых может взаимодействовать с X-servercM по протоколу TCP/IP. Совокупность «X- server + X-client» образует подсистему графического интерфейса, реализующую графическую оболочку. Вариант последней зависит от вида X-client; популярны, например, менеджеры kDe, Gnome, Afterstep и др.

— Наиболее совершенной в плане предоставления пользователю удобств посредством операционных оболочек является операционная система MacOS, располагающая одновременно всеми видами оболочек. Так, система имеет встроенную поддержку графического интерфейса. Для удобства работы профессионалов в версии X имеется юниксоподобная консоль. Также имеется встроенная оболочка Finder, объеди­няющая в себе основные черты Norton-подобных оболочек и графический интерфейс и системы меню Windows.

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

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

Очевидно, что операционные оболочки являются компонентами операционной среды.

В такой трактовке примерами операционных сред могут служить следующие:

ОС Windows + Delphi + вспомогательные средства — операционная среда разработчика прикладных приложений;

ОС Windows+Adobe Photoshop + Adobe Illustrator + Macromedia Dreamweaver + Internet Explorer + вспомогательные средства — операционная среда WEB-разработчика;

ОС FreeBSD + WEB-сервер Apache + сервер СУБД MySQL + интерпретатор PHP + программы защиты + вспомогательные средства — операционная среда для создания приложений, работающих на стороне сервера.

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

Так, для ОС Unix существует ряд приложений, например, WINE, которые позволяют в некоторой степени эмулировать интерфейс прикладного программирования WIN32API и, таким образом, позволяют запускать некоторые приложения, разработанные для ОС Windows. Однако практическая значимость такой деятельности невелика.

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

Для ОС Windows в период с 1995 года и практически до настоящего времени име­ла место ситуация, когда 32-разрядные ОС путем эмуляции предшествующих, 16- разрядных, позволяли создать соответствующие операционные среды и, таким образом, работать с приложениями, написанными для старших ОС.

Такая эмуляция более старого программного обеспечения обеспечивает совместимость более ранних версий ОС с более поздними. Например, Windows 95/98 позволяли запускать программы для MS DOS.

Для Windows 2000/XP эта возможность тоже есть, но играет весьма незначитель­ную роль, а с выходом обновления и дополнения Service Pack 2 к Windows XP при установке последнего она вообще убирается. Это объясняется появлением летом 2005 г. 64-разрядной ОС WINXP64E, в связи, с чем все ныне функционирующее программное обеспечение переводится в статус legacy (Legacy — термин, используемый для обозначения программного обеспечения, которое объявляется устаревшим, но допустимым к эксплуатации без соответствующих на то гарантий), а предшествующее legacy должно прекратить свое существование.

Воспользуйтесь поиском по сайту:

Источник: studopedia.org

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru