Чтобы процессор мог выполнить программу, она должна быть

Обновлено: 21.11.2024

Процесс — это выполняемая программа. Выполнение процесса должно происходить последовательно.

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

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

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

Стек процесса содержит временные данные, такие как параметры метода/функции, адрес возврата и локальные переменные.

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

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

Этот раздел содержит глобальные и статические переменные.

Программа

Программа – это фрагмент кода, который может состоять из одной строки или миллионов строк. Компьютерная программа обычно пишется программистом на языке программирования. Например, вот простая программа, написанная на языке программирования C —

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

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

Жизненный цикл процесса

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

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

Это начальное состояние, когда процесс впервые запускается/создается.

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

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

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

Прекращено или выйти

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

Блок управления технологическим процессом (PCB)

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

Состояние процесса

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

Привилегии процесса

Это необходимо для разрешения/запрета доступа к системным ресурсам.

Уникальная идентификация для каждого процесса в операционной системе.

Указатель на родительский процесс.

Счетчик программ

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

Регистры процессора

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

Информация о планировании ЦП

Приоритет процесса и другая информация о планировании, необходимая для планирования процесса.

Информация об управлении памятью

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

Учетная информация

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

Информация о статусе ввода-вывода

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

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

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

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

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

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

Ситуация следующая:

Последовательность инструкций хранится в памяти.

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

ЦП отправляет адрес счетчика команд в память по адресной шине.

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

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

ЦП выполняет инструкцию в регистре инструкций.

Шаги 3, 4 и 5 называются файлом . Обратите внимание, что шаги 3–7 составляют цикл, файл . Это показано графически на рисунке 8.4.1.

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

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

В связи с этим возникает несколько вопросов:

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

An используется для создания .

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

А или используется для создания .

Компилятор или ассемблер переводит язык программирования в исходном файле в битовые шаблоны, которые может использовать ЦП (машинный язык). Содержимое исходного файла остается неизменным.

A используется для создания .

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

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

Возможно, вы использовали интегрированную среду разработки (IDE), например Microsoft Visual Studio® или Eclipse™, которая объединяет все эти три программы в один пакет, где каждый из промежуточных шагов выполняется автоматически. Вы используете программу-редактор для создания исходного файла, а затем даете команду запуска в IDE. IDE скомпилирует программу в ваши исходные файлы, свяжет полученные объектные файлы с необходимыми библиотеками, загрузит полученный исполняемый файл в память, затем запустит вашу программу. Как правило, промежуточные объектные файлы, полученные в результате компиляции каждого исходного файла, автоматически удаляются с диска.

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

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

Видео: что такое программирование?

Компьютерное оборудование

  1. Центральный процессор (ЦП)
  2. Основная память (оперативная память или ОЗУ)
  3. Дополнительные устройства хранения
  4. Устройства ввода
  5. Устройства вывода

ЦП

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

Цикл выборки/декодирования/выполнения

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

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

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

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

Вы узнаете подробности о том, как ЦП обрабатывают инструкции в CS 271, Компьютерная архитектура и язык ассемблера.

Основная память

Основная память или ОЗУ используется для хранения программы во время ее выполнения и для хранения данных, с которыми работает программа.

Сведения об оперативной памяти

  • ЦП может быстро получить доступ к любому месту в ОЗУ.
  • ОЗУ называется энергозависимой памятью. В отличие от постоянного хранилища, когда компьютер выключается или когда программа завершает выполнение, значения, хранящиеся в ОЗУ, стираются.
  • ОЗУ делится на единицы хранения, называемые байтами. Байт — это последовательность из восьми битов.
  • Бит — это наименьший элемент ОЗУ, в нем хранится двоичная цифра, 0 или 1. Каждая программа и каждое значение данных на вашем компьютере хранится в виде последовательностей нулей и ls.

Дополнительное хранилище

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

Как и в основной памяти, во вторичном хранилище также хранится информация в виде последовательностей нулей и единиц в виде битов и байтов.

Устройства ввода

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

Устройства вывода

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

Видео: аппаратное и программное обеспечение

Программы и языки программирования

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

Алгоритмы

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

По мере увеличения сложности задач важно разрабатывать алгоритмы, которые будут эффективными (т. е. быстрыми) и правильными в том смысле, что они будут давать указанный результат для любых допустимых входных данных. На курсе CS 325 "Анализ алгоритмов" вы узнаете о методах анализа сложности и доказательства правильности.

Превращение алгоритмов в программы

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

Машинный код, язык ассемблера и компиляторы

