Виртуальная память

Поделись знанием:
Перейти к: навигация, поиск

Виртуа́льная па́мять (англ. virtual memory) — метод управления памятью компьютера, позволяющий выполнять программы, требующие больше оперативной памяти, чем имеется в компьютере, путём автоматического перемещения частей программы между основной памятью и вторичным хранилищем (например, жёстким диском)[1][2][3]. Для выполняющейся программы данный метод полностью прозрачен и не требует дополнительных усилий со стороны программиста, однако реализация этого метода требует как аппаратной поддержки, так и поддержки со стороны операционной системы.

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

Применение виртуальной памяти позволяет:

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

В настоящее время виртуальная память аппаратно поддерживается в большинстве современных процессоров[1]. В то же время в микроконтроллерах и в системах специального назначения, где требуется либо очень быстрая работа, либо есть ограничения на длительность отклика (системы реального времени) виртуальная память используется относительно редко. Также в таких системах реже встречается многозадачность и сложные иерархии памяти.





История

В 1940-е и 1950-е годы все программы, размер которых превышал объём оперативной памяти, должны были содержать логику управления оперативной и внешней памятью, такую как оверлей. В связи с этим виртуальная память была введена не только для увеличения объёма оперативной памяти, но и для того, чтобы сделать такое увеличение наиболее простым в использовании для программистов.[4] Для поддержки мультипрограммирования и многозадачности во многих ранних компьютерных системах разделение памяти между несколькими программами осуществлялось без виртуальной памяти, с помощью сегментации (например, в компьютерах PDP-10).

Понятие виртуальной памяти было впервые введено в 1956 году немецким физиком Фрицем-Рудольфом Гюнтшем (нем. Fritz-Rudolf Güntsch) из Берлинского технического университета в его докторской диссертации «Логическое проектирование цифровой вычислительной машины с несколькими асинхронными вращающимися барабанами и автоматическим высокоскоростным управлением памятью». В ней описывается машина с 6 блоками памяти на магнитных сердечниках ёмкостью 100 слов каждый и адресным пространством в 1000 блоков по 100 слов. Аппаратное обеспечение машины автоматически перемещает блоки между основной и внешней памятью на магнитных барабанах.[5][6] Подкачка страниц впервые была реализована в Манчестерском университете как способ расширения памяти компьютера Atlas путём объединения его основной памяти на магнитных сердечниках объёмом 16000 слов с памятью на магнитных барабанах ёмкостью 96000 слов. Первая поставка машины Atlas состоялась в 1962 году, но работающие прототипы подкачки страниц были разработаны уже в 1959 году.[4][7][8] В 1961 году Burroughs Corporation независимо выпустила первый промышленно производившийся компьютер с виртуальной памятью B5000, использующий сегментацию вместо подкачки страниц.[9][10] В 1965 году виртуальная память была реализована в отечественной машине БЭСМ-6, хотя реализованный механизм не позволял расширить 15-разрядное адресное пространство процесса и ограничивал удобство программирования.[11]

Прежде чем виртуальная память смогла быть использована в распространённых операционных системах, должен был быть решен ряд проблем. Динамическая трансляция адресов требовала дорогого и сложного в изготовлении специального оборудования. Первые реализации замедляли доступ к памяти.[4] Существовали опасения, что новые общесистемные алгоритмы, использующие внешнюю память, будут менее эффективны, чем ранее использовавшиеся алгоритмы конкретных приложений. К 1969 году дебаты вокруг виртуальной памяти для промышленно выпускаемых компьютеров были завершены: команда исследователей из IBM под руководством Дэвида Сейра (англ. David Sayre) показала, что созданная ими система виртуальной памяти во всех отношениях превосходит самые лучшие системы, управляемые вручную.[4][12] Первым мини-компьютером, в котором была использована виртуальная память, был норвежский NORD-1. В 1970-е годы реализации виртуальной памяти появились в других мини-компьютерах, наиболее известным является VAX, работающий под управлением операционной системы VMS.

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

Страничная организация виртуальной памяти

