Операционная система реального времени

Поделись знанием:
(перенаправлено с «ОСРВ»)
Перейти к: навигация, поиск

Операционная система реального времени, ОСРВ (англ. real-time operating system, RTOS) — тип операционной системы, основное назначение которой — предоставление необходимого и достаточного набора функций для работы систем реального времени на конкретном аппаратном оборудовании.

  • Спецификация UNIX в редакции 2 даёт следующее определение:

Реальное время в операционных системах — это способность операционной системы обеспечить требуемый уровень сервиса в определённый промежуток времени.[1]

Хорошая ОСРВ имеет предсказуемое поведение при всех сценариях нагрузки, включая одновременные прерывания и выполнение потоков[3].





Системы жёсткого и мягкого реального времени

Операционные системы реального времени иногда делят на два типа — системы жесткого реального времени и системы мягкого реального времени[4].

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

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

Системы жёсткого реального времени не допускают задержек реакции системы, так как это может привести к:

  • потере актуальности результатов;
  • большим финансовым потерям;
  • авариям и катастрофам.

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

В системе мягкого реального времени задержка реакции считается восстановимой ошибкой, которая может привести к увеличению стоимости результатов и снижению производительности, но не является фатальной. Примером может служить работа компьютерной сети[6]. Если система не успела обработать очередной принятый пакет, это приведет к остановке на передающей стороне и повторной посылке (в зависимости от протокола). Данные при этом не теряются, но производительность сети снижается.

Основное отличие систем жёсткого и мягкого реального времени можно охарактеризовать так: система жёсткого реального времени никогда не опоздает с реакцией на событие, система мягкого реального времени не должна опаздывать с реакцией на событие[6].

Часто операционной системой реального времени считают лишь систему, которая может быть использована для решения задач жёсткого реального времени. Это определение означает наличие у ОСРВ необходимых инструментов, но также означает, что эти инструменты необходимо правильно использовать[5].

Большинство программного обеспечения ориентировано на «мягкое» реальное время. Для подобных систем характерно:

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

Классическим примером задачи, где требуется ОСРВ, является управление роботом, берущим деталь с ленты конвейера. Деталь движется, и робот имеет лишь маленький промежуток времени, когда он может её взять. Если он опоздает, то деталь уже не будет на нужном участке конвейера, и следовательно, работа не будет выполнена, несмотря на то, что робот находится в правильном месте. Если он подготовится раньше, то деталь ещё не успеет подъехать, и он заблокирует ей путь.

Отличительные черты ОСРВ

Таблица сравнения ОСРВ и обычных операционных систем[5]:

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

Архитектуры ОСРВ

В своем развитии ОСРВ строились на основе следующих архитектур:

  • Монолитная архитектура. ОС определяется как набор модулей, взаимодействующих между собой внутри ядра системы и предоставляющих прикладному ПО входные интерфейсы для обращений к аппаратуре. Основной недостаток этого принципа построения ОС заключается в плохой предсказуемости её поведения, вызванной сложным взаимодействием модулей между собой.
  • Уровневая (слоевая) архитектура. Прикладное ПО имеет возможность получить доступ к аппаратуре не только через ядро системы и её сервисы, но и напрямую. По сравнению с монолитной такая архитектура обеспечивает значительно большую степень предсказуемости реакций системы, а также позволяет осуществлять быстрый доступ прикладных приложений к аппаратуре. Главным недостатком таких систем является отсутствие многозадачности.
  • Архитектура «клиент-сервер». Основной её принцип заключается в вынесении сервисов ОС в виде серверов на уровень пользователя и выполнении микроядром функций диспетчера сообщений между клиентскими пользовательскими программами и серверами — системными сервисами. Преимущества такой архитектуры:
  1. Повышенная надёжность, так как каждый сервис является, по сути, самостоятельным приложением и его легче отладить и отследить ошибки.
  2. Улучшенная масштабируемость, поскольку ненужные сервисы могут быть исключены из системы без ущерба к её работоспособности.
  3. Повышенная отказоустойчивость, так как «зависший» сервис может быть перезапущен без перезагрузки системы.


Архитектуры операционных систем реального времени
Монолитная архитектура
Уровневая (слоевая) архитектура
Архитектура «клиент–сервер»

Особенности ядра

Ядро ОСРВ обеспечивает функционирование промежуточного абстрактного уровня ОС, который скрывает от прикладного ПО специфику технического устройства процессора (нескольких процессоров) и связанного с ним аппаратного обеспечения[7].

