{"id":2334,"date":"2020-11-18T17:46:09","date_gmt":"2020-11-18T23:46:09","guid":{"rendered":"https:\/\/naps.com.mx\/blog\/?p=2334"},"modified":"2021-02-01T09:31:35","modified_gmt":"2021-02-01T15:31:35","slug":"administracion-de-memoria-virtual","status":"publish","type":"post","link":"https:\/\/naps.com.mx\/blog\/administracion-de-memoria-virtual\/","title":{"rendered":"Administraci\u00f3n de memoria: Memoria virtual"},"content":{"rendered":"<p>Se explica qu\u00e9 es la t\u00e9cnica de paginaci\u00f3n para administraci\u00f3n de memoria, qu\u00e9 es la memoria virtual y la paginaci\u00f3n por demanda.<\/p>\n<p><!--more--><\/p>\n<h2>Paginaci\u00f3n<\/h2>\n<p>A fin de evitar la <a href=\"https:\/\/naps.com.mx\/blog\/administracion-de-memoria-panorama-general\/\">fragmentaci\u00f3n de la memoria<\/a>, se utiliza una t\u00e9cnica conocida como Paginaci\u00f3n. Consiste en dividir un proceso en bloques de tama\u00f1o fijo. Estos bloques son llamados p\u00e1ginas. Esto implica que administrar la memoria ya no es tan simple como indicar la direcci\u00f3n donde empieza y termina cada proceso, sino que debe existir un mapeo entre la ubicaci\u00f3n l\u00f3gica (la direcci\u00f3n que el proceso cree tener), y la ubicaci\u00f3n real (ubicaci\u00f3n en memoria f\u00edsica). Un proceso tiene asignado una multitud de p\u00e1ginas.<\/p>\n<p>Bajo \u00e9sta t\u00e9cnica la memoria se divide en frames (o marcos) del mismo tama\u00f1o. Las p\u00e1ginas deber\u00e1n tener el mismo tama\u00f1o que los marcos. Adem\u00e1s, las direcciones ahora representan: el identificador de p\u00e1gina, y el desplazamiento. Se requiere, adem\u00e1s, una estructura de datos llamada tabla de p\u00e1ginas. \u00c9sta se utiliza para hacer una relaci\u00f3n entre p\u00e1ginas y marcos.<\/p>\n<p>Veamos el siguiente ejemplo:<\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Paginaci\u00f3n-en-memoria-virtual.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2337\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Paginaci\u00f3n-en-memoria-virtual.png\" alt=\"Paginaci\u00f3n en memoria virtual\" width=\"1358\" height=\"2007\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Paginaci\u00f3n-en-memoria-virtual.png 1358w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Paginaci\u00f3n-en-memoria-virtual-203x300.png 203w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Paginaci\u00f3n-en-memoria-virtual-768x1135.png 768w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Paginaci\u00f3n-en-memoria-virtual-693x1024.png 693w\" sizes=\"auto, (max-width: 1358px) 100vw, 1358px\" \/><\/a><\/p>\n<p>En el ejemplo anterior se usa un espacio de direccionamiento donde para cada direcci\u00f3n se utilizan 5 bits. Eso resulta en 32 direcciones. Esas 32 direcciones se dividen en p\u00e1ginas donde cada p\u00e1gina contiene 4 direcciones. En la ilustraci\u00f3n se ven 4 de esas p\u00e1ginas.<\/p>\n<p>De los 5 bits que conforman la direcci\u00f3n, los primeros 3 se utilizan para referenciar la p\u00e1gina, y los \u00faltimos 2 bits se utilizan para especificar el desplazamiento dentro de la p\u00e1gina.<\/p>\n<p>As\u00ed, la letra h que est\u00e1 en la direcci\u00f3n 00111, se divide en 001 y 11. 001 representa la p\u00e1gina y 11 representa el desplazamiento dentro de la p\u00e1gina.<\/p>\n<p>Existe adem\u00e1s una tabla de p\u00e1ginas que relaciona la p\u00e1gina con los marcos en la memoria real. En esa tabla se observa que la p\u00e1gina 1 est\u00e1 en el marco 6, por lo que la direcci\u00f3n real es 110 y el desplazamiento es el mismo 11.<\/p>\n<h2>Memoria virtual<\/h2>\n<p>El concepto de memoria virtual nace a partir de la necesidad de ofrecer a los procesos m\u00e1s espacio de memoria del que est\u00e1 f\u00edsicamente disponible. Esto se logra utilizando el almacenamiento secundario (por ejemplo, el disco duro) y guardando y trayendo p\u00e1ginas completas.<\/p>\n<h2>Paginaci\u00f3n por demanda<\/h2>\n<p>Cuando se ejecuta un proceso el sistema operativo carga solamente las p\u00e1ginas necesarias para comenzar la ejecuci\u00f3n y solo carga a memoria las p\u00e1ginas que van a ser utilizadas. Las p\u00e1ginas que no sean requeridas no ser\u00e1n cargadas a memoria. Cuando se requiere una p\u00e1gina y \u00e9sta no est\u00e1 presente en la memoria, el sistema operativo suspende el proceso y carga en memoria la p\u00e1gina solicitada.<\/p>\n<h2>Reemplazo de p\u00e1ginas<\/h2>\n<p>\u00bfQu\u00e9 ocurre si todos los marcos est\u00e1n ocupados? En ese caso el sistema busca una p\u00e1gina que pueda liberar y guardarla en el espacio de intercambio (p\u00e1gina v\u00edctima). Una vez liberado el marco, se carga la p\u00e1gina requerida y el proceso puede continuar.<\/p>\n<p>Se observan dos accesos al disco: copiar la p\u00e1gina v\u00edctima al disco y traer la p\u00e1gina requerida a memoria.<\/p>\n<p>Para mejorar el rendimiento se utiliza un bit de modificaci\u00f3n. Cuando se carga una p\u00e1gina, en la tabla de p\u00e1ginas se agrega un bit de modificaci\u00f3n apagado. Cuando hay un acceso de escritura en esa p\u00e1gina, el bit se activa.<\/p>\n<p>Cuando el sistema operativo elige una p\u00e1gina v\u00edctima, si el bit de modificaci\u00f3n est\u00e1 activado, entonces guarda la p\u00e1gina en disco. De lo contrario sabe que lo que est\u00e1 en memoria es id\u00e9ntico a lo que est\u00e1 en disco, por lo que ya no es necesario guardar la p\u00e1gina en disco, evitando as\u00ed el retraso correspondiente por utilizar el disco.<\/p>\n<h2>Ejercicio 1<\/h2>\n<p>Considere un computador de 32 bits que dispone de un sistema de memoria virtual que emplea p\u00e1ginas de 16 KB y tiene instalada una memoria principal de 1 GB. Indique:<\/p>\n<p><strong>a) El formato de la direcci\u00f3n virtual<\/strong><\/p>\n<p>Expresemos el tama\u00f1o de la p\u00e1gina como una potencia de 2.<\/p>\n<p>16 KB = 1024 * 16 = 16384 = 2<sup>14<\/sup><\/p>\n<p>Considerando que log<sub>2<\/sub> (16384) = 14<\/p>\n<p>Si el sistema es de 32 bits, entonces:<\/p>\n<p>32 &#8211; 14<span class=\"Apple-converted-space\">\u00a0 <\/span>= 18<\/p>\n<p>Por lo que:<\/p>\n<p>Cantidad de bits para id de p\u00e1gina: 18<br \/>\nCantidad de bits para el desplazamiento: 14<\/p>\n<p><strong>b) El n\u00famero m\u00e1ximo de p\u00e1ginas<\/strong><\/p>\n<p>La cantidad de p\u00e1ginas viene dada por la cantidad total de direcciones virtuales disponibles dividido entre la cantidad de direcciones de la p\u00e1gina.<\/p>\n<p>La cantidad total de direcciones en un sistema de 32 bits es de:\u00a02<sup>32<\/sup><\/p>\n<p>El tama\u00f1o de la p\u00e1gina es de 16 KB que es igual a \u00a02<sup>14<\/sup><\/p>\n<p>Por lo que:<\/p>\n<p>2<sup>32<\/sup> \/ 2<sup>14<span class=\"Apple-converted-space\">\u00a0 <\/span>= <\/sup>2<sup>32-14<\/sup><span class=\"Apple-converted-space\">\u00a0 <\/span>= 2<sup>18<\/sup> = 262,144 p\u00e1ginas<span class=\"Apple-converted-space\">\u00a0 \u00a0<\/span><\/p>\n<p><strong>c) El n\u00famero de marcos<\/strong><\/p>\n<p>Los marcos son los espacios disponibles en memoria real para las p\u00e1ginas.<\/p>\n<p>Tengo un 1 GB de memoria real. Expresado en potencia de 2 es:<\/p>\n<p>1 GB<span class=\"Apple-converted-space\">\u00a0 <\/span>= 1024 x 1024 x 1024 = 1073 741 824 bytes = 2<sup>30<\/sup> <span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p><span class=\"Apple-converted-space\">La cantidad de marcos es el total de memoria real, dividido entre el tama\u00f1o de la p\u00e1gina.\u00a0<\/span><\/p>\n<p>2<sup>30<\/sup> \/ 2<sup>14<\/sup> = 2<sup>16\u00a0<\/sup>marcos<\/p>\n<p><strong>d) El tama\u00f1o del bloque que se transfiere entre el disco y la memoria principal<\/strong><br \/>\nEs igual al tama\u00f1o de la p\u00e1gina = 16KB<\/p>\n<p>&nbsp;<\/p>\n<h2>Ejercicio 2<\/h2>\n<p>Un computador con memoria virtual emplea direcciones virtuales de 16 bits y p\u00e1ginas de 2 KB. El computador dispone de una memoria f\u00edsica instalada de 8KB. Indique:<\/p>\n<p><strong>a) El formato de la direcci\u00f3n virtual<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>Expresamos el tama\u00f1o de la p\u00e1gina como una potencia de 2:<\/p>\n<p>2KB = 1024 * 2 = 2048 = 2<sup>11<\/sup><span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p>Si el sistema es de 16 bits, entonces:<\/p>\n<p>16 &#8211; 11 = 5<\/p>\n<p>Por lo que:<\/p>\n<p>Cantidad de bits para id de p\u00e1gina: 5 bits<\/p>\n<p>Cantidad de \u00a0bits para desplazamiento: 11 bits<\/p>\n<p><strong>b) El n\u00famero m\u00e1ximo de p\u00e1ginas<\/strong><\/p>\n<p>La cantidad de p\u00e1ginas viene dada por la cantidad total de direcciones virtuales disponibles dividido entre la cantidad de direcciones de la p\u00e1gina.<\/p>\n<p>El sistema es de 16 bits, por lo que se disponen de\u00a02<sup>16<\/sup> direcciones.<\/p>\n<p>El tama\u00f1o de la p\u00e1gina es de\u00a02KB = 1024 * 2 = 2048 = 2<sup>11<\/sup><\/p>\n<p>Entonces:<\/p>\n<p>2<sup>16<\/sup> \/ 2<sup>11<\/sup> = 2<sup>16-11<\/sup> = 2<sup>5<\/sup><span class=\"Apple-converted-space\">\u00a0 <\/span>= 32 p\u00e1ginas <span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p><strong>c) El n\u00famero de marcos<\/strong><\/p>\n<p>El sistema tiene de memoria f\u00edsica: 8KB<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p>Si lo expresamos como potencia de 2:<\/p>\n<p>8KB = 1024 * 8 = 8192 = 2<sup>13<\/sup><span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p><span class=\"Apple-converted-space\">La cantidad de marcos es el total de memoria real, dividido entre el tama\u00f1o de la p\u00e1gina.\u00a0<\/span><\/p>\n<p>2<sup>13<\/sup> \/ 2<sup>11<\/sup> = 2<sup>13-11<\/sup> = 2<sup>2<span class=\"Apple-converted-space\">\u00a0 <\/span><\/sup>= 4 marcos<\/p>\n<p><strong>d) Cu\u00e1l es el tama\u00f1o m\u00e1ximo en KB de memoria virtual que se puede direccionar:<span class=\"Apple-converted-space\">\u00a0<\/span><\/strong><\/p>\n<p>El sistema es de 16 bits, por lo que:<\/p>\n<p>2<sup>16 = <\/sup>65536<span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0<\/span><\/p>\n<p>Expresado en KB (considere que 1 KB es 1024 bytes)<\/p>\n<p>65536 \/ 1024<span class=\"Apple-converted-space\">\u00a0 <\/span>= 64 Kb<\/p>\n<p><strong>e) El formato de la direcci\u00f3n f\u00edsica:<\/strong><\/p>\n<p>En memoria f\u00edsica se disponen de 8KB.<\/p>\n<p>8KB = 2<sup>13<\/sup><span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p>Y como ya se calcul\u00f3 el tama\u00f1o de la p\u00e1gina es de \u00a02KB \u00a0= 2<sup>11<\/sup><\/p>\n<p>Por lo que:<\/p>\n<p>Cantidad de bits para id de p\u00e1gina: 2 bits<\/p>\n<p>Cantidad de bits para desplazamiento: 11 bits<\/p>\n<h2>Referencias<\/h2>\n<ol>\n<li><strong>Wolf, Ruiz, Bergero y Vega<\/strong> (2014).<a href=\"https:\/\/books.google.com.mx\/books?id=836YCgAAQBAJ&amp;lpg=PP1&amp;hl=es&amp;pg=PA167#v=onepage&amp;q&amp;f=false\" target=\"_blank\" rel=\"noopener\"> Sistemas operativos<\/a>. 1a ed. &#8211; Iniciativa Latinoamericana de Libros de Texto Abiertos (LATIn)<\/li>\n<li>Garc\u00eda (2016). Memoria virtual, ejercicios resueltos. Universidad Carlos III. Disponible en:\u00a0http:\/\/ocw.uc3m.es\/ingenieria-informatica\/estructura-de-computadores\/ejercicios-resueltos\/ejercicios-resueltos-tema-7.pdf<\/li>\n<\/ol>\n<h2>Te puede interesar:<\/h2>\n<p><iframe loading=\"lazy\" width=\"751\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/gExUhQb0CNA\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"allowfullscreen\"><\/iframe><br \/>\n&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Se explica qu\u00e9 es la t\u00e9cnica de paginaci\u00f3n para administraci\u00f3n de memoria, qu\u00e9 es la memoria virtual y la paginaci\u00f3n por demanda.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"amp_status":"","footnotes":""},"categories":[43],"tags":[319,322],"class_list":["post-2334","post","type-post","status-publish","format-standard","hentry","category-sistemas-operativos","tag-administracion-de-memoria","tag-memoria-virtual"],"_links":{"self":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2334","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=2334"}],"version-history":[{"count":7,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2334\/revisions"}],"predecessor-version":[{"id":2379,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2334\/revisions\/2379"}],"wp:attachment":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=2334"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=2334"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=2334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}