Процесс вычисления оставшегося времени. Алгоритм для вычисления собственного времени процесса

Процесс вычисления оставшегося времени. Алгоритм для вычисления собственного времени процесса
Процесс вычисления оставшегося времени. Алгоритм для вычисления собственного времени процесса

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

Краткие выводы можно посмотреть в конце статьи.

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

  1. Опыт выполнения таких заданий и работы с данным технологическим стеком. Если предстоит делать что-то принципиально новое, нужно быть особенно осторожным с оценкой.
  2. Опыт работы с данным клиентом. Зная заказчика, можно примерно предугадать некоторые дополнительные требования и объём правок.
  3. Качество кода, с которым предстоит работать. Это - самый влиятельный фактор, из-за которого всё может сильно затянуться и вообще пойти не по плану. Если в проекте есть тесты, везде только явные зависимости и функциональность хорошо изолирована, всё не так страшно. Намного хуже, если вы имеете дело с легаси-кодом без тестов или с кодом, перенасыщенным неявными зависимостями. Осложнять дело могут также такие вещи, как «магические функции» (когда по коду тяжело увидеть конечный стек вызовов) и дублирование кода (когда для изменения какой-либо функциональности нужно править несколько независимых участков).

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

К объективной оценке времени, нужного чисто на работу, следует прибавлять небольшой запас для покрытия форс-мажорных ситуаций. Его часто оценивают в процентах от выполнения основной задачи, но у всех он разный: кто-то прибавляет 20 % времени, кто-то - 10 %, а кто-то - 50 %.

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

Повысить Понизить

, технический директор центра инновационных технологий и решений «Инфосистемы Джет»

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

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

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

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

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

Повысить Понизить

Вопрос, на который невозможно ответить в краткой форме. Если бы это было просто, то проблемы нарушения сроков не существовало бы.

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

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

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

Вторая причина - программисты по своей природе оптимисты. То есть, рассматривая задачу, подбирая для неё вариант реализации, давая оценку доработкам, разработчик ожидает, что всё будет работать так, как он предполагает. И не думает о тех проблемах, что ему встретятся на пути. Зачастую он и не может их предвидеть. Например, есть задача, которую программист может реализовать, используя стороннюю open-source программную библиотеку. На этапе оценки он нашел её в интернете, прочитал её описание - она ему подходит. И он даже верно оценил объём своей работы, чтобы встроить использование этой библиотеки. Но он совсем не предусмотрел, что в окружении его программного продукта в этой библиотеке возникнет ошибка.

Разработчику придётся не только встроить использование библиотеки в свой код, но и исправить ошибку в самой библиотеке. А ещё зачастую разработчик не предусматривает время на исправление своих ошибок. Как показывает статистика, тестирование и исправление ошибок может занимать порядка 50 % от времени, что было затрачено на кодинг. Цифра зависит от квалификации разработчика, окружения, используемых практик разработки (например, юнит тесты существенно это время сокращают и итоговая длительность/трудоёмкость задачи по разработке получается меньше).

Если вернуться к аналогии с землекопом, то землекоп не предполагал, что у него сломается лопата и придётся потратить два часа на поиски нового черенка.

Третья причина - непредусмотренные требования. Ни в одной области материального производства, с которыми так любят сравнивать заказчики разработку ПО, нет такого потока новых требований. Представьте себе пассаж землекопа, который выкопал 19 метров из 20 и услышал от заказчика пожелание, чтобы канава шла не по прямой, а змейкой с длиной плеча 97 сантиметров.

Как со всем этим бороться и как жить в условиях подобной неопределённости? Уменьшая неопределённость и закладывая резерв времени.

Самый простой способ привести свои ожидания ближе к реальности - это использовать шутливое эмпирическое правило «Пи». Получив оценку от разработчика (по срокам или трудоёмкости), надо умножить её на число Пи (= 3,14159). Чем более опытный разработчик делал оценку, тем меньше может быть этот коэффициент.

Обязательной является практика декомпозиции исходной задачи до маленьких задач размером не более 4 часов. Чем детальнее выполнена декомпозиция, тем выше шансы, что оценка окажется близка к фактической трудоёмкости/длительности.
Если вернуться к выделению резерва - это время должно быть выделено в конце проекта. Плохая практика делать резерв и включать его для каждой задачи. Закон Паркинсона «Работа заполняет всё время, отпущенное на неё» выполняется неукоснительно.