ЦП компьютера выполняет инструкции вашей программы.Однако пока вы пишете программу на таком языке, как C++, процессор компьютера может следовать только инструкциям, закодированным как последовательность Os и s. Программный компилятор — это специальная программа, которая преобразует операторы, написанные на языке программирования, в двоичную форму (Os и s>, называемую машинным кодом. Поскольку нам трудно распознать последовательности 0 и 1, существует низкоуровневая (близкая к аппаратной ) язык программирования, называемый языком ассемблера, который использует короткие сокращения и шаблоны для описания того, что должен делать ЦП. Например, оператор ассемблера «MOV AL, 61h;» означает копирование следующего значения (61h, шестнадцатеричное представление 97) в ячейку памяти « АЛ".

Вы узнаете гораздо больше о машинном коде и языке ассемблера в CS 271, Архитектура компьютера и язык ассемблера.

Языки высокого уровня

В этом классе вы изучите C++, язык высокого уровня. Языки высокого уровня — это компьютерные языки, которые скрывают многие низкоуровневые детали компьютерной системы и, как правило, используют более естественные слова и символы по сравнению со словами, такими как «MOV», на языке ассемблера, который является языком низкого уровня.

C++ — один из многих языков высокого уровня. Чтобы увидеть текущую популярность всех компьютерных языков, перейдите в индекс TIOBE.

Исходный код, объектный код и исполняемый код

Исходный код

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

Преобразование исходного кода в исполняемый код

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

Во время преобразования исходного кода в исполняемый файл компилятор C++ создаст объектный код.

Исходный код преобразуется компилятором в так называемый объектный код. Объектный код программы на C++ сохраняется в файлах с суффиксом .o или .obj. На последнем этапе, называемом связыванием, объектные файлы объединяются с любыми библиотечными подпрограммами (подпрограммами, предоставленными языком для использования вами) для создания окончательного исполняемого файла с расширением .exe.

В зависимости от того, как вы компилируете свою программу, вы можете увидеть или не увидеть различные этапы преобразования исходных файлов в исполняемый файл. Например, во многих IDE (интегрированных средах разработки, таких как Visual Studio, Code:: Blocks или XCode) промежуточные шаги выполняются автоматически, поэтому вы можете нажать кнопку «сборка», и исполняемый файл будет создан.

Из чего состоит программа?

Языковые элементы

Большинство языков программирования включают следующие элементы.

Ключевые слова

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

Определяемые программистом идентификаторы

Идентификаторы, определяемые программистом, — это слова, которые вы выбираете как программист для определения переменных или процедур программирования.

Операторы

Операторы выполняют операции над одним или несколькими операндами. Операнд — это часть данных. Различные арифметические символы, такие как +, * и /, являются примерами операторов.

Пунктуация

Знаки препинания отмечают начало или конец оператора или отдельных элементов в списке.

Синтаксис

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

Специфика C++. Вы начнете изучать элементы языка, характерные для C++, в главе 2.

Строки и операторы

Мы часто думаем, что программы состоят из строк и операторов. Строка — это всего лишь одна строка в программе. Вы можете отображать номера строк в большинстве редакторов исходного кода IDE. В Visual Studio 2013 их необходимо включить, поскольку по умолчанию они отключены. Вы часто будете видеть ссылки на номера строк при компиляции программы и возникновении ошибки.

На снимке экрана показана программа с ошибкой. Когда программа была скомпилирована, выходные данные (серые окна выше) включали «source.cpp(B)», что указывало на то, что проблема была в строке 8 файла с именем source. цена за тысячу показов

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

Переменные

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

Ввод и вывод

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

Во многих, если не во всех заданиях CS 161, вы будете направлять вывод программы на консоль. Вы не часто видите вывод консоли, если запускаете приложения в Windows или OS X, потому что эти типы прикладных программ используют графические пользовательские интерфейсы (GUI). Однако программирование с графическим интерфейсом добавляет гораздо больше работы по созданию программы, и наша работа в CS 161 состоит в том, чтобы научить вас основам программирования, поэтому мы будем придерживаться консольного вывода.

Пример вывода в консоль

Активность

Выберите хотя бы одно занятие, которое учащиеся могут активно вовлечь в изучение материала. Чем больше, тем лучше!

Просмотреть

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

отменить связь: файл не существует или у пользователя нет разрешения на доступ к указанному файлу.

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

mount/umount — программист не мог динамически добавлять или удалять файловые системы или системы ввода-вывода и, таким образом, настраивать корневые и/или рабочие каталоги.

chmod — программист не сможет устанавливать права доступа к файлам.

А. Объясните, почему невозможно создать полностью переносимую операционную систему.

B) Уровень 3: Управление вводом/выводом — управление устройствами ввода/вывода и буферизация входящих и исходящих информационных потоков.

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

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

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

<р>2. Ошибка выхода: завершение программы, когда аргумент, который нужен программе, в данный момент недоступен.

<р>3. Неустранимая ошибка: когда такой файл не выходит для запуска процесса.

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

<р>2. Готов: процесс может выполняться, но ЦП недоступен, поэтому он останавливается в ожидании открытия ЦП.

Среди этих трех состояний возможны четыре перехода.

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

Второй и третий переходы обрабатываются планировщиком процессов, который является встроенной частью ОС (переход из режима "Выполняется" в состояние "Готов"(2) и из режима "Готов" в режим "Выполняется(3)").

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

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

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

Никаких предположений о скорости или количестве процессоров делать нельзя.

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

Ожидание занятости – это постоянное тестирование переменной до тех пор, пока переменная не будет возвращена.

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

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

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

-Проблема отправки сообщений в процессы на одном компьютере и из них.

Другие примечания, отмеченные в классе:

-Mac OS X – это система, ориентированная на передачу сообщений.

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

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

Время обработки: статистически среднее время с момента отправки пакетного задания до момента его завершения.

Время отклика: время между выдачей команды и получением результата.

Время обработки — сведите к минимуму время между отправкой и завершением.

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

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

Множественные очереди: это дизайн одного из первых планировщиков с приоритетом, разработанный в CTSS (совместимая система разделения времени), работающий на IBM 7094 (около 1960-х годов). В этом процессе существует несколько групп приоритетов, и каждой группе дается определенное количество квантов, которым разрешено работать (например, группа 1 = 1 квант, группа 2 = 2 кванта, группа 3 = 4 кванта и т. д.). Если процесс не завершится в группе 1, он будет перемещен в группу 2, и ему будет разрешено запуститься на следующем ходу. Этот процесс будет продолжаться до тех пор, пока он не будет завершен.

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

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

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

Читайте также: