git: 3e6e02c9ba - main - [doc-es] Update vm-design article

Fernando Apesteguía fernape at FreeBSD.org
Fri Sep 3 18:34:04 UTC 2021


The branch main has been updated by fernape:

URL: https://cgit.FreeBSD.org/doc/commit/?id=3e6e02c9baa226f83cdb2732159158f0ebf4f6aa

commit 3e6e02c9baa226f83cdb2732159158f0ebf4f6aa
Author:     Fernando Apesteguía <fernape at FreeBSD.org>
AuthorDate: 2021-09-03 16:30:06 +0000
Commit:     Fernando Apesteguía <fernape at FreeBSD.org>
CommitDate: 2021-09-03 16:33:22 +0000

    [doc-es] Update vm-design article
    
    Update with tags.
    Add .po file.
---
 .../content/es/articles/vm-design/_index.adoc      |    3 +-
 .../content/es/articles/vm-design/_index.po        | 1596 ++++++++++++++++++++
 2 files changed, 1598 insertions(+), 1 deletion(-)

diff --git a/documentation/content/es/articles/vm-design/_index.adoc b/documentation/content/es/articles/vm-design/_index.adoc
index 01bef76726..2616d6035d 100644
--- a/documentation/content/es/articles/vm-design/_index.adoc
+++ b/documentation/content/es/articles/vm-design/_index.adoc
@@ -3,7 +3,8 @@ authors:
   - 
     author: 'Matthew Dillon'
     email: dillon at apollo.backplane.com
-releaseinfo: $FreeBSD$
+description: 'Una descripción fácil de seguir del diseño del sistema de memoria virtual de FreeBSD'
+tags: ["Design", "virtual machine", "FreeBSD"]
 title: 'Elementos de diseño del sistema de Memoria Virtual de FreeBSD'
 trademarks: '["freebsd", "linux", "microsoft", "opengroup", "daemon-news", "general"]'
 ---
diff --git a/documentation/content/es/articles/vm-design/_index.po b/documentation/content/es/articles/vm-design/_index.po
new file mode 100644
index 0000000000..00cbc4f0e0
--- /dev/null
+++ b/documentation/content/es/articles/vm-design/_index.po
@@ -0,0 +1,1596 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando  Apesteguía <fernando.apesteguia at gmail.com>, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2021-06-03 17:02-0300\n"
+"PO-Revision-Date: 2021-09-03 18:10+0000\n"
+"Last-Translator: Fernando  Apesteguía <fernando.apesteguia at gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesvm-design_index/es/>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.8\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/vm-design/_index.adoc:1
+#, no-wrap
+msgid "An easy to follow description of the design of the FreeBSD virtual memory system"
+msgstr ""
+"Una descripción fácil de seguir del diseño del sistema de memoria virtual de "
+"FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/vm-design/_index.adoc:1
+#: documentation/content/en/articles/vm-design/_index.adoc:11
+#, no-wrap
+msgid "Design elements of the FreeBSD VM system"
+msgstr "Elementos de diseño del sistema de Memoria Virtual de FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:35
+msgid "Abstract"
+msgstr "Resumen"
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:42
+msgid ""
+"The title is really just a fancy way of saying that I am going to attempt to "
+"describe the whole VM enchilada, hopefully in a way that everyone can "
+"follow.  For the last year I have concentrated on a number of major kernel "
+"subsystems within FreeBSD, with the VM and Swap subsystems being the most "
+"interesting and NFS being \"a necessary chore\".  I rewrote only small "
+"portions of the code. In the VM arena the only major rewrite I have done is "
+"to the swap subsystem.  Most of my work was cleanup and maintenance, with "
+"only moderate code rewriting and no major algorithmic adjustments within the "
+"VM subsystem.  The bulk of the VM subsystem's theoretical base remains "
+"unchanged and a lot of the credit for the modernization effort in the last "
+"few years belongs to John Dyson and David Greenman.  Not being a historian "
+"like Kirk I will not attempt to tag all the various features with peoples "
+"names, since I will invariably get it wrong."
+msgstr ""
+"El título es sólo una forma elegante de decir que voy a intentar describir "
+"la enchilada de la Memoria Virtual, espero que de un modo que todo el mundo "
+"pueda seguir. Durante el último año me he concentrado en un número de "
+"subsistemas principales del kernel de FreeBSD, con los subsistemas de "
+"Memoria Virtual e Intercambio siendo los más interesantes y NFS siendo \"una "
+"tarea necesaria\". Reescribí sólo pequeñas porciones del código. En el área "
+"de Memoria Virtual la única reescritura importante que he hecho es el "
+"subsistema de intercambio. La mayor parte de mi trabajo fue de limpieza y "
+"mantenimiento, con tan sólo reescrituras moderadas de código y sin ajustes "
+"algorítmicos importantes en el subsistema de Memoria Virtual. El grueso de "
+"la base teórica del subsistema de Memoria Virtual permanece sin cambios y "
+"mucho del crédito del esfuerzo de modernización en los últimos años es para "
+"John Dyson y David Greenman. Como no soy un historiador como Kirk no "
+"intentaré etiquetar todas las características con nombres de personas, ya "
+"que me equivocaría irremediablemente."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:44
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/vm-design/_index.adoc:48
+#, no-wrap
+msgid "Introduction"
+msgstr "Introducción"
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:64
+msgid ""
+"Before moving along to the actual design let's spend a little time on the "
+"necessity of maintaining and modernizing any long-living codebase.  In the "
+"programming world, algorithms tend to be more important than code and it is "
+"precisely due to BSD's academic roots that a great deal of attention was "
+"paid to algorithm design from the beginning.  More attention paid to the "
+"design generally leads to a clean and flexible codebase that can be fairly "
+"easily modified, extended, or replaced over time.  While BSD is considered "
+"an \"old\" operating system by some people, those of us who work on it tend "
+"to view it more as a \"mature\" codebase which has various components "
+"modified, extended, or replaced with modern code.  It has evolved, and "
+"FreeBSD is at the bleeding edge no matter how old some of the code might "
+"be.  This is an important distinction to make and one that is unfortunately "
+"lost to many people.  The biggest error a programmer can make is to not "
+"learn from history, and this is precisely the error that many other modern "
+"operating systems have made.  Windows NT(R) is the best example of this, and "
+"the consequences have been dire.  Linux also makes this mistake to some "
+"degree-enough that we BSD folk can make small jokes about it every once in a "
+"while, anyway.  Linux's problem is simply one of a lack of experience and "
+"history to compare ideas against, a problem that is easily and rapidly being "
+"addressed by the Linux community in the same way it has been addressed in "
+"the BSD community-by continuous code development.  The Windows NT(R) folk, "
+"on the other hand, repeatedly make the same mistakes solved by UNIX(R) "
+"decades ago and then spend years fixing them.  Over and over again.  They "
+"have a severe case of \"not designed here\" and \"we are always right "
+"because our marketing department says so\".  I have little tolerance for "
+"anyone who cannot learn from history."
+msgstr ""
+"Antes de avanzar con el diseño real dediquemos un poco de tiempo a la "
+"necesidad de mantener y modernizar cualquier base de código de larga "
+"duración. En el mundo de la programación, los algoritmos tienen a se más "
+"importantes que el código y es precisamente debido a las raíces académicas "
+"de BSD que una gran parte de la atención se puso desde el comienzo en el "
+"diseño algorítmico. Prestar más atención al diseño generalmente lleva a una "
+"base de código limpio y flexible que puede ser modificado fácilmente, "
+"extendido o reemplazado a lo largo del tiempo. Aunque BSD es considerado por "
+"alguna gente como un sistema operativo\"viejo\", aquellos de nosotros que "
+"trabajamos en él solemos verlo más como una base de código\"madura\" la cual "
+"tiene varios componentes modificados, extendidos, o reemplazados con código "
+"moderno. Ha evolucionado, y FreeBSD está a la vanguardia independientemente "
+"de cómo de viejo sea parte del código. Es importante hacer esta distinción y "
+"que mucha gente pasa por alto. El mayor error que puede cometer un "
+"programador es no aprender de la historia, y es precisamente este error el "
+"que han cometido muchos otros sistemas operativos modernos. Windows NT(R) es "
+"el mejor ejemplo, y las consecuencias han sido nefastas. Linux también "
+"comete este error hasta cierto punto—lo suficiente para que nosotros la "
+"gente de BSD hagamos pequeñas bromas de vez en cuando, por lo menos. El "
+"problema de Linux es simplemente la falta de experiencia y de una historia "
+"contra la que comparar ideas, un problema que está siendo tratado "
+"rápidamente por la comunidad Linux de la misma forma que ha sido tratado en "
+"la comunidad BSD—mediante el desarrollo continuo de código. La gente de "
+"Windows NT(R), por otro lado, repiten los mismos errores solucionados por "
+"UNIX(R) hace décadas y pasan años arreglándolos. Una y otra vez. Sufren un "
+"caso severo de \"no diseñado aquí\" y \"siempre tenemos la razón porque "
+"nuestro departamento de marketing así lo dice\". Tengo poca tolerancia hacia "
+"cualquiera que no puede aprender de la historia."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:69
+msgid ""
+"Much of the apparent complexity of the FreeBSD design, especially in the VM/"
+"Swap subsystem, is a direct result of having to solve serious performance "
+"issues that occur under various conditions.  These issues are not due to bad "
+"algorithmic design but instead rise from environmental factors.  In any "
+"direct comparison between platforms, these issues become most apparent when "
+"system resources begin to get stressed.  As I describe FreeBSD's VM/Swap "
+"subsystem the reader should always keep two points in mind:"
+msgstr ""
+"Mucha de la aparente complejidad del diseño de FreeBSD, especialmente en el "
+"subsistema de Memoria Virtual/Intercambio, es un resultado directo de tener "
+"que resolver serios problemas de rendimiento que ocurren bajo condiciones "
+"variadas. Estos problemas no se deben aun mal diseño algorítmico sino que "
+"surgen de factores ambientales. En cualquier comparación directa entre "
+"plataformas, estos problemas se hacen más evidentes cuando los recursos del "
+"sistema empiezan a sufrir estrés. Como describo en el subsistema de Memoria "
+"Virtual/Intercambio de FreeBSD el lector siempre debería tener en mente dos "
+"puntos:"
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:71
+msgid ""
+"The most important aspect of performance design is what is known as "
+"\"Optimizing the Critical Path\". It is often the case that performance "
+"optimizations add a little bloat to the code in order to make the critical "
+"path perform better."
+msgstr ""
+"El aspecto más importante del diseño de rendimiento es lo que se conoce como "
+"\"Optimización del Camino Crítico\". Es común que las optimizaciones de "
+"rendimiento inflen algo el código con el fin de mejorar el rendimiento del "
+"camino crítico."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:72
+msgid ""
+"A solid, generalized design outperforms a heavily-optimized design over the "
+"long run. While a generalized design may end up being slower than an heavily-"
+"optimized design when they are first implemented, the generalized design "
+"tends to be easier to adapt to changing conditions and the heavily-optimized "
+"design winds up having to be thrown away."
+msgstr ""
+"Un diseño sólido, generalizado tiene mejor rendimiento a largo plazo que un "
+"diseño altamente optimizado. Mientras que un diseño generalizado puede "
+"terminar siendo más lento que un diseño altamente optimizado cuando se "
+"implementan inicialmente, el diseño generalizado tiende a ser más fácil de "
+"adaptar a condiciones cambiantes y el diseño altamente optimizado termina "
+"siendo desechado."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:76
+msgid ""
+"Any codebase that will survive and be maintainable for years must therefore "
+"be designed properly from the beginning even if it costs some performance.  "
+"Twenty years ago people were still arguing that programming in assembly was "
+"better than programming in a high-level language because it produced code "
+"that was ten times as fast.  Today, the fallibility of that argument is "
+"obvious - as are the parallels to algorithmic design and code generalization."
+msgstr ""
+"Cualquier base de código que sobrevivirá y será mantenible durante años debe "
+"por lo tanto ser diseñada adecuadamente desde el comienzo incluso si tiene "
+"algo de coste en rendimiento. Hace veinte años la gente todavía discutía si "
+"la programación en ensamblador era mejor que programar en un lenguaje de "
+"alto nivel porque producía código que era diez veces más rápido. Hoy, la "
+"falibilidad de ese argumento es obvio — de modo paralelo al diseño "
+"algorítmico y la generalización de código."
+
+#. type: Title ==
+#: documentation/content/en/articles/vm-design/_index.adoc:78
+#, no-wrap
+msgid "VM Objects"
+msgstr "Objetos de Memoria Virtual"
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:88
+msgid ""
+"The best way to begin describing the FreeBSD VM system is to look at it from "
+"the perspective of a user-level process.  Each user process sees a single, "
+"private, contiguous VM address space containing several types of memory "
+"objects.  These objects have various characteristics.  Program code and "
+"program data are effectively a single memory-mapped file (the binary file "
+"being run), but program code is read-only while program data is copy-on-"
+"write.  Program BSS is just memory allocated and filled with zeros on "
+"demand, called demand zero page fill.  Arbitrary files can be memory-mapped "
+"into the address space as well, which is how the shared library mechanism "
+"works.  Such mappings can require modifications to remain private to the "
+"process making them.  The fork system call adds an entirely new dimension to "
+"the VM management problem on top of the complexity already given."
+msgstr ""
+"La mejor manera de empezar describiendo el sistema de Memoria Virtual de "
+"FreeBSD is mirarlo desde la perspectiva de un proceso de usuario. Cada "
+"proceso de usuario ve una espacio de direcciones de Memoria Virtual único, "
+"privado y contiguo que contiene diversos tipos de objetos de memoria. Estos "
+"objetos tienen diversas características. Código de programa y datos de "
+"programa son de forma efectiva un solo fichero mapeado en memoria (el "
+"fichero binario que se está ejecutando), pero el código del programa es de "
+"solo lectura mientras que los datos de programa son copy-on-write. El BSS "
+"del programa es sólo memoria asignada y rellenada con ceros bajo demanda, "
+"llamada rellenado de página cero bajo demanda. Ficheros arbitrarios pueden "
+"ser mapeados en memoria en el espacio de direcciones también, que es como "
+"funciona el mecanismo de librerías compartidas. Dichos mapeos pueden "
+"requerir modificaciones para permanecer privados al proceso que los realiza. "
+"La llamada al sistema fork añade una nueva dimensión a al problema de la "
+"gestión de la Memoria Virtual a añadir a la complejidad ya existente."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:94
+msgid ""
+"A program binary data page (which is a basic copy-on-write page) illustrates "
+"the complexity.  A program binary contains a preinitialized data section "
+"which is initially mapped directly from the program file.  When a program is "
+"loaded into a process's VM space, this area is initially memory-mapped and "
+"backed by the program binary itself, allowing the VM system to free/reuse "
+"the page and later load it back in from the binary.  The moment a process "
+"modifies this data, however, the VM system must make a private copy of the "
+"page for that process.  Since the private copy has been modified, the VM "
+"system may no longer free it, because there is no longer any way to restore "
+"it later on."
+msgstr ""
+"Una página de datos binarios de un programa (que es una página copy-on-write "
+"básica) ilustra esta complejidad. Un programa binario contiene una sección "
+"de datos preinicializados que es inicialmente mapeado directamente por el "
+"fichero del programa. Cuando un programa se carga en el espacio de "
+"direcciones de Memoria Virtual del proceso, este área es inicialmente "
+"mapeado en memoria y respaldado por el programa binario mismo, permitiendo "
+"al sistema de Memoria Virtual liberar/reutilizar la página y después "
+"cargarla de nuevo desde el binario. Sin embargo, en el momento en que un "
+"proceso modifica estos datos, el sistema de Memoria Virtual debe hacer una "
+"copia privada para ese proceso. Puesto que la copia privada ha sido "
+"modificada, el sistema de Memoria Virtual podría no ser capaz de liberarla, "
+"porque no hay forma de restaurarla posteriormente."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:101
+msgid ""
+"You will notice immediately that what was originally a simple file mapping "
+"has become much more complex.  Data may be modified on a page-by-page basis "
+"whereas the file mapping encompasses many pages at once.  The complexity "
+"further increases when a process forks.  When a process forks, the result is "
+"two processes-each with their own private address spaces, including any "
+"modifications made by the original process prior to the call to `fork()`.  "
+"It would be silly for the VM system to make a complete copy of the data at "
+"the time of the `fork()` because it is quite possible that at least one of "
+"the two processes will only need to read from that page from then on, "
+"allowing the original page to continue to be used.  What was a private page "
+"is made copy-on-write again, since each process (parent and child) expects "
+"their own personal post-fork modifications to remain private to themselves "
+"and not effect the other."
+msgstr ""
+"Notarás inmediatamente que lo que originalmente era un simple mapeo de un "
+"fichero se ha convertido en algo más complejo. Los datos pueden ser "
+"modificados página a página mientras que el mapeo de ficheros engloba varias "
+"páginas a la vez. La complejidad aumenta más cuando un proceso se bifurca. "
+"Cuando un proceso se bifurca, el resultado son dos procesos—cada uno con su "
+"propio espacio de direcciones privado que incluye cualquier modificación "
+"hecha por el proceso original antes de la llamada a `fork()`. Sería tonto "
+"para el sistema de Memoria Virtual hacer una copia completa de los datos en "
+"el momento de llamar a `fork()` porque es bastante posible que al menos uno "
+"de los dos procesos solamente necesite leer de esa página a partir de este "
+"momento, permitiendo así que se use la página original. Lo que era una "
+"página privada se ha convertido en una página copy-on-write de nuevo, puesto "
+"que cada proceso (padre y hijo) espera que sus propias modificaciones "
+"personales después del fork permanezcan privadas para ellos y que afecten al "
+"otro."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:110
+msgid ""
+"FreeBSD manages all of this with a layered VM Object model.  The original "
+"binary program file winds up being the lowest VM Object layer.  A copy-on-"
+"write layer is pushed on top of that to hold those pages which had to be "
+"copied from the original file.  If the program modifies a data page "
+"belonging to the original file the VM system takes a fault and makes a copy "
+"of the page in the higher layer.  When a process forks, additional VM Object "
+"layers are pushed on.  This might make a little more sense with a fairly "
+"basic example.  A `fork()` is a common operation for any *BSD system, so "
+"this example will consider a program that starts up, and forks.  When the "
+"process starts, the VM system creates an object layer, let's call this A:"
+msgstr ""
+"FreeBSD gestiona todo esto con un modelo de Objetos de Memoria Virtual en "
+"capas. El fichero del programa binario original termina siendo la capa de "
+"Objetos de Memoria Virtual más baja. Una capa copy-on-write se sitúa encima "
+"de ella para mantener aquellas páginas que han sido copiadas del fichero "
+"original. Si el programa modifica una página de datos que pertenece al "
+"fichero original el sistema de Memoria Virtual recibe un fallo de página y "
+"hace una copia de la página en la capa superior. Cuando un proceso bifurca, "
+"se empujan nuevas capas de Objetos de Memoria Virtual. Esto puede cobrar más "
+"sentido con un ejemplo bastante básico. Un `fork()` es una operación común "
+"para cualquier sistema *BSD, así que este ejemplo considerará un programa "
+"que arranca, y bifurca. Cuando el proceso arranca, el sistema de Memoria "
+"Virtual crea una capa de objetos, llamémosla A:"
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/articles/vm-design/_index.adoc:111
+#, no-wrap
+msgid "A picture"
+msgstr "Una imagen"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/vm-design/_index.adoc:111
+#, no-wrap
+msgid "fig1.png"
+msgstr "fig1.png"
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:116
+msgid ""
+"A represents the file-pages may be paged in and out of the file's physical "
+"media as necessary.  Paging in from the disk is reasonable for a program, "
+"but we really do not want to page back out and overwrite the executable.  "
+"The VM system therefore creates a second layer, B, that will be physically "
+"backed by swap space:"
+msgstr ""
+"A representa el fichero—las páginas pueden ser paginadas hacia o desde el "
+"medio físico del fichero según sea necesario. Paginar desde el disco es "
+"razonable para un programa, pero en realidad no queremos paginar de vuelta y "
+"sobrescribir el ejecutable. Por tanto, el sistema de Memoria Virtual crea "
+"una segunda capa, B, que estará respaldada físicamente por espacio de "
+"intercambio:"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/vm-design/_index.adoc:117
+#, no-wrap
+msgid "fig2.png"
+msgstr "fig2.png"
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:122
+msgid ""
+"On the first write to a page after this, a new page is created in B, and its "
+"contents are initialized from A.  All pages in B can be paged in or out to a "
+"swap device.  When the program forks, the VM system creates two new object "
+"layers-C1 for the parent, and C2 for the child-that rest on top of B:"
+msgstr ""
+"En la primera escritura a una página después de esto, se crea una nueva "
+"página en B, y su contenido es inicializado desde A. Todas las páginas en B "
+"pueden ser paginadas a o desde el dispositivo de intercambio. Cuando el "
+"programa bifurca, el sistema de Memoria Virtual crea dos capas de objetos "
+"nuevas—C1 para el padre, y C2 para el hijo—que descansan sobre B:"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/vm-design/_index.adoc:123
+#, no-wrap
+msgid "fig3.png"
+msgstr "fig3.png"
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:134
+msgid ""
+"In this case, let's say a page in B is modified by the original parent "
+"process.  The process will take a copy-on-write fault and duplicate the page "
+"in C1, leaving the original page in B untouched.  Now, let's say the same "
+"page in B is modified by the child process.  The process will take a copy-on-"
+"write fault and duplicate the page in C2.  The original page in B is now "
+"completely hidden since both C1 and C2 have a copy and B could theoretically "
+"be destroyed if it does not represent a \"real\" file; however, this sort of "
+"optimization is not trivial to make because it is so fine-grained.  FreeBSD "
+"does not make this optimization.  Now, suppose (as is often the case) that "
+"the child process does an `exec()`.  Its current address space is usually "
+"replaced by a new address space representing a new file.  In this case, the "
+"C2 layer is destroyed:"
+msgstr ""
+"En este caso, digamos que una página en B es modificada por el proceso padre "
+"original. El proceso recibirá un fallo de copy-on-write y duplicará la "
+"página en C1, dejando la página original en B sin tocar. Ahora, digamos que "
+"la misma página en B es modificada por el proceso hijo. El proceso recibirá "
+"un fallo de copy-on-write y duplicará la página en C2. La página original en "
+"B está ahora completamente oculta ya que tanto C1 como C2 tienen una copia y "
+"B podría teóricamente ser destruida si no representa un fichero \"real\"; "
+"sin embargo, este tipo de optimización no es trivial de hacer porque es muy "
+"fina. FreeBSD no hace esta optimización. Ahora, supón (como suele ser el "
+"caso) que el proceso hijo hace un `exec()`. Su espacio de direcciones actual "
+"es habitualmente remplazado por un nuevo espacio de direcciones que "
+"representa un nuevo fichero. En este caso, la capa C2 es destruida:"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/vm-design/_index.adoc:135
+#, no-wrap
+msgid "fig4.png"
+msgstr "fig4.png"
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:141
+msgid ""
+"In this case, the number of children of B drops to one, and all accesses to "
+"B now go through C1.  This means that B and C1 can be collapsed together.  "
+"Any pages in B that also exist in C1 are deleted from B during the "
+"collapse.  Thus, even though the optimization in the previous step could not "
+"be made, we can recover the dead pages when either of the processes exit or "
+"`exec()`."
+msgstr ""
+"En este caso, el número de hijos de B ha bajado a uno, y todos los accesos a "
+"B van ahora a través de C1. Esto significa que B y C1 pueden colapsarse "
+"juntas. Cualquier página en B que también existe en C1 se borran de B "
+"durante el colapso. Por lo tanto, incluso aunque la optimización en el paso "
+"anterior no se pudo hacer, podemos recuperar las páginas muertas bien cuando "
+"el proceso sale o cuando llama a `exec()`."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:148
+msgid ""
+"This model creates a number of potential problems.  The first is that you "
+"can wind up with a relatively deep stack of layered VM Objects which can "
+"cost scanning time and memory when you take a fault.  Deep layering can "
+"occur when processes fork and then fork again (either parent or child).  The "
+"second problem is that you can wind up with dead, inaccessible pages deep in "
+"the stack of VM Objects.  In our last example if both the parent and child "
+"processes modify the same page, they both get their own private copies of "
+"the page and the original page in B is no longer accessible by anyone.  That "
+"page in B can be freed."
+msgstr ""
+"Este modelo crea un número de problemas potenciales. El primero es que "
+"puedes terminar con una pila de Objetos de Memoria Virtual relativamente "
+"profunda que puede tener un coste de tiempo de escaneo y de memoria cuando "
+"recibes un fallo. Capas muy profundas pueden ocurrir cuando los procesos se "
+"bifurcan y se bifurcan de nuevo (en el padre o en el hijo). El segundo "
+"problema es que puedes terminar con páginas muertas, inaccesibles en lo "
+"profundo de la pila de Objetos de Memoria Virtual. En nuestro último ejemplo "
+"si tanto los el proceso padre como el hijo modifican la misma página, ambos "
+"obtienen su propia copia privada de la página y la página original en B ya "
+"no es accesible por nadie. Esa página en B puede ser liberada."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:159
+msgid ""
+"FreeBSD solves the deep layering problem with a special optimization called "
+"the \"All Shadowed Case\".  This case occurs if either C1 or C2 take "
+"sufficient COW faults to completely shadow all pages in B.  Lets say that C1 "
+"achieves this.  C1 can now bypass B entirely, so rather then have C1->B->A "
+"and C2->B->A we now have C1->A and C2->B->A.  But look what also happened-"
+"now B has only one reference (C2), so we can collapse B and C2 together.  "
+"The end result is that B is deleted entirely and we have C1->A and C2->A.  "
+"It is often the case that B will contain a large number of pages and neither "
+"C1 nor C2 will be able to completely overshadow it.  If we fork again and "
+"create a set of D layers, however, it is much more likely that one of the D "
+"layers will eventually be able to completely overshadow the much smaller "
+"dataset represented by C1 or C2.  The same optimization will work at any "
+"point in the graph and the grand result of this is that even on a heavily "
+"forked machine VM Object stacks tend to not get much deeper then 4.  This is "
+"true of both the parent and the children and true whether the parent is "
+"doing the forking or whether the children cascade forks."
+msgstr ""
+"FreeBSD soluciona el problema de capas profundas con una optimización "
+"especial llamada \"Caso de Todo Sombreado\". Este caso ocurre si C1 o C2 "
+"generan suficientes fallos COW como para sombrear (ocultar) todas las "
+"páginas en B. Digamos que C1 lo consigue. C1 puede ahora puentear B "
+"completamente, así que en lugar de tener C1->B->A y C2->B->A ahora tenemos "
+"C1->A y C2->B->A. Pero mira lo que ha pasado también—ahora B tiene sólo una "
+"referencia (C1), así que podemos colapsar B y C2 juntas. El resultado final "
+"es que B se borra completamente y tenemos C1->A y C2->A. Habitualmente el "
+"caso es que B contendrá un gran número de páginas y ni C1 ni C2 serán "
+"capaces de ocultarla completamente. Si bifurcamos de nuevo y creamos un "
+"conjunto de capas D, sin embargo, es mucho más probable que una de las capas "
+"de D eventualmente sea capaz de ocultar el conjunto mucho menor representado "
+"por C1 o C2. La misma optimización funcionará en cualquier punto del grafo y "
+"el resultado total de esto es que incluso en una máquina con muchas "
+"bifurcaciones las pilas de Objetos de Memoria Virtual tienen a no ser mucho "
+"más profundas de 4. Esto es verdad tanto para el padre como para los hijos y "
+"es así tanto si el padre hace la bifurcación como si los hijos bifurcan en "
+"cascada."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:163
+msgid ""
+"The dead page problem still exists in the case where C1 or C2 do not "
+"completely overshadow B.  Due to our other optimizations this case does not "
+"represent much of a problem and we simply allow the pages to be dead.  If "
+"the system runs low on memory it will swap them out, eating a little swap, "
+"but that is it."
+msgstr ""
+"El problema de la página muerta todavía existe en el caso en el que C1 o C2 "
+"no ocultan completamente B. Debido a otras optimizaciones este caso no es "
+"demasiado problema y simplemente permitimos que haya páginas muertas. Si el "
+"sistema se queda sin memoria las intercambiará a disco, utilizando un poco "
+"de espacio de intercambio, pero eso es todo."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:167
+msgid ""
+"The advantage to the VM Object model is that `fork()` is extremely fast, "
+"since no real data copying need take place.  The disadvantage is that you "
+"can build a relatively complex VM Object layering that slows page fault "
+"handling down a little, and you spend memory managing the VM Object "
+"structures.  The optimizations FreeBSD makes proves to reduce the problems "
+"enough that they can be ignored, leaving no real disadvantage."
+msgstr ""
+"La ventaja del modelo de Objetos de Memoria Virtual es que `fork()` es "
+"extremadamente rápido, ya que no se necesita realizar una copia real de "
+"datos. La desventaja es que puedes construir un conjunto de capas de Objetos "
+"de Memoria Virtual relativamente complejo que haga un poco más lento el "
+"manejo de fallos de página, y que tienes que gastar memoria en la gestión de "
+"las estructuras de los Objetos de Memoria Virtual. Las optimizaciones que "
+"hace FreeBSD demuestran que reducen los problemas lo suficiente de forma que "
+"pueden ser ignorados, eliminando prácticamente la desventaja."
+
+#. type: Title ==
+#: documentation/content/en/articles/vm-design/_index.adoc:169
+#, no-wrap
+msgid "SWAP Layers"
+msgstr "Capas de Intercambio"
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:177
+msgid ""
+"Private data pages are initially either copy-on-write or zero-fill pages.  "
+"When a change, and therefore a copy, is made, the original backing object "
+"(usually a file) can no longer be used to save a copy of the page when the "
+"VM system needs to reuse it for other purposes.  This is where SWAP comes "
+"in.  SWAP is allocated to create backing store for memory that does not "
+"otherwise have it.  FreeBSD allocates the swap management structure for a VM "
+"Object only when it is actually needed.  However, the swap management "
+"structure has had problems historically:"
+msgstr ""
+"Las páginas de datos privadas se crean como páginas copy-on-write o rellenas "
+"con ceros. Cuando se hace un cambio, y por lo tanto una copia, el objeto de "
+"respaldo original (normalmente un fichero) ya no puede ser utilizado para "
+"guardar una copia de la página cuando el sistema de Memoria Virtual necesita "
+"reutilizarla para otros fines. Aquí es donde aparece el Intercambio. El "
+"Intercambio se asigna para crear almacenamiento de respaldo para memoria que "
+"de otra forma no la tendría. FreeBSD asigna la estructura de gestión del "
+"intercambio para un Objeto de Memoria Virtual solo cuando se necesita "
+"realmente. Sin embargo históricamente, la estructura de gestión del "
+"intercambio ha tenido problemas:"
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:179
+msgid ""
+"Under FreeBSD 3.X the swap management structure preallocates an array that "
+"encompasses the entire object requiring swap backing store-even if only a "
+"few pages of that object are swap-backed. This creates a kernel memory "
+"fragmentation problem when large objects are mapped, or processes with large "
+"runsizes (RSS) fork."
+msgstr ""
+"En FreeBSD 3.X la estructura de gestión de intercambio preasigna un array "
+"que engloba todo el objeto que requiere almacenamiento de respaldo de "
+"intercambio—incluso si solo unas pocas páginas de ese objeto están "
+"respaldadas en el área de intercambio. Esto crea un problema de "
+"fragmentación de la memoria del núcleo cuando se mapean objetos grandes, o "
+"cuando procesos con tamaños de ejecución grandes (RSS) bifurcan."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:180
+msgid ""
+"Also, in order to keep track of swap space, a \"list of holes\" is kept in "
+"kernel memory, and this tends to get severely fragmented as well. Since the "
+"\"list of holes\" is a linear list, the swap allocation and freeing "
+"performance is a non-optimal O(n)-per-page."
+msgstr ""
+"Además, para llevar la cuenta del espacio de intercambio, una \"lista de "
+"huecos\" es mantenida en la memoria del núcleo, y esta tiende a fragmentarse "
+"de forma severa también. Puesto que la \"lista de huecos\" es una lista "
+"lineal, el rendimiento de asignación y liberación de intercambio es de un "
+"orden subóptimo de O(n) por página."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:181
+msgid ""
+"It requires kernel memory allocations to take place during the swap freeing "
+"process, and that creates low memory deadlock problems."
+msgstr ""
+"Requiere que se lleven a cabo asignaciones de memoria del núcleo durante el "
+"proceso de liberación de espacio de intercambio, y eso crea problemas de "
+"bloqueo por baja memoria."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:182
+msgid ""
+"The problem is further exacerbated by holes created due to the interleaving "
+"algorithm."
+msgstr ""
+"El problema se exacerba debido a los huecos creados por el algoritmo de "
+"entrelazado."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:183
+msgid ""
+"Also, the swap block map can become fragmented fairly easily resulting in "
+"non-contiguous allocations."
+msgstr ""
+"Además, el mapa de bloques de intercambio se puede fragmentar fácilmente "
+"dando como resultado asignaciones no contiguas."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:184
+msgid ""
+"Kernel memory must also be allocated on the fly for additional swap "
+"management structures when a swapout occurs."
+msgstr ""
+"La memoria del núcleo se debe asignar al vuelo para las estructuras "
+"adicionales de gestión de intercambio cuando se escribe en el área de "
+"intercambio."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:187
+msgid ""
+"It is evident from that list that there was plenty of room for improvement.  "
+"For FreeBSD 4.X, I completely rewrote the swap subsystem:"
+msgstr ""
+"De esa lista se hace evidente que había mucho margen de mejora. Para FreeBSD "
+"4.X, reescribí completamente el subsistema de intercambio:"
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:189
+msgid ""
+"Swap management structures are allocated through a hash table rather than a "
+"linear array giving them a fixed allocation size and much finer granularity."
+msgstr ""
+"Las estructuras de gestión de intercambio se asignan mediante una tabla has "
+"en lugar de un array lineal dándoles un tamaño de asignación fijo y mucha "
+"mayor granularidad."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:190
+msgid ""
+"Rather then using a linearly linked list to keep track of swap space "
+"reservations, it now uses a bitmap of swap blocks arranged in a radix tree "
+"structure with free-space hinting in the radix node structures. This "
+"effectively makes swap allocation and freeing an O(1) operation."
+msgstr ""
+"En lugar de utilizar una lista enlazada linear para llevar la cuenta de las "
+"reservas de espacio de intercambio, ahora usa un mapa de bits de bloques de "
+"intercambio dispuestos en una estructura tipo árbol radix con anotaciones "
+"sobre el espacio libre en las estructuras de nodos del radix."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:191
+msgid ""
+"The entire radix tree bitmap is also preallocated in order to avoid having "
+"to allocate kernel memory during critical low memory swapping operations. "
+"After all, the system tends to swap when it is low on memory so we should "
+"avoid allocating kernel memory at such times in order to avoid potential "
+"deadlocks."
+msgstr ""
+"El mapa de bits entero para el árbol radix también se preasigna para evitar "
+"tener que asignar memoria del núcleo durante operaciones de intercambio con "
+"un nivel crítico de memoria baja. Después de todo, el sistema tiende a "
+"utilizar intercambio cuando está bajo en memoria de forma que deberíamos "
+"evitar asignar memoria del núcleo en esas situaciones para evitar "
+"potenciales bloqueos."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:192
+msgid ""
+"To reduce fragmentation the radix tree is capable of allocating large "
+"contiguous chunks at once, skipping over smaller fragmented chunks."
+msgstr ""
+"Para reducir la fragmentación el árbol radix es capaz de asignar de una sola "
+"vez grandes trozos contiguos, saltándose pequeños trozos fragmentados."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:194
+msgid ""
+"I did not take the final step of having an \"allocating hint pointer\" that "
+"would trundle through a portion of swap as allocations were made in order to "
+"further guarantee contiguous allocations or at least locality of reference, "
+"but I ensured that such an addition could be made."
+msgstr ""
+"No realicé el paso final de tener un \"puntero de anotaciones para las "
+"asignaciones\" que recorrería una porción del espacio de intercambio según "
+"se hicieran las asignaciones para así garantizar asignaciones contiguas o al "
+"menos localidad de referencia, pero aseguré que esa condición no podría "
+"darse."
+
+#. type: Title ==
+#: documentation/content/en/articles/vm-design/_index.adoc:196
+#, no-wrap
+msgid "When to free a page"
+msgstr "Cuando liberar una página"
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:201
+msgid ""
+"Since the VM system uses all available memory for disk caching, there are "
+"usually very few truly-free pages.  The VM system depends on being able to "
+"properly choose pages which are not in use to reuse for new allocations.  "
+"Selecting the optimal pages to free is possibly the single-most important "
+"function any VM system can perform because if it makes a poor selection, the "
+"VM system may be forced to unnecessarily retrieve pages from disk, seriously "
+"degrading system performance."
+msgstr ""
+"Como el sistema de Memoria Virtual usa toda la memoria disponible para "
+"cachear disco, normalmente hay pocas páginas que estén realmente libres. El "
+"sistema de Memoria Virtual depende de su habilidad para adecuadamente "
+"escoger las páginas que no están en uso para reutilizarlas en nuevas "
+"asignaciones. Seleccionar las páginas óptimas para liberar es posiblemente "
+"la función más importante que cualquier sistema de Memoria Virtual puede "
+"realizar porque si la elección no es buena, el sistema de Memoria Virtual "
+"puede verse forzada a recuperar páginas de disco innecesariamente, "
+"degradando seriamente el rendimiento del sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:204
+msgid ""
+"How much overhead are we willing to suffer in the critical path to avoid "
+"freeing the wrong page? Each wrong choice we make will cost us hundreds of "
+"thousands of CPU cycles and a noticeable stall of the affected processes, so "
+"we are willing to endure a significant amount of overhead in order to be "
+"sure that the right page is chosen.  This is why FreeBSD tends to outperform "
+"other systems when memory resources become stressed."
+msgstr ""
+"¿Cuánto trabajo extra estamos dispuestos a sufrir en el camino crítico para "
+"evitar liberar la página equivocada? Cada decisión errónea que hacemos "
+"costará cientos de miles de ciclos de CPU y una parada notable de los "
+"procesos afectados, así que estamos dispuestos a soportar una cantidad "
+"significativa de trabajo extra para estar seguros que se escoge la página "
+"adecuada. Por esto es por lo que FreeBSD tiende a superar en rendimiento a "
+"otros sistemas cuando se estresan los recursos de memoria."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:207
+msgid ""
+"The free page determination algorithm is built upon a history of the use of "
+"memory pages.  To acquire this history, the system takes advantage of a page-"
+"used bit feature that most hardware page tables have."
+msgstr ""
+"El algoritmo que determina la página libre se construye en base al histórico "
+"de uso de las páginas de memoria. Para adquirir este histórico, el sistema "
+"se aprovecha de la característica del bit de página utilizada que la mayoría "
+"del hardware de tablas de página posee."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:213
+msgid ""
+"In any case, the page-used bit is cleared and at some later point the VM "
+"system comes across the page again and sees that the page-used bit has been "
+"set.  This indicates that the page is still being actively used.  If the bit "
+"is still clear it is an indication that the page is not being actively "
+"used.  By testing this bit periodically, a use history (in the form of a "
+"counter) for the physical page is developed.  When the VM system later needs "
+"to free up some pages, checking this history becomes the cornerstone of "
+"determining the best candidate page to reuse."
+msgstr ""
+"En cualquier caso, el bit de página utilizada se blanquea y en algún momento "
+"posterior el sistema de Memoria Virtual se encuentra con la página de nuevo "
+"y ve que el bit de página utilizada ha sido marcado. Esto indica que la "
+"página todavía se está utilizando activamente. Si el bit está blanqueado eso "
+"indica que la página no se usa activamente. Mediante el chequeo periódico de "
+"este bit, se desarrollo (en forma de contador) un histórico de uso . Cuando "
+"posteriormente el sistema de Memoria Virtual necesita liberar algunas "
+"páginas, examinar este histórico se convierte en la piedra de toque para "
+"determinar la mejor página candidata para reutilizar."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:218
+msgid ""
+"For those platforms that do not have this feature, the system actually "
+"emulates a page-used bit.  It unmaps or protects a page, forcing a page "
+"fault if the page is accessed again.  When the page fault is taken, the "
+"system simply marks the page as having been used and unprotects the page so "
+"that it may be used.  While taking such page faults just to determine if a "
+"page is being used appears to be an expensive proposition, it is much less "
+"expensive than reusing the page for some other purpose only to find that a "
+"process needs it back and then have to go to disk."
+msgstr ""
+"Para esas plataformas que no tienen esta característica, el sistema en "
+"realidad emula un bit de página utilizada. Desmapea o protege una página, "
+"forzando un fallo de página si ésta es accedida de nuevo. Cuando se maneja "
+"el fallo de página, el sistema simplemente marca la página como usada y "
+"desprotege la página de forma que puede ser utilizada. Aunque realizar este "
+"fallo de página tan solo para determinar si una página está siendo usada "
+"puede parecer una proposición cara, es mucho menos cara que reutilizar la "
+"página para otro propósito para darse cuenta después de que otro proceso la "
+"necesita y tener que ir al disco."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:228
+msgid ""
+"FreeBSD makes use of several page queues to further refine the selection of "
+"pages to reuse as well as to determine when dirty pages must be flushed to "
+"their backing store.  Since page tables are dynamic entities under FreeBSD, "
+"it costs virtually nothing to unmap a page from the address space of any "
+"processes using it.  When a page candidate has been chosen based on the page-"
+"use counter, this is precisely what is done.  The system must make a "
+"distinction between clean pages which can theoretically be freed up at any "
+"time, and dirty pages which must first be written to their backing store "
+"before being reusable.  When a page candidate has been found it is moved to "
+"the inactive queue if it is dirty, or the cache queue if it is clean.  A "
+"separate algorithm based on the dirty-to-clean page ratio determines when "
+"dirty pages in the inactive queue must be flushed to disk.  Once this is "
+"accomplished, the flushed pages are moved from the inactive queue to the "
+"cache queue.  At this point, pages in the cache queue can still be "
+"reactivated by a VM fault at relatively low cost.  However, pages in the "
+"cache queue are considered to be \"immediately freeable\" and will be reused "
+"in an LRU (least-recently used) fashion when the system needs to allocate "
+"new memory."
+msgstr ""
+"FreeBSD utiliza varias colas de páginas para refinar aún más la selección de "
+"páginas a reutilizar así como para determinar cuando se deben llevar las "
+"páginas sucias a su almacenamiento de respaldo. Puesto que las tablas de "
+"páginas en FreeBSD son entidades dinámicas, cuesta virtualmente nada "
+"desmapear una página del espacio de direcciones de cualquier proceso que la "
+"esté usando. Cuando se ha escogido una página candidata basándose en el "
+"contador de página utilizada, esto es precisamente lo que se hace. El "
+"sistema debe distinguir entre páginas limpias que pueden en teoría ser "
+"liberadas en cualquier momento, y páginas sucias que deben ser escritas "
+"primero en el almacenamiento de respaldo antes de ser reutilizadas. Cuando "
+"se encuentra una página candidata se mueve a la cola inactiva si está sucia, "
+"o a la cola de caché si está limpia. In algoritmo separado que se bajas en "
+"el ratio de páginas sucias respecto de las limpias determina cuándo se "
+"tienen que escribir a disco las páginas sucias de la cola inactiva. Una vez "
+"hecho esto, las páginas escritas se mueven de la cola inactiva a la cola de "
+"caché. En este punto, las páginas en la cola de caché todavía pueden ser "
+"reactivadas por un fallo de Memoria Virtual con un coste relativamente bajo. "
+"Sin embargo, las páginas de la cola de caché se consideran como "
+"\"inmediatamente liberables\" y serán reutilizadas de modo LRU (Usada Menos "
+"Recientemente) cuando el sistema necesita asignar nueva memoria."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:232
+msgid ""
+"It is important to note that the FreeBSD VM system attempts to separate "
+"clean and dirty pages for the express reason of avoiding unnecessary flushes "
+"of dirty pages (which eats I/O bandwidth), nor does it move pages between "
+"the various page queues gratuitously when the memory subsystem is not being "
+"stressed.  This is why you will see some systems with very low cache queue "
+"counts and high active queue counts when doing a `systat -vm` command.  As "
+"the VM system becomes more stressed, it makes a greater effort to maintain "
+"the various page queues at the levels determined to be the most effective."
+msgstr ""
+"Es importante señalar que el sistema de Memoria Virtual de FreeBSD intenta "
+"separar páginas limpias y sucias para expresar la razón de evitar la "
+"escritura innecesaria de páginas sucias (que come ancho de banda de E/S), y "
+"tampoco mueve de forma gratuita páginas entre distintas colas de páginas "
+"cuando el sistema de memoria no está bajo estrés. Este es el motivo por el "
+"que verás algunos sistemas con contadores de cola de caché muy bajos y "
+"contadores de cola de páginas activa altos cuando se ejecuta el comando "
+"`systat -vm`. Según el sistema de Memoria Virtual va sufriendo más estrés, "
+"hace un gran esfuerzo por mantener varias colas de páginas en los niveles "
+"que determina que son más efectivos."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:236
+msgid ""
+"An urban myth has circulated for years that Linux did a better job avoiding "
+"swapouts than FreeBSD, but this in fact is not true.  What was actually "
+"occurring was that FreeBSD was proactively paging out unused pages in order "
+"to make room for more disk cache while Linux was keeping unused pages in "
+"core and leaving less memory available for cache and process pages.  I do "
+"not know whether this is still true today."
+msgstr ""
+"Durante años ha circulado una leyenda urbana acerca de que Linux hacía un "
+"mejor trabajo que FreeBSD evitando escribir en intercambio, pero de hecho "
+"esto no es cierto. Lo que ocurría en realidad era que FreeBSD estaba "
+"llevando a intercambio de forma proactiva páginas no utilizadas para hacer "
+"sitio para más caché de disco mientras que Linux estaba manteniendo las "
+"páginas sin utilizar y dejando menos memoria disponible para la caché y para "
+"páginas de procesos. No sé si esto sigue siendo cierto a día de hoy."
+
+#. type: Title ==
+#: documentation/content/en/articles/vm-design/_index.adoc:238
+#, no-wrap
+msgid "Pre-Faulting and Zeroing Optimizations"
+msgstr "Optimizaciones de Prefallo y de Rellenado con Ceros"
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:248
+msgid ""
+"Taking a VM fault is not expensive if the underlying page is already in core "
+"and can simply be mapped into the process, but it can become expensive if "
+"you take a whole lot of them on a regular basis.  A good example of this is "
+"running a program such as man:ls[1] or man:ps[1] over and over again.  If "
+"the program binary is mapped into memory but not mapped into the page table, "
+"then all the pages that will be accessed by the program will have to be "
+"faulted in every time the program is run.  This is unnecessary when the "
+"pages in question are already in the VM Cache, so FreeBSD will attempt to "
+"pre-populate a process's page tables with those pages that are already in "
+"the VM Cache.  One thing that FreeBSD does not yet do is pre-copy-on-write "
+"certain pages on exec.  For example, if you run the man:ls[1] program while "
+"running `vmstat 1` you will notice that it always takes a certain number of "
+"page faults, even when you run it over and over again.  These are zero-fill "
+"faults, not program code faults (which were pre-faulted in already).  Pre-"
+"copying pages on exec or fork is an area that could use more study."
+msgstr ""
+"Realizar un fallo de Memoria Virtual no es costoso y la página subyacente ya "
+"está cargada y simplemente puede ser mapeada en el proceso, pero puede ser "
+"costoso si hay muchas de ellas de forma regular. Un buen ejemplo de esto es "
+"ejecutar un programa como man:ls[1] o man:ps[1] una y otra vez. Si el "
+"programa binario está mapeado en la memoria pero no lo está en la tabla de "
+"páginas, entonces todas las páginas que serán accedidas por el programa "
+"generarán un fallo cada vez que el programa se ejecute. Esto es innecesario "
+"cuando las páginas en cuestión ya están en la Caché de Memoria Virtual, de "
+"modo que FreeBSD intentará pre-poblar las tablas de páginas de un proceso "
+"con aquellas páginas que ya están en la Caché de Memoria Virtual. Algo que "
+"FreeBSD no hace todavía es un pre-copy-on-write de ciertas páginas al hacer "
+"exec. Por ejemplo, si ejecutas el programa man:ls[1] mientras ejecutas "
+"`vmstat 1` notarás que siempre produce un cierto número de fallos de página, "
+"incluso cuando lo ejecutas una y otra vez. Estos son fallos de página de "
+"rellenados de ceros, no fallos de código de programa (que ya han sido pre-"
+"fallados). Realizar una pre-copia de páginas en un exec o fork es un área en "
+"el que ser sujeto de más estudio."
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:257
+msgid ""
+"A large percentage of page faults that occur are zero-fill faults.  You can "
+"usually see this by observing the `vmstat -s` output.  These occur when a "
+"process accesses pages in its BSS area.  The BSS area is expected to be "
+"initially zero but the VM system does not bother to allocate any memory at "
+"all until the process actually accesses it.  When a fault occurs the VM "
+"system must not only allocate a new page, it must zero it as well.  To "
+"optimize the zeroing operation the VM system has the ability to pre-zero "
+"pages and mark them as such, and to request pre-zeroed pages when zero-fill "
+"faults occur.  The pre-zeroing occurs whenever the CPU is idle but the "
+"number of pages the system pre-zeros is limited in order to avoid blowing "
+"away the memory caches.  This is an excellent example of adding complexity "
*** 648 LINES SKIPPED ***


More information about the dev-commits-doc-all mailing list