Основные сервисы

Указанный абстрактный уровень предоставляет для прикладного ПО пять основных категорий сервисов[7][8]:

  • Управление задачами. Самая главная группа сервисов. Позволяет разработчикам приложений проектировать программные продукты в виде наборов отдельных программных фрагментов, каждый из которых может относиться к своей тематической области, выполнять отдельную функцию и иметь свой собственный квант времени, отведенный ему для работы. Каждый такой фрагмент называется задачей. Сервисы в рассматриваемой группе обладают способностью запускать задачи и присваивать им приоритеты. Основной сервис здесь — планировщик задач. Он осуществляет контроль над выполнением текущих задач, запускает новые в соответствующий период времени и следит за режимом их работы.
  • Динамическое распределение памяти. Многие (но не все) ядра ОСРВ поддерживают эту группу сервисов. Она позволяет задачам заимствовать области оперативной памяти для временного использования в работе приложений. Часто эти области впоследствии переходят от задачи к задаче, и посредством этого осуществляется быстрая передача большого количества данных между ними. Некоторые очень малые по размеру ядра ОСРВ, которые предполагается использовать в аппаратных средах со строгим ограничением на объём используемой памяти, не поддерживают сервисы динамического распределения памяти.
  • Управление таймерами. Так как встроенные системы предъявляют жёсткие требования к временным рамкам выполнения задач, в состав ядра ОСРВ включается группа сервисов, обеспечивающих управление таймерами для отслеживания лимита времени, в течение которого должна выполняться задача. Эти сервисы измеряют и задают различные промежутки времени (от 1 мкс и выше), генерируют прерывания по истечении временных интервалов и создают разовые и циклические будильники.
  • Взаимодействие между задачами и синхронизация. Сервисы данной группы позволяют задачам обмениваться информацией и обеспечивают её сохранность. Они также дают возможность программным фрагментам согласовывать между собой свою работу для повышения эффективности. Если исключить эти сервисы из состава ядра ОСРВ, то задачи начнут обмениваться искаженной информацией и могут стать помехой для работы соседних задач.
  • Контроль устройства ввода-вывода. Сервисы этой группы обеспечивают работу единого программного интерфейса, взаимодействующего со всем множеством драйверов устройств, которые являются типичными для большинства встроенных систем.

В дополнение к сервисам ядра, многие ОСРВ предлагают линейки дополнительных компонентов для организации таких высокоуровневых понятий, как файловая система, сетевое взаимодействие, управление сетью, управление базой данных, графический пользовательский интерфейс и т. д. Хотя многие из этих компонентов намного больше и сложнее, чем само ядро ОСРВ, они, тем не менее, основываются на его сервисах. Каждый из таких компонентов включается во встроенную систему, только если её сервисы необходимы для выполнения встроенного приложения и только для того, чтоб свести расход памяти к минимуму[7].

Отличия от операционных систем общего назначения

Многие операционные системы общего назначения также поддерживают указанные выше сервисы. Однако ключевым отличием сервисов ядра ОСРВ является детерминированный, основанный на строгом контроле времени, характер их работы. В данном случае под детерминированностью понимается то, что для выполнения одного сервиса операционной системы требуется временной интервал заведомо известной продолжительности. Теоретически это время может быть вычислено по математическим формулам, которые должны быть строго алгебраическими и не должны включать никаких временных параметров случайного характера. Любая случайная величина, определяющая время выполнения задачи в ОСРВ, может вызвать нежелательную задержку в работе приложения, тогда следующая задача не уложится в свой квант времени, что послужит причиной для ошибки[7].

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

Планирование задач

Работа планировщика

Большинство ОСРВ выполняет планирование задач, руководствуясь следующей схемой[7]. Каждой задаче в приложении ставится в соответствие некоторый приоритет. Чем больше приоритет, тем выше должна быть реактивность задачи. Высокая реактивность достигается путём реализации подхода приоритетного вытесняющего планирования (preemptive priority scheduling), суть которого заключается в том, что планировщику разрешается останавливать выполнение любой задачи в произвольный момент времени, если установлено, что другая задача должна быть запущена незамедлительно.

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

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

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

  1. Определяет, должна ли текущая выполняемая задача продолжать работать.
  2. Устанавливает, какая задача должна запускаться следующей.
  3. Сохраняет контекст остановленной задачи (чтобы она потом возобновила работу с места остановки).
  4. Устанавливает контекст для следующей задачи.
  5. Запускает эту задачу.

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

Выполнение задачи

В обычных ОСРВ задача может находиться в 3-х возможных состояниях[9]:

  • задача выполняется;
  • задача готова к выполнению;
  • задача заблокирована.

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

Основная функция администратора ОСРВ заключается в составлении такого планировщика задач.

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

Алгоритмы планирования

В настоящее время для решения задачи эффективного планирования в ОСРВ наиболее интенсивно развиваются два подхода[10]:

  • Статические алгоритмы планирования (RMS, Rate Monotonic Scheduling). Используют приоритетное вытесняющее планирование. Приоритет присваивается каждой задаче до того, как она начала выполняться. Преимущество отдается задачам с самыми короткими периодами выполнения.
  • Динамические алгоритмы планирования (EDF, Earliest Deadline First Scheduling). Приоритет задачам присваивается динамически, причем предпочтение отдается задачам с наиболее ранним предельным временем начала (завершения) выполнения.

При больших загрузках системы EDF более эффективен, нежели RMS.

Взаимодействие между задачами и разделение ресурсов

Многозадачным системам необходимо распределять доступ к ресурсам. Одновременный доступ двух и более процессов к какой-либо области памяти или другим ресурсам представляет определённую угрозу. Существует 3 способа решения этой проблемы[9]:

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

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

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

Выделение памяти

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

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

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

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

Также этот алгоритм отлично функционирует и в настольных системах, особенно тогда, когда во время обработки участка памяти одним ядром следующий участок памяти обрабатывается другим ядром. Такие оптимизированные для настольных систем ОСРВ, как Unison Operating System или DSPnano RTOS, предоставляют указанную возможность.

Напишите отзыв о статье "Операционная система реального времени"

Примечания

  1. С. Золотарев. [www.rtsoft.ru/press/articles/detail.php?ID=1486 Операционные системы реального времени для 32-разрядных микропроцессоров]
  2. The Open Group [pubs.opengroup.org/onlinepubs/007908775/xsh/realtime.html The Single UNIX Specification, version 2]
  3. [www.ece.cmu.edu/~ece749/docs/whatMakesAGoodRtos.pdf What makes a good RTOS], Dedicated Systems Experts NV, June 11, 2001
  4. И. Б. Бурдонов, А. С. Косачев, В. Н. Пономаренко. [www.citforum.ru/operating_systems/rtos/1.shtml Операционные системы реального времени] п. 1. Введение: Особенности операционных систем реального времени
  5. 1 2 3 А. А. Жданов. [www.asutp.ru/?p=600591 Операционные системы реального времени]
  6. 1 2 Е. Хухлаев. [www.osp.ru/os/1997/05/179265/ Операционные системы реального времени и Windows NT]
  7. 1 2 3 4 5 6 7 8 D. Kalinsky. [www.linuxdevices.com/articles/AT4627965573.html Basic concepts of real-time operating systems]. [archive.is/9JSEq Архивировано из первоисточника 28 января 2013]. (англ.)
  8. А. А. Блискавицкий, С. В. Кабаев. [www.mka.ru/?p=40774 Операционные системы реального времени (обзор)]
  9. 1 2 3 4 Статья «Real-time operating system» (англ.)
  10. И. Б. Бурдонов, А. С. Косачев, В. Н. Пономаренко. [www.citforum.ru/operating_systems/rtos/3.shtml Операционные системы реального времени] п. 1.2. Планирование, приоритеты

Литература

  • Зыль С. Операционная система реального времени QNX: от теории к практике. — 2-е изд. — СПб.: БХВ-Петербург, 2004. — 192 с. — ISBN 5-94157-486-X.
  • Зыль С. QNX Momentics. Основы применения. — СПб.: БХВ-Петербург, 2004. — 256 с. — ISBN 5-94157-430-4.
  • Кёртен Р. Введение в QNX/Neutrino 2. — СПб.: Петрополис, 2001. — 512 с. — ISBN 5-94656-025-9.
  • Ослэндер Д. М., Риджли Дж. Р., Рингенберг Дж. Д. Управляющие программы для механических систем: Объектно-ориентированное проектирование систем реального времени. — М.: Бином. Лаборатория знаний, 2004. — 416 с. — ISBN 5-94774-097-4.

