MFen 1.13
Obtained from: The FreeBSD Russian Documentation Project
This commit is contained in:
parent
511f6edaaf
commit
1f4effc8a5
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=20110
1 changed files with 52 additions and 34 deletions
|
@ -2,14 +2,20 @@
|
||||||
The FreeBSD Russian Documentation Project
|
The FreeBSD Russian Documentation Project
|
||||||
|
|
||||||
$FreeBSD$
|
$FreeBSD$
|
||||||
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/vm-design/article.sgml,v 1.3 2001/07/21 14:26:19 phantom Exp $
|
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/vm-design/article.sgml,v 1.5 2004/02/01 22:11:06 maxim Exp $
|
||||||
|
|
||||||
Original revision: 1.4
|
Original revision: 1.13
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<!DOCTYPE ARTICLE PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
|
<!DOCTYPE ARTICLE PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
|
||||||
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
|
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
|
||||||
%man;
|
%man;
|
||||||
|
|
||||||
|
<!ENTITY % freebsd PUBLIC "-//FreeBSD//ENTITIES DocBook Miscellaneous FreeBSD Entities//EN">
|
||||||
|
%freebsd;
|
||||||
|
|
||||||
|
<!ENTITY % trademarks PUBLIC "-//FreeBSD//ENTITIES DocBook Trademark Entities//EN">
|
||||||
|
%trademarks;
|
||||||
]>
|
]>
|
||||||
|
|
||||||
<article>
|
<article>
|
||||||
|
@ -29,6 +35,14 @@
|
||||||
</author>
|
</author>
|
||||||
</authorgroup>
|
</authorgroup>
|
||||||
|
|
||||||
|
<legalnotice id="trademarks" role="trademarks">
|
||||||
|
&tm-attrib.freebsd;
|
||||||
|
&tm-attrib.linux;
|
||||||
|
&tm-attrib.microsoft;
|
||||||
|
&tm-attrib.opengroup;
|
||||||
|
&tm-attrib.general;
|
||||||
|
</legalnotice>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
<para>Перевод на русский язык: Андрей Захватов
|
<para>Перевод на русский язык: Андрей Захватов
|
||||||
(<email>andy@FreeBSD.org</email>)</para>
|
(<email>andy@FreeBSD.org</email>)</para>
|
||||||
|
@ -39,7 +53,7 @@
|
||||||
VM-систему понятным языком. Последний год я сосредоточил усилия в
|
VM-систему понятным языком. Последний год я сосредоточил усилия в
|
||||||
работе над несколькими основными подсистемами ядра FreeBSD, среди
|
работе над несколькими основными подсистемами ядра FreeBSD, среди
|
||||||
которых подсистемы VM и подкачки были самыми интересными, а NFS
|
которых подсистемы VM и подкачки были самыми интересными, а NFS
|
||||||
оказалась ‘необходимой рутиной’. Я переписал лишь малую
|
оказалась <quote>необходимой рутиной</quote>. Я переписал лишь малую
|
||||||
часть кода. Что касается VM, то я единственным большим обновлением,
|
часть кода. Что касается VM, то я единственным большим обновлением,
|
||||||
которое я сделал, является переделка подсистемы подкачки. Основная
|
которое я сделал, является переделка подсистемы подкачки. Основная
|
||||||
часть моей работы заключалась в зачистке и поддержке кода, с
|
часть моей работы заключалась в зачистке и поддержке кода, с
|
||||||
|
@ -71,8 +85,8 @@
|
||||||
проработке алгоритмов. Внимание, уделенное архитектуре, в общем
|
проработке алгоритмов. Внимание, уделенное архитектуре, в общем
|
||||||
отражается на ясности и гибкости кода, который может быть достаточно
|
отражается на ясности и гибкости кода, который может быть достаточно
|
||||||
легко изменен, расширен или с течением времени заменен. Хотя некоторые
|
легко изменен, расширен или с течением времени заменен. Хотя некоторые
|
||||||
считают BSD ‘старой’ операционной системой, те их нас, кто
|
считают BSD <quote>старой</quote> операционной системой, те их нас, кто
|
||||||
работает над ней, видят ее скорее системой со ‘зрелым’ кодом
|
работает над ней, видят ее скорее системой со <quote>зрелым</quote> кодом
|
||||||
с различными компонентами, которые были заменены, расширены или изменены
|
с различными компонентами, которые были заменены, расширены или изменены
|
||||||
современным кодом. Он развивается, и FreeBSD остается передовой
|
современным кодом. Он развивается, и FreeBSD остается передовой
|
||||||
системой, вне зависимости от того, насколько старой может быть часть
|
системой, вне зависимости от того, насколько старой может быть часть
|
||||||
|
@ -80,17 +94,18 @@
|
||||||
Самой большой ошибкой, которую может допустить программист, является
|
Самой большой ошибкой, которую может допустить программист, является
|
||||||
игнорирование истории, и это именно та ошибка, которую сделали многие
|
игнорирование истории, и это именно та ошибка, которую сделали многие
|
||||||
другие современные операционные системы. Самым ярки примером здесь
|
другие современные операционные системы. Самым ярки примером здесь
|
||||||
является NT, и последствия ужасны. Linux также в некоторой степени
|
является &windowsnt;, и последствия ужасны. Linux также в некоторой
|
||||||
совершил эту ошибку—достаточно, чтобы мы, люди BSD, по крайней
|
степени совершил эту ошибку—достаточно, чтобы мы, люди BSD, по
|
||||||
|
крайней
|
||||||
мере по разу отпустили по этому поводу шутку. Проблема Linux заключается
|
мере по разу отпустили по этому поводу шутку. Проблема Linux заключается
|
||||||
просто в отсутствии опыта и истории для сравнения идей, проблема, которая
|
просто в отсутствии опыта и истории для сравнения идей, проблема, которая
|
||||||
легко и быстро решается сообществом Linux точно так же, как она решается
|
легко и быстро решается сообществом Linux точно так же, как она решается
|
||||||
в сообществе BSD—постоянной работой над кодом. Разработчики NT,
|
в сообществе BSD—постоянной работой над кодом. Разработчики &windowsnt;,
|
||||||
с другой стороны, постоянно совершают те же самые ошибки, что были
|
с другой стороны, постоянно совершают те же самые ошибки, что были
|
||||||
решены в UNIX десятки лет назад, а затем тратят годы на их устранение.
|
решены в &unix; десятки лет назад, а затем тратят годы на их устранение.
|
||||||
Снова и снова. Есть несколько случаев ‘проработка архитектуры
|
Снова и снова. Есть несколько случаев <quote>проработка архитектуры
|
||||||
отсутствует’ и ‘мы всегда правы, потому что так говорит наш
|
отсутствует</quote> и <quote>мы всегда правы, потому что так говорит наш
|
||||||
отдел продаж’. Я плохо переношу тех, кого не учит история.</para>
|
отдел продаж</quote>. Я плохо переношу тех, кого не учит история.</para>
|
||||||
|
|
||||||
<para>Большинство очевидной сложности архитектуры FreeBSD, особенно в
|
<para>Большинство очевидной сложности архитектуры FreeBSD, особенно в
|
||||||
подсистеме VM/Swap, является прямым следствием того, что она решает
|
подсистеме VM/Swap, является прямым следствием того, что она решает
|
||||||
|
@ -249,7 +264,8 @@
|
||||||
порожденным процессом. В процессе возникнет ситуация копирования при
|
порожденным процессом. В процессе возникнет ситуация копирования при
|
||||||
записи и страница скопируется в C2. Исходная страница в B теперь
|
записи и страница скопируется в C2. Исходная страница в B теперь
|
||||||
полностью скрыта, так как и C1, и C2 имеют копии, а B теоретически может
|
полностью скрыта, так как и C1, и C2 имеют копии, а B теоретически может
|
||||||
быть уничтожена, если она не представляет собой 'реального' файла).
|
быть уничтожена, если она не представляет собой <quote>реального</quote>
|
||||||
|
файла).
|
||||||
Однако такую оптимизацию не так уж просто осуществить, потому что она
|
Однако такую оптимизацию не так уж просто осуществить, потому что она
|
||||||
делается на уровне мелких единиц. Во FreeBSD такая оптимизация не
|
делается на уровне мелких единиц. Во FreeBSD такая оптимизация не
|
||||||
выполняется. Теперь положим (а это часто случается), что порожденный
|
выполняется. Теперь положим (а это часто случается), что порожденный
|
||||||
|
@ -346,15 +362,16 @@
|
||||||
VM, только когда это действительно нужно. Однако структура управления
|
VM, только когда это действительно нужно. Однако структура управления
|
||||||
подкачкой исторически имела некоторые проблемы.</para>
|
подкачкой исторически имела некоторые проблемы.</para>
|
||||||
|
|
||||||
<para>Во FreeBSD 3.x в структуре управления областью подкачки
|
<para>Во FreeBSD 3.X в структуре управления областью подкачки
|
||||||
предварительно выделяется массив, который представляет целый объект,
|
предварительно выделяется массив, который представляет целый объект,
|
||||||
требующий хранения в области подкачки—даже если только несколько
|
требующий хранения в области подкачки—даже если только несколько
|
||||||
страниц этого объекта хранятся в области подкачки. Это создает проблему
|
страниц этого объекта хранятся в области подкачки. Это создает проблему
|
||||||
фрагментации памяти ядра в случае, когда в память отображаются большие
|
фрагментации памяти ядра в случае, когда в память отображаются большие
|
||||||
объекты или когда ветвятся процессы, занимающие большой объем памяти при
|
объекты или когда ветвятся процессы, занимающие большой объем памяти при
|
||||||
работе (RSS). Также для отслеживания памяти подкачки в памяти ядра
|
работе (RSS). Также для отслеживания памяти подкачки в памяти ядра
|
||||||
поддерживается ‘список дыр’, и он также несколько
|
поддерживается <quote>список дыр</quote>, и он также несколько
|
||||||
фрагментирован. Так как 'список дыр' является последовательным списком,
|
фрагментирован. Так как <quote>список дыр</quote> является
|
||||||
|
последовательным списком,
|
||||||
то производительность при распределении и высвобождении памяти в области
|
то производительность при распределении и высвобождении памяти в области
|
||||||
подкачки неоптимально и ее сложность зависит от количества страниц как
|
подкачки неоптимально и ее сложность зависит от количества страниц как
|
||||||
O(n). Также в процессе высвобождения памяти в области подкачки требуется
|
O(n). Также в процессе высвобождения памяти в области подкачки требуется
|
||||||
|
@ -367,7 +384,7 @@
|
||||||
областью подкачки при выгрузке страниц памяти в эту область. Очевидно,
|
областью подкачки при выгрузке страниц памяти в эту область. Очевидно,
|
||||||
что мест для усовершенствований предостаточно.</para>
|
что мест для усовершенствований предостаточно.</para>
|
||||||
|
|
||||||
<para>Во FreeBSD 4.x подсистема управления областью подкачки была полностью
|
<para>Во FreeBSD 4.X подсистема управления областью подкачки была полностью
|
||||||
переписана мною. При этом структуры управления областью подкачки
|
переписана мною. При этом структуры управления областью подкачки
|
||||||
распределяются при помощи хэш-таблицы, а не через линейный массив, что
|
распределяются при помощи хэш-таблицы, а не через линейный массив, что
|
||||||
дает им фиксированный размер при распределении и работу с гораздо
|
дает им фиксированный размер при распределении и работу с гораздо
|
||||||
|
@ -385,7 +402,8 @@
|
||||||
избежания потенциальных блокировок. Наконец, для уменьшения фрагментации
|
избежания потенциальных блокировок. Наконец, для уменьшения фрагментации
|
||||||
дерево может распределять большой последовательный кусок за раз,
|
дерево может распределять большой последовательный кусок за раз,
|
||||||
пропуская меньшие фрагментированные области. Я не сделал последний шаг
|
пропуская меньшие фрагментированные области. Я не сделал последний шаг
|
||||||
к заведению 'указателя на распределение', который будет передвигаться
|
к заведению <quote>указателя на распределение</quote>, который будет
|
||||||
|
передвигаться
|
||||||
по участку области подкачки при выделении памяти для обеспечения в
|
по участку области подкачки при выделении памяти для обеспечения в
|
||||||
будущем распределения последовательных участков, или по крайней мере
|
будущем распределения последовательных участков, или по крайней мере
|
||||||
местоположения ссылки, но я убежден, что это может быть сделано.</para>
|
местоположения ссылки, но я убежден, что это может быть сделано.</para>
|
||||||
|
@ -457,7 +475,7 @@
|
||||||
страницы перемещаются из неактивной очереди в очередь кэша. В этот
|
страницы перемещаются из неактивной очереди в очередь кэша. В этот
|
||||||
момент страницы в очереди кэша могут быть повторно активизированы VM со
|
момент страницы в очереди кэша могут быть повторно активизированы VM со
|
||||||
сравнительно малыми накладными расходами. Однако страницы в очереди кэша
|
сравнительно малыми накладными расходами. Однако страницы в очереди кэша
|
||||||
предполагается ‘высвобождать немедленно’ и повторно
|
предполагается <quote>высвобождать немедленно</quote> и повторно
|
||||||
использовать в LRU-порядке (меньше всего используемый), когда системе
|
использовать в LRU-порядке (меньше всего используемый), когда системе
|
||||||
потребуется выделение дополнительной памяти.</para>
|
потребуется выделение дополнительной памяти.</para>
|
||||||
|
|
||||||
|
@ -618,7 +636,7 @@
|
||||||
<question>
|
<question>
|
||||||
<para>Что это за “алгоритм чередования”, который вы
|
<para>Что это за “алгоритм чередования”, который вы
|
||||||
упоминали в списке недостатков подсистемы управления разделом
|
упоминали в списке недостатков подсистемы управления разделом
|
||||||
подкачки во FreeBSD 3.x?</para>
|
подкачки во FreeBSD 3.X?</para>
|
||||||
</question>
|
</question>
|
||||||
|
|
||||||
<answer>
|
<answer>
|
||||||
|
@ -627,7 +645,7 @@
|
||||||
резервирует пространство для четырех областей подкачки, даже если
|
резервирует пространство для четырех областей подкачки, даже если
|
||||||
у вас имеется всего лишь одна, две или три области. Так как в
|
у вас имеется всего лишь одна, две или три области. Так как в
|
||||||
области подкачки имеется чередование, то линейное адресное
|
области подкачки имеется чередование, то линейное адресное
|
||||||
пространство, представляющее ‘четыре области подкачки’,
|
пространство, представляющее <quote>четыре области подкачки</quote>,
|
||||||
будет фрагментироваться, если у вас нет на самом деле четырех
|
будет фрагментироваться, если у вас нет на самом деле четырех
|
||||||
областей подкачки. Например, если у вас две области A и B, то
|
областей подкачки. Например, если у вас две области A и B, то
|
||||||
представление адресного пространства для этой области подкачки во
|
представление адресного пространства для этой области подкачки во
|
||||||
|
@ -636,15 +654,15 @@
|
||||||
|
|
||||||
<literallayout>A B C D A B C D A B C D A B C D</literallayout>
|
<literallayout>A B C D A B C D A B C D A B C D</literallayout>
|
||||||
|
|
||||||
<para>FreeBSD 3.x использует ‘последовательный список свободных
|
<para>FreeBSD 3.X использует <quote>последовательный список свободных
|
||||||
областей’ для управления свободными областями в разделе
|
областей</quote> для управления свободными областями в разделе
|
||||||
подкачки. Идея состоит в том, что большие последовательные блоки
|
подкачки. Идея состоит в том, что большие последовательные блоки
|
||||||
свободного пространства могут быть представлены при помощи узла
|
свободного пространства могут быть представлены при помощи узла
|
||||||
односвязного списка (<filename>kern/subr_rlist.c</filename>). Но
|
односвязного списка (<filename>kern/subr_rlist.c</filename>). Но
|
||||||
из-за фрагментации последовательный список сам становится
|
из-за фрагментации последовательный список сам становится
|
||||||
фрагментированным. В примере выше полностью неиспользуемое
|
фрагментированным. В примере выше полностью неиспользуемое
|
||||||
пространство в A и B будет показано как ‘свободное’,
|
пространство в A и B будет показано как <quote>свободное</quote>,
|
||||||
а C и D как ‘полностью занятое’. Каждой
|
а C и D как <quote>полностью занятое</quote>. Каждой
|
||||||
последовательности A-B требуется для учета узел списка, потому что
|
последовательности A-B требуется для учета узел списка, потому что
|
||||||
C и D являются дырами, так что узел списка не может быть связан
|
C и D являются дырами, так что узел списка не может быть связан
|
||||||
со следующей последовательностью A-B.</para>
|
со следующей последовательностью A-B.</para>
|
||||||
|
@ -657,17 +675,17 @@
|
||||||
чем пытаться выдумывать сложности в другом месте.</para>
|
чем пытаться выдумывать сложности в другом месте.</para>
|
||||||
|
|
||||||
<para>Фрагментация вызывает другие проблемы. Являясь
|
<para>Фрагментация вызывает другие проблемы. Являясь
|
||||||
последовательным списком в 3.x и имея такое огромную фрагментацию,
|
последовательным списком в 3.X и имея такое огромную фрагментацию,
|
||||||
выделение и освобождение в области подкачки становится алгоритмом
|
выделение и освобождение в области подкачки становится алгоритмом
|
||||||
сложности O(N), а не O(1). Вместе с другими факторами (частое
|
сложности O(N), а не O(1). Вместе с другими факторами (частое
|
||||||
обращение к области подкачки) вы получаете сложность уровней O(N^2)
|
обращение к области подкачки) вы получаете сложность уровней O(N^2)
|
||||||
и O(N^3), что плохо. В системе 3.x также может потребоваться
|
и O(N^3), что плохо. В системе 3.X также может потребоваться
|
||||||
выделение KVM во время работы с областью подкачки для создания
|
выделение KVM во время работы с областью подкачки для создания
|
||||||
нового узла списка, что в условии нехватки памяти может привести к
|
нового узла списка, что в условии нехватки памяти может привести к
|
||||||
блокировке, если система попытается сбросить страницы в область
|
блокировке, если система попытается сбросить страницы в область
|
||||||
подкачки.</para>
|
подкачки.</para>
|
||||||
|
|
||||||
<para>В 4.x мы не используем последовательный список. Вместо этого
|
<para>В 4.X мы не используем последовательный список. Вместо этого
|
||||||
мы используем базисное дерево и битовые карты блоков области
|
мы используем базисное дерево и битовые карты блоков области
|
||||||
подкачки, а не ограниченный список узлов. Мы принимаем
|
подкачки, а не ограниченный список узлов. Мы принимаем
|
||||||
предварительное выделение всех битовых карт, требуемых для всей
|
предварительное выделение всех битовых карт, требуемых для всей
|
||||||
|
@ -812,10 +830,10 @@
|
||||||
|
|
||||||
<para>Что касается использования памяти под таблицу страниц против
|
<para>Что касается использования памяти под таблицу страниц против
|
||||||
схемы с <literal>pv_entry</literal>: Linux использует
|
схемы с <literal>pv_entry</literal>: Linux использует
|
||||||
‘постоянные’ таблицы страниц, которые не сбрасываются,
|
<quote>постоянные</quote> таблицы страниц, которые не сбрасываются,
|
||||||
но ему не нужны <literal>pv_entry</literal> для каждого
|
но ему не нужны <literal>pv_entry</literal> для каждого
|
||||||
потенциально отображаемого pte. FreeBSD использует
|
потенциально отображаемого pte. FreeBSD использует
|
||||||
‘сбрасываемые’ таблицы страниц, но для каждого
|
<quote>сбрасываемые</quote> таблицы страниц, но для каждого
|
||||||
реально отображаемого pte добавляется структура
|
реально отображаемого pte добавляется структура
|
||||||
<literal>pv_entry</literal>. Я думаю, что использование памяти
|
<literal>pv_entry</literal>. Я думаю, что использование памяти
|
||||||
будет примерно одинакова, тем более что у FreeBSD есть
|
будет примерно одинакова, тем более что у FreeBSD есть
|
||||||
|
@ -842,7 +860,7 @@
|
||||||
прочтенные по смещению 0!</para>
|
прочтенные по смещению 0!</para>
|
||||||
|
|
||||||
<para>Я очень сильно все упрощаю. То, что я только что описал,
|
<para>Я очень сильно все упрощаю. То, что я только что описал,
|
||||||
называется ‘напрямую отображаемым’ аппаратным кэшем
|
называется <quote>напрямую отображаемым</quote> аппаратным кэшем
|
||||||
памяти. Большинство современных кэшей являются так называемыми
|
памяти. Большинство современных кэшей являются так называемыми
|
||||||
2-сторонними множественными ассоциативными или 4-сторонними
|
2-сторонними множественными ассоциативными или 4-сторонними
|
||||||
множественными ассоциативными кэшами. Множественная
|
множественными ассоциативными кэшами. Множественная
|
||||||
|
@ -876,7 +894,7 @@
|
||||||
принимать во внимание переключение контекстов процессов, что очень
|
принимать во внимание переключение контекстов процессов, что очень
|
||||||
важно.</para>
|
важно.</para>
|
||||||
|
|
||||||
<para>Но в мире UNIX вы работаете с виртуальными адресными
|
<para>Но в мире &unix; вы работаете с виртуальными адресными
|
||||||
пространствами, а не с физическими. Любая программа, вами
|
пространствами, а не с физическими. Любая программа, вами
|
||||||
написанная, имеет дело с виртуальным адресным пространством, ей
|
написанная, имеет дело с виртуальным адресным пространством, ей
|
||||||
предоставленным. Реальные <emphasis>физические</emphasis>
|
предоставленным. Реальные <emphasis>физические</emphasis>
|
||||||
|
@ -903,8 +921,8 @@
|
||||||
адресного пространства будут такими же, как если бы программа
|
адресного пространства будут такими же, как если бы программа
|
||||||
работала непосредственно в физическом адресном пространстве.</para>
|
работала непосредственно в физическом адресном пространстве.</para>
|
||||||
|
|
||||||
<para>Заметьте, что я сказал ‘примерно’ подходящие, а не
|
<para>Заметьте, что я сказал <quote>примерно</quote> подходящие, а не
|
||||||
просто ‘последовательные’. С точки зрения напрямую
|
просто <quote>последовательные</quote>. С точки зрения напрямую
|
||||||
отображаемого кэша в 128К, физический адрес 0 одинаков с физическим
|
отображаемого кэша в 128К, физический адрес 0 одинаков с физическим
|
||||||
адресом 128К. Так что две граничащие страницы в вашем виртуальном
|
адресом 128К. Так что две граничащие страницы в вашем виртуальном
|
||||||
адресном пространстве могут располагаться по смещению 128К и 132К
|
адресном пространстве могут располагаться по смещению 128К и 132К
|
||||||
|
|
Loading…
Reference in a new issue