diff options
Diffstat (limited to 'iso/n5.lyx')
| -rw-r--r-- | iso/n5.lyx | 879 |
1 files changed, 879 insertions, 0 deletions
diff --git a/iso/n5.lyx b/iso/n5.lyx new file mode 100644 index 0000000..50cbe03 --- /dev/null +++ b/iso/n5.lyx @@ -0,0 +1,879 @@ +#LyX 2.3 created this file. For more info see http://www.lyx.org/ +\lyxformat 544 +\begin_document +\begin_header +\save_transient_properties true +\origin unavailable +\textclass book +\use_default_options true +\maintain_unincluded_children false +\language spanish +\language_package default +\inputencoding auto +\fontencoding global +\font_roman "default" "default" +\font_sans "default" "default" +\font_typewriter "default" "default" +\font_math "auto" "auto" +\font_default_family default +\use_non_tex_fonts false +\font_sc false +\font_osf false +\font_sf_scale 100 100 +\font_tt_scale 100 100 +\use_microtype false +\use_dash_ligatures true +\graphics default +\default_output_format default +\output_sync 0 +\bibtex_command default +\index_command default +\paperfontsize default +\spacing single +\use_hyperref false +\papersize default +\use_geometry false +\use_package amsmath 1 +\use_package amssymb 1 +\use_package cancel 1 +\use_package esint 1 +\use_package mathdots 1 +\use_package mathtools 1 +\use_package mhchem 1 +\use_package stackrel 1 +\use_package stmaryrd 1 +\use_package undertilde 1 +\cite_engine basic +\cite_engine_type default +\biblio_style plain +\use_bibtopic false +\use_indices false +\paperorientation portrait +\suppress_date false +\justification true +\use_refstyle 1 +\use_minted 0 +\index Index +\shortcut idx +\color #008000 +\end_index +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation indent +\paragraph_indentation default +\is_math_indent 0 +\math_numbering_side default +\quotes_style french +\dynamic_quotes 0 +\papercolumns 1 +\papersides 1 +\paperpagestyle default +\tracking_changes false +\output_changes false +\html_math_output 0 +\html_css_as_file 0 +\html_be_strict false +\end_header + +\begin_body + +\begin_layout Standard +El +\series bold +administrador de memoria +\series default + del sistema operativo se encarga de abstraer y administrar la jerarquía + de memoria. +\end_layout + +\begin_layout Section +Sin memoria virtual +\end_layout + +\begin_layout Standard +En la +\series bold +multiprogramación con particiones fijas +\series default +, se asigna una zona de tamaño fijo al sistema operativo y el resto se dividen + en +\series bold +particiones +\series default + de igual o distinto tamaño. + Podemos tener una cola por partición y colocar cada trabajo en la cola + de la partición más pequeña en que quepa, pero si hay pocas particiones + pequeñas sus colas serán largas porque la mayoría de procesos son pequeños + y si hay muchas puede no quedar espacio para trabajos grandes. + También se puede tener una cola para todas las particiones y, cuando queda + una partición libre, darla a la primera tarea de la cola que quepa, lo + que hace que las tareas pequeñas desperdicien espacio, o darla a la tarea + más grande que quepa, lo que discrimina a las tareas pequeñas. + Soluciones a este último problema son tener una partición pequeña o establecer + un máximo de veces que se puede excluir una tarea. +\end_layout + +\begin_layout Standard +Esto limita el +\series bold +grado de multiprogramación +\series default +, el total de procesos que puede haber a la vez en memoria compartiendo + CPU, además de producir fragmentación interna sobre todo en procesos pequeños + y fragmentación externa si hay particiones libres con tamaño total suficiente + para un proceso pero ninguna es lo bastante grande. +\end_layout + +\begin_layout Standard +La +\series bold +multiprogramación con particiones variables +\series default + soluciona el problema asignando a cada proceso una partición del tamaño + exacto que necesita, con lo que las particiones se crean, desaparecen o + intercambian según se necesita. + +\series bold +Políticas de asignación de huecos +\series default +: +\end_layout + +\begin_layout Itemize + +\series bold +Primero en ajustarse +\series default +: Se busca el primer hueco lo suficientemente grande desde el principio + de la memoria, dividiendo el hueco en una parte para el proceso y un hueco + libre (salvo si hay ajuste perfecto), y es rápido. +\end_layout + +\begin_layout Itemize + +\series bold +Siguiente en ajustarse +\series default +: Igual pero se empieza a buscar por donde se quedó la anterior búsqueda. +\end_layout + +\begin_layout Itemize + +\series bold +Mejor en ajustarse +\series default +: Busca el hueco más pequeño en el que quepa el proceso, es lenta y desperdicia + más memoria por fragmentación externa. +\end_layout + +\begin_layout Itemize + +\series bold +Peor en ajustarse +\series default +: Toma el hueco libre más grande, y es lenta pero aprovecha bien la memoria. +\end_layout + +\begin_layout Standard +La +\series bold +compactación +\series default + consiste en mover procesos en memoria para juntar los huecos y reducir + la fragmentación externa. + No se suele usar porque consume mucho tiempo, proporcional a la cantidad + de información a mover, si bien ordenadores como el CDC CYBERS tenían hardware + especial para esto. + Para la +\series bold +administración de memoria libre +\series default +: +\end_layout + +\begin_layout Itemize + +\series bold +Mapas de bits +\series default +: Se divide la memoria en unidades de asignación del mismo tamaño, y a cada + una le corresponde un bit que indica si está libre o no. + Si la unidad de asignación es pequeña, el mapa de bits será grande y las + búsquedas lentas, pero si es grande habrá fragmentación interna. +\end_layout + +\begin_layout Itemize + +\series bold +Listas ligadas +\series default +: Lista de segmentos de memoria, que pueden ser procesos o huecos. + Cuando un proceso termina, debe fusionar el hueco con los adyacentes, lo + que es sencillo si la lista está ordenada por direcciones. + Si hay una lista para procesos y otra para huecos, las operaciones serán + más rápidas por no tener que ordenar la lista de procesos. + Si la de huecos se ordena por tamaño decreciente, la política de peor ajuste + es +\begin_inset Formula $O(1)$ +\end_inset + +, pero la fusión de huecos es cara. + En general se accede a la información de memoria asignada a un proceso + desde su bloque de control. +\end_layout + +\begin_layout Standard +La asignación de hueco en la zona de intercambio del disco puede hacerse + cuando el proceso deba intercambiarse o cuando se cree. + Los algoritmos de asignación y registro de estos huecos son los mismos + que en memoria principal, salvo que el tamaño de un hueco en disco es múltiplo + del tamaño de bloque. +\end_layout + +\begin_layout Standard +La +\series bold +reubicación +\series default + o +\series bold +relocalización +\series default + consiste en que, cuando un programa se ejecuta, puede ir a cualquier partición, + por lo que el programa debe usar +\series bold +código relocalizable +\series default +, que pueda ejecutarse correctamente independientemente de dónde se sitúe. +\end_layout + +\begin_layout Standard +Para la protección de memoria puede haber un +\series bold +registro base +\series default + con la dirección de memoria donde comienza la partición de un proceso y + un +\series bold +registro límite +\series default + con su tamaño, de modo que el proceso puede generar cualquier +\series bold +dirección lógica +\series default + en un +\series bold +espacio de direcciones lógicas +\series default + de 0 a su tamaño menos 1 que se traducen a +\series bold +direcciones físicas +\series default +, y si genera una dirección mayor se produce una excepción. +\end_layout + +\begin_layout Section +Paginación +\end_layout + +\begin_layout Standard +El esquema de +\series bold +memoria virtual +\series default + permite ejecutar procesos con tamaño total mayor al de la memoria física, + para lo que guarda en esta sólo las partes del proceso que se están usando + y el resto lo guarda en disco. + Cada proceso posee un espacio de direcciones virtuales, de tamaño normalmente + limitado por CPU, que van a la +\series bold +unidad de administración de memoria +\series default + ( +\series bold +MMU +\series default +) normalmente integrada en el chip de la CPU para que las traduzca a direcciones + físicas. +\end_layout + +\begin_layout Standard +El espacio de direcciones virtuales se divide en +\series bold +páginas +\series default + y el de memoria física en +\series bold +marcos de página +\series default +, del mismo tamaño, normalmente potencias de 2 entre +\begin_inset Formula $\unit[512]{B}$ +\end_inset + + y +\begin_inset Formula $\unit[8]{KiB}$ +\end_inset + +, aunque pueden ser bastante más grandes, y las transferencias entre memoria + y disco son siempre en unidades de página. +\end_layout + +\begin_layout Standard +Una +\series bold +tabla de páginas +\series default + tiene tantas entradas como páginas y en cada una indica el marco en que + se almacena junto a algunos bits: +\end_layout + +\begin_layout Itemize + +\series bold +Bit presente/ausente +\series default +: Indica si la página está asociada o no. + Si se accede a una página no asociada, la MMU genera una excepción llamada + +\series bold +fallo de página +\series default + a tratar por el sistema operativo. + Este selecciona un marco, escribe su contenido en disco (si estaba ocupado + y se había escrito algo), lo marca como ausente en su tabla de páginas + y asigna el marco a la página que provocó el fallo, que lee del disco si + es necesario. +\end_layout + +\begin_layout Itemize + +\series bold +Bits de protección +\series default +: Tipo de acceso permitido (lectura, escritura, ejecución...). + Las páginas con código suelen tener permisos de lectura y ejecución pero + no de escritura, mientras que las de datos suelen tener de lectura y escritura. +\end_layout + +\begin_layout Itemize + +\series bold +Modificado +\series default +: Indica si se ha modificado o no el contenido del marco. +\end_layout + +\begin_layout Itemize + +\series bold +Referenciado +\series default +: Se establece al hacer referencia a una página, y se usa en algoritmos + de reemplazo. +\end_layout + +\begin_layout Itemize + +\series bold +Caché +\series default +: En las máquinas con E/S mapeada a memoria, evita que el contenido de la + página se almacene en caché. +\end_layout + +\begin_layout Itemize + +\series bold +Visible en modo núcleo +\series default +: Evita que se pueda acceder a la página en modo usuario. +\end_layout + +\begin_layout Standard +Las direcciones virtuales se dividen en un +\series bold +número de página +\series default +, usado como índice en la tabla de páginas, y un +\series bold +ajuste +\series default + o +\series bold +desplazamiento +\series default + dentro de ella. +\end_layout + +\begin_layout Standard +La traducción de páginas debe ser rápida, por lo que se usa un +\series bold +TLB +\series default + ( +\emph on +Translation Look-aside Buffer +\emph default +), una caché totalmente asociativa generalmente en la MMU que contiene entradas + de la tabla de páginas. + El hardware verifica si el número de página está en el TLB comparando todas + las entradas en paralelo (por lo que número de entradas suele ser muy pequeño). + Si coincide alguna, se toma la entrada del TLB (incluyendo bits de protección, + etc.). + Si no está, se lee la entrada de memoria principal y, bien se elimina una + entrada del TLB escribiendo sus bits de modificado y uso en la principal + y se reemplaza por la nueva, o se produce un fallo de página. +\end_layout + +\begin_layout Standard +Al cambiar de proceso se puede invalidar el contenido del TLB, borrando + todos los bits de validez mediante una instrucción especial, o añadir un + nuevo campo a cada entrada del TLB con el identificador del proceso y un + registro con el del proceso activo, requiriendo hardware adicional pero + ahorrando tiempo en los cambios de proceso y dando lugar a encontrar entradas + en el TLB del propio proceso tras volver a tomar la CPU. +\end_layout + +\begin_layout Standard +Como una tabla de páginas global puede ser muy grande, en la práctica se + divide el número de página en varias partes y se usan tablas de páginas + de varios niveles, de modo que la de primer nivel se indexa según la primera + parte del número de página e indica la dirección de las tablas de segundo + nivel, etc., y las tablas que no son necesarias no se tienen. + Los Intel Pentium Pro tienen 3 niveles, los procesadores de Intel y AMD + de 64 bits tienen 4, y Linux soporta hasta 5 desde la versión 4.14, permitiendo + gestionar hasta +\begin_inset Formula $\unit[128]{PiB}$ +\end_inset + + de memoria virtual y hasta +\begin_inset Formula $\unit[4]{PiB}$ +\end_inset + + de RAM. +\end_layout + +\begin_layout Standard +Una +\series bold +tabla de páginas invertida +\series default + contiene una entrada por cada marco de página con el número de la página + que almacena, el PID, una serie de bits como en una entrada de tabla de + páginas normal y un puntero para encadenamiento en una tabla de dispersión + abierta usada para acelerar las traducciones, que usa como clave el PID + y el número de página y devuelve el número de una entrada de la tabla. +\end_layout + +\begin_layout Standard +El +\series bold +mapa de memoria +\series default + de un proceso es la estructura de su espacio de direcciones lógicas, en + zonas contiguas de memoria virtual llamadas +\series bold +regiones +\series default + como las de código, datos con valor inicial, datos sin valor inicial y + pila de cada hilo, con características como: +\end_layout + +\begin_layout Itemize + +\series bold +Soporte +\series default +: De dónde se obtienen los datos que contiene la región; normalmente un + fichero o parte de este, como un ejecutable en el caso del código. + También hay regiones sin soporte como la pila, cuyas páginas, si se modifican + y son expulsadas, se guardan en la zona de intercambio del disco. +\end_layout + +\begin_layout Itemize + +\series bold +Tipo de compartición +\series default +: Si las modificaciones que haga un proceso son visibles por otros o no. +\end_layout + +\begin_layout Itemize + +\series bold +Protección +\series default +: Permisos de lectura, escritura y ejecución. +\end_layout + +\begin_layout Itemize + +\series bold +Tamaño fijo +\series default + o +\series bold +variable +\series default +: Si es variable, se indica si crece hacia direcciones mayores, como la + memoria montón o +\emph on +heap +\emph default + usada para la memoria dinámica, o menores, como la pila. + En UNIX, la memoria montón no tiene soporte, está inicialmente a 0 y crece + conforme el proceso necesita memoria mediante las llamadas +\family typewriter +brk +\family default + y +\family typewriter +sbrk +\family default +. +\end_layout + +\begin_layout Standard +El sistema operativo suele estar mapeado en todos los procesos, con el bit + de visible en modo núcleo activado, por eficiencia en las transferencias + de datos entre usuario y núcleo +\begin_inset Foot +status open + +\begin_layout Plain Layout +En procesadores como Intel, esto ya no se hace debido a Meltdown. +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Standard +En Linux, al hacer la llamada al sistema +\family typewriter +fork +\family default +, se usa +\series bold +copia en escritura +\series default + ( +\emph on +copy on write +\emph default +, COW), consistente en desactivar el permiso de escritura de las páginas + y dar al proceso hijo una copia de la tabla de páginas del padre, de modo + que si uno de los dos intenta escribir en una región en la que tendría + permiso, el sistema operativo hace una copia de la página que provocó la + violación, la asigna a la tabla de páginas del proceso que hace la escritura + y activa el permiso de escritura en ambas páginas +\begin_inset Foot +status open + +\begin_layout Plain Layout +Linux usa conteo de referencias para que, si hay varios +\family typewriter +fork +\family default +, no se active la escritura en la página original hasta que el resto de + procesos tenga una copia de la página. + Ver +\begin_inset Flex URL +status open + +\begin_layout Plain Layout + +https://stackoverflow.com/questions/13813636/how-does-copy-on-write-in-fork-handl +e-multiple-fork +\end_layout + +\end_inset + + para más detalles. +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Standard +Algoritmos de reemplazo de páginas: +\end_layout + +\begin_layout Itemize + +\series bold +Algoritmo óptimo +\series default +: Se elimina la página para la que pasará más tiempo antes de ser utilizada. + Modelo teórico imposible de implementar. +\end_layout + +\begin_layout Itemize + +\series bold +NRU +\series default + (no usada recientemente): Se limpia el bit de referenciado periódicamente + en todas las páginas, y al reemplazar se prefieren páginas con este bit + desactivado y, dentro de esto, con el de modificado desactivado. +\end_layout + +\begin_layout Itemize + +\series bold +FIFO +\series default + (primera en enterar, primera en salir): Se elimina la primera página de + una lista y se añade la nueva al final. + El algoritmo es de bajo coste, pero no tiene en cuenta ningún dato adicional + y produce demasiados fallos. +\end_layout + +\begin_layout Itemize + +\series bold +Algoritmo de la segunda oportunidad +\series default +: Como el FIFO pero, si el bit de referenciado de la primera página está + activo, el bit se limpia, la página pasa al final y se comprueba la siguiente. +\end_layout + +\begin_layout Itemize + +\series bold +Algoritmo del reloj +\series default +: Equivalente al anterior pero con una lista circular donde una +\begin_inset Quotes fld +\end_inset + +manecilla +\begin_inset Quotes frd +\end_inset + + (un puntero) apunta a la página más antigua. + Si el bit de referenciado está inactivo, se expulsa y se reemplaza en la + lista la página apuntada y se avanza la manecilla a la siguiente, y de + lo contrario se inactiva el bit, se pasa a la siguiente página y se repite + el proceso. +\end_layout + +\begin_layout Itemize + +\series bold +LRU +\series default + (usada menos recientemente): Se elimina la página no usada desde hace más + tiempo. + Se podría usar una lista ligada de todas las páginas de memoria, pero tendría + que actualizarse en cada acceso a memoria. + También se podría tener un contador hardware que se incrementa en cada + referencia a memoria y un campo en las entradas de la tabla de páginas + y la TLB donde copiarlo. + Otra forma es usar una matriz +\begin_inset Formula $n\times n$ +\end_inset + +, siendo +\begin_inset Formula $n$ +\end_inset + + el total de páginas, inicializada a 0, con lo que al referencial el marco + +\begin_inset Formula $k$ +\end_inset + +, el hardware activa todos los bits de la fila +\begin_inset Formula $k$ +\end_inset + + y después desactiva todos los de la columna, con lo que la fila cuyo valor + en binario sea mínimo es la del marco que se usó hace más tiempo, pero + esto es inviable por el tamaño de la matriz. +\end_layout + +\begin_layout Itemize + +\series bold +Algoritmo de maduración +\series default +: Aproximación software de LRU. + En cada interrupción de reloj, se desplaza un contador en cada entrada + de la tabla de páginas un bit a la derecha y se añade a la izquierda el + bit de referenciado. +\end_layout + +\begin_layout Standard +Se debe decidir también si la página a reemplazar se busca sólo en las del + proceso ( +\series bold +reemplazo local +\series default +) o en todas las de memoria ( +\series bold +reemplazo global +\series default +), y si el número de marcos asignados a un proceso varía ( +\series bold +asignación dinámica +\series default +) o no ( +\series bold +asignación fija +\series default + o +\series bold +estática +\series default +). + No es posible el reemplazo global con asignación fija, pero el reemplazo + local con asignación dinámica puede evitar que un proceso que empieza a + producir fallos de página le quite páginas a otros siendo a la vez más + flexible que una asignación fija. + Llamamos +\series bold +algoritmo de frecuencia de fallos de página +\series default + al consistente en asignar más marcos a los procesos que producen muchos + fallos de página y quitarlos a los que producen pocos. + Otros aspectos son el número mínimo de marcos por proceso, que depende + entre otros del máximo de páginas que puede usar una sola instrucción +\begin_inset Foot +status open + +\begin_layout Plain Layout +Si, por ejemplo, una instrucción debe acceder a 5 páginas incluyendo la + de la propia instrucción pero sólo hay 4 marcos, uno de los accesos provocará + necesariamente un fallo de página que reemplazará otra de las 4 páginas + necesarias y reiniciará la instrucción, que nunca llegará a terminar. +\end_layout + +\end_inset + +, y el reparto de marcos entre distintos procesos (equitativo, proporcional + al tamaño, etc.). +\end_layout + +\begin_layout Standard +Páginas pequeñas producen menos fragmentación interna, pero páginas grandes + aceleran el reemplazo porque las transferencias entre memoria y disco son + normalmente de una página y hay poca diferencia entre el tiempo de transferenci +a de una página pequeña y el de una grande. + Los tamaños más frecuentes son de 4 y +\begin_inset Formula $\unit[8]{KiB}$ +\end_inset + +. +\end_layout + +\begin_layout Standard +La +\series bold +hiperpaginación +\series default + ocurre cuando un proceso emplea más tiempo paginando (esperando a que se + resuelvan sus fallos de página) que ejecutando código porque necesita muchos + más marcos de los que tiene. + En tal caso, aparte de añadir más memoria principal, podemos suspender + temporalmente algunos procesos para liberar memoria y reanudarlos cuando + la tasa de fallos de página decaiga. +\end_layout + +\begin_layout Standard +Políticas de lectura y escritura de páginas: +\end_layout + +\begin_layout Itemize + +\series bold +Paginación por demanda +\series default +: Solo se lee la página que produce el fallo. +\end_layout + +\begin_layout Itemize + +\series bold +Prepaginación +\series default + o +\series bold +paginación anticipada +\series default +: Se leen varias páginas más, normalmente las que se encuentran después + en el espacio de direcciones virtuales. +\end_layout + +\begin_layout Itemize + +\series bold +Escritura por demanda +\series default +: Una página se escribe en disco cuando se expulsa, aumentando el tiempo + de resolución de fallos de página. +\end_layout + +\begin_layout Itemize + +\series bold +Escritura anticipada +\series default +: Un hilo del núcleo, el +\series bold +demonio de paginación +\series default +, cada cierto tiempo escribe en disco las páginas modificadas, aumentando + el rendimiento en discos duros al escribir varias páginas a la vez y acelerando + la resolución de fallos de página. + Muchas escrituras pueden ser inútiles si la páginas se modifican poco después, + por lo que el demonio puede buscar páginas que, según el algoritmo de reemplazo +, podrían expulsarse próximamente y escribirlas en disco si han sido modificadas. + También puede liberar más páginas para tener páginas libres ( +\series bold +caché de páginas +\series default +) y resolver rápidamente cualquier futuro fallo de página, de forma que + si una página liberada se necesita poco después su contenido siga en memoria. +\end_layout + +\begin_layout Section +Segmentación +\end_layout + +\begin_layout Standard +El espacio de direcciones lógicas de un proceso se compone de +\series bold +segmentos +\series default +, zonas contiguas dadas por una +\series bold +base +\series default + (dirección de comienzo) y un +\series bold +límite +\series default + (tamaño), y las direcciones especifican el número de segmento y el desplazamien +to dentro de él, de 0 al tamaño menos 1. + Esto facilita la protección y compartición de información, y se puede acelerar + la traducción con un TLB, pero sufre fragmentación externa, los segmentos + no pueden superar el tamaño de la memoria física y los intercambios con + el disco se hacen siempre moviendo segmentos enteros. +\end_layout + +\begin_layout Standard +En la +\series bold +segmentación paginada +\series default + estos segmentos se paginan, por lo que no hay fragmentación externa ni + hay que buscar un hueco adecuado para cada segmento. + El TLB es direccionable por el número de segmento a usar y el número de + la página dentro del segmento. +\end_layout + +\end_body +\end_document |