Ссылки

  • [www.citforum.ru/operating_systems/rtos/ Операционные системы реального времени]
  • [robot-develop.org/archives/tag/freertos Цикл статей про FreeRTOS]
  • [www.embedded.com/columns/showArticle.jhtml?articleID=187203732 Обзор операционных систем реального времени]  (англ.) (недоступная ссылка с 01-04-2014 (3679 дней))
  • National Instruments, [www.ni.com/white-paper/3938/en/ What is a Real-Time Operating System (RTOS)? ] (white paper) 2013 (англ.)

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

– Ну, au revoir, [до свиданья,] прощайте. Видите?
– Так завтра вы доложите государю?
– Непременно, а Кутузову не обещаю.
– Нет, обещайте, обещайте, Basile, [Василий,] – сказала вслед ему Анна Михайловна, с улыбкой молодой кокетки, которая когда то, должно быть, была ей свойственна, а теперь так не шла к ее истощенному лицу.
Она, видимо, забыла свои годы и пускала в ход, по привычке, все старинные женские средства. Но как только он вышел, лицо ее опять приняло то же холодное, притворное выражение, которое было на нем прежде. Она вернулась к кружку, в котором виконт продолжал рассказывать, и опять сделала вид, что слушает, дожидаясь времени уехать, так как дело ее было сделано.
– Но как вы находите всю эту последнюю комедию du sacre de Milan? [миланского помазания?] – сказала Анна Павловна. Et la nouvelle comedie des peuples de Genes et de Lucques, qui viennent presenter leurs voeux a M. Buonaparte assis sur un trone, et exaucant les voeux des nations! Adorable! Non, mais c'est a en devenir folle! On dirait, que le monde entier a perdu la tete. [И вот новая комедия: народы Генуи и Лукки изъявляют свои желания господину Бонапарте. И господин Бонапарте сидит на троне и исполняет желания народов. 0! это восхитительно! Нет, от этого можно с ума сойти. Подумаешь, что весь свет потерял голову.]
Князь Андрей усмехнулся, прямо глядя в лицо Анны Павловны.
– «Dieu me la donne, gare a qui la touche», – сказал он (слова Бонапарте, сказанные при возложении короны). – On dit qu'il a ete tres beau en prononcant ces paroles, [Бог мне дал корону. Беда тому, кто ее тронет. – Говорят, он был очень хорош, произнося эти слова,] – прибавил он и еще раз повторил эти слова по итальянски: «Dio mi la dona, guai a chi la tocca».
– J'espere enfin, – продолжала Анна Павловна, – que ca a ete la goutte d'eau qui fera deborder le verre. Les souverains ne peuvent plus supporter cet homme, qui menace tout. [Надеюсь, что это была, наконец, та капля, которая переполнит стакан. Государи не могут более терпеть этого человека, который угрожает всему.]
– Les souverains? Je ne parle pas de la Russie, – сказал виконт учтиво и безнадежно: – Les souverains, madame! Qu'ont ils fait pour Louis XVII, pour la reine, pour madame Elisabeth? Rien, – продолжал он одушевляясь. – Et croyez moi, ils subissent la punition pour leur trahison de la cause des Bourbons. Les souverains? Ils envoient des ambassadeurs complimenter l'usurpateur. [Государи! Я не говорю о России. Государи! Но что они сделали для Людовика XVII, для королевы, для Елизаветы? Ничего. И, поверьте мне, они несут наказание за свою измену делу Бурбонов. Государи! Они шлют послов приветствовать похитителя престола.]
И он, презрительно вздохнув, опять переменил положение. Князь Ипполит, долго смотревший в лорнет на виконта, вдруг при этих словах повернулся всем телом к маленькой княгине и, попросив у нее иголку, стал показывать ей, рисуя иголкой на столе, герб Конде. Он растолковывал ей этот герб с таким значительным видом, как будто княгиня просила его об этом.
– Baton de gueules, engrele de gueules d'azur – maison Conde, [Фраза, не переводимая буквально, так как состоит из условных геральдических терминов, не вполне точно употребленных. Общий смысл такой : Герб Конде представляет щит с красными и синими узкими зазубренными полосами,] – говорил он.
Княгиня, улыбаясь, слушала.
– Ежели еще год Бонапарте останется на престоле Франции, – продолжал виконт начатый разговор, с видом человека не слушающего других, но в деле, лучше всех ему известном, следящего только за ходом своих мыслей, – то дела пойдут слишком далеко. Интригой, насилием, изгнаниями, казнями общество, я разумею хорошее общество, французское, навсегда будет уничтожено, и тогда…
Он пожал плечами и развел руками. Пьер хотел было сказать что то: разговор интересовал его, но Анна Павловна, караулившая его, перебила.
– Император Александр, – сказала она с грустью, сопутствовавшей всегда ее речам об императорской фамилии, – объявил, что он предоставит самим французам выбрать образ правления. И я думаю, нет сомнения, что вся нация, освободившись от узурпатора, бросится в руки законного короля, – сказала Анна Павловна, стараясь быть любезной с эмигрантом и роялистом.
– Это сомнительно, – сказал князь Андрей. – Monsieur le vicomte [Господин виконт] совершенно справедливо полагает, что дела зашли уже слишком далеко. Я думаю, что трудно будет возвратиться к старому.
– Сколько я слышал, – краснея, опять вмешался в разговор Пьер, – почти всё дворянство перешло уже на сторону Бонапарта.
– Это говорят бонапартисты, – сказал виконт, не глядя на Пьера. – Теперь трудно узнать общественное мнение Франции.
– Bonaparte l'a dit, [Это сказал Бонапарт,] – сказал князь Андрей с усмешкой.
(Видно было, что виконт ему не нравился, и что он, хотя и не смотрел на него, против него обращал свои речи.)
– «Je leur ai montre le chemin de la gloire» – сказал он после недолгого молчания, опять повторяя слова Наполеона: – «ils n'en ont pas voulu; je leur ai ouvert mes antichambres, ils se sont precipites en foule»… Je ne sais pas a quel point il a eu le droit de le dire. [Я показал им путь славы: они не хотели; я открыл им мои передние: они бросились толпой… Не знаю, до какой степени имел он право так говорить.]
– Aucun, [Никакого,] – возразил виконт. – После убийства герцога даже самые пристрастные люди перестали видеть в нем героя. Si meme ca a ete un heros pour certaines gens, – сказал виконт, обращаясь к Анне Павловне, – depuis l'assassinat du duc il y a un Marietyr de plus dans le ciel, un heros de moins sur la terre. [Если он и был героем для некоторых людей, то после убиения герцога одним мучеником стало больше на небесах и одним героем меньше на земле.]
Не успели еще Анна Павловна и другие улыбкой оценить этих слов виконта, как Пьер опять ворвался в разговор, и Анна Павловна, хотя и предчувствовавшая, что он скажет что нибудь неприличное, уже не могла остановить его.
– Казнь герцога Энгиенского, – сказал мсье Пьер, – была государственная необходимость; и я именно вижу величие души в том, что Наполеон не побоялся принять на себя одного ответственность в этом поступке.
– Dieul mon Dieu! [Боже! мой Боже!] – страшным шопотом проговорила Анна Павловна.
– Comment, M. Pierre, vous trouvez que l'assassinat est grandeur d'ame, [Как, мсье Пьер, вы видите в убийстве величие души,] – сказала маленькая княгиня, улыбаясь и придвигая к себе работу.
– Ah! Oh! – сказали разные голоса.
– Capital! [Превосходно!] – по английски сказал князь Ипполит и принялся бить себя ладонью по коленке.
Виконт только пожал плечами. Пьер торжественно посмотрел поверх очков на слушателей.
– Я потому так говорю, – продолжал он с отчаянностью, – что Бурбоны бежали от революции, предоставив народ анархии; а один Наполеон умел понять революцию, победить ее, и потому для общего блага он не мог остановиться перед жизнью одного человека.
– Не хотите ли перейти к тому столу? – сказала Анна Павловна.
Но Пьер, не отвечая, продолжал свою речь.
– Нет, – говорил он, все более и более одушевляясь, – Наполеон велик, потому что он стал выше революции, подавил ее злоупотребления, удержав всё хорошее – и равенство граждан, и свободу слова и печати – и только потому приобрел власть.
– Да, ежели бы он, взяв власть, не пользуясь ею для убийства, отдал бы ее законному королю, – сказал виконт, – тогда бы я назвал его великим человеком.
– Он бы не мог этого сделать. Народ отдал ему власть только затем, чтоб он избавил его от Бурбонов, и потому, что народ видел в нем великого человека. Революция была великое дело, – продолжал мсье Пьер, выказывая этим отчаянным и вызывающим вводным предложением свою великую молодость и желание всё полнее высказать.
– Революция и цареубийство великое дело?…После этого… да не хотите ли перейти к тому столу? – повторила Анна Павловна.
– Contrat social, [Общественный договор,] – с кроткой улыбкой сказал виконт.
– Я не говорю про цареубийство. Я говорю про идеи.
– Да, идеи грабежа, убийства и цареубийства, – опять перебил иронический голос.
– Это были крайности, разумеется, но не в них всё значение, а значение в правах человека, в эманципации от предрассудков, в равенстве граждан; и все эти идеи Наполеон удержал во всей их силе.
– Свобода и равенство, – презрительно сказал виконт, как будто решившийся, наконец, серьезно доказать этому юноше всю глупость его речей, – всё громкие слова, которые уже давно компрометировались. Кто же не любит свободы и равенства? Еще Спаситель наш проповедывал свободу и равенство. Разве после революции люди стали счастливее? Напротив. Mы хотели свободы, а Бонапарте уничтожил ее.
Князь Андрей с улыбкой посматривал то на Пьера, то на виконта, то на хозяйку. В первую минуту выходки Пьера Анна Павловна ужаснулась, несмотря на свою привычку к свету; но когда она увидела, что, несмотря на произнесенные Пьером святотатственные речи, виконт не выходил из себя, и когда она убедилась, что замять этих речей уже нельзя, она собралась с силами и, присоединившись к виконту, напала на оратора.
– Mais, mon cher m r Pierre, [Но, мой милый Пьер,] – сказала Анна Павловна, – как же вы объясняете великого человека, который мог казнить герцога, наконец, просто человека, без суда и без вины?
– Я бы спросил, – сказал виконт, – как monsieur объясняет 18 брюмера. Разве это не обман? C'est un escamotage, qui ne ressemble nullement a la maniere d'agir d'un grand homme. [Это шулерство, вовсе не похожее на образ действий великого человека.]
– А пленные в Африке, которых он убил? – сказала маленькая княгиня. – Это ужасно! – И она пожала плечами.
– C'est un roturier, vous aurez beau dire, [Это проходимец, что бы вы ни говорили,] – сказал князь Ипполит.
Мсье Пьер не знал, кому отвечать, оглянул всех и улыбнулся. Улыбка у него была не такая, какая у других людей, сливающаяся с неулыбкой. У него, напротив, когда приходила улыбка, то вдруг, мгновенно исчезало серьезное и даже несколько угрюмое лицо и являлось другое – детское, доброе, даже глуповатое и как бы просящее прощения.
Виконту, который видел его в первый раз, стало ясно, что этот якобинец совсем не так страшен, как его слова. Все замолчали.
– Как вы хотите, чтобы он всем отвечал вдруг? – сказал князь Андрей. – Притом надо в поступках государственного человека различать поступки частного лица, полководца или императора. Мне так кажется.
– Да, да, разумеется, – подхватил Пьер, обрадованный выступавшею ему подмогой.
– Нельзя не сознаться, – продолжал князь Андрей, – Наполеон как человек велик на Аркольском мосту, в госпитале в Яффе, где он чумным подает руку, но… но есть другие поступки, которые трудно оправдать.
Князь Андрей, видимо желавший смягчить неловкость речи Пьера, приподнялся, сбираясь ехать и подавая знак жене.

