Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Средства оценки эффективности исполнения программыСодержание книги
Поиск на нашем сайте
Имеются средства, позволяющие выяснить, сколько времени и места требуется для выполнения программы и ее частей. Эти средства полезны для сравнения качества реализации программы на разных языках программирования или в разных версиях системы UNIX. Команда time позволяет выяснить три значения потраченного на решение указанной программы времени в секундах: реального, равного времени, замеренному по секундомеру, зависящего от количества пользователей в данный момент; пользовательского, равного времени счета программы по командам пользователя, и системного, равного времени системы при обслуживании этой программы. Команда time в Shell и в C-Shell имеет разные формы выдачи. Пример (в Shell): $ time test real 30.0 user 27.6 sys 0.5 $
Команда size показывает размер памяти в байтах трех различных частей программы: выполняемого кода (называемого текстом), области инициируемых данных и области неинициируемых данных. Пример: $ size test 1356 + 260 + 613 = 2226 b = 004265 b
Общий размер программы test равен 4265 байтов. Если имя оцениваемого файла отсутствует, подразумевается a.out. Для программы на языке C есть более тонкое средство, позволяющее получить профиль программы, показывающий для каждой подпрограммы долю времени ее выполнения в процентах (% time), суммарное время ее выполнения в секундах (cumsecs), количество ее вызовов (# call) и время, потраченное на один вызов в миллисекундах (ms/call). Для получения профиля следует перетранслировать программу с ключом -p (профиль), а после запуска программы, во время которого статистическая информация будет собрана в файле mon.out, выполнить команду prof для обработки указанного файла. Пример: $ cc -p program.c $ mv a.out program $ program $ ls mon.out program program.c $ prof program name % time cumsecs # call ms/call conv 58.6 11.38 2000 5.69 strcat 30.1 9.50 100 95.0 main 1.1 2.1 1 2.1 ..................... atoi 0.0 0.1 1 0.0
Создание процессов На самом высоком уровне абстракции система состоит из множества процессов. Каждый процесс ответственен за обеспечение служебных функций определенного характера. Любой поток может осуществить запуск процесса. Однако необходимо учитывать ограничения, вытекающие из основных принципов защиты. Обычно разработчиков программного обеспечения не заботит тот факт, что командный интерпретатор создает процессы — это просто подразумевается. Однако в большой мультипроцессорной системе вы можете пожелать, чтобы одна главная программа выполняла запуск всех других процессов вашего приложения. Рассмотрим функцию fork(). fork() — порождает процесс, являющийся его точной копией. Новый процесс выполняется в том же адресном пространстве и наследует все данные порождающего процесса. Между тем, родительский и дочерний процесс имеют различные идентификаторы процессов, так как в системе не может быть двух процессов с одинаковыми идентификаторами. Есть и еще одно отличие, это значение, возвращаемое функцией fork(). В дочернем процессе функция возвращает ноль, а в родительском процессе идентификатор дочернего процесса. Пример, использования функции fork():
printf(“PID родителя равен %d\n”, getpid()); if (child_pid = fork()) { printf(“Это родитель, PID сына %d\n”, child_pid); } else { printf(“Это сын, PID %d\n”, getpid()); }
Задание на выполнение
ЛАБОРАТОРНАЯ РАБОТА №2 «Разработка программы моделирующей различные механизмы планирования заданий» Цель работы
Изучение механизмов планирования заданий
Диспетчеризация потоков
В настоящее время обязательным условием, предъявляемым к операционным системам, претендующих на применение многозадачности, является реализация в них механизмов многозадачности. Многозадачность подразумевает параллельное выполнение нескольких действий, однако практическая реализация параллельной работы упирается в проблему совместного использования ресурсов вычислительной системы. И главным ресурсом, распределение которого между несколькими задачами называется диспетчеризацией (scheduling), является процессор. Поэтому в однопроцессорной системе по-настоящему параллельное выполнение нескольких задач невозможно. Существует достаточно большое количество различных методов диспетчеризации. Под понятием задачи в терминах ОС и программных комплексов могут пониматься две разные вещи: процессы и потоки. Процесс является более масштабным представлением задачи, поскольку обозначает независимый модуль программы или весь исполняемый файл целиком с его адресным пространством, состоянием регистров процессора, счетчиком команд, кодом процедур и функций. Поток же является составной частью процесса и обозначает последовательность исполняемого кода. Каждый процесс содержит как минимум один поток, при этом максимальное количество потоков в пределах одного процесса в большинстве ОС ограничено только объемом оперативной памяти вычислительного комплекса. Потоки, принадлежащие одному процессу, разделяют его адресное пространство, поэтому они могут легко обмениваться данными, а время переключения между такими потоками (то есть время, за которое процессор переходит от выполнения команд одного потока к выполнению команд другого) оказывается значительно меньшим, чем время переключение между процессами. В связи с этим в задачах реального времени параллельно выполняемые задачи стараются максимально компоновать в виде потоков, исполняющихся в пределах одного процесса. Каждый поток имеет важное свойство, на основании которого ОС принимает решение о том, когда предоставить ему время процессора. Это свойство называется приоритетом потока и выражается целочисленным значением. Количество приоритетов (или уровней приоритетов) определяется функциональными возможностями ОС, при этом самое низкое значение (0) закрепляется за потоком, который предназначен для корректной работы системы, когда ей "ничего не надо делать". Поток может находиться в одном из следующих состояний: – Активный поток — это тот поток, который в данный момент выполняется системой. – Поток в состоянии готовности — поток, который может – Блокированный поток — поток, который не может выполняться по некоторым причинам (например, ожидание события или освобождения нужного ресурса).
Методы диспетчеризации, т.е. предоставления разным потокам доступа к процессору, в общем случае могут быть разделены на две группы. К первой относятся случаи, когда все потоки, которые разделяют процессор, имеют одинаковый приоритет, т.е. их важность с точки зрения системы одинакова: – FIFO (First In First Out). Первой выполняется задача, первой вошедшая в очередь, при этом она выполняется до тех пор, пока не закончит свою работу или не будет заблокирована в ожидании освобождения некоторого ресурса или события. После этого управление передается следующей в очереди задаче. – Карусельная многозадачность (round robin). При этом методе диспетчеризации в системе задается специализированная константа, определяющая продолжительность непрерывного выполнения потока, так называемый квант времени выполнения (time slice). Таким образом, выполнение потока может быть прервано либо окончанием его работы, либо блокированием в ожидании ресурса или события, либо завершением кванта времени (того самого time slice). После этого управление передается следующему в очередности потоку. По окончании времени последнего потока управление передается первому потоку, находящемуся в состоянии готовности. Таким образом, выполнение каждого потока разбито на последовательность временных циклов. Появление второй группы методов диспетчеризации связано с необходимостью распределения времени процессора между потоками, имеющими разную важность, т.е. разный приоритет. В таких случаях для потоков с равным приоритетом используется один из указанных выше методов диспетчеризации, а передача управления между потоками с разным приоритетом осуществляется одним из следующих методов: – В наиболее простом случае если в состояние готовности – Одним из решений проблем приоритетной многозадачности стала так называемая адаптивная многозадачность, широко применяющаяся в интерфейсных системах. Суть метода заключается в том, что приоритет потока, не выполняющегося какой-то период времени, повышается на единицу. Восстановление исходного приоритета происходит после выполнения потока в течение одного кванта времени или при блокировке потока. Таким образом, при карусельной многозадачности, очередь (или "карусель") более приоритетных потоков не может полностью заблокировать выполнение очереди менее приоритетных потоков. – В задачах реального времени предъявляются специфические требования к методам диспетчеризации, поскольку передача управления потоку должна определяться критическим сроком его обслуживания (т.н. deadline-driven scheduling). В наибольшей степени этому требованию соответствует вытесняющая приоритетная многозадачность. Суть этого метода заключается в том, что как только поток с более высоким, чем у активного потока, приоритетом переходит в состояние готовности, активный поток вытесняется (т.е. из активного состояния принудительно переходит в состояние готовности) и управление передается более приоритетному потоку. На практике широко применяются как комбинации описанных методов, так и различные их модификации. Задание на выполнение
Реализуйте практическое задание на любом языке высокого уровня, с использованием платформ Windows или Unix. Создайте программу, реализующую механизмы планирования выполнения заданий: FIFO, Round Robin, приоритетная многозадачность, адаптивная многозадачность. Для этого создайте в программе класс, имеющий свойствa Number=0, Priority=N и метод AddNumber(), в котором происходит инкрементирование (увеличение на единицу) свойства Number. По нажатию на кнопку окна программы в ней генерируются несколько экземпляров этого класса (например, 5), и запускается цикл или периодическое событие (перед стартом работы события, выбирается тип используемого механизма планирования), которое в зависимости от выбранного вида планирования заданий вызывает метод AddNumber() какого-либо экземпляра объекта. На экране в виде таблицы печатается номер экземпляра, его приоритет Priority[3] и свойство Number. Программа не должна «зависать» и может быть закрыта в любой момент времени. Подготовьте отчет о работе программы.
|
||||
Последнее изменение этой страницы: 2016-08-16; просмотров: 391; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.198.75 (0.007 с.) |