В большинстве современных операционных систем виртуальная память организуется с помощью страничной адресации. Оперативная память делится на страницы: области памяти фиксированной длины (например, 4096 байт), которые являются минимальной единицей выделяемой памяти (то есть даже запрос на 1 байт от приложения приведёт к выделению ему страницы памяти). Исполняемый процессором пользовательский поток обращается к памяти с помощью адреса виртуальной памяти, который делится на номер страницы и смещение внутри страницы. Процессор преобразует номер виртуальной страницы в адрес соответствующей ей физической страницы при помощи буфера ассоциативной трансляции (TLB). Если ему не удалось это сделать, то требуется дозаполнение буфера путём обращения к таблице страниц (так называемый Page Walk), что может сделать либо сам процессор, либо операционная система (в зависимости от архитектуры)[13]. Если страница была выгружена из оперативной памяти, то операционная система подкачивает страницу с жёсткого диска в ходе обработки события Page fault (англ.) (см. свопинг, подкачка страниц). При запросе на выделение памяти операционная система может «сбросить» на жёсткий диск страницы, к которым давно не было обращений. Критические данные (например, код запущенных и работающих программ, код и память ядра системы) обычно находятся в оперативной памяти (исключения существуют, однако они не касаются тех частей, которые отвечают за обработку аппаратных прерываний, работу с таблицей страниц и использование файла подкачки).

Сегментная организация виртуальной памяти

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

Виртуальный адрес при сегментной организации памяти может быть представлен парой (g, s), где g — номер сегмента, а s — смещение в сегменте. Физический адрес получается путём сложения начального физического адреса сегмента, найденного в таблице сегментов по номеру g, и смещения s.

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

См. также

Напишите отзыв о статье "Виртуальная память"

