{"id":2312,"date":"2020-11-12T12:31:53","date_gmt":"2020-11-12T18:31:53","guid":{"rendered":"https:\/\/naps.com.mx\/blog\/?p=2312"},"modified":"2021-02-01T09:32:46","modified_gmt":"2021-02-01T15:32:46","slug":"administracion-de-memoria-panorama-general","status":"publish","type":"post","link":"https:\/\/naps.com.mx\/blog\/administracion-de-memoria-panorama-general\/","title":{"rendered":"Administraci\u00f3n de memoria: Memoria Real. Panorama general."},"content":{"rendered":"<p>En \u00e9ste art\u00edculo analizamos conceptos de Administraci\u00f3n de Memoria en Sistemas Operativos. Se enfoca en la memoria real y hablamos de espacio de direccionamiento, \u00a0memoria cach\u00e9, y fragmentaci\u00f3n, entre otros.<\/p>\n<p><!--more--><\/p>\n<h2>Qu\u00e9 es la memoria<\/h2>\n<p>Una memoria es un dispositivo donde se almacenan datos. En los sistemas de c\u00f3mputo hay dos varios tipos de memoria, de los que destacan: la memoria principal (RAM) y la memoria secundaria (discos).<\/p>\n<p>El procesador puede usar directamente la memoria principal, por lo que los programas deben ser cargados en memoria antes de ser utilizados. La MMU (Unidad de manejo de memoria) es el hardware que se utiliza para trabajar con la memoria.<\/p>\n<h2>Administraci\u00f3n de memoria<\/h2>\n<h2>Espacio de direccionamiento<\/h2>\n<p>Cada que se requiere el hardware entrega un cojunto de bits (8, 16,32,64) seg\u00fan la arquitectura.<\/p>\n<p>De forma que:<\/p>\n<ul>\n<li>Una arquitectura de 8 bits, puede direccionar 2^8 direcciones (256)<\/li>\n<li>Una de 16 bits = 65536 bytes (64 KB).<\/li>\n<li>Una de 32 bits = 4294967269 bytes ( 4096 MB = 4 GB)<\/li>\n<li>Una de 64 bits puede direccionar hasta 16 exabytes<\/li>\n<\/ul>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2315\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria.png\" alt=\"Administraci\u00f3n de memoria\" width=\"305\" height=\"165\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria.png 305w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria-300x162.png 300w\" sizes=\"auto, (max-width: 305px) 100vw, 305px\" \/><\/a><\/p>\n<h2>MMU<\/h2>\n<p>Es la encargada de verificar que un proceso no lea o modifique los datos de otro<br \/>\nEl sistema operativo no podr\u00eda encargarse de \u00e9sta verificaci\u00f3n, o, si lo hiciera el retraso ser\u00eda mayor.<br \/>\n\u00bfC\u00f3mo lo hace?<br \/>\nEl SO le da a un proceso un registro base y un registro l\u00edmite.<br \/>\n<strong>Ejemplo<\/strong>: Si a un proceso le asignan 64kb (65536), a partir de la direcci\u00f3n 504214, el registro base es 504212 y el registro l\u00edmite es 65536. Si una instrucci\u00f3n de ese proceso desea acceder a una direcci\u00f3n inferior a 504212 o superior a 569749, la MMU interrumpe el proceso y le indica al SO. El SO deber\u00e1 terminar el proceso y notificar al usuario.<\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria-mmu.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2317\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria-mmu.png\" alt=\"Administraci\u00f3n de memoria mmu\" width=\"653\" height=\"422\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria-mmu.png 653w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria-mmu-300x194.png 300w\" sizes=\"auto, (max-width: 653px) 100vw, 653px\" \/><\/a><\/p>\n<h2>Memoria Cach\u00e9<\/h2>\n<p><span style=\"font-size: 16px;\">La velocidad de un procesador es mayor que la velocidad de la memoria.<\/span><\/p>\n<p>De modo que es posible que el procesador acceda a la memoria principal en busca de instrucciones y datos, y que se requiera una direcci\u00f3n de memoria y \u00e9sta no se encuentre disponible, por lo que el procesador deber\u00e1 esperar. (No puede cambiar de proceso).<\/p>\n<p>Para evitar \u00e9stos retrasos se utiliza la memoria cach\u00e9.<\/p>\n<p>La memoria cach\u00e9 es una memoria de alta velocidad situada entre el procesador y la memoria principal.<\/p>\n<p>Si se tiene en cuenta que:<\/p>\n<ul>\n<li>Un recurso empleado recientemente, puede volverse a necesitar (Localidad temporal)<\/li>\n<li>Un recurso puede ser requirido si est\u00e1 cerca de otro recurso cercano. (Localidad espacial)<\/li>\n<li>Un recurso tiende a ser requerido de forma secuencial (Localidad secuencial)<\/li>\n<\/ul>\n<p>Entonces lo mejor es que, cuando el procesador requiere una direcci\u00f3n de memoria, el HW transfiera al procesador todo un bloque completo de direcciones y no solo la direcci\u00f3n solicitada.<\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria-Cache.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2318\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria-Cache.png\" alt=\"Administraci\u00f3n de memoria Cache\" width=\"500\" height=\"500\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria-Cache.png 500w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria-Cache-150x150.png 150w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria-Cache-300x300.png 300w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<h2>Espacio en memoria de un proceso<\/h2>\n<p>Un proceso se lleva a memoria siguiendo una estructura:<\/p>\n<ul>\n<li><strong>Secci\u00f3n de texto<\/strong>: Las instrucciones a ser ejecutadas.<\/li>\n<li><strong>Secci\u00f3n de datos<\/strong>: Variables globales y datos inicializados. (El espacio es fijado en tiempo de compilaci\u00f3n y no puede ser cambiado, aunque los datos s\u00ed.)<\/li>\n<li><strong>Espacio de libres:<\/strong> Espacio para asignaci\u00f3n din\u00e1mica de memoria durante la ejecuci\u00f3n<\/li>\n<li><strong>Pila de llamadas<\/strong>: Almacena la secuencia de funciones, con sus par\u00e1metros y variables locales.<\/li>\n<\/ul>\n<h2>Resoluci\u00f3n de direcciones<\/h2>\n<p>Un programa compilado no emplea nombres de variables sino direcciones de memoria. La asignaci\u00f3n de las direcciones se puede realizar:<\/p>\n<ul>\n<li><strong>En tiempo de compilaci\u00f3n<\/strong>: El programa tiene la direcci\u00f3n absoluta de las variables y funciones.<\/li>\n<li><strong>En tiempo de carga<\/strong>: Al cargarse a memoria el sistema operativo actualiza las referencias a memoria para que apunten al lugar correcto.<\/li>\n<li><strong>En tiempo de ejecuci\u00f3n<\/strong>: Las direcciones se refieren a una base y a un desplazamiento. Esto permite que un proceso sea reubicado en memoria mientras est\u00e1 siendo ejecutado.<\/li>\n<\/ul>\n<h2>Partici\u00f3n de la memoria<\/h2>\n<p>Si se emplea tiempo de carga o tiempo de ejecuci\u00f3n, es posible asignar a cada programa un bloque contiguo de memoria de tama\u00f1o fijo.<\/p>\n<p>El SO se colocar\u00eda en la regi\u00f3n m\u00e1s baja (0X00000000) y dejar\u00eda el resto a los procesos.<\/p>\n<h2>Fragmentaci\u00f3n<\/h2>\n<p>Cuando los procesos terminan su ejecuci\u00f3n y el SO libera la memoria asignada, comienza a aparecer la fragmentaci\u00f3n.<\/p>\n<p>El SO seguir\u00eda las siguientes estrategias para asignar direcci\u00f3n a un nuevo proceso:<\/p>\n<ul>\n<li><strong>Primer ajuste<\/strong>: Tomar el primer bloque con tama\u00f1o suficiente para alojar un proceso<\/li>\n<li><strong>Mejor ajuste<\/strong>: Buscar el bloque que mejor se ajuste al tama\u00f1o del proceso<\/li>\n<li><strong>Peor ajuste<\/strong>: Buscar el bloque m\u00e1s grande disponible.<\/li>\n<\/ul>\n<p>Puede producirse Fragmentaci\u00f3n externa, cuando hay muchos bloques libres entre bloques asignados a procesos. La fragmentaci\u00f3n interna se refiere a la cantidad de memoria dentro de un bloque que nunca se usar\u00e1.<\/p>\n<h2>Compactaci\u00f3n<\/h2>\n<p>Puede darse el caso de que haya suficiente espacio libre disponible, pero ning\u00fan bloque del tama\u00f1o suficiente para que un proceso se aloje en memoria.<\/p>\n<p>Cuando el SO detecta un alto indice de fragmentaci\u00f3n se puede lanzar una operaci\u00f3n de compactaci\u00f3n: mover bloques ocupados para ocupar espacios contiguos.<\/p>\n<h2>Intercambio (SWAP)<\/h2>\n<p>Cuando la memoria se termina, el sistema puede seguir operando. El SO puede suspender un proceso, almacenar una copia en memoria secundaria, y m\u00e1s adelante puede restaurarlo.<\/p>\n<h2>Segmentaci\u00f3n<\/h2>\n<p>En una arquitectura que soporte segmentaci\u00f3n, las secciones de texto, datos, libres y pila de un proceso pueden estar en segmentos diferentes. Esto permite definir permisos diferentes a los segmentos. De ese modo se protege las diferentes secciones del proceso.<\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria-Fragmentacion-Segmentaci\u00f3n.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2319\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria-Fragmentacion-Segmentaci\u00f3n.png\" alt=\"Administraci\u00f3n de memoria Fragmentacion Segmentaci\u00f3n\" width=\"449\" height=\"390\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria-Fragmentacion-Segmentaci\u00f3n.png 1166w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria-Fragmentacion-Segmentaci\u00f3n-300x261.png 300w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria-Fragmentacion-Segmentaci\u00f3n-768x668.png 768w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/11\/Administraci\u00f3n-de-memoria-Fragmentacion-Segmentaci\u00f3n-1024x891.png 1024w\" sizes=\"auto, (max-width: 449px) 100vw, 449px\" \/><\/a><\/p>\n<h2>Referencias<\/h2>\n<ol>\n<li><strong>Wolf, Ruiz, Bergero y Vega<\/strong> (2014). Sistemas operativos. 1a ed. &#8211; Iniciativa Latinoamericana de Libros de Texto Abiertos (LATIn)<\/li>\n<\/ol>\n<p>Reconocimiento por uso de ilustraciones:<\/p>\n<ol>\n<li>Arquitectura de 32 bits vs 64 bits:\u00a0https:\/\/www.xataka.com\/basics\/que-significa-que-mi-cpu-sea-de-32-o-64-bits-y-cual-es-la-diferencia<\/li>\n<li>MMU:\u00a0http:\/\/faculty.salina.k-state.edu\/tim\/ossg\/Memory\/mem_hw.html<\/li>\n<li>https:\/\/developers.redhat.com\/blog\/2016\/03\/01\/reducing-memory-access-times-with-caches\/<\/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><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En \u00e9ste art\u00edculo analizamos conceptos de Administraci\u00f3n de Memoria en Sistemas Operativos. Se enfoca en la memoria real y hablamos de espacio de direccionamiento, \u00a0memoria cach\u00e9, y fragmentaci\u00f3n, entre otros.<\/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,320,312],"class_list":["post-2312","post","type-post","status-publish","format-standard","hentry","category-sistemas-operativos","tag-administracion-de-memoria","tag-memoria-real","tag-sistemas-operativos"],"_links":{"self":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2312","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=2312"}],"version-history":[{"count":6,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2312\/revisions"}],"predecessor-version":[{"id":2380,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2312\/revisions\/2380"}],"wp:attachment":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=2312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=2312"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=2312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}