Если подвести краткое «итого», то чтобы правильно определить сроки выполнения работы, полезны будут следующие действия:

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

Ну, и помнить, что если факт превышает вашу оценку на 30 % - то это очень хороший результат.

Повысить Понизить

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

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

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

Как правило, такая оценка включает в себя только затраты непосредственно на кодирование. Это, безусловно, самая важная часть разработки, но далеко не единственная (а часто - и не самая объёмная). Полное выполнение задачи включает в себя еще чтение и прояснение ТЗ, встречи с коллегами или заказчиком, отладку и тестирование, составление документации, сдачу результата (демонстрацию заказчику и возможные переделки по его замечаниям). Сколько именно времени у вас уйдёт на эти действия, подскажет только опыт. На первых порах важно, как минимум, не забыть их учесть в расчётах, а примерную оценку времени можно спросить у более опытных коллег.

Итак, мы берём оценку трудозатрат на кодирование, добавляем оценку затрат на дополнительные работы - и получаем искомую оценку времени на выполнение задачи. Но и это ещё не всё! Нужно обозначить планируемую дату завершения задачи. Ошибкой будет просто взять и разделить трудозатраты (в часах) на 8 часов и прибавить к текущей дате. В реальной практике разработчик никогда (ну ладно, почти никогда) не работает 100% времени над одной конкретной задачей. У вас обязательно будет уходить время на другие работы - важные, но не связанные напрямую с главной. Например, помощь коллегам, обучение, составление отчётов и т.п. Обычно при планировании считают, что непосредственно на работу над текущим проектом уходит 60-70% рабочего времени. Дополнительно надо учесть ещё возможные задержки, которые не дадут вам непрерывно работать над задачей. Например, если для этого вам нужно взаимодействовать с другими людьми (коллегами, заказчиками), то учитывайте их занятость, график работы и т.п.

Вот основные правила, которые, на мой взгляд, помогут разработчику избежать проблем в оценке и соблюдении сроков. Кроме этого, ключевым является накопление собственного опыта как в реализации задач, так и в оценке. Например, очень полезно после завершения задачи сравнивать свою первоначальную оценку с фактическими сроками и делать выводы на будущее. И, конечно, стоит изучить чужой опыт. Я бы порекомендовал по теме книги С. Макконнелла «Сколько стоит программный проект» и С. Архипенкова «Лекции по управлению программными проектами».

Повысить Понизить

При оценке и планировании сроков необходимо:

  1. Декомпозировать задачу до небольших функциональных кусков таким образом, чтобы было чёткое понимание, сколько времени займёт разработка каждого такого куска.
  2. Параллельно с декомпозицией обязательно будут возникать дополнительные вопросы по функциональности, которая не была описана в постановке задачи. Необходимо получить ответы на такие вопросы, т. к. это напрямую касается объёма работ и, следовательно, сроков.
  3. К итоговой оценке добавить какой-то процент рисков. Это определяется опытным путём. Можно начать, например, с рисков размером в 10–15 %.
  4. Понять, сколько часов в день программист готов выделять на выполнение задачи.
  5. Делим итоговую оценку на количество часов, которые выделяем в день, и получаем количество дней, необходимых на реализацию.
  6. Ориентируемся на календарь и необходимое количество дней на выполнение. Учитываем выходные и другие дни, когда программист не сможет заниматься задачей, а также дату начала работ (не всегда разработчик готов взять задачу в работу в тот же день). Таким образом, получаем дату начала и окончания работ.

Повысить Понизить

В нашей компании планирование задач всегда проходит несколько этапов. На стороне бизнеса мы формулируем 5–6 стратегических целей на год. Это высокоуровневые задачи, например повысить какой-либо параметр на столько-то процентов. Далее различные подразделения компании формируют бизнес-задачи на все команды ИТ. Сроки по этим задачам получают первичную грубую оценку, которая часто формируется всеми участниками команды - менеджером, аналитиком, разработчиком и тестировщиком. Получив эту оценку, бизнес приоритезирует задачи, учитывая стратегические цели компании. В этом помогают сквозные стратегические цели, с ними становится очевидно, что все мы работаем на какое-то общее дело, нет такой ситуации, когда кто-то тянет только в свою сторону. Из точно оцененных по срокам задач мы собираем спринты. У некоторых команд они квартальные, у некоторых - месячные. Нескольким задачам, по предварительной оценке попадающим в следующий спринт, команды дают точную оценку. Крупные задачи разбиваются на более низкоуровневые, за каждую из которых отвечает конкретный исполнитель, именно он и даёт точную оценку.