Примечания

  1. 1 2 Э. Танненбаум. Архитектура компьютера = Structured Computer Organization. — 5-е изд. — СПб.: Питер, 2013. — С. 476. — 884 с. — ISBN 978-5-469-01274-0.
  2. Ч. Кэпс. Р. Стаффорд. VAX: Программирование на языке ассемблера и архитектура = VAX assembly language and architecture. — М.: Радио и связь, 1991. — С. 310. — 416 с. — ISBN 5-256-00706-8.
  3. Морс С.П., Алберт Д.Д. Архитектура микропроцессора 80286 = The 80286 architecture. — М.: Радио и связь, 1990. — С. 167. — 304 с. — ISBN 5-256-00466-2.
  4. 1 2 3 4 Peter J. Denning [cs.gmu.edu/cne/pjd/PUBS/bvm.pdf Before Memory Was Virtual] // In the Beginning: Recollections of Software Pioneers. — 1997.
  5. Elke Jessen Origin of the Virtual Memory Concept // IEEE Annals of the History of Computing. — 2004. — Т. 26, вып. 4. — С. 71-72.
  6. Elke Jessen Die Entwicklung des virtuellen Speichers // Informatik-Spektrum. — Springer-Verlag, 1996. — Т. 19, вып. 4. — С. 216–219. — ISSN [www.sigla.ru/table.jsp?f=8&t=3&v0=0170-6012&f=1003&t=1&v1=&f=4&t=2&v2=&f=21&t=3&v3=&f=1016&t=3&v4=&f=1016&t=3&v5=&bf=4&b=&d=0&ys=&ye=&lng=&ft=&mt=&dt=&vol=&pt=&iss=&ps=&pe=&tr=&tro=&cc=UNION&i=1&v=tagged&s=0&ss=0&st=0&i18n=ru&rlf=&psz=20&bs=20&ce=hJfuypee8JzzufeGmImYYIpZKRJeeOeeWGJIZRrRRrdmtdeee88NJJJJpeeefTJ3peKJJ3UWWPtzzzzzzzzzzzzzzzzzbzzvzzpy5zzjzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzztzzzzzzzbzzzzzzzzzzzzzzzzzzzzzzzzzzzvzzzzzzyeyTjkDnyHzTuueKZePz9decyzzLzzzL*.c8.NzrGJJvufeeeeeJheeyzjeeeeJh*peeeeKJJJJJJJJJJmjHvOJJJJJJJJJfeeeieeeeSJJJJJSJJJ3TeIJJJJ3..E.UEAcyhxD.eeeeeuzzzLJJJJ5.e8JJJheeeeeeeeeeeeyeeK3JJJJJJJJ*s7defeeeeeeeeeeeeeeeeeeeeeeeeeSJJJJJJJJZIJJzzz1..6LJJJJJJtJJZ4....EK*&debug=false 0170-6012]. — DOI:10.1007/s002870050034.
  7. R. J. Creasy [pages.cs.wisc.edu/~stjones/proj/vm_reading/ibmrd2505M.pdf The origin of the VM/370 time-sharing system] // IBM Journal of Research & Development. — 1981. — Т. 25, № 5. — С. 486.
  8. [www.computer50.org/kgill/atlas/atlas.html Atlas design includes virtual memory]
  9. [web.archive.org/web/20080213220156/web.mac.com/joynerian/iWeb/Ian%20Joyner/Burroughs.html Ian Joyner on Burroughs B5000]
  10. Harvey G. Cragon. [books.google.com/?id=q2w3JSFD7l4C Memory Systems and Pipelined Processors]. — Jones and Bartlett Publishers, 1996. — С. 113. — ISBN 0-86720-474-5.
  11. Королёв Л. Н. [www.parallel.ru/history/besm6.html Архитектура ЭВМ БЭСМ-6]. Из книги Л. Н. Королёва «Структуры ЭВМ и их математическое обеспечение» (1978). PARALLEL.RU - Информационно-аналитический центр по параллельным вычислениям:. Проверено 7 августа 2009. [www.webcitation.org/61GH8DCpC Архивировано из первоисточника 28 августа 2011].
  12. D. Sayre Is automatic "folding" of programs efficient enough to displace manual? // Communications of the ACM. — ACM, 1969. — Т. 12, вып. 12. — С. 656-660. — ISSN [www.sigla.ru/table.jsp?f=8&t=3&v0=0001-0782&f=1003&t=1&v1=&f=4&t=2&v2=&f=21&t=3&v3=&f=1016&t=3&v4=&f=1016&t=3&v5=&bf=4&b=&d=0&ys=&ye=&lng=&ft=&mt=&dt=&vol=&pt=&iss=&ps=&pe=&tr=&tro=&cc=UNION&i=1&v=tagged&s=0&ss=0&st=0&i18n=ru&rlf=&psz=20&bs=20&ce=hJfuypee8JzzufeGmImYYIpZKRJeeOeeWGJIZRrRRrdmtdeee88NJJJJpeeefTJ3peKJJ3UWWPtzzzzzzzzzzzzzzzzzbzzvzzpy5zzjzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzztzzzzzzzbzzzzzzzzzzzzzzzzzzzzzzzzzzzvzzzzzzyeyTjkDnyHzTuueKZePz9decyzzLzzzL*.c8.NzrGJJvufeeeeeJheeyzjeeeeJh*peeeeKJJJJJJJJJJmjHvOJJJJJJJJJfeeeieeeeSJJJJJSJJJ3TeIJJJJ3..E.UEAcyhxD.eeeeeuzzzLJJJJ5.e8JJJheeeeeeeeeeeeyeeK3JJJJJJJJ*s7defeeeeeeeeeeeeeeeeeeeeeeeeeSJJJJJJJJZIJJzzz1..6LJJJJJJtJJZ4....EK*&debug=false 0001-0782]. — DOI:10.1145/363626.363629.
  13. Patterson&Hennessy «Computer organisation and Design. Hardware Software Interface.» 4th edition. Chap 5.4, page 503
  14. В семействе операционных систем Microsoft Windows сегментная адресация не используется и заменена делением памяти на секции, что в сущности почти одно и то же.