Вдруг князь Ипполит поднялся и, знаками рук останавливая всех и прося присесть, заговорил:
– Ah! aujourd'hui on m'a raconte une anecdote moscovite, charmante: il faut que je vous en regale. Vous m'excusez, vicomte, il faut que je raconte en russe. Autrement on ne sentira pas le sel de l'histoire. [Сегодня мне рассказали прелестный московский анекдот; надо вас им поподчивать. Извините, виконт, я буду рассказывать по русски, иначе пропадет вся соль анекдота.]
И князь Ипполит начал говорить по русски таким выговором, каким говорят французы, пробывшие с год в России. Все приостановились: так оживленно, настоятельно требовал князь Ипполит внимания к своей истории.
– В Moscou есть одна барыня, une dame. И она очень скупа. Ей нужно было иметь два valets de pied [лакея] за карета. И очень большой ростом. Это было ее вкусу. И она имела une femme de chambre [горничную], еще большой росту. Она сказала…
Тут князь Ипполит задумался, видимо с трудом соображая.
– Она сказала… да, она сказала: «девушка (a la femme de chambre), надень livree [ливрею] и поедем со мной, за карета, faire des visites». [делать визиты.]
Тут князь Ипполит фыркнул и захохотал гораздо прежде своих слушателей, что произвело невыгодное для рассказчика впечатление. Однако многие, и в том числе пожилая дама и Анна Павловна, улыбнулись.
– Она поехала. Незапно сделался сильный ветер. Девушка потеряла шляпа, и длинны волоса расчесались…
Тут он не мог уже более держаться и стал отрывисто смеяться и сквозь этот смех проговорил:
– И весь свет узнал…
Тем анекдот и кончился. Хотя и непонятно было, для чего он его рассказывает и для чего его надо было рассказать непременно по русски, однако Анна Павловна и другие оценили светскую любезность князя Ипполита, так приятно закончившего неприятную и нелюбезную выходку мсье Пьера. Разговор после анекдота рассыпался на мелкие, незначительные толки о будущем и прошедшем бале, спектакле, о том, когда и где кто увидится.


