Вы можете открыть актуальную версию документа прямо сейчас.
Если вы являетесь пользователем интернет-версии системы ГАРАНТ, вы можете открыть этот документ прямо сейчас или запросить по Горячей линии в системе.
Приложение В
(справочное)
Независимость посредством разделения программного обеспечения
В.1 Общие положения
Настоящее приложение предлагает средство - разделение программного обеспечения и связанные с ним методы и меры - для помощи конструктору в обеспечении независимости программных модулей, в условиях быстроразвивающихся технологий.
Достаточная независимость компонентов программного обеспечения гарантируется исключением отдельных неисправностей, которые могут на нее повлиять (нарушить). Для этой цели необходимо реализовать (выполнить) приведенные методы и меры с эффективностью не ниже средней. Для каждых метода и меры, приведенных в данном приложении, также приводятся рекомендации по их эффективности (см. таблицы В.1 и В.2):
- высокая - значит, что эти метод/мера эффективно предотвращают соответствующее воздействие неисправности;
- средняя - значит, что эти метод/мера частично предотвращают соответствующее воздействие неисправности;
- отсутствует - значит, что эти метод/мера не способствуют предотвращению соответствующего воздействия неисправности.
В.2 Термины, определения и сокращения
В настоящем приложении применены следующие термины с соответствующими определениями и сокращения:
В.2.1 счетчик существования (alive counter): Считающий компонент, инициирующий 0 в момент создания объекта автоматического контроля (мониторинга).
Примечание - Показания счетчика увеличиваются в интервале времени от t-1 до t до тех пор, пока объект существует. В итоге счетчик существования показывает период времени, в течение которого объект существовал в сети.
В.2.2 испытания по методу "черного ящика" (black-box test): Испытания, при которых не требуется знание внутренней структуры испытуемого объекта или конкретных деталей его реализации (исполнения).
В.2.3 защита шины (bus guardian): Независимый компонент между узлом и шиной, который дает возможность этому узлу подключаться к шине, только когда это разрешено.
Примечание - Защита шины должна определять, когда узлу разрешен доступ к шине, - этого сложно достигнуть в системе, инициируемой событием (явлением), но концептуально просто в системе, инициируемой временем.
В.2.4 очередность сообщений (message queue): Процедура (взаимодействие (коммуникация) в процессе обработки информации/решения задач), используемая для передачи и обмена данными (сообщениями) между несинхронными процессами или задачами, включая буферизацию FIFO.
Примечание - Очередность управляется операционной системой или приложением. Организация очередности сообщений обеспечивает синхронизацию и взаимоисключения.
В.2.5 минимизация слотов (minislotting): Техника планирования шины, в которой каждый узел, соединенный с шиной, ожидает определенный период времени перед тем, как ему разрешат снова подключиться к шине.
В.2.6 взаимоисключение (mutual exclusion): Механизм синхронизации для защиты последовательности операторов, которые являются неделимыми.
В.2.7 разделение (partitions): Организация распределения ресурсов, т.е. виртуальная окружающая среда машины с выделенными ресурсами, такими как объем памяти, устройства входа/выхода, время центрального процессора (CPU).
Примечание 1 - Разделы устанавливаются (задаются) статично и создаются при пуске системы.
Примечание 2 - Программы, выполняемые в разделах, всегда ограничены ресурсами, выделенными для раздела при пуске системы в соответствии с ее конфигурацией.
В.2.8 раздел (в пределах одного микроконтроллера) (partition): Подсистема, состоящая из фиксированных назначенных ресурсов системы, в которой каждый раздел содержит одну или несколько задач.
В.2.9 раздел (в пределах общей сети микроконтроллеров) (partition): Подсистема, состоящая из доступной памяти, доступного центрального процессора (CPU) и функциональности микропроцессора на вход/выход.
В.2.10 разделение, разделение программного обеспечения (partitioning, software partitioning): Техника ограничения последствий неисправности, которая заключается в том, чтобы предотвратить ситуацию, когда отказ в одном разделе распространится и вызовет сбой в других разделах.
Примечание 1 - Применительно к программному обеспечению целью разделения является управление дополнительными опасностями, возникающими, когда раздел программного обеспечения обменивается (делится) своими ресурсами или их частью с другими разделами (например, процессор и/или периферийные устройства). Разделение программного обеспечения предназначено не для защиты от отказов каждого раздела программного обеспечения, а для предотвращения распространения таких отказов.
Примечание 2 - С одной стороны, разделение программного обеспечения включает разделение пространства, которое переадресует несанкционированный доступ к данным и нелегитимные команды периферийных устройств другим разделам. С другой стороны, включает разделение времени, которое фокусируется на нарушении времени наступления событий в других разделах (например, планирование (составление графика), порядок выполнения и т.д.), которое также переадресовывается.
В.2.11 канал (pipe): Коммуникация между двумя процессами/задачами с одним маршрутом, включающая буферизацию в соответствии с принципами FIFO.
Примечание - Канал построен над очередностью сообщений и используется как стандартный интерфейс входа/выхода, т.е. выход одного процесса/задачи используется как вход другого.
В.2.12 реальная адресация, абсолютная адресация (real addressing, absolute addressing): Четкая (явная) идентификация выделенной памяти или периферийного устройства (следует обратить внимание также на термин "относительная адресация" [см. В.2.14]).
В.2.13 резервирование (избыточность) (redundancy): Увеличение, в большинстве случаев дублирование, компонентов системы с целью повышения ее надежности.
Примечание - Обычно это применяется в тех случаях, когда необходимо сохранение резервной копии или обеспечение отказоустойчивости.
В.2.14 относительная адресация (relative addressing): Идентификация выделенной памяти или периферийного устройства по отношению к какому-либо другому адресу (следует обратить внимание также на термин "реальная адресация" [см. В.2.12]).
В.2.15 совместно используемая (разделенная) память (shared memory): Память, используемая для взаимодействия (коммуникации) при решении задач.
Примечание - Совместно используемая (разделенная) память - это определенная область памяти, к которой обеспечен непосредственный доступ при решении более чем одной задачи. Для предотвращения помех и обеспечения полноты памяти используются семафоры. Этот метод взаимодействия (коммуникаций) в процессе обработки информации/решения задач быстрее, чем обмен данными посредством сервисов (служб) операционной системы.
В.2.16 семафор (semaphore): Неотрицательная целочисленная переменная, значение которой уменьшается при входе в критическую секцию программы и снова увеличивается при выходе из нее.
Примечание - Семафоры используются для синхронизации, когда несколько задач получают доступ к общему ресурсу, например к общему пространству данных.
В.2.17 компонент программного обеспечения (software component): Реализация (исполнение) одной или нескольких функций в программном обеспечении.
Примечание - Компонент программного обеспечения - это логически отделимая часть программного обеспечения, которая состоит из одного или нескольких компонентов и/или блоков программного обеспечения. В рамках архитектуры программного обеспечения компоненты программного обеспечения реализуются через разделы и задачи.
В.2.18 блок программного обеспечения (software unit): Наименьшая независимая часть программного обеспечения, которую можно независимо перевести и которая может быть испытана (протестирована) на выполнение спецификации с соответствующими результатами.
Примечание - Блок программного обеспечения - это элементарный компонент программного обеспечения.
В.2.19 разделы программного обеспечения (software partitions): Назначенная среда выполнения с выделенными ресурсами системы.
В.2.20 ресурсы системы (system resources): Все ресурсы, необходимые для функционирования программного обеспечения.
Пример - Время центрального процессора (CPU), устройства входа/выхода, объем памяти.
В.2.21 задача (task): Выполнение действий в пределах бюджета ресурсов раздела, когда каждая задача имеет собственное множество и приоритеты.
Примечание - Задача выполняется под управлением планировщика задач (диспетчера) в соответствии с назначенным приоритетом задачи и выбранной политикой планирования.
В.2.22 независимость программного обеспечения (independence of software): Исключение непреднамеренных взаимодействий между компонентами программного обеспечения, а также свобода от воздействия (влияния) других компонентов программного обеспечения на правильность (корректность) функционирования, возникающего в результате ошибок проектирования и/или реализации (исполнения) компонентов программного обеспечения.
В.2.23 режим пользователя (user mode): Один из двух режимов работы центрального процессора (CPU), второй - режим ядра.
Примечание - Режим пользователя - это непривилегированный режим, т.е. ссылки или доступ к памяти или устройствам входа/выхода проверяются на авторизацию. В режиме пользователя выделены и доступны специальные области памяти, в то время как области памяти других процессов являются запрещенными. В то же время режим ядра предоставляет привилегированный доступ и права для выполнения.
В.2.24 система-наблюдатель (watchdog): Таймер процесса, который, если не сбрасывается в течение определенного периода времени компонентом программного обеспечения, предполагает, что компонент программного обеспечения находится в состоянии ошибки.
Компонент программного обеспечения должен постоянно перезапускать таймер, для того чтобы демонстрировать правильность (корректность) своего функционирования.
CRC - циклическая проверка избыточности;
CPU - центральный процессор;
MMU - блок управления памятью;
MPU - блок защиты памяти.
В.3 Цели
Первой целью является управление опасностями, которые могут возникнуть в подсистемах, таким образом, чтобы они не могли воздействовать (влиять) на другие подсистемы.
Примечание - Опасности в программном обеспечении могут возникнуть в результате ошибок проектирования или реализации (исполнения) компонентов программного обеспечения, которые впоследствии могут помешать правильному (корректному) функционированию других компонентов программного обеспечения, участвующих в совместном использовании ресурсов.
Второй целью является установление способа продемонстрировать достаточную независимость компонентов программного обеспечения, достигнутую при разделении программного обеспечения.
В.4 Общие положения
Для того чтобы обеспечить достаточную независимость компонентов программного обеспечения, ресурсы системы должны быть назначены независимым подсистемам или разделам, представляющим собой определенную среду выполнения. Ресурсы системы включают: CPU, память, шину, каналы входа/выхода и ресурсы операционной системы, такие как средства управления файлами (дескрипторы файлов).
Использование разделения программного обеспечения не ограничивается совместным использованием программного обеспечения с разным SRL в одной и той же среде выполнения. Использование разделения программного обеспечения также поддерживает:
a) изменение разделов без повторной верификации немодифицированных разделов программного обеспечения; и
b) совместное использование программного обеспечения разного характера (собственные разработки, сторонние разработки).
Разделение программного обеспечения обычно невозможно без соответствующей (адекватной) поддержки со стороны аппаратного обеспечения.
Для изолирования нескольких разделов в совместно используемой (разделенной) среде аппаратное обеспечение должно обеспечивать операционную систему возможностью ограничения пространства памяти, времени обработки, доступа ко входу/выходу для каждого отдельного раздела.
Примечание - Разделы могут быть выделены в пределах одного микроконтроллера или в пределах нескольких микроконтроллеров в общей сети.
В зависимости от выбранной архитектуры могут использоваться два подхода:
a) несколько разделов в пределах одного микроконтроллера;
b) несколько разделов в пределах сети ECU.
В.5 Требования
В.5.1 Общие требования
В.5.1.1 SRL
Часть программного обеспечения, которая обеспечивает поддержку для реализации (выполнения) разделения, должна иметь такой же или более высокий SRL, чем наибольший SRL, связанный с разделами программного обеспечения.
Примечание - В общем случае программное обеспечение, обеспечивающее или поддерживающее разделение, является частью операционной системы.
В.5.1.2 Архитектура программного обеспечения
Концепция разделения программного обеспечения должна учитываться при определении архитектуры программного обеспечения.
В.5.2 Несколько разделов в пределах одного микроконтроллера
В.5.2.1 Общие положения
См. рисунок В.1.
Примечание - Задачи в пределах раздела не являются независимыми друг от друга.
Рисунок В.1 - Несколько разделов в рамках одного микроконтроллера
В.5.2.2 Разделение программного обеспечения, методы/меры
Каждый раздел программного обеспечения должен реализовывать методы и меры, приведенные в таблице В.1, для обеспечения достаточной независимости компонентов программного обеспечения и предотвращения следующих воздействий (влияний) неисправности:
- искажение (повреждение) памяти (непреднамеренная запись в память другого раздела);
- блокировка разделов (из-за блокировки коммуникаций);
- неправильное распределение оперативного времени процессора;
- неправильный коммуникационный узел (отправитель посылает сообщения неверному получателю или сам отправитель определяется неверно);
- искажение (повреждение) интерфейса входа/выхода из-за непреднамеренных записей в интерфейс входа/ выхода другого раздела.
В.5.2.3 Эффективность разделения программного обеспечения
Для того чтобы обеспечить хотя бы среднюю эффективность разделения программного обеспечения и гарантировать достаточную независимость компонентов программного обеспечения, должны реализовываться методы и меры, приведенные в таблице В.1.
Таблица В.1 - Методы и меры в рамках микроконтроллера
Метод/мера |
Искажение (повреждение) памяти |
Блокировка разделов |
Неправильное распределение оперативного времени процессора |
Неправильный коммуникационный узел |
Искажение (повреждение) интерфейса входа/ выхода |
Верификация коммуникации | |||||
1 Однозначный (четко определенный) двунаправленный объект коммуникации а) |
Отсутствует |
Отсутствует |
Отсутствует |
Средняя |
Отсутствует |
2 Строго два однонаправленных объекта коммуникации b) |
Отсутствует |
Отсутствует |
Отсутствует |
Средняя |
Отсутствует |
3 Идентификации для распознавания и/или подтверждения с) |
Отсутствует |
Отсутствует |
Отсутствует |
Высокая |
Отсутствует |
4 Несинхронная коммуникация данных d) |
Отсутствует |
Высокая |
Отсутствует |
Отсутствует |
Отсутствует |
Распределение оперативного времени процессора | |||||
5 Неприоритетное планирование е) |
Отсутствует |
Отсутствует |
Средняя |
Отсутствует |
Отсутствует |
6 Метод разделения времени f) |
Отсутствует |
Отсутствует |
Высокая |
Отсутствует |
Отсутствует |
Распределение ресурсов системы | |||||
7 Механизмы защиты памяти g) |
Высокая |
Отсутствует |
Отсутствует |
Отсутствует |
Отсутствует |
8 Верификация данных, критичных для обеспечения безопасности h) |
Высокая/ средняя |
Отсутствует |
Отсутствует |
Отсутствует |
Отсутствует |
9 Статический анализ i) |
Средняя |
Отсутствует |
Отсутствует |
Отсутствует |
Отсутствует |
10 Статическое распределение j) |
Средняя |
Средняя |
Средняя |
Средняя |
Средняя |
Объектами коммуникации между разделами, указанными в пунктах 1 и 2, являются, например, каналы, очередности сообщений и совместно используемая (разделенная) память. Они не должны использоваться для синхронизации разделов. Доступ между двумя разделами должен быть синхронизирован с использованием для коммуникации совместно используемой (разделенной) памяти. Это может быть выполнено, например, с использованием семафоров. Блокировка доступа для чтения или записи должна быть запрещена при проектировании, когда используется очередность сообщений. MMU задействует концепцию виртуального адресного пространства. Это предотвращает искажение (повреждение) пространства памяти одного раздела задачами другого раздела из-за непреднамеренных записей в пространство памяти за счет того, что каждый раздел имеет собственное адресное пространство памяти. Использование MMU требует поддержки операционной системы. Должны быть обеспечены условия, не позволяющие игнорировать MMU. Следовательно, задачи выполняются в режиме пользователя, а режим реальной адресации не используется. a) Для обмена данными между двумя разделами используется один двунаправленный коммуникационный объект. b) Для обмена данными между двумя разделами используются два однонаправленных коммуникационных объекта. c) Используются уникальные номера для идентификации коммуникационных узлов и/или подтверждения получения сообщения от коммуникационного узла. d) При использовании несинхронной коммуникации данных, как описано в этом пункте, состояние ожидания исключено самой организацией коммуникации. e) Разделы считаются равными при распределении времени процессора, и каждому из разделов присваивается одинаковый приоритет. В отношении распределения времени процессора в этом пункте в каждом цикле работы процессора должно быть предусмотрено некоторое свободное время/буфер из-за входящих прерываний. f) Метод разделения времени устанавливает алгоритм составления графика (планирования), основанный на заранее установленном фиксированном графике (плане), повторяющемся через установленные периоды времени. При использовании метода разделения времени распределение операционного времени процессора происходит через статическую таблицу распределения. Таким образом, для активации (запуска) каждой задачи установлен заранее определенный момент времени. Использование метода разделения времени исключает приоритетное планирование. g) Механизмы защиты памяти обозначают использование соответствующих процессоров, например с MMU или MPU. h) Состояния RAM, содержащего данные, критические для обеспечения безопасности, проверяются использованием дополнительных мер. Для этого можно использовать, например, CRC или резервные (избыточные) средства для хранения данных. Эффективность этой меры в значительной степени зависит от качества верификации. i) Установление соответствующих (адекватных) методов статического анализа для анализа фрагментов кода, которые обеспечивают доступ к ячейкам памяти, содержащим данные, связанные с обеспечением безопасности. j) Ресурсы выделяются статически при инициализации. |
В.5.3 Отдельные разделы в пределах общей сети микроконтроллеров
В.5.3.1 Общие положения
Компоненты программного обеспечения выполняются в пределах соответствующих разделов в рамках собственных микроконтроллеров, как это показано на рисунке В.2.
Рисунок В.2 - Несколько разделов в пределах общей сети микроконтроллеров
Сеть микроконтроллеров может состоять из нескольких процессоров с отдельным ECU и коммуникацией данных через внутреннюю шину (внутренняя коммуникация процессора), как это показано на рисунке В.3. Последующие исследования выполняются по аналогии.
В.5.3.2 Методы разделения для мультипроцессора
Для гарантирования достаточной независимости компонентов программного обеспечения в рамках общей сети микроконтроллеров должно быть обеспечено отсутствие воздействий (влияний) следующих неисправностей на правильность выполнения функций, связанных с обеспечением безопасности:
- отказ коммуникационного узла (коммуникационный узел недоступен);
- непреднамеренное повторение сообщений (одно и то же сообщение непреднамеренно отправляется повторно);
- потеря сообщения (сообщение пропадает в процессе передачи);
- вложение сообщений (получатель непреднамеренно получает дополнительное сообщение, интерпретируемое как имеющее правильный (корректный) источник и адрес доставки);
- переупорядочивание (порядок, в котором данные были направлены в процессе передачи, изменился, т.е. данные будут получены не в том порядке, в котором были направлены);
- искажение (повреждение) сообщения (один или несколько битов данных в сообщении в процессе передачи были изменены);
- задержка сообщения (сообщение получено правильно (корректно), но не вовремя);
- блокировка доступа к шине данных (неисправный узел не придерживается ожидаемой модели использования и выполняет чрезмерные запросы к сервису, тем самым снижая доступность для других узлов, например, во время ожидания несуществующих данных);
Рисунок В.3 - Несколько разделов в пределах мультипроцессора ECU
- постоянная передача сообщений, известная как "болтливый идиот" ("babbling idiot") (неисправный узел постоянно передает информацию, тем самым нарушая функционирование всей шины).
В.5.3.3 Эффективность разделения мультипроцессора
Для гарантии достаточной независимости компонентов программного обеспечения и обеспечения обработки с достаточной эффективностью воздействий (влияний) всех соответствующих неисправностей должны реализовываться методы и меры, приведенные в таблице В.2.
Таблица В.2 - Методы и меры в рамках микроконтроллера
Метод/мера |
Отказ коммуникационного узла |
Непреднамеренное повторение сообщений |
Потеря сообщения |
Вложение сообщения |
Переупорядочивание |
Искажение (повреждение) сообщения и/или ошибки с определением |
Задержка сообщения |
Блокировка доступа к шине данных |
Постоянная передача сообщений |
|
Верификация коммуникации | ||||||||||
1 |
Сохранение существующих сообщений |
Высокая |
Отсутствует |
Отсутствует |
Отсутствует |
Отсутствует |
Средняя |
Отсутствует |
Отсутствует |
Отсутствует |
2 |
Счетчик существования |
Отсутствует |
Высокая |
Средняя |
Средняя |
Отсутствует |
Отсутствует |
Отсутствует |
Отсутствует |
Средняя |
3 |
CRC |
Отсутствует |
Отсутствует |
Отсутствует |
Отсутствует |
Отсутствует |
Высокая |
Отсутствует |
Отсутствует |
Отсутствует |
4 |
Порядковый номер |
Отсутствует |
Высокая |
Высокая |
Высокая |
Высокая |
Отсутствует |
Отсутствует |
Отсутствует |
Средняя |
|
Повторение сообщений |
Отсутствует |
Отсутствует |
Высокая |
Отсутствует |
Средняя |
Средняя |
Отсутствует |
Отсутствует |
Отсутствует |
5 |
Система-наблюдатель |
Высокая |
Отсутствует |
Средняя |
Высокая |
|
|
Высокая |
|
Высокая |
Распределение шины | ||||||||||
6 |
Шина данных, инициируемая временем |
Высокая |
Высокая |
Отсутствует |
Высокая |
Отсутствует |
Отсутствует |
Высокая |
Отсутствует |
|
7 |
Защита шины |
Отсутствует |
Отсутствует |
Отсутствует |
Отсутствует |
Отсутствует |
Средняя |
Отсутствует |
Отсутствует |
Высокая |
8 |
Минимизация слотов |
Отсутствует |
Отсутствует |
Отсутствует |
Отсутствует |
Отсутствует |
Отсутствует |
Средняя |
Отсутствует |
Высокая |
Используя CRC (пункт 3), следует учитывать, что остаточная частота ошибок CRC, реализованного в системе шины, может быть недостаточной, в этом случае рекомендуется применять дополнительный CRC на уровне приложения. Блокировка доступа вызывается микроконтроллером, подключенным к шине, который постоянно обращается к шине и тем самым препятствует доступу к шине для других микроконтроллеров. |
Если вы являетесь пользователем интернет-версии системы ГАРАНТ, вы можете открыть этот документ прямо сейчас или запросить по Горячей линии в системе.