Литература

  • Вахалия Ю. UNIX изнутри. — СПб.: Питер, 2003. С.844. ISBN 5-94723-013-5
  • Иртегов Д. Введение в операционные системы. СПб.: Питер, 2002.
  • Bruce Jacob, Trevor Mudge. Virtual Memory: Issues of Implementation. — Los Alamitos, CA, USA: IEEE Computer Society Press, 1998. ISSN:0018-9162
  • [www.intuit.ru/studies/courses/2192/31/lecture/984 Лекция 9: Виртуальная память. Архитектурные средства поддержки виртуальной памяти] / Основы операционных систем ISBN 978-5-9556-0044-4

Ссылки

  • [portal.acm.org/citation.cfm?id=621004 Virtual Memory: Issues of Implementation]  (англ.)
  • [www.acc.umu.se/~bosse/ Драйвер виртуальной памяти, использующий Linux swap раздел]  (англ.)
  • [pcfresh.ru/uvelichenie-razmera-fajla-podkachki.html Увеличение файла подкачки в Microsoft Windows XP/Vista/7]
  • [www.winblog.ru/2007/09/04/04090701.html FAQ по файлу подкачки на WinBlog.ru]

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


Был уже второй час после полудня. Французы уже вступили в Москву. Пьер знал это, но, вместо того чтобы действовать, он думал только о своем предприятии, перебирая все его малейшие будущие подробности. Пьер в своих мечтаниях не представлял себе живо ни самого процесса нанесения удара, ни смерти Наполеона, но с необыкновенною яркостью и с грустным наслаждением представлял себе свою погибель и свое геройское мужество.
«Да, один за всех, я должен совершить или погибнуть! – думал он. – Да, я подойду… и потом вдруг… Пистолетом или кинжалом? – думал Пьер. – Впрочем, все равно. Не я, а рука провидения казнит тебя, скажу я (думал Пьер слова, которые он произнесет, убивая Наполеона). Ну что ж, берите, казните меня», – говорил дальше сам себе Пьер, с грустным, но твердым выражением на лице, опуская голову.
В то время как Пьер, стоя посередине комнаты, рассуждал с собой таким образом, дверь кабинета отворилась, и на пороге показалась совершенно изменившаяся фигура всегда прежде робкого Макара Алексеевича. Халат его был распахнут. Лицо было красно и безобразно. Он, очевидно, был пьян. Увидав Пьера, он смутился в первую минуту, но, заметив смущение и на лице Пьера, тотчас ободрился и шатающимися тонкими ногами вышел на середину комнаты.
– Они оробели, – сказал он хриплым, доверчивым голосом. – Я говорю: не сдамся, я говорю… так ли, господин? – Он задумался и вдруг, увидав пистолет на столе, неожиданно быстро схватил его и выбежал в коридор.
Герасим и дворник, шедшие следом за Макар Алексеичем, остановили его в сенях и стали отнимать пистолет. Пьер, выйдя в коридор, с жалостью и отвращением смотрел на этого полусумасшедшего старика. Макар Алексеич, морщась от усилий, удерживал пистолет и кричал хриплый голосом, видимо, себе воображая что то торжественное.
– К оружию! На абордаж! Врешь, не отнимешь! – кричал он.
– Будет, пожалуйста, будет. Сделайте милость, пожалуйста, оставьте. Ну, пожалуйста, барин… – говорил Герасим, осторожно за локти стараясь поворотить Макар Алексеича к двери.
– Ты кто? Бонапарт!.. – кричал Макар Алексеич.
– Это нехорошо, сударь. Вы пожалуйте в комнаты, вы отдохните. Пожалуйте пистолетик.
– Прочь, раб презренный! Не прикасайся! Видел? – кричал Макар Алексеич, потрясая пистолетом. – На абордаж!
– Берись, – шепнул Герасим дворнику.
Макара Алексеича схватили за руки и потащили к двери.
Сени наполнились безобразными звуками возни и пьяными хрипящими звуками запыхавшегося голоса.
Вдруг новый, пронзительный женский крик раздался от крыльца, и кухарка вбежала в сени.
– Они! Батюшки родимые!.. Ей богу, они. Четверо, конные!.. – кричала она.
Герасим и дворник выпустили из рук Макар Алексеича, и в затихшем коридоре ясно послышался стук нескольких рук во входную дверь.