На данном этапе важно не забывать добавлять запас времени на исправление багов, ведь не ошибается только тот, кто ничего не делает. Это прекрасно понимают и Product Owner, и бизнес-заказчики. При этом требуемый запас времени должен быть адекватным: никто не поймёт разработчика, который поставит простой задаче слишком длинный срок исполнения, его попросят обосновать решение. Самое сложное - объяснить бизнесу, зачем нужно время на рефакторинг. Мы благодарны нашей компании за то, что периодически нам это удаётся, ведь в конечном счёте рефакторинг ведёт к облегчению инфраструктуры и наведению порядка в коде, что повышает стабильность системы и может существенно ускорить разработку новых функций.

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

Повысить Понизить

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

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

Далее нужно понимать, что прямое планирование сроков - задача, с которой люди справляются очень и очень плохо, особенно в разработке. При оценке сроков сдачи хорошей практикой считается введение «поправочных коэффициентов» на исходную оценку. Данная метрика может колебаться в интервале от 1,5 до 3, в зависимости от опыта разработчика и совокупности степеней неопределённости задач, решаемых в рамках проекта.

Повысить Понизить

При определении сроков важно учитывать многие факторы.

Например опыт работы. Насколько чётко вы представляете себе объём предстоящих работ? Делали ли ранее что-то подобное? Понятно, что чем больше опыта, тем быстрее работа будет выполнена.

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

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

Повысить Понизить

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

Выстроить чёткий план гораздо сложней, чем определить срок выполнения отдельно взятой задачи. При этом важно не только сдать проект вовремя, но и сделать так, чтобы разработанная вами система корректно решала задачи бизнеса. Здесь ИТ-командам помогают различные методологии разработки ПО: от RUP и MSF до SCRUM и других Agile-форматов. Выбор инструментов весьма обширен, и многие наши заказчики хотят заранее понимать, как мы будем с ними работать в проекте, каких принципов мы придерживаемся.

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

Agile-команда всё планирует вместе и определяет оптимальный уровень трудозатрат, которые понадобятся для решения той или иной задачи. Например, одна из техник называется «Poker Planning», где каждый участник анонимно даёт свою оценку необходимых трудозатрат по конкретной задаче. После этого команда определяет средний вес задачи в story points или человеко-часах и распределяет дела по принципу «кому что нравится». При этом ежедневно команда собирается на 15-минутный митинг, когда каждый за пару минут рассказывает о статусах своих текущих задач, в том числе сообщает о возникших трудностях. Обнаруженную проблему команда быстро устраняет, поэтому и заказчик смотрит на очередной этап работы программиста максимально оперативно. Разработчики не затягивают со сроками выполнения задач из-за нежелания лишний раз дёргать команду или тщетных попыток разобраться самостоятельно, убивая драгоценное время. Кстати, на таких мини-статусах у разработчиков появляется желание проявить себя с лучшей стороны, показать, что ты ответственно подходишь к работе. Это реально мотивирует и самодисциплинирует.

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

Рассмотрим одномерный процесс, состояние которого характеризуется вещественной переменной х. Предположим, что наблюдения за динамикой процесса выполняются в астрономическом времени t, так что t = t k и x = x k , k =1, ..., п -- фиксированные моменты наблюдения и соответствующие им значения состояний процесса. Существует множество разнообразных математических методов, позволяющих построить такие кривые, которые либо проходят через точки (t k , Xk), либо «наилучшим o6paзом» приближаются к ним. Получаемые при этом функции x = x(t) порождают, в нашем сознании впечатление, что рассматриваемый процесс зависит от механического движения небесных тел и, следовательно, его состояние выражается через астрономическое время t. С таким выводом можно было бы считаться; если не возникали бы постоянные трудности при попытках прогнозировании дальнейшего протекания процесса. Для большого числа разнообразных процессов, не имеющих прямого отношения к механическим движениям небесных тел, получаемые с помощью функции x = x(t) теоретические предсказания за пределами интервала наблюдения начинают значительно отклоняться от последующих экспериментальных данных. Причину расхождения теории и эксперимента обычно пытаются объяснить неудачно подобранным методом обработки, однако существо дела может быть и не в этом.

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

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

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

Итак, входными данными для алгоритма являются натуральное число п, положительное число 8, массивы {tk} и {x k }, k = 1, ..., п. Для удобства программирования алгоритм представлен в виде четырех последовательно выполняемых модулей.

Модуль 1, используя данные п, е, t k), (x k) , формирует в общем случае новые массивы 7 = {7+ X=(X t) и вполне конкретный сопутствующий массив Р = {?}, где 1 = 1, ..., т, причем т<Сп. Основное назначение этого модуля -- выявление в массиве x k) последовательностей идентичных состояний процесса, сохранение первых элементов в таких последовательностях и удаление всех остальных и, наконец, уменьшение по определенному, правилу исходного интервала наблюдения от t до на сумму тех промежутков времени, в которых процесс протекает стационарно.

Модуль 1 включает в себя следующие процедуры:

р: = 1, т: = 0, k: = 1.

В п.п. 1, 2 вводятся счетчики с конкретными начальными значениями:

В п.п. 3, 4 происходит увеличение значений счетчиков на 1.

Проверить условие k^n. Если оно выполнено, то перейти к п. 6, в противном случае к п. 11.

Проверить неравенство x k --x k = е. Если оно имеет место, то перейти к п. 7, иначе к п. 9.

7. tii = ti - (tkl - tk), i = k1, ..., п.

Эта процедура означает, что если значения Xk и Xk 1 неразличимы в пределах ошибки, то все моменты времени, начиная с tk, уменьшаются на величину tki-tk.

р = р. Вернуться к п. 4.

Tv = t k ; X v:=x k ; p = p v = v+l., т.е. происходит формирование элементов массивов Т, X, Р и присвоение очередного значения v.

  • 10. Принять {t k , ..., t n И {Xk, - Х п) в качестве исходных массивов размерности п--k 1 + 1 и затем возвратиться к п. 2.
  • 11. Выдать на печать m, {T}, {Х,} и{Р,}, где i = l, ..., т. Конец.

Поясним смысл элементов сопутствующего массива Р. Из предыдущего текста вытекает, что значение pk равно количеству тех элементов массива {xk), которые непосредственно, следуют за, и отличаются от x pi+ ...+, + , меньше чем на е. Отметим также, что pi+ ... +p m = n.

Пример 1. Дано: п = 20, {/*} = (2, 4, 7, 10, 12, 13, 15, 17, 20, 22, 24, 25,

  • 27, 30, 32, 33, 34, 35, 36) и {х,}= (4, 4, 6, 6, 6, 3, 2, 4, 3, 3, 3, 2, 2, 4, 5, 5,
  • 5, 4, 3), см. рис. 9, а.

В результате выполнения модуля 1 получается т = 11,

{Г} = (2, 3, 4, 6, 8, 11, 1-2, 15, 17, 18, 19);{Х,}=(4, 6, 3, 2, 4, 3, 2, 4,5,4,3)

и{д.} = (2, 4, 1, 1, 1,3, 2, 1,3, 1, 1), см. рис. 9, б.

Модуль 2. Входными данными для него являются натуральное число т, а также массивы {7+ {X L }, = 1, ..., т. Этот модуль в массиве {TJ выявляет моменты времени [ТМ а ], 1 = 1 m (ml

Пример 2. Значения т, {Т ь } и {X,] заимствуются из предыдущего примера. После выполнения модуля 2 получаются ml = 3, m2 = 8, {Щ,} = (3, 8, 17), {Т*} = (3, 4, 6, 8, 11, 12, 15, 17), см. также рис. 9, б.

Модуль 3. Входные данные ml, m2, {ТМ п }, 1 = 1, ..., ml, {Г*}, /2=1, ..., гп2.

Этот модуль предназначен для построения массива {т (-г} по формуле

Где ТВ 6 [ТМп, TMn+i]

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

Пример 3. Исходные данные для Т 2) те же, что значений ml, m2 ITM, и в примере 2. . После соответствующих вычислений получим Ы = (0; 0,2; 0,6; 1; 1,33; 1,78; 2).

Модуль 4. Формирует выдачу результатов путем установления соответствия между значениями т и элементами х из массива {xk).

Пример 4. На основе данных примеров 2 и 3 выдается следующий результат, см. рис. 9, в:

т: 0; 0,2; 0,6; 1; 1,33; 1,44;

х: 6; 3; 2; 4; 3Т 0 2;

Таким образом, рассмотренный алгоритм позволяет выработать понятие собственного времени процесса на основе зафиксированной по астрономической шкале времени информации об изменении состояния процесса. Вполне понятно, что можно воспользоваться и другими алгоритмами, основанными, например, на исчислении последовательности локальных минимумов или же смешанной последовательности, состоящей из локальных максимумов и минимумов. При обработке экспериментальных данных следует, вероятно, испытывать различные варианты. Если по каким-либо причинам экспериментатор остановил свой выбор на одном из конкретных собственных времен и получил при этом массивы {т4 и {xk}, то на следующем этапе ему надлежит воспользоваться какими-либо математическими методами для апроксимации экспериментальных точек (т*, х) некоторой приближенной мировой линией процесса х = х(т). Экстраполируя эту линию за пределы исходного промежутка наблюдений, он может выдавать прогнозы о дальнейшем протекании процесса.

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

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

OS / 360 и преемники

AIX

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

  • Во-первых, первый вышел: После того, как нить с этой политикой запланировано, то выполняется до завершения, если она не заблокирована, она добровольно уступает управление процессором, или с более высоким приоритетом нити становится диспетчеризация. Только с фиксированным приоритетом потоки могут иметь политику планирования FIFO.
  • Round Robin: Это похоже на AIX Version 3 планировщика схемы циклическом на основе 10мс временных срезов. Когда поток РР имеет контроль в конце временного интервала, он перемещается в хвост очереди нитей с таким же приоритетом. Только с фиксированным приоритетом потоки могут иметь политику планирования Round Robin.
  • ДРУГОЕ: Эта политика определяется POSIX1003.4a в реализации. В AIX версии 4, эта политика определяются как эквивалент RR, за исключением того, что он относится к резьбу с не фиксированным приоритетом. Перерасчет значения приоритета запущенного потока на каждое прерывание означает, что нить может потерять контроль, потому что его значение приоритета поднялось выше, чем другая нить. Это поведение AIX Version 3.

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

Введение

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

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

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


Расчет длительности производственного цикла

В качестве показателя эффективности производственного процесса служит длительность производственного цикла.

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

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

1) на естественные или технологические – они обусловлены природой продукта;

2) организационные (перерывы между сменами).

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

Т цикла = t тех + t ест + t тр + t к.к. + t м.о. + t м.ц.

где t тех – время технологических операций;

t ест - время естественных процессов (сушка, охлаждение и т.д.);

t тр – время транспортировки предметов труда;

t к.к. – время контроля качества;

t м.о – время межоперационного пролёживания;

t м.ц. – время пролёживания на межцеховых складах;

(t тр и t к.к. можно совместить с t м.о).

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

Т цикла =t в ·М,

где t в – такт выпуска;

М – количество рабочих мест.

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

Такт выпуска определяется по формуле

t в = Т эф /В,

где Т эф – эффективный фонд времени рабочего за расчетный период (смену, сутки, год);

В – объём выпуска за тот же период (в натуральных единицах).

Пример: Т см = 8 часов = 480 мин; Т пер = 30 мин; → Т эф = 480 – – 30 = 450 мин.

В = 225 шт; → t в = 450/225 = 2 мин.

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


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

где n – количество деталей обрабатываемой партии;

t шт i - штучная норма времени на операцию;

C i – число рабочих мест на i -й операции;

m – число операций технологического процесса.

Дана партия изделий, состоящая из 5 штук. Партия пропускается последовательно через 4 операции; длительность первой операции – 10 мин, второй – 20 мин, третьей – 10 мин, четвертой – 30 мин (рис. 1).

Рисунок 1

Т цикла = Т посл = 5·(10+20+10+30) = 350 мин.

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

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

Продолжительность обработки партии при параллельном движении изделий резко сокращается:

дл.

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

Дл.– наиболее длительный операционный цикл.

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

В нашем примере: n = 5, t 1 = 10; t 2 = 20; t 3 = 10; t 4 = 30; с = 1.

Т пар = 1·(10+20+10+30)+(5-1)·30=70+120 = 190 мин.

Рассмотрим схему параллельного движения деталей (рис. 2):

Рисунок 2

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

кор.

где кор. – наиболее короткий операционный цикл (из каждой пары смежных операций);

m -1 число совмещений.

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

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

Рисунок 3

Т посл-пар = 5·(10+20+10+30)-(5-1)·(10+10+10) = 350-120 = 230 мин.

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

1) Снижение трудоёмкости изготовления продукции за счет совершенствования технологичности изготавливаемой конструкции, использования ЭВМ, внедрения передовых технологических процессов.

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

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

4) Ускорение течения реакций в результате повышения давления, температур, перехода на непрерывный процесс и т.д.

5) Совершенствование процессов транспортировки, складирования и контроля и совмещение их по времени с процессом обработки и сборки.

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

Задачи

1 Определить длительность цикла обработки 50 деталей при последовательном, параллельном и последовательно-параллельном видах движения в процессе производства. Процесс обработки деталей состоит из пяти операций, длительность которых соответственно составляет, мин: t 1 =2; t 2 =3; t 3 =4; t 4 =1; t 5 =3. Вторая операция выполняется на двух станках, а каждая из остальных на одном. Величина передаточной партии 4 штуки.

2 Определить длительность цикла обработки 50 деталей при последовательном, параллельном и последовательно-параллельном видах движения в процессе производства. Процесс обработки деталей состоит из четырех операций, длительность которых соответственно составляет, мин: t 1 =1; t 2 =4; t 3 =2; t 4 =6. Четвертая операция выполняется на двух станках, а каждая из остальных на одном. Величина передаточной партии – 5 штук.

3 Партия деталей в 200 штук обрабатывается при параллельно-последовательном движении её в процессе производства. Процесс обработки деталей состоит из шести операций, длительность которых соответственно составляет, мин: t 1 =8; t 2 =3; t 3 =27; t 4 =6; t 5 =4; t 6 =20. Третья операция выполняется на трех станках, шестая на двух, а каждая из остальных операций – на одном станке. Определить, как изменится длительность цикла обработки партии деталей, если параллельно-последовательный вариант движения в производстве заменить параллельным. Величина передаточной партии – 20 штук.

4 Партия деталей в 300 штук обрабатывается при параллельно-последовательном движении её в процессе производства. Процесс обработки деталей состоит из семи операций, длительность которых соответственно составляет, мин: t 1 =4; t 2 =5; t 3 =7; t 4 =3; t 5 =4; t 6 =5; t 7 =6. Каждая операция выполняется на одном станке. Передаточная партия – 30 штук. В результате улучшения технологии производства длительность третьей операции сократилась на 3 мин, седьмой – на 2 мин. Определить, как изменяется цикл обработки партии деталей.

5 Дана партия заготовок, состоящая из 5 штук. Партия пропускается через 4 операции: длительность первой – 10 мин, второй – 20 мин, третьей – 10 мин, четвертой – 30 мин. Определить длительность цикла аналитическим и графическим способами при последовательном движении.

6 Дана партия заготовок, состоящая из четырех штук. Партия пропускается через 4 операции: длительность первой – 5 мин, второй – 10 мин, третьей – 5 мин, четвертой – 15 мин. Определить длительность цикла аналитическим и графическим способами при параллельном движении.

7 Дана партия заготовок, состоящая из 5 штук. Партия пропускается через 4 операции: длительность первой – 10 мин, второй – 20 мин, третьей – 10 мин, четвертой – 30 мин. Определить длительность цикла аналитическим и графическим способами при последовательно-параллельном движении.

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

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

Трехуровневое планирование

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

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

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

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

2. Сколько времени процесс уже использовал процессор?

3. Каков размер процесса (маленькие процессы не мешают)?

4. Какова важность процесса?

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

Планирование в интерактивных системах.

Циклическое планирование.

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

Единственным интересным моментом этого алгоритма является длина кванта. Переключение с одного процесса на другой занимает некоторое время - необхо­димо сохранить и загрузить регистры и карты памяти, обновить таблицы и списки, сохранить и перезагрузить кэш памяти и т. п. Вывод можно сформулировать следующим образом: слишком малый квант приведет к частому переключению процессов и небольшой эффективности, но слишком большой квант может привести к медленному реагированию на корот­кие интерактивные запросы. Значение кванта около 2 0 -5 0 мс часто является ра­зумным компромиссом.

Приоритетное планирование.

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

Несколько очередей.

Один из первых приоритетных планировщиков был реализован в системе CTSS (compatible time-shared system - совместимая система с разделением времени).Основной проблемой системы CTSS было слишком медленное переключе­ние процессов, поскольку в памяти компьютера IBM 7094 мог находиться только один процесс. Каждое переключение означало выгрузку текущего процесса на диск

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

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

В качестве примера рассмотрим процесс, которому необходимо производить вычисления в течение 100 квантов. Вначале ему будет предоставлен один квант, затем он будет перекачан на диск. В следующий раз ему достанется 2 кванта, за­тем 4, 8,16, 32, 64, хотя из 64 он использует только 37. В этом случае понадобится всего 7 перекачек (включая первоначальную загрузку) вместо 100, которые пона­добились бы при использовании циклического алгоритма. Помимо этого, по мере погружения в очереди приоритетов процесс будет все реже запускаться, предо­ставляя процессор более коротким процессам.

“Самый короткий процесс - следующий”

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

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

Один из методов основывается на оценке длины процесса, базирующейся на предыдущем поведении процесса. При этом запускается процесс, у которого оце­ненное время самое маленькое. Допустим, что предполагаемое время исполнения команды равно Т 0 и предполагаемое время следующего запуска равно Т 1 . Можно улучшить оценку времени, взяв взвешенную сумму этих времен аТ 0 + (1 - а)Т 1 . Выбирая соответствующее значение а, мы можем заставить алгоритм оценки быс­тро забывать о предыдущих запусках или, наоборот, помнить о них в течение дол­гого времени. Взяв а = 1/2, мы получим серию оценок:

Т 0 , Т 0 /2 + Т 1 /2, Т 0 /4 + Т 1 /4 + Т 2 / 2, Т 0 / 8 + Т 1 /8 + Т 2 /4 + T 3 / 2.

После трех запусков вес Т 0 в оценке уменьшится до 1/8.

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

добавить к текущей оценке новое значение и разделить сумму пополам (сдвинув вправо на 1 бит).

Гарантированное планирование.

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

И в системе с одним пользователем и n запущенными процессорами каждому достанется 1 / n циклов процессора.

Чтобы выполнить это обещание, система должна отслеживать распределение процессора между процессами с момента создания каждого процесса. Затем система рассчитывает количество ресурсов процессора, на которое процесс имеет право, например время с момента создания, деленное на n. Теперь можно сосчитать отношение времени, предоставленного процессу, к времени, на которое он имеет право. Полученное значение 0,5 означает, что процессу выделили только полови­ну положенного, а 2,0 означает, что процессу досталось в два раза больше, чем положено. Затем запускается процесс, у которого это отношение наименьшее, пока

оно не станет больше, чем у его ближайшего соседа.

Лотерейное планирование.

В основе алгоритма лежит раздача процессам лотерейных билетов на доступ к различным ресурсам, в том числе и к процессору. Когда планировщику необходимо принять решение, выбирается случайным образом лотерейный билет, и его обладатель получает доступ к ресурсу. Что касается доступа к процессору, «лотерея» может происходить 50 раз в секунду, и победитель получает 20 мс времени процессора.

Более важным процессам можно раздать дополнительные билеты, чтобы увеличить вероятность выигрыша. Если всего 100 билетов и 20 из них находятся у одного процесса, то ему достанется 20 % времени процессора. В отличие от приоритетного планировщика, в котором очень трудно оценить, что означает, скажем, приоритет 40, в лотерейном планировании все очевидно. Каждый процесс получит процент ресурсов, примерно равный проценту имеющихся у него билетов.

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

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

Справедливое планирование.

До сих пор мы предполагали, что каждый процесс управляется независимо от того, кто его хозяин. Поэтому если пользователь 1 создаст 9 процессов, а пользователь 2 - 1 процесс, то с использованием циклического планирования или в случае равных приоритетов пользователю 1 достанется 90 % процессора, а пользователю 2 всего 10.

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

обещано по 50 % процессора, то им достанется по 50 % процессора, независимо от количества процессов.

Планирование в системах реального времени.

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

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

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


Похожая информация.