Поблагодарив Анну Павловну за ее charmante soiree, [очаровательный вечер,] гости стали расходиться.
Пьер был неуклюж. Толстый, выше обыкновенного роста, широкий, с огромными красными руками, он, как говорится, не умел войти в салон и еще менее умел из него выйти, то есть перед выходом сказать что нибудь особенно приятное. Кроме того, он был рассеян. Вставая, он вместо своей шляпы захватил трехугольную шляпу с генеральским плюмажем и держал ее, дергая султан, до тех пор, пока генерал не попросил возвратить ее. Но вся его рассеянность и неуменье войти в салон и говорить в нем выкупались выражением добродушия, простоты и скромности. Анна Павловна повернулась к нему и, с христианскою кротостью выражая прощение за его выходку, кивнула ему и сказала:
– Надеюсь увидать вас еще, но надеюсь тоже, что вы перемените свои мнения, мой милый мсье Пьер, – сказала она.
Когда она сказала ему это, он ничего не ответил, только наклонился и показал всем еще раз свою улыбку, которая ничего не говорила, разве только вот что: «Мнения мнениями, а вы видите, какой я добрый и славный малый». И все, и Анна Павловна невольно почувствовали это.
Князь Андрей вышел в переднюю и, подставив плечи лакею, накидывавшему ему плащ, равнодушно прислушивался к болтовне своей жены с князем Ипполитом, вышедшим тоже в переднюю. Князь Ипполит стоял возле хорошенькой беременной княгини и упорно смотрел прямо на нее в лорнет.
– Идите, Annette, вы простудитесь, – говорила маленькая княгиня, прощаясь с Анной Павловной. – C'est arrete, [Решено,] – прибавила она тихо.
Анна Павловна уже успела переговорить с Лизой о сватовстве, которое она затевала между Анатолем и золовкой маленькой княгини.
– Я надеюсь на вас, милый друг, – сказала Анна Павловна тоже тихо, – вы напишете к ней и скажете мне, comment le pere envisagera la chose. Au revoir, [Как отец посмотрит на дело. До свидания,] – и она ушла из передней.
Князь Ипполит подошел к маленькой княгине и, близко наклоняя к ней свое лицо, стал полушопотом что то говорить ей.
Два лакея, один княгинин, другой его, дожидаясь, когда они кончат говорить, стояли с шалью и рединготом и слушали их, непонятный им, французский говор с такими лицами, как будто они понимали, что говорится, но не хотели показывать этого. Княгиня, как всегда, говорила улыбаясь и слушала смеясь.
– Я очень рад, что не поехал к посланнику, – говорил князь Ипполит: – скука… Прекрасный вечер, не правда ли, прекрасный?
– Говорят, что бал будет очень хорош, – отвечала княгиня, вздергивая с усиками губку. – Все красивые женщины общества будут там.
– Не все, потому что вас там не будет; не все, – сказал князь Ипполит, радостно смеясь, и, схватив шаль у лакея, даже толкнул его и стал надевать ее на княгиню.
От неловкости или умышленно (никто бы не мог разобрать этого) он долго не опускал рук, когда шаль уже была надета, и как будто обнимал молодую женщину.
Она грациозно, но всё улыбаясь, отстранилась, повернулась и взглянула на мужа. У князя Андрея глаза были закрыты: так он казался усталым и сонным.
– Вы готовы? – спросил он жену, обходя ее взглядом.
Князь Ипполит торопливо надел свой редингот, который у него, по новому, был длиннее пяток, и, путаясь в нем, побежал на крыльцо за княгиней, которую лакей подсаживал в карету.
– Рrincesse, au revoir, [Княгиня, до свиданья,] – кричал он, путаясь языком так же, как и ногами.
Княгиня, подбирая платье, садилась в темноте кареты; муж ее оправлял саблю; князь Ипполит, под предлогом прислуживания, мешал всем.
– Па звольте, сударь, – сухо неприятно обратился князь Андрей по русски к князю Ипполиту, мешавшему ему пройти.
– Я тебя жду, Пьер, – ласково и нежно проговорил тот же голос князя Андрея.
Форейтор тронулся, и карета загремела колесами. Князь Ипполит смеялся отрывисто, стоя на крыльце и дожидаясь виконта, которого он обещал довезти до дому.

– Eh bien, mon cher, votre petite princesse est tres bien, tres bien, – сказал виконт, усевшись в карету с Ипполитом. – Mais tres bien. – Он поцеловал кончики своих пальцев. – Et tout a fait francaise. [Ну, мой дорогой, ваша маленькая княгиня очень мила! Очень мила и совершенная француженка.]
Ипполит, фыркнув, засмеялся.
– Et savez vous que vous etes terrible avec votre petit air innocent, – продолжал виконт. – Je plains le pauvre Mariei, ce petit officier, qui se donne des airs de prince regnant.. [А знаете ли, вы ужасный человек, несмотря на ваш невинный вид. Мне жаль бедного мужа, этого офицерика, который корчит из себя владетельную особу.]
Ипполит фыркнул еще и сквозь смех проговорил:
– Et vous disiez, que les dames russes ne valaient pas les dames francaises. Il faut savoir s'y prendre. [А вы говорили, что русские дамы хуже французских. Надо уметь взяться.]
Пьер, приехав вперед, как домашний человек, прошел в кабинет князя Андрея и тотчас же, по привычке, лег на диван, взял первую попавшуюся с полки книгу (это были Записки Цезаря) и принялся, облокотившись, читать ее из середины.
– Что ты сделал с m lle Шерер? Она теперь совсем заболеет, – сказал, входя в кабинет, князь Андрей и потирая маленькие, белые ручки.
Пьер поворотился всем телом, так что диван заскрипел, обернул оживленное лицо к князю Андрею, улыбнулся и махнул рукой.
– Нет, этот аббат очень интересен, но только не так понимает дело… По моему, вечный мир возможен, но я не умею, как это сказать… Но только не политическим равновесием…
Князь Андрей не интересовался, видимо, этими отвлеченными разговорами.
– Нельзя, mon cher, [мой милый,] везде всё говорить, что только думаешь. Ну, что ж, ты решился, наконец, на что нибудь? Кавалергард ты будешь или дипломат? – спросил князь Андрей после минутного молчания.
Пьер сел на диван, поджав под себя ноги.
– Можете себе представить, я всё еще не знаю. Ни то, ни другое мне не нравится.
– Но ведь надо на что нибудь решиться? Отец твой ждет.
Пьер с десятилетнего возраста был послан с гувернером аббатом за границу, где он пробыл до двадцатилетнего возраста. Когда он вернулся в Москву, отец отпустил аббата и сказал молодому человеку: «Теперь ты поезжай в Петербург, осмотрись и выбирай. Я на всё согласен. Вот тебе письмо к князю Василью, и вот тебе деньги. Пиши обо всем, я тебе во всем помога». Пьер уже три месяца выбирал карьеру и ничего не делал. Про этот выбор и говорил ему князь Андрей. Пьер потер себе лоб.
– Но он масон должен быть, – сказал он, разумея аббата, которого он видел на вечере.
– Всё это бредни, – остановил его опять князь Андрей, – поговорим лучше о деле. Был ты в конной гвардии?…
– Нет, не был, но вот что мне пришло в голову, и я хотел вам сказать. Теперь война против Наполеона. Ежели б это была война за свободу, я бы понял, я бы первый поступил в военную службу; но помогать Англии и Австрии против величайшего человека в мире… это нехорошо…
Князь Андрей только пожал плечами на детские речи Пьера. Он сделал вид, что на такие глупости нельзя отвечать; но действительно на этот наивный вопрос трудно было ответить что нибудь другое, чем то, что ответил князь Андрей.
– Ежели бы все воевали только по своим убеждениям, войны бы не было, – сказал он.
– Это то и было бы прекрасно, – сказал Пьер.
Князь Андрей усмехнулся.
– Очень может быть, что это было бы прекрасно, но этого никогда не будет…
– Ну, для чего вы идете на войну? – спросил Пьер.
– Для чего? я не знаю. Так надо. Кроме того я иду… – Oн остановился. – Я иду потому, что эта жизнь, которую я веду здесь, эта жизнь – не по мне!