Пьер, решивший сам с собою, что ему до исполнения своего намерения не надо было открывать ни своего звания, ни знания французского языка, стоял в полураскрытых дверях коридора, намереваясь тотчас же скрыться, как скоро войдут французы. Но французы вошли, и Пьер все не отходил от двери: непреодолимое любопытство удерживало его.
Их было двое. Один – офицер, высокий, бравый и красивый мужчина, другой – очевидно, солдат или денщик, приземистый, худой загорелый человек с ввалившимися щеками и тупым выражением лица. Офицер, опираясь на палку и прихрамывая, шел впереди. Сделав несколько шагов, офицер, как бы решив сам с собою, что квартира эта хороша, остановился, обернулся назад к стоявшим в дверях солдатам и громким начальническим голосом крикнул им, чтобы они вводили лошадей. Окончив это дело, офицер молодецким жестом, высоко подняв локоть руки, расправил усы и дотронулся рукой до шляпы.
– Bonjour la compagnie! [Почтение всей компании!] – весело проговорил он, улыбаясь и оглядываясь вокруг себя. Никто ничего не отвечал.
– Vous etes le bourgeois? [Вы хозяин?] – обратился офицер к Герасиму.
Герасим испуганно вопросительно смотрел на офицера.
– Quartire, quartire, logement, – сказал офицер, сверху вниз, с снисходительной и добродушной улыбкой глядя на маленького человека. – Les Francais sont de bons enfants. Que diable! Voyons! Ne nous fachons pas, mon vieux, [Квартир, квартир… Французы добрые ребята. Черт возьми, не будем ссориться, дедушка.] – прибавил он, трепля по плечу испуганного и молчаливого Герасима.
– A ca! Dites donc, on ne parle donc pas francais dans cette boutique? [Что ж, неужели и тут никто не говорит по французски?] – прибавил он, оглядываясь кругом и встречаясь глазами с Пьером. Пьер отстранился от двери.
Офицер опять обратился к Герасиму. Он требовал, чтобы Герасим показал ему комнаты в доме.
– Барин нету – не понимай… моя ваш… – говорил Герасим, стараясь делать свои слова понятнее тем, что он их говорил навыворот.
Французский офицер, улыбаясь, развел руками перед носом Герасима, давая чувствовать, что и он не понимает его, и, прихрамывая, пошел к двери, у которой стоял Пьер. Пьер хотел отойти, чтобы скрыться от него, но в это самое время он увидал из отворившейся двери кухни высунувшегося Макара Алексеича с пистолетом в руках. С хитростью безумного Макар Алексеич оглядел француза и, приподняв пистолет, прицелился.
– На абордаж!!! – закричал пьяный, нажимая спуск пистолета. Французский офицер обернулся на крик, и в то же мгновенье Пьер бросился на пьяного. В то время как Пьер схватил и приподнял пистолет, Макар Алексеич попал, наконец, пальцем на спуск, и раздался оглушивший и обдавший всех пороховым дымом выстрел. Француз побледнел и бросился назад к двери.
Забывший свое намерение не открывать своего знания французского языка, Пьер, вырвав пистолет и бросив его, подбежал к офицеру и по французски заговорил с ним.
– Vous n'etes pas blesse? [Вы не ранены?] – сказал он.
– Je crois que non, – отвечал офицер, ощупывая себя, – mais je l'ai manque belle cette fois ci, – прибавил он, указывая на отбившуюся штукатурку в стене. – Quel est cet homme? [Кажется, нет… но на этот раз близко было. Кто этот человек?] – строго взглянув на Пьера, сказал офицер.
– Ah, je suis vraiment au desespoir de ce qui vient d'arriver, [Ах, я, право, в отчаянии от того, что случилось,] – быстро говорил Пьер, совершенно забыв свою роль. – C'est un fou, un malheureux qui ne savait pas ce qu'il faisait. [Это несчастный сумасшедший, который не знал, что делал.]
Офицер подошел к Макару Алексеичу и схватил его за ворот.
Макар Алексеич, распустив губы, как бы засыпая, качался, прислонившись к стене.
– Brigand, tu me la payeras, – сказал француз, отнимая руку.
– Nous autres nous sommes clements apres la victoire: mais nous ne pardonnons pas aux traitres, [Разбойник, ты мне поплатишься за это. Наш брат милосерд после победы, но мы не прощаем изменникам,] – прибавил он с мрачной торжественностью в лице и с красивым энергическим жестом.
Пьер продолжал по французски уговаривать офицера не взыскивать с этого пьяного, безумного человека. Француз молча слушал, не изменяя мрачного вида, и вдруг с улыбкой обратился к Пьеру. Он несколько секунд молча посмотрел на него. Красивое лицо его приняло трагически нежное выражение, и он протянул руку.
– Vous m'avez sauve la vie! Vous etes Francais, [Вы спасли мне жизнь. Вы француз,] – сказал он. Для француза вывод этот был несомненен. Совершить великое дело мог только француз, а спасение жизни его, m r Ramball'я capitaine du 13 me leger [мосье Рамбаля, капитана 13 го легкого полка] – было, без сомнения, самым великим делом.
Но как ни несомненен был этот вывод и основанное на нем убеждение офицера, Пьер счел нужным разочаровать его.
– Je suis Russe, [Я русский,] – быстро сказал Пьер.
– Ти ти ти, a d'autres, [рассказывайте это другим,] – сказал француз, махая пальцем себе перед носом и улыбаясь. – Tout a l'heure vous allez me conter tout ca, – сказал он. – Charme de rencontrer un compatriote. Eh bien! qu'allons nous faire de cet homme? [Сейчас вы мне все это расскажете. Очень приятно встретить соотечественника. Ну! что же нам делать с этим человеком?] – прибавил он, обращаясь к Пьеру, уже как к своему брату. Ежели бы даже Пьер не был француз, получив раз это высшее в свете наименование, не мог же он отречься от него, говорило выражение лица и тон французского офицера. На последний вопрос Пьер еще раз объяснил, кто был Макар Алексеич, объяснил, что пред самым их приходом этот пьяный, безумный человек утащил заряженный пистолет, который не успели отнять у него, и просил оставить его поступок без наказания.
Француз выставил грудь и сделал царский жест рукой.
– Vous m'avez sauve la vie. Vous etes Francais. Vous me demandez sa grace? Je vous l'accorde. Qu'on emmene cet homme, [Вы спасли мне жизнь. Вы француз. Вы хотите, чтоб я простил его? Я прощаю его. Увести этого человека,] – быстро и энергично проговорил французский офицер, взяв под руку произведенного им за спасение его жизни во французы Пьера, и пошел с ним в дом.
Солдаты, бывшие на дворе, услыхав выстрел, вошли в сени, спрашивая, что случилось, и изъявляя готовность наказать виновных; но офицер строго остановил их.
– On vous demandera quand on aura besoin de vous, [Когда будет нужно, вас позовут,] – сказал он. Солдаты вышли. Денщик, успевший между тем побывать в кухне, подошел к офицеру.
– Capitaine, ils ont de la soupe et du gigot de mouton dans la cuisine, – сказал он. – Faut il vous l'apporter? [Капитан у них в кухне есть суп и жареная баранина. Прикажете принести?]
– Oui, et le vin, [Да, и вино,] – сказал капитан.


Французский офицер вместе с Пьером вошли в дом. Пьер счел своим долгом опять уверить капитана, что он был не француз, и хотел уйти, но французский офицер и слышать не хотел об этом. Он был до такой степени учтив, любезен, добродушен и истинно благодарен за спасение своей жизни, что Пьер не имел духа отказать ему и присел вместе с ним в зале, в первой комнате, в которую они вошли. На утверждение Пьера, что он не француз, капитан, очевидно не понимая, как можно было отказываться от такого лестного звания, пожал плечами и сказал, что ежели он непременно хочет слыть за русского, то пускай это так будет, но что он, несмотря на то, все так же навеки связан с ним чувством благодарности за спасение жизни.
Ежели бы этот человек был одарен хоть сколько нибудь способностью понимать чувства других и догадывался бы об ощущениях Пьера, Пьер, вероятно, ушел бы от него; но оживленная непроницаемость этого человека ко всему тому, что не было он сам, победила Пьера.
– Francais ou prince russe incognito, [Француз или русский князь инкогнито,] – сказал француз, оглядев хотя и грязное, но тонкое белье Пьера и перстень на руке. – Je vous dois la vie je vous offre mon amitie. Un Francais n'oublie jamais ni une insulte ni un service. Je vous offre mon amitie. Je ne vous dis que ca. [Я обязан вам жизнью, и я предлагаю вам дружбу. Француз никогда не забывает ни оскорбления, ни услуги. Я предлагаю вам мою дружбу. Больше я ничего не говорю.]
В звуках голоса, в выражении лица, в жестах этого офицера было столько добродушия и благородства (во французском смысле), что Пьер, отвечая бессознательной улыбкой на улыбку француза, пожал протянутую руку.
– Capitaine Ramball du treizieme leger, decore pour l'affaire du Sept, [Капитан Рамбаль, тринадцатого легкого полка, кавалер Почетного легиона за дело седьмого сентября,] – отрекомендовался он с самодовольной, неудержимой улыбкой, которая морщила его губы под усами. – Voudrez vous bien me dire a present, a qui' j'ai l'honneur de parler aussi agreablement au lieu de rester a l'ambulance avec la balle de ce fou dans le corps. [Будете ли вы так добры сказать мне теперь, с кем я имею честь разговаривать так приятно, вместо того, чтобы быть на перевязочном пункте с пулей этого сумасшедшего в теле?]
Пьер отвечал, что не может сказать своего имени, и, покраснев, начал было, пытаясь выдумать имя, говорить о причинах, по которым он не может сказать этого, но француз поспешно перебил его.
– De grace, – сказал он. – Je comprends vos raisons, vous etes officier… officier superieur, peut etre. Vous avez porte les armes contre nous. Ce n'est pas mon affaire. Je vous dois la vie. Cela me suffit. Je suis tout a vous. Vous etes gentilhomme? [Полноте, пожалуйста. Я понимаю вас, вы офицер… штаб офицер, может быть. Вы служили против нас. Это не мое дело. Я обязан вам жизнью. Мне этого довольно, и я весь ваш. Вы дворянин?] – прибавил он с оттенком вопроса. Пьер наклонил голову. – Votre nom de bapteme, s'il vous plait? Je ne demande pas davantage. Monsieur Pierre, dites vous… Parfait. C'est tout ce que je desire savoir. [Ваше имя? я больше ничего не спрашиваю. Господин Пьер, вы сказали? Прекрасно. Это все, что мне нужно.]
Когда принесены были жареная баранина, яичница, самовар, водка и вино из русского погреба, которое с собой привезли французы, Рамбаль попросил Пьера принять участие в этом обеде и тотчас сам, жадно и быстро, как здоровый и голодный человек, принялся есть, быстро пережевывая своими сильными зубами, беспрестанно причмокивая и приговаривая excellent, exquis! [чудесно, превосходно!] Лицо его раскраснелось и покрылось потом. Пьер был голоден и с удовольствием принял участие в обеде. Морель, денщик, принес кастрюлю с теплой водой и поставил в нее бутылку красного вина. Кроме того, он принес бутылку с квасом, которую он для пробы взял в кухне. Напиток этот был уже известен французам и получил название. Они называли квас limonade de cochon (свиной лимонад), и Морель хвалил этот limonade de cochon, который он нашел в кухне. Но так как у капитана было вино, добытое при переходе через Москву, то он предоставил квас Морелю и взялся за бутылку бордо. Он завернул бутылку по горлышко в салфетку и налил себе и Пьеру вина. Утоленный голод и вино еще более оживили капитана, и он не переставая разговаривал во время обеда.