<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://1984.lsi.us.es/wiki-ssoo/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jesgonbel</id>
		<title>Wiki de Sistemas Operativos - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="https://1984.lsi.us.es/wiki-ssoo/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jesgonbel"/>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php/Especial:Contribuciones/Jesgonbel"/>
		<updated>2026-04-10T16:16:10Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.29.0</generator>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_de_los_ejercicios_de_paginaci%C3%B3n_y_segmentaci%C3%B3n&amp;diff=2479</id>
		<title>Solución de los ejercicios de paginación y segmentación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_de_los_ejercicios_de_paginaci%C3%B3n_y_segmentaci%C3%B3n&amp;diff=2479"/>
				<updated>2012-01-29T19:38:24Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: solución detallada&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El tamaño de página es de 8KB = 2^13 B --&amp;gt; 13 bits para la zona de offset.&lt;br /&gt;
&lt;br /&gt;
El tamaño de palabra del procesador es de 64 bits.&lt;br /&gt;
&lt;br /&gt;
Conocido el offset y el tamaño de la palabra podemos obtener los bits que ocupan la zona de nº página (64 bits - 13bits).&lt;br /&gt;
&lt;br /&gt;
                                         '''DIRECCIÓN LÓGICA'''&lt;br /&gt;
                               --------------------------------------&lt;br /&gt;
                              | nº página (51 bits) | offset(13 bits)|&lt;br /&gt;
                              --------------------------------------&lt;br /&gt;
&lt;br /&gt;
=Apartado a)=&lt;br /&gt;
Nuestra tabla de páginas tendrá tantas entradas como páginas tenga, por lo que tiene 2^51 entradas. &lt;br /&gt;
Si sabemos que cada entrada ocupa 128 bits (16 B =2^4 B) el tamaño de la tabla de páginas será 2^51 * 2^4 = 2^55 B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Apartado b)=&lt;br /&gt;
Sabiendo el tamaño de la tabla de páginas y del tamaño de página, podemos saber cuántas páginas hay. &lt;br /&gt;
&lt;br /&gt;
2^55 B / 2^13 B = 2^42 páginas = 4 Tera Páginas&lt;br /&gt;
&lt;br /&gt;
=Apartado c)=&lt;br /&gt;
&lt;br /&gt;
Si el proceso ocupa 7*2^20 B y cada página de la tabla de páginas ocupa 8 KB (2^13 B) tendremos : &lt;br /&gt;
7*2^20 B / 2^13 B = 7 * 2^7 entradas de la tabla de páginas están siendo ocupadas.&lt;br /&gt;
&lt;br /&gt;
[[Solución detallada de los ejercicios de paginación y segmentación]]&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_detallada_de_los_ejercicios_de_paginaci%C3%B3n_y_segmentaci%C3%B3n&amp;diff=2478</id>
		<title>Solución detallada de los ejercicios de paginación y segmentación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_detallada_de_los_ejercicios_de_paginaci%C3%B3n_y_segmentaci%C3%B3n&amp;diff=2478"/>
				<updated>2012-01-29T19:37:27Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: explicacion detallada del ejercicio 2 del tema 10&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Datos del problema:&lt;br /&gt;
* Tamaño de página= 8KB (expresado en Bytes es 2^13 B)&lt;br /&gt;
* Tamaño de palabra del procesador= 64 bits&lt;br /&gt;
&lt;br /&gt;
Con estos datos podemos hallar la distribución de los bits de la dirección lógica:&lt;br /&gt;
Como máximo la dirección lógica tendrá 64 bits (el tamaño de palabra del procesador), &lt;br /&gt;
observando el tamaño de página expresado en bits hallamos que el numero de bits necesarios&lt;br /&gt;
para indicar el desplazamiento dentro de cada página es 13 (pues tiene 2^13 posiciones de memoria).&lt;br /&gt;
El resto de bits (51) se utiliza para representar los indicadores de página (luego se podrán &lt;br /&gt;
diferenciar 2^51 páginas distintas).&lt;br /&gt;
&lt;br /&gt;
La dirección de memoria queda estructurada de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
   __________________________________________________&lt;br /&gt;
  |                               |                  |&lt;br /&gt;
  |        identificador          |  Desplazamiento  |&lt;br /&gt;
  |_______________________________|__________________|&lt;br /&gt;
  0                              51                  64&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Apartado A ==&lt;br /&gt;
&lt;br /&gt;
Como hemos averiguado antes, en una misma tabla de páginas pueden haber hasta 2^51 páginas.&lt;br /&gt;
Si cada una de esas páginas pesa 128 bits (16 Bytes) el tamaño total de la tabla de páginas será:&lt;br /&gt;
 16 * 2^51 = 2^55 Bytes&lt;br /&gt;
&lt;br /&gt;
==Apartado B==&lt;br /&gt;
Conociendo el tamaño total de la tabla y el tamaño de las páginas podemos hallar el numero&lt;br /&gt;
de páginas que caben en una tabla como máximo:&lt;br /&gt;
&lt;br /&gt;
 2^55 / 2^13 = 2^42 páginas caben en una tabla (cabe notar que podríamos diferenciar hasta 2^51 paginas, algo mas de las que caben realmente)&lt;br /&gt;
&lt;br /&gt;
== Apartado C==&lt;br /&gt;
Podemos calcular cuantas páginas ocupará un proceso, conocido el tamaño del proceso (7 MB, que equivale a 7*2^20 B) y el tamaño de las páginas&lt;br /&gt;
(8 KBytes, que equivale a 2^13 B). El cálculo es el siguiente:&lt;br /&gt;
 &lt;br /&gt;
 7*2^20 / 2^13 = 7*2^7 páginas ocupadas (al igual que sus entradas en la tabla de páginas)&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_ejercicio2Mejor_Ajuste_Din%C3%A1mico&amp;diff=2472</id>
		<title>Solución ejercicio2Mejor Ajuste Dinámico</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_ejercicio2Mejor_Ajuste_Din%C3%A1mico&amp;diff=2472"/>
				<updated>2012-01-29T17:49:00Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: duda&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;                          B&lt;br /&gt;
              P1  &amp;lt;---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                                           B&lt;br /&gt;
              P2  &amp;lt;   |   |   |   |---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                          A                      &lt;br /&gt;
              P3  &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                      C                  &lt;br /&gt;
              P4  &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                            C                        &lt;br /&gt;
              P5  &amp;lt;   |   |---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
             -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                  0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
Revisado --[[Usuario:Pneira|Pneira]] 16:01 22 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
-Una duda: ¿Por qué se ejecuta antes P3 que P2? [[Usuario:jesgonbel|jesgonbel]]&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_reemplazo&amp;diff=2448</id>
		<title>Criterios de reemplazo</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_reemplazo&amp;diff=2448"/>
				<updated>2012-01-28T18:12:59Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Criterio de página óptima */ ampliación&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La evaluación se hace en base a la '''tasa de fallos de página''', que es el número de fallos de página entre el número de accesos totales a página, con lo que su valor oscila en el rango [0,1].&lt;br /&gt;
&lt;br /&gt;
El fallo de página se produce cuando se accede a una posición de memoria que pertenece a una página de memoria que esta descargada en disco.&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;math&amp;gt;tasa fallos pagina = \frac{total fallos de pagina}{total accesos a pagina}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También hay que tener en cuenta el contexto, si estamos en arranque en frío o en caliente, así como el cumplimiento del principio de localidad espacial y temporal. &lt;br /&gt;
&lt;br /&gt;
* Arranque en frío : se dan muchos fallos de página al principio, ya que los procesos se acaban de lanzar y ninguno esta cargado en memoria principal.&lt;br /&gt;
* Arranque en caliente : se suponen ya cargadas las páginas de los procesos en memoria principal.&lt;br /&gt;
&lt;br /&gt;
== Criterio de página óptima ==&lt;br /&gt;
&lt;br /&gt;
Este es un criterio teórico que viene a establecer la cota inferior de la ''tasa de fallos de página''. Consiste en escoger la página que mayor tiempo va a tardar en utilizarse. Este es el mejor caso, pero se necesita conocimiento de futuro, de ahí que sea un criterio teórico.&lt;br /&gt;
La única forma de poner en práctica este criterio es, una vez se haya ejecutado un programa por primera vez, guardar el orden en el que ha ido pidiendo que se cargasen las páginas para que en la próxima ejecución de ese programa se determine la secuencia óptima de sustituciones, luego solo podría utilizarse con programas que se ejecutasen periódicamente y sin variaciones.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Secuencia de acceso a página : 2,2,3,1,1,3,4,5,1,1,2,3,4&lt;br /&gt;
          Suponiendo arranque en frío   &lt;br /&gt;
                                         ___1_____2_____3_____4___&lt;br /&gt;
                   memoria principal     |     |     |     |     |&lt;br /&gt;
                    de 4 marcos          |_____|_____|_____|_____|&lt;br /&gt;
&lt;br /&gt;
*[[sol_1|Solución]]&lt;br /&gt;
&lt;br /&gt;
== Criterio de página pésima ==&lt;br /&gt;
&lt;br /&gt;
Este también es teórico y viene a establecer la cota superior de la ''tasa de fallos de página'', para ver lo peor que podría comportarse un criterio. Consiste en seleccionar la página que menor tiempo tardará en usarse.&lt;br /&gt;
&lt;br /&gt;
*[[sol_2|Solución]]&lt;br /&gt;
&lt;br /&gt;
== Criterio de selección estocástica (aleatoria) ==&lt;br /&gt;
&lt;br /&gt;
Se trata también de un criterio teórico, serviría para aproximar la cota media de la ''tasa de fallos de página''. Consiste en seleccionar una página al azar.&lt;br /&gt;
&lt;br /&gt;
== Criterio MRU('''M'''ost '''R'''ecently '''U'''sed) ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona la última página a la que se ha accedido. Podría implementarse con una LIFO por orden de acceso.&lt;br /&gt;
&lt;br /&gt;
*[[sol_3|Solución]]&lt;br /&gt;
&lt;br /&gt;
== Criterio por orden de carga FIFO ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona la página que más tiempo lleva cargada en memoria principal. Se implementa con una FIFO por orden de carga, es decir, a medida que se cargan en memoria principal las páginas son añadidas a la cola. Un problema es que suele suceder que las páginas más usadas tienden a estar mucho tiempo en memoria principal y este criterio va contra eso.&lt;br /&gt;
&lt;br /&gt;
*[[sol_5|Solución]]&lt;br /&gt;
&lt;br /&gt;
== Criterio NRU ('''N'''ot '''R'''ecently '''U'''sed) ==&lt;br /&gt;
&lt;br /&gt;
Ofrece dos bits para cada página:&lt;br /&gt;
* Bit R : Se pone a 1 si la página ha sido usada (tanto para lectura como para escritura).&lt;br /&gt;
* Bit M : Se pone a 1 si la página es modificada (escritura).&lt;br /&gt;
&lt;br /&gt;
En resumen, siempre se pone a 1 el bit R, y solo se toca M cuando se accede a escritura.&lt;br /&gt;
&lt;br /&gt;
Para seleccionar la página víctima iteramos sobre los marcos cargados en memoria (comenzando por el primero de ellos) buscando el que cumpla lo siguiente, en este orden:&lt;br /&gt;
&lt;br /&gt;
# R=0, M=0&lt;br /&gt;
# R=0, M=1&lt;br /&gt;
# R=1, M=0&lt;br /&gt;
# R=1, M=1&lt;br /&gt;
&lt;br /&gt;
Periódicamente se pone a cero el bit R.&lt;br /&gt;
&lt;br /&gt;
*[[sol_6|Solución]]&lt;br /&gt;
&lt;br /&gt;
== Criterio de 2ª oportunidad ==&lt;br /&gt;
&lt;br /&gt;
Se trata de la combinación de los criterios FIFO y NRU, pero sin emplear el bit M de NRU. Cuando hay que seleccionar una página víctima, se recorre la lista de páginas por orden de carga en memoria hasta encontrar alguna que tenga el bit R a 0. Durante la iteración, si se encuentra una cuyo bit R valga 1, se pone a 0, se retira de la lista y se añade al final (para darle una segunda oportunidad). Cuando se añade una nueva página, se añade al final de la cola con el bit R a 1.&lt;br /&gt;
&lt;br /&gt;
*[[sol_7|Solución]]&lt;br /&gt;
&lt;br /&gt;
;Criterio del reloj: Es una variante en la manera de implementar la 2ª oportunidad. Se emplea una lista circular. En lugar de eliminar y añadir elementos al final de la FIFO, mantenemos un puntero a la página siguiente a la última página víctima seleccionada.&lt;br /&gt;
&lt;br /&gt;
*[[sol_reloj|Solución]]&lt;br /&gt;
&lt;br /&gt;
== Criterio LRU ('''L'''east '''R'''ecently '''U'''sed) ==&lt;br /&gt;
&lt;br /&gt;
Es justamente el criterio contrario al MRU. En LRU elegimos la página que más tiempo lleve sin ser accedida. Se implementa mediante una FIFO que mantiene el '''orden de acceso''' a las páginas. Es decir, cada vez que se accede a una página, en caso de estar ya en la FIFO, se retira de la cola y se añade al final.&lt;br /&gt;
&lt;br /&gt;
*[[sol_8|Solución]]&lt;br /&gt;
&lt;br /&gt;
== Criterio LFU ('''L'''east '''F'''recuently '''U'''sed) ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona a la página que haya sido accedida con menor frecuencia. Se implementa mediante un contador. Básicamente, por cada acceso se incrementa el contador de uso de la página. La página víctima será aquella con menor contador. Cuando una página es expulsada a disco su contador pasa a ser cero.&lt;br /&gt;
&lt;br /&gt;
*[[sol_9|Solución]]&lt;br /&gt;
&lt;br /&gt;
== Aproximación discreta LRU ==&lt;br /&gt;
&lt;br /&gt;
Se tiene un bit R y un contador por cada marco. Cuando una página es cargada a un marco, se carga con su bit R a 1 y su contador inicial a 0. Cuando pasa un período determinado de tiempo (viene dado en el enunciado) se itera sobre toda la lista de páginas, y pueden ocurrir dos cosas:&lt;br /&gt;
* '''Si su bit R está a 1''': Se ponen su bit R a cero y su contador se incrementa.&lt;br /&gt;
* '''Si su bit R está a 0''': No se hace nada.&lt;br /&gt;
&lt;br /&gt;
Cuando hay que seleccionar una página víctima, se escoge aquella cuyo contador sea más pequeño. En caso de empate, habrá que establecer un criterio de desempate.&lt;br /&gt;
&lt;br /&gt;
*[[sol_9.2|Solución]]&lt;br /&gt;
&lt;br /&gt;
== Sustitución por envejecimiento ==&lt;br /&gt;
&lt;br /&gt;
Se emplea un registro R de N bits. Por cada acceso se pone a 1 el bit más significativo. Periódicamente se desplaza hacia la derecha el registro R. La página víctima será la que tenga el menor valor en el registro R (en caso de empate se emplea otro criterio). La información que contienen los bits menos significativos se pierden al realizar desplazamientos. Este criterio permite mantener un historial de acceso a las páginas, para seleccionar como víctima aquella que lleve más tiempo sin ser accedida.&lt;br /&gt;
&lt;br /&gt;
*[[sol_10|Solución]]&lt;br /&gt;
&lt;br /&gt;
= Implementaciones =&lt;br /&gt;
&lt;br /&gt;
En el [[Algoritmos de criterios de reemplazo|Portal de la comunidad]] se encuentran implementados algunos de los anteriores criterios como ayuda para ver su funcionamiento.&lt;br /&gt;
Creo que los algoritmos están bien (coinciden con las soluciones), pero si alguien decide probarlos no estaría mal que los revisase por encima. --[[Usuario:Alexrdp|Alexrdp]] 16:24 6 jun 2011 (UTC)&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=P%C3%A1gina_con_listado_de_personas_que_han_contribuido&amp;diff=2411</id>
		<title>Página con listado de personas que han contribuido</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=P%C3%A1gina_con_listado_de_personas_que_han_contribuido&amp;diff=2411"/>
				<updated>2012-01-26T23:14:10Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A continuación, la lista de usuarios/as de la Universidad de Sevilla que han contribuido a la wiki. Si ponéis tu usuario/a estás solicitando al profesor que evalúe tus contribuciones a la wiki para la subida de notas de hasta 2 puntos posible:&lt;br /&gt;
&lt;br /&gt;
* luigarhor&lt;br /&gt;
* rafperper&lt;br /&gt;
* sergaralo&lt;br /&gt;
* josalgrod1&lt;br /&gt;
* felgaroje&lt;br /&gt;
* luimunlei&lt;br /&gt;
* [https://1984.lsi.us.es/wiki-ssoo/index.php/Usuario:Lorruimor Lorruimor]&lt;br /&gt;
* albsolnog&lt;br /&gt;
* framorexp&lt;br /&gt;
* javgarang&lt;br /&gt;
* FerGuaTol&lt;br /&gt;
* jesgonbel&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=EXT2&amp;diff=2383</id>
		<title>EXT2</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=EXT2&amp;diff=2383"/>
				<updated>2012-01-22T17:23:28Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: Ampliación&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ext2 (extended second filesystem) es un sistema de ficheros originalmente diseñado para el kernel linux.&lt;br /&gt;
Comparado con FAT es un sistema eficiente, pero al igual que este está obsoleto para el tamaño de los ficheros actuales.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Estructura ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En Ext2, al contrario que en FAT, las entradas de la tabla de entrada de ficheros apuntan a un bloque especial llamado i-nodo el cual incluye información de tamaño, permisos, propietario y localización en disco, es decir, los metadatos del fichero.&lt;br /&gt;
Además de los metadatos los i-nodos contienen dos tipos de referencias a los bloques del fichero:&lt;br /&gt;
**'''10 referencias directas a bloques.'''&lt;br /&gt;
&lt;br /&gt;
**'''3 tipos de referencias indirectas''': simple, doble y triple (en base al numero de tablas de bloques de cada referencia, desde 1 hasta 3).&lt;br /&gt;
Mediante estas referencias indirectas podemos aumentar el numero de bloques asignados a un fichero en el caso de que este no quepa en los&lt;br /&gt;
10 bloques referenciados directamente.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Ext2-inode.gif]]&lt;br /&gt;
&lt;br /&gt;
=Sucesores y expectativas=&lt;br /&gt;
&lt;br /&gt;
Ext2 fue el sistema por defecto en distribuciones GNU/Linux durante los años 90, que evolucionó en ext3, el cual añadía journaling, manteniendo compatibilidad hacia atrás.&lt;br /&gt;
&lt;br /&gt;
Desde 2008 es habitual el uso de ext4, que supone una reestructuración completa basada en árboles del sistema ext original.&lt;br /&gt;
&lt;br /&gt;
En los últimos meses, las distribuciones más innovadoras están implementando la opcion de usar con una alta estabilidad/compatibilidad el sistema [http://en.wikipedia.org/wiki/Btrfs Btrfs].&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=FAT&amp;diff=2368</id>
		<title>FAT</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=FAT&amp;diff=2368"/>
				<updated>2012-01-22T05:17:15Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Estructura */ ampliación&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El sistema de archivos FAT (File Allocation Table, tabla de asignación de archivos) utiliza junto a la tabla de entrada de ficheros una tabla, llamada tabla de asignación de ficheros (o tabla FAT).&lt;br /&gt;
FAT es un sistema de archivos sencillo, lo que lo hace muy popular en la gestión de discos y otras memorias secundarias externas y que sea aceptado por todos los sistemas operativos existentes (por lo que también es utilizado como mecanismo de intercambio de ficheros entre sistemas operativos distintos y coexistentes en el mismo equipo).&lt;br /&gt;
Sin embargo FAT tiene bastantes desventajas: &lt;br /&gt;
*Tiende a dejar fragmentos de los ficheros tras borrarlos, lo que con el tiempo ralentiza las operaciones L/E.&lt;br /&gt;
*No es redundante a fallos (ante fallos, como fallos eléctricos, puede dejar el sistema en un estado incongruente).&lt;br /&gt;
*Fue diseñado para ficheros de tamaño reducido.&lt;br /&gt;
*No soporta permisos de seguridad.&lt;br /&gt;
&lt;br /&gt;
==Estructura==&lt;br /&gt;
&lt;br /&gt;
Se dispone de la tabla de asignación de ficheros (File Allocation Table, de ahí las siglas FAT) en la que cada entrada de la tabla representa un bloque del disco. Cada entrada puede tener uno de los siguientes valores:&lt;br /&gt;
&lt;br /&gt;
*Bloque libre: FREE &lt;br /&gt;
*Bloque defectuoso: BAD &lt;br /&gt;
*Último bloque de un archivo: EOF&lt;br /&gt;
*Cualquier otro número: bloque asignado, y el número es el número del siguiente bloque&lt;br /&gt;
*Entradas 0 y 1: reservadas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Fat.png|Estructura FAT|center|border|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nota: Si alguien quiere editar la imagen para mejorarla: [[https://docs.google.com/drawings/d/1CJlmPagvZl989yUOR41GBqZBL2afKt3gxxvYVkf57NU/edit?hl=en_US| Editar imagen]] --[[Usuario:Robertomartin|Robertomartin]] 12:19 6 jun 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
==FAT 32==&lt;br /&gt;
&lt;br /&gt;
FAT32 fue la respuesta para superar el límite de tamaño de FAT16 al mismo tiempo que se mantenía la compatibilidad con MS-DOS en modo real. Microsoft decidió implementar una nueva generación de FAT utilizando direcciones de cluster[http://es.wikipedia.org/wiki/Cl%C3%BAster_%28sistema_de_archivos%29] de 32 bits (aunque sólo 28 de esos bits se utilizaban realmente).&lt;br /&gt;
&lt;br /&gt;
En teoría, esto debería permitir aproximadamente 268.435.538 clusters, arrojando tamaños de almacenamiento cercanos a los ocho terabytes. Sin embargo, debido a limitaciones en la utilidad ScanDisk de Microsoft, no se permite que FAT32 crezca más allá de 4.177.920 clusters por partición (es decir, unos 124 gigabytes). Posteriormente, Windows 2000 y XP situaron el límite de FAT32 en los 32 gigabytes. Microsoft afirma que es una decisión de diseño, sin embargo, es capaz de leer particiones mayores creadas por otros medios.&lt;br /&gt;
&lt;br /&gt;
FAT32 apareció por primera vez en Windows 95 OSR2. Era necesario reformatear para usar las ventajas de FAT32. Curiosamente, DriveSpace 3 (incluido con Windows 95 y 98) no lo soportaba. Windows 98 incorporó una herramienta para convertir de FAT16 a FAT32 sin pérdida de los datos. Este soporte no estuvo disponible en la línea empresarial hasta Windows 2000.&lt;br /&gt;
&lt;br /&gt;
El '''tamaño máximo de un archivo en FAT32''' es 4 gigabytes (2^32−1 bytes), lo que resulta engorroso para aplicaciones de captura y edición de video, ya que los archivos generados por éstas superan fácilmente ese límite.&lt;br /&gt;
&lt;br /&gt;
http://www.pjrc.com/tech/8051/ide/fat32.html&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n_en_la_administraci%C3%B3n_de_archivos&amp;diff=2367</id>
		<title>Introducción en la administración de archivos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n_en_la_administraci%C3%B3n_de_archivos&amp;diff=2367"/>
				<updated>2012-01-22T05:06:52Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Tabla de entrada de ficheros */ Cambio de ASCII a imagen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Administrador de ficheros =&lt;br /&gt;
&lt;br /&gt;
Se trata de la parte del sistema operativo que se encarga de la organización de los ficheros en el sistema operativo.&lt;br /&gt;
&lt;br /&gt;
= Bloque =&lt;br /&gt;
&lt;br /&gt;
La memoria disponible en un dispositivo de almacenamiento masivo se divide en porciones de igual tamaño denominados '''bloques'''. Dichos bloques se asignan completamente y en exclusividad a un fichero de manera que un fichero está compuesto por un conjunto de bloques.&lt;br /&gt;
&lt;br /&gt;
El tamaño de bloque es una parámetro que se establece en el tiempo de instalación. Por lo general, se emplean bloques de 4 KB y 8 KB dependiendo del tamaño de palabra del procesador. No obstante, es un parámetro configurable. En el caso de un sistema que tenga que alojar gran cantidad de fichero muy pequeños, podría reducirse el tamaño de bloque para hacer un mejor aprovechamiento del espacio de almacenamiento en disco.&lt;br /&gt;
&lt;br /&gt;
*Aspectos relevantes en la elección del tamaño de los bloques:&lt;br /&gt;
&lt;br /&gt;
Podemos destacar los siguientes 4 aspectos:&lt;br /&gt;
&lt;br /&gt;
'''Desperdicio interno:'''&lt;br /&gt;
Cuanto mayor sean los bloques mayor desperdicio interno se producirá en el último bloque del fichero.&lt;br /&gt;
&lt;br /&gt;
'''Tiempos de espera:'''&lt;br /&gt;
Cuanto mayor sea el bloque menos bloques formarán los ficheros con lo que se reduce el numero de accesos al soporte y, en consecuencia, los tiempos de espera.&lt;br /&gt;
&lt;br /&gt;
'''Espacio intermedio:'''&lt;br /&gt;
Cuanto mayor sean los bloques mayor será el espacio necesario para mantenerlos cargados en memoria mientras se opera con ellos.&lt;br /&gt;
&lt;br /&gt;
'''Aprovechamiento de las operaciones de lectura y escritura:'''&lt;br /&gt;
Si el proceso no realiza accesos a memoria secuenciales, sino que son aleatorios, es muy probable que solo necesite unos pocos octetos de cada bloque del fichero. Sin embargo en cada lectura y escritura los bloques se leen o escriben completamente, lo que significa un desaprovechamiento de las operaciones de lectura y escritura.&lt;br /&gt;
&lt;br /&gt;
= Fichero =&lt;br /&gt;
&lt;br /&gt;
Un fichero es un contenedor de información que consta como mínimo de un nombre, además de una serie de atributos (llamados [http://www.alegsa.com.ar/Dic/metadato.php metadatos]) como la fecha de creación, última actualización, propietario, grupo entre otros; y un número de bloques asignados.&lt;br /&gt;
&lt;br /&gt;
= Directorio =&lt;br /&gt;
&lt;br /&gt;
Un directorio o carpeta es una contenedor de ficheros. Por lo general, disponen a su vez de dos pseudodirectorios denominados &amp;quot;.&amp;quot; y &amp;quot;..&amp;quot; que sirven como referencia al propio directorio y al directorio padre. De esta manera, los directorios se organizan en una estructura arbórea con una cierta raíz.&lt;br /&gt;
&lt;br /&gt;
= Organización de los directorios y ficheros =&lt;br /&gt;
&lt;br /&gt;
La organización de los directorios y ficheros en los sistemas operativos modernos emplea una estructura arbórea en la que existe un directorio raíz del que penden todos los demás directorios y ficheros.&lt;br /&gt;
&lt;br /&gt;
                                         raíz&lt;br /&gt;
                                          /\&lt;br /&gt;
                                         /  \&lt;br /&gt;
                                        d1  d2&lt;br /&gt;
                                       / \    \&lt;br /&gt;
                                      f1  f2   d3&lt;br /&gt;
                                               /\&lt;br /&gt;
                                              /  \&lt;br /&gt;
                                             f3  f4&lt;br /&gt;
&lt;br /&gt;
En el caso de sistemas operativos tipo Unix, la raíz se identifica con el directorio /. Para sistemas operativos de tipo-Microsoft, existe un directorio raíz por unidad. Cada unidad se trata de un sistema de fichero independiente que se identifica mediante una letra seguida de dos puntos, por ejemplo '''c:'''.&lt;br /&gt;
&lt;br /&gt;
== Propietario, grupo y permisos ==&lt;br /&gt;
&lt;br /&gt;
Todo fichero o directorio en un sistema operativo moderno dispone de al menos un propietario que define las acciones que se pueden realizar sobre el ficheros. Por lo general son las siguientes:&lt;br /&gt;
&lt;br /&gt;
* Lectura: Es posible leer el contenido del fichero.&lt;br /&gt;
* Modificación: Es posible modificar el contenido del fichero.&lt;br /&gt;
* Ejecución: Es posible ejecutar el fichero.&lt;br /&gt;
&lt;br /&gt;
En general, este esquema se aplica al propietario, al grupo y al resto del mundo, de manera que el propietario de cualquier fichero o directorio establece los permisos. Por ejemplo, un fichero con un documento ofimático puede ser leído y modificado por el propietario y por el grupo, pero no por el resto del mundo.&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&lt;br /&gt;
  propietario     grupo    resto del mundo&lt;br /&gt;
      rwx          rwx          rwx &lt;br /&gt;
&lt;br /&gt;
  fichero.odt: rw------- (fichero openoffice con sólo lectura y escritura para el propietario)&lt;br /&gt;
  sudoku:      rwxr-xr-x (fichero ejecutable con permisos de lectura, modificación y ejecución para el propietario)&lt;br /&gt;
&lt;br /&gt;
== Tabla de entrada de ficheros ==&lt;br /&gt;
&lt;br /&gt;
Todo directorio dispone de una tabla de entrada de ficheros. Por cada entrada existe al menos una referencia al primer bloque que forma parte de dicho fichero, así como otros atributos como el propietario del fichero, la fecha de último acceso, modificación, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Directorios2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cada tabla de entrada de ficheros ocupa como mínimo un bloque. Por cada entrada se almacena la siguiente información:&lt;br /&gt;
&lt;br /&gt;
* Nombre del fichero o directorio (tamaño variable)&lt;br /&gt;
* Fecha de creación y último acceso (entero sin signo de 64-bits)&lt;br /&gt;
* Propietario (entero sin signo de 32-bits para el identificador de usuario)&lt;br /&gt;
* Grupo (entero sin signo de 32-bits para el identificador de grupo)&lt;br /&gt;
* Permisos (entero sin signo de 16 bits que codifican los permisos).&lt;br /&gt;
&lt;br /&gt;
De esta manera, cada entrada ocupa un número de bytes. Suponiendo que toda entrada requiera 64 bytes, si se emplea un tamaño de bloque de 4 KB, con un bloque se podrían mantener hasta 64 entradas. En caso de que un directorio tuviera más entradas, serían necesarios más bloques para la tabla de entrada de ficheros.&lt;br /&gt;
&lt;br /&gt;
= Sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
Un sistema de fichero se trata de la estructura lógica (mediante un tipo abstracto de datos como una tabla, una lista o un árbol) y el conjunto de mecanismos que se emplean para gestionar los bloques asignados a ficheros y los bloques libres.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Directorios2.png&amp;diff=2366</id>
		<title>Archivo:Directorios2.png</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Directorios2.png&amp;diff=2366"/>
				<updated>2012-01-22T05:05:53Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: Imagen ilustrativa para la tabla de entrada de ficheros&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Imagen ilustrativa para la tabla de entrada de ficheros&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Dise%C3%B1oModularSVG.svg&amp;diff=2365</id>
		<title>Archivo:DiseñoModularSVG.svg</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Dise%C3%B1oModularSVG.svg&amp;diff=2365"/>
				<updated>2012-01-22T04:46:46Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: subió una nueva versión de «Archivo:DiseñoModularSVG.svg»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Imagen del diseño modular de E/S en version SVG.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Dise%C3%B1oModularSVG.svg&amp;diff=2364</id>
		<title>Archivo:DiseñoModularSVG.svg</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Dise%C3%B1oModularSVG.svg&amp;diff=2364"/>
				<updated>2012-01-22T04:04:00Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: subió una nueva versión de «Archivo:DiseñoModularSVG.svg»:&amp;amp;#32;Resubida de la imagen por problemas con la wiki&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Imagen del diseño modular de E/S en version SVG.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Dise%C3%B1oModularSVG.svg&amp;diff=2363</id>
		<title>Archivo:DiseñoModularSVG.svg</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Dise%C3%B1oModularSVG.svg&amp;diff=2363"/>
				<updated>2012-01-22T04:03:05Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: Imagen del diseño modular de E/S en version SVG.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Imagen del diseño modular de E/S en version SVG.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n_en_la_administraci%C3%B3n_de_archivos&amp;diff=2362</id>
		<title>Introducción en la administración de archivos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n_en_la_administraci%C3%B3n_de_archivos&amp;diff=2362"/>
				<updated>2012-01-22T02:52:36Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Fichero */ Referencia al concepto de metadatos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Administrador de ficheros =&lt;br /&gt;
&lt;br /&gt;
Se trata de la parte del sistema operativo que se encarga de la organización de los ficheros en el sistema operativo.&lt;br /&gt;
&lt;br /&gt;
= Bloque =&lt;br /&gt;
&lt;br /&gt;
La memoria disponible en un dispositivo de almacenamiento masivo se divide en porciones de igual tamaño denominados '''bloques'''. Dichos bloques se asignan completamente y en exclusividad a un fichero de manera que un fichero está compuesto por un conjunto de bloques.&lt;br /&gt;
&lt;br /&gt;
El tamaño de bloque es una parámetro que se establece en el tiempo de instalación. Por lo general, se emplean bloques de 4 KB y 8 KB dependiendo del tamaño de palabra del procesador. No obstante, es un parámetro configurable. En el caso de un sistema que tenga que alojar gran cantidad de fichero muy pequeños, podría reducirse el tamaño de bloque para hacer un mejor aprovechamiento del espacio de almacenamiento en disco.&lt;br /&gt;
&lt;br /&gt;
*Aspectos relevantes en la elección del tamaño de los bloques:&lt;br /&gt;
&lt;br /&gt;
Podemos destacar los siguientes 4 aspectos:&lt;br /&gt;
&lt;br /&gt;
'''Desperdicio interno:'''&lt;br /&gt;
Cuanto mayor sean los bloques mayor desperdicio interno se producirá en el último bloque del fichero.&lt;br /&gt;
&lt;br /&gt;
'''Tiempos de espera:'''&lt;br /&gt;
Cuanto mayor sea el bloque menos bloques formarán los ficheros con lo que se reduce el numero de accesos al soporte y, en consecuencia, los tiempos de espera.&lt;br /&gt;
&lt;br /&gt;
'''Espacio intermedio:'''&lt;br /&gt;
Cuanto mayor sean los bloques mayor será el espacio necesario para mantenerlos cargados en memoria mientras se opera con ellos.&lt;br /&gt;
&lt;br /&gt;
'''Aprovechamiento de las operaciones de lectura y escritura:'''&lt;br /&gt;
Si el proceso no realiza accesos a memoria secuenciales, sino que son aleatorios, es muy probable que solo necesite unos pocos octetos de cada bloque del fichero. Sin embargo en cada lectura y escritura los bloques se leen o escriben completamente, lo que significa un desaprovechamiento de las operaciones de lectura y escritura.&lt;br /&gt;
&lt;br /&gt;
= Fichero =&lt;br /&gt;
&lt;br /&gt;
Un fichero es un contenedor de información que consta como mínimo de un nombre, además de una serie de atributos (llamados [http://www.alegsa.com.ar/Dic/metadato.php metadatos]) como la fecha de creación, última actualización, propietario, grupo entre otros; y un número de bloques asignados.&lt;br /&gt;
&lt;br /&gt;
= Directorio =&lt;br /&gt;
&lt;br /&gt;
Un directorio o carpeta es una contenedor de ficheros. Por lo general, disponen a su vez de dos pseudodirectorios denominados &amp;quot;.&amp;quot; y &amp;quot;..&amp;quot; que sirven como referencia al propio directorio y al directorio padre. De esta manera, los directorios se organizan en una estructura arbórea con una cierta raíz.&lt;br /&gt;
&lt;br /&gt;
= Organización de los directorios y ficheros =&lt;br /&gt;
&lt;br /&gt;
La organización de los directorios y ficheros en los sistemas operativos modernos emplea una estructura arbórea en la que existe un directorio raíz del que penden todos los demás directorios y ficheros.&lt;br /&gt;
&lt;br /&gt;
                                         raíz&lt;br /&gt;
                                          /\&lt;br /&gt;
                                         /  \&lt;br /&gt;
                                        d1  d2&lt;br /&gt;
                                       / \    \&lt;br /&gt;
                                      f1  f2   d3&lt;br /&gt;
                                               /\&lt;br /&gt;
                                              /  \&lt;br /&gt;
                                             f3  f4&lt;br /&gt;
&lt;br /&gt;
En el caso de sistemas operativos tipo Unix, la raíz se identifica con el directorio /. Para sistemas operativos de tipo-Microsoft, existe un directorio raíz por unidad. Cada unidad se trata de un sistema de fichero independiente que se identifica mediante una letra seguida de dos puntos, por ejemplo '''c:'''.&lt;br /&gt;
&lt;br /&gt;
== Propietario, grupo y permisos ==&lt;br /&gt;
&lt;br /&gt;
Todo fichero o directorio en un sistema operativo moderno dispone de al menos un propietario que define las acciones que se pueden realizar sobre el ficheros. Por lo general son las siguientes:&lt;br /&gt;
&lt;br /&gt;
* Lectura: Es posible leer el contenido del fichero.&lt;br /&gt;
* Modificación: Es posible modificar el contenido del fichero.&lt;br /&gt;
* Ejecución: Es posible ejecutar el fichero.&lt;br /&gt;
&lt;br /&gt;
En general, este esquema se aplica al propietario, al grupo y al resto del mundo, de manera que el propietario de cualquier fichero o directorio establece los permisos. Por ejemplo, un fichero con un documento ofimático puede ser leído y modificado por el propietario y por el grupo, pero no por el resto del mundo.&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&lt;br /&gt;
  propietario     grupo    resto del mundo&lt;br /&gt;
      rwx          rwx          rwx &lt;br /&gt;
&lt;br /&gt;
  fichero.odt: rw------- (fichero openoffice con sólo lectura y escritura para el propietario)&lt;br /&gt;
  sudoku:      rwxr-xr-x (fichero ejecutable con permisos de lectura, modificación y ejecución para el propietario)&lt;br /&gt;
&lt;br /&gt;
== Tabla de entrada de ficheros ==&lt;br /&gt;
&lt;br /&gt;
Todo directorio dispone de una tabla de entrada de ficheros. Por cada entrada existe al menos una referencia al primer bloque que forma parte de dicho fichero, así como otros atributos como el propietario del fichero, la fecha de último acceso, modificación, etc.&lt;br /&gt;
&lt;br /&gt;
     raíz&lt;br /&gt;
     .         ,-------&amp;gt; .&lt;br /&gt;
     ..       ,          ..&lt;br /&gt;
     d1 ------           f1&lt;br /&gt;
     d2 ------,          f2&lt;br /&gt;
               \                                ,------&amp;gt; .&lt;br /&gt;
                -----------------&amp;gt; .           ,         ..&lt;br /&gt;
                                   ..         ,          f3&lt;br /&gt;
                                   d3 --------           f4&lt;br /&gt;
&lt;br /&gt;
Cada tabla de entrada de ficheros ocupa como mínimo un bloque. Por cada entrada se almacena la siguiente información:&lt;br /&gt;
&lt;br /&gt;
* Nombre del fichero o directorio (tamaño variable)&lt;br /&gt;
* Fecha de creación y último acceso (entero sin signo de 64-bits)&lt;br /&gt;
* Propietario (entero sin signo de 32-bits para el identificador de usuario)&lt;br /&gt;
* Grupo (entero sin signo de 32-bits para el identificador de grupo)&lt;br /&gt;
* Permisos (entero sin signo de 16 bits que codifican los permisos).&lt;br /&gt;
&lt;br /&gt;
De esta manera, cada entrada ocupa un número de bytes. Suponiendo que toda entrada requiera 64 bytes, si se emplea un tamaño de bloque de 4 KB, con un bloque se podrían mantener hasta 64 entradas. En caso de que un directorio tuviera más entradas, serían necesarios más bloques para la tabla de entrada de ficheros.&lt;br /&gt;
&lt;br /&gt;
= Sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
Un sistema de fichero se trata de la estructura lógica (mediante un tipo abstracto de datos como una tabla, una lista o un árbol) y el conjunto de mecanismos que se emplean para gestionar los bloques asignados a ficheros y los bloques libres.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n_en_la_administraci%C3%B3n_de_archivos&amp;diff=2361</id>
		<title>Introducción en la administración de archivos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n_en_la_administraci%C3%B3n_de_archivos&amp;diff=2361"/>
				<updated>2012-01-22T02:39:34Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Bloque */  Aspectos relevantes en la elección del tamaño de los bloques.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Administrador de ficheros =&lt;br /&gt;
&lt;br /&gt;
Se trata de la parte del sistema operativo que se encarga de la organización de los ficheros en el sistema operativo.&lt;br /&gt;
&lt;br /&gt;
= Bloque =&lt;br /&gt;
&lt;br /&gt;
La memoria disponible en un dispositivo de almacenamiento masivo se divide en porciones de igual tamaño denominados '''bloques'''. Dichos bloques se asignan completamente y en exclusividad a un fichero de manera que un fichero está compuesto por un conjunto de bloques.&lt;br /&gt;
&lt;br /&gt;
El tamaño de bloque es una parámetro que se establece en el tiempo de instalación. Por lo general, se emplean bloques de 4 KB y 8 KB dependiendo del tamaño de palabra del procesador. No obstante, es un parámetro configurable. En el caso de un sistema que tenga que alojar gran cantidad de fichero muy pequeños, podría reducirse el tamaño de bloque para hacer un mejor aprovechamiento del espacio de almacenamiento en disco.&lt;br /&gt;
&lt;br /&gt;
*Aspectos relevantes en la elección del tamaño de los bloques:&lt;br /&gt;
&lt;br /&gt;
Podemos destacar los siguientes 4 aspectos:&lt;br /&gt;
&lt;br /&gt;
'''Desperdicio interno:'''&lt;br /&gt;
Cuanto mayor sean los bloques mayor desperdicio interno se producirá en el último bloque del fichero.&lt;br /&gt;
&lt;br /&gt;
'''Tiempos de espera:'''&lt;br /&gt;
Cuanto mayor sea el bloque menos bloques formarán los ficheros con lo que se reduce el numero de accesos al soporte y, en consecuencia, los tiempos de espera.&lt;br /&gt;
&lt;br /&gt;
'''Espacio intermedio:'''&lt;br /&gt;
Cuanto mayor sean los bloques mayor será el espacio necesario para mantenerlos cargados en memoria mientras se opera con ellos.&lt;br /&gt;
&lt;br /&gt;
'''Aprovechamiento de las operaciones de lectura y escritura:'''&lt;br /&gt;
Si el proceso no realiza accesos a memoria secuenciales, sino que son aleatorios, es muy probable que solo necesite unos pocos octetos de cada bloque del fichero. Sin embargo en cada lectura y escritura los bloques se leen o escriben completamente, lo que significa un desaprovechamiento de las operaciones de lectura y escritura.&lt;br /&gt;
&lt;br /&gt;
= Fichero =&lt;br /&gt;
&lt;br /&gt;
Un fichero es un contenedor de información que consta como mínimo de un nombre, además de una serie de atributos como la fecha de creación, última actualización, propietario, grupo entre otros; y un número de bloques asignados.&lt;br /&gt;
&lt;br /&gt;
= Directorio =&lt;br /&gt;
&lt;br /&gt;
Un directorio o carpeta es una contenedor de ficheros. Por lo general, disponen a su vez de dos pseudodirectorios denominados &amp;quot;.&amp;quot; y &amp;quot;..&amp;quot; que sirven como referencia al propio directorio y al directorio padre. De esta manera, los directorios se organizan en una estructura arbórea con una cierta raíz.&lt;br /&gt;
&lt;br /&gt;
= Organización de los directorios y ficheros =&lt;br /&gt;
&lt;br /&gt;
La organización de los directorios y ficheros en los sistemas operativos modernos emplea una estructura arbórea en la que existe un directorio raíz del que penden todos los demás directorios y ficheros.&lt;br /&gt;
&lt;br /&gt;
                                         raíz&lt;br /&gt;
                                          /\&lt;br /&gt;
                                         /  \&lt;br /&gt;
                                        d1  d2&lt;br /&gt;
                                       / \    \&lt;br /&gt;
                                      f1  f2   d3&lt;br /&gt;
                                               /\&lt;br /&gt;
                                              /  \&lt;br /&gt;
                                             f3  f4&lt;br /&gt;
&lt;br /&gt;
En el caso de sistemas operativos tipo Unix, la raíz se identifica con el directorio /. Para sistemas operativos de tipo-Microsoft, existe un directorio raíz por unidad. Cada unidad se trata de un sistema de fichero independiente que se identifica mediante una letra seguida de dos puntos, por ejemplo '''c:'''.&lt;br /&gt;
&lt;br /&gt;
== Propietario, grupo y permisos ==&lt;br /&gt;
&lt;br /&gt;
Todo fichero o directorio en un sistema operativo moderno dispone de al menos un propietario que define las acciones que se pueden realizar sobre el ficheros. Por lo general son las siguientes:&lt;br /&gt;
&lt;br /&gt;
* Lectura: Es posible leer el contenido del fichero.&lt;br /&gt;
* Modificación: Es posible modificar el contenido del fichero.&lt;br /&gt;
* Ejecución: Es posible ejecutar el fichero.&lt;br /&gt;
&lt;br /&gt;
En general, este esquema se aplica al propietario, al grupo y al resto del mundo, de manera que el propietario de cualquier fichero o directorio establece los permisos. Por ejemplo, un fichero con un documento ofimático puede ser leído y modificado por el propietario y por el grupo, pero no por el resto del mundo.&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&lt;br /&gt;
  propietario     grupo    resto del mundo&lt;br /&gt;
      rwx          rwx          rwx &lt;br /&gt;
&lt;br /&gt;
  fichero.odt: rw------- (fichero openoffice con sólo lectura y escritura para el propietario)&lt;br /&gt;
  sudoku:      rwxr-xr-x (fichero ejecutable con permisos de lectura, modificación y ejecución para el propietario)&lt;br /&gt;
&lt;br /&gt;
== Tabla de entrada de ficheros ==&lt;br /&gt;
&lt;br /&gt;
Todo directorio dispone de una tabla de entrada de ficheros. Por cada entrada existe al menos una referencia al primer bloque que forma parte de dicho fichero, así como otros atributos como el propietario del fichero, la fecha de último acceso, modificación, etc.&lt;br /&gt;
&lt;br /&gt;
     raíz&lt;br /&gt;
     .         ,-------&amp;gt; .&lt;br /&gt;
     ..       ,          ..&lt;br /&gt;
     d1 ------           f1&lt;br /&gt;
     d2 ------,          f2&lt;br /&gt;
               \                                ,------&amp;gt; .&lt;br /&gt;
                -----------------&amp;gt; .           ,         ..&lt;br /&gt;
                                   ..         ,          f3&lt;br /&gt;
                                   d3 --------           f4&lt;br /&gt;
&lt;br /&gt;
Cada tabla de entrada de ficheros ocupa como mínimo un bloque. Por cada entrada se almacena la siguiente información:&lt;br /&gt;
&lt;br /&gt;
* Nombre del fichero o directorio (tamaño variable)&lt;br /&gt;
* Fecha de creación y último acceso (entero sin signo de 64-bits)&lt;br /&gt;
* Propietario (entero sin signo de 32-bits para el identificador de usuario)&lt;br /&gt;
* Grupo (entero sin signo de 32-bits para el identificador de grupo)&lt;br /&gt;
* Permisos (entero sin signo de 16 bits que codifican los permisos).&lt;br /&gt;
&lt;br /&gt;
De esta manera, cada entrada ocupa un número de bytes. Suponiendo que toda entrada requiera 64 bytes, si se emplea un tamaño de bloque de 4 KB, con un bloque se podrían mantener hasta 64 entradas. En caso de que un directorio tuviera más entradas, serían necesarios más bloques para la tabla de entrada de ficheros.&lt;br /&gt;
&lt;br /&gt;
= Sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
Un sistema de fichero se trata de la estructura lógica (mediante un tipo abstracto de datos como una tabla, una lista o un árbol) y el conjunto de mecanismos que se emplean para gestionar los bloques asignados a ficheros y los bloques libres.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Dise%C3%B1o_modular_E/S&amp;diff=2308</id>
		<title>Diseño modular E/S</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Dise%C3%B1o_modular_E/S&amp;diff=2308"/>
				<updated>2012-01-17T02:03:37Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: Incluir imagenes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La idea clave de esta arquitectura en capas es hacer independiente al proceso del dispositivo. Por lo general, en ingeniería del software, la independencia del proveedor es una propiedad muy deseable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:DiseñomodularES.jpg‎]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Esta abstracción permite:&lt;br /&gt;
&lt;br /&gt;
* Hacer a los procesos independientes de los dispositivos de E/S. Esto es deseable en cuanto a que el fabricante del dispositivo podría dejar de fabricar el dispositivo, por tanto, el proceso tendría que ser reescrito para soportar el nuevo dispositivo. De igual manera, si el dispositivo para el que está diseñado el proceso que conoce los detalles de bajo nivel no está disponible en el sistema, nuestro proceso quedaría inservible.&lt;br /&gt;
* Forzar a que un proceso tenga que pasar por el sistema operativo, que es quien garantiza que el reparto de recursos es equitativo. Si un proceso dispone de acceso directo a un dispositivo, podría adoptar un comportamiento ''abusón'' de manera que no permitiera a otros procesos emplearlo.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Dise%C3%B1omodularES.jpg&amp;diff=2307</id>
		<title>Archivo:DiseñomodularES.jpg</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Dise%C3%B1omodularES.jpg&amp;diff=2307"/>
				<updated>2012-01-17T02:02:45Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: Imagen del diseño modular de E/S (para sustituir al dibujo ASCII)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Imagen del diseño modular de E/S (para sustituir al dibujo ASCII)&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Discos_Magn%C3%A9ticos&amp;diff=2302</id>
		<title>Discos Magnéticos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Discos_Magn%C3%A9ticos&amp;diff=2302"/>
				<updated>2012-01-14T01:53:19Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Partes importantes de los discos magnéticos: */  añadido concepto de clúster&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Arquitectura de los discos magnéticos ==&lt;br /&gt;
&lt;br /&gt;
Los discos magnéticos están formados por varios discos (desde 2 hasta 7) de material magnético montados sobre el mismo eje, los cuales se mantienen girando a una velocidad constante. Estos discos están recorridos, cada uno, por 2 cabezales magnéticos que no llegan a tocar el disco (están separados unos 3 nanómetros debido a una delgada capa de aire formada por la rotación del disco, de hecho si lo tocan se produce un error conocido como aterrizaje del cabezal) y que leen y escriben datos en el disco creando puntos de campo magnético. &lt;br /&gt;
&lt;br /&gt;
En esta imagen se muestran los componentes de un disco duro magnético:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:componentes_HD.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Partes importantes de los discos magnéticos:=&lt;br /&gt;
&lt;br /&gt;
*Cabezal: sección que se mueve por un plato para leer la información.&lt;br /&gt;
*Pista (track): zona a la que accede el cabezal si este se queda fijo en una posición y el disco sigue girando. Hay que tener en cuenta que las pistas más cercanas al centro del disco son de menor tamaño.&lt;br /&gt;
*Sector: es un punto concreto de una pista.&lt;br /&gt;
*Cilindro: Conjunto de sectores a los que los cabezales pueden acceder en un momento.&lt;br /&gt;
*[http://es.wikipedia.org/wiki/Cl%C3%BAster_(sistema_de_archivos), Clúster]: Conjunto de sectores contiguos que forman la unidad más pequeña de almacenamiento en disco.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Sin_título.png]][[Archivo:Estructura_disco.png|Estructura de un disco óptico|right]]&lt;br /&gt;
&lt;br /&gt;
=Prestaciones a tener en cuenta de los discos duros magnéticos:=&lt;br /&gt;
&lt;br /&gt;
*Capacidad&lt;br /&gt;
*rpm (revoluciones por minuto)&lt;br /&gt;
*Tiempo de arranque del motor&lt;br /&gt;
*Tiempo de accesos (lectura/escritura):&lt;br /&gt;
**Tiempo de búsqueda: tiempo en desplazarse de una pista a otra.&lt;br /&gt;
**Demora de rotación: tiempo en desplazarse de un sector a otro.&lt;br /&gt;
**Tiempo de transmisión: tiempo desde la lectura de los datos hasta que pasa la información al gestor de dispositivo correspondiente.&lt;br /&gt;
&lt;br /&gt;
= Otros recursos =&lt;br /&gt;
http://www.youtube.com/watch?v=Wiy_eHdj8kg&amp;amp;feature=player_embedded&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Discos_Magn%C3%A9ticos&amp;diff=2301</id>
		<title>Discos Magnéticos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Discos_Magn%C3%A9ticos&amp;diff=2301"/>
				<updated>2012-01-14T01:45:49Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: corrección de erratas&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Arquitectura de los discos magnéticos ==&lt;br /&gt;
&lt;br /&gt;
Los discos magnéticos están formados por varios discos (desde 2 hasta 7) de material magnético montados sobre el mismo eje, los cuales se mantienen girando a una velocidad constante. Estos discos están recorridos, cada uno, por 2 cabezales magnéticos que no llegan a tocar el disco (están separados unos 3 nanómetros debido a una delgada capa de aire formada por la rotación del disco, de hecho si lo tocan se produce un error conocido como aterrizaje del cabezal) y que leen y escriben datos en el disco creando puntos de campo magnético. &lt;br /&gt;
&lt;br /&gt;
En esta imagen se muestran los componentes de un disco duro magnético:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:componentes_HD.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Partes importantes de los discos magnéticos:=&lt;br /&gt;
&lt;br /&gt;
*Cabezal: sección que se mueve por un plato para leer la información.&lt;br /&gt;
*Pista (track): zona a la que accede el cabezal si este se queda fijo en una posición y el disco sigue girando. Hay que tener en cuenta que las pistas más cercanas al centro del disco son de menor tamaño.&lt;br /&gt;
*Sector: es un punto concreto de una pista.&lt;br /&gt;
*Cilindro: Conjunto de sectores a los que los cabezales pueden acceder en un momento.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Sin_título.png]][[Archivo:Estructura_disco.png|Estructura de un disco óptico|right]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Prestaciones a tener en cuenta de los discos duros magnéticos:=&lt;br /&gt;
&lt;br /&gt;
*Capacidad&lt;br /&gt;
*rpm (revoluciones por minuto)&lt;br /&gt;
*Tiempo de arranque del motor&lt;br /&gt;
*Tiempo de accesos (lectura/escritura):&lt;br /&gt;
**Tiempo de búsqueda: tiempo en desplazarse de una pista a otra.&lt;br /&gt;
**Demora de rotación: tiempo en desplazarse de un sector a otro.&lt;br /&gt;
**Tiempo de transmisión: tiempo desde la lectura de los datos hasta que pasa la información al gestor de dispositivo correspondiente.&lt;br /&gt;
&lt;br /&gt;
= Otros recursos =&lt;br /&gt;
http://www.youtube.com/watch?v=Wiy_eHdj8kg&amp;amp;feature=player_embedded&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Discos_Magn%C3%A9ticos&amp;diff=2300</id>
		<title>Discos Magnéticos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Discos_Magn%C3%A9ticos&amp;diff=2300"/>
				<updated>2012-01-14T01:43:47Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: Discos magnéticos: ampliación.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Arquitectura de los discos magnéticos ==&lt;br /&gt;
&lt;br /&gt;
Los discos magnéticos están formados por varios discos de material magnético montados sobre el mismo eje, los cuales se mantienen girando a una velocidad constante. Estos discos están recorridos, cada uno, por 2 cabezales magnéticos que no llegan a tocar el disco (están separados unos 3 nanómetros debido a una delgada capa de aire formada por la rotación del disco, de hecho si lo tocan se produce un error conocido como aterrizaje del cabezal) y que leen y escriben datos en el disco creando puntos de campo magnético. &lt;br /&gt;
&lt;br /&gt;
En esta imagen se muestran los componentes de un disco duro magnético:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:componentes_HD.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Partes importantes de los discos magnéticos:=&lt;br /&gt;
&lt;br /&gt;
*Cabezal: sección que se mueve por un plato para leer la información.&lt;br /&gt;
*Pista (track): zona a la que accede el cabezal si este se queda fijo en una posición y el disco sigue girando. Hay que tener en cuenta que las pistas más cercanas al centro del disco son de menor tamaño.&lt;br /&gt;
*Sector: es un punto concreto de una pista.&lt;br /&gt;
*Cilindro: Conjunto de sectores a los que los cabezales pueden acceder en un momento.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Sin_título.png]][[Archivo:Estructura_disco.png|Estructura de un disco óptico|right]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Prestaciones a tener en cuenta de los discos duros magnéticos:=&lt;br /&gt;
&lt;br /&gt;
*Capacidad&lt;br /&gt;
*rpm (revoluciones por minuto)&lt;br /&gt;
*Tiempo de arranque del motor&lt;br /&gt;
*Tiempo de accesos (lectura/escritura):&lt;br /&gt;
**Tiempo de búsqueda: tiempo en desplazarse de una pista a otra.&lt;br /&gt;
**Demora de rotación: tiempo en desplazarse de un sector a otro.&lt;br /&gt;
**Tiempo de transmisión: tiempo desde la lectura de los datos hasta que pasa la información al gestor de dispositivo correspondiente.&lt;br /&gt;
&lt;br /&gt;
= Otros recursos =&lt;br /&gt;
http://www.youtube.com/watch?v=Wiy_eHdj8kg&amp;amp;feature=player_embedded&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Componentes_HD.png&amp;diff=2299</id>
		<title>Archivo:Componentes HD.png</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Componentes_HD.png&amp;diff=2299"/>
				<updated>2012-01-14T01:38:18Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: partes de un disco magnético.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;partes de un disco magnético.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Paginaci%C3%B3n&amp;diff=2282</id>
		<title>Paginación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Paginaci%C3%B3n&amp;diff=2282"/>
				<updated>2012-01-06T04:38:31Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Definición */ corrección de erratas&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Definición=&lt;br /&gt;
La paginación es una estrategia de organización de la memoria similar a la segmentación pero con ciertas diferencias, por ejemplo la memoria se considera un espacio continuo dividido en porciones de igual tamaño fijo (frente a la división en segmentos de tamaño variable de la segmentación), a dichas porciones se las conoce como marcos de pagina o simplemente como páginas.&lt;br /&gt;
Las páginas están definidas por un número de página, que identifica de forma única a cada página (dentro del espacio de memoria de un proceso). Cada página se asigna en exclusividad a un proceso.&lt;br /&gt;
&lt;br /&gt;
=Funcionamiento=&lt;br /&gt;
&lt;br /&gt;
Desde el punto de vista de la paginación la traducción de las direcciones de memoria se basa en dos conceptos:&lt;br /&gt;
&lt;br /&gt;
1. El dispositivo traductor divide las direcciones lógicas en 2 partes de la siguiente forma: los n bits mas significativos identifican la          página mientras que el resto identifica el desplazamiento.&lt;br /&gt;
&lt;br /&gt;
2. Cuando el traductor dinámico de páginas recibe, en una dirección lógica, un numero de página este examina una tabla (llamada tabla de páginas) en la cual se relacionan las páginas lógicas con las páginas físicas y obtiene la dirección real de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Paginas.png]]&lt;br /&gt;
&lt;br /&gt;
Al igual que en la segmentación al intentar acceder a una página ausente se produce un fallo (llamado en este caso '''fallo de página''').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Otras características=&lt;br /&gt;
*Los valores óptimos para las porciones son: en arquitectura de 32 bits es de 4KB, y en arquitectura de 64 bits es de 8KB.&lt;br /&gt;
*Los criterios vistos en el tema anterior no se aplican aquí, no tiene sentido hacerlo ya que todas las páginas de memoria son iguales.&lt;br /&gt;
&lt;br /&gt;
==Dispositivo de traducción de direcciones paginadas==&lt;br /&gt;
Se dispone de la tabla de páginas de cada proceso en memoria para llevar a cabo la traducción. La tabla de páginas se indexa por número de página.&lt;br /&gt;
&lt;br /&gt;
El dispositivo de traducción de direcciones paginadas debe ser un dispositivo muy rápido, ya que se usa con cada acceso a memoria que se realiza.El tamaño de la tabla de páginas es uno de los aspectos que mas influye en el diseño del dispositivo e incluso en la organización de la propia tabla. Otro aspecto relevante es la localización de dicha tabla, la cual puede encontrarse en el traductor o guardada en memoria:&lt;br /&gt;
*'''Tabla de páginas en el traductor:'''&lt;br /&gt;
&lt;br /&gt;
Se usa en equipos cuyo espacio de direcciones es de pocas páginas. &lt;br /&gt;
El dispositivo de traducción contiene un conjunto de registros organizados como una memoria en los cuales almacena la tabla de páginas.&lt;br /&gt;
Dicha página debe sustituirse (lo cual aumenta el tiempo de conmutación) en dos situaciones distintas: al cambiar de proceso y al cambiar del proceso al ss.oo. (en este caso se reduce el tiempo de conmutación utilizando dos tablas separadas, una para los procesos y otra para el ss.oo., las cuales se utilizan dependiendo del modo de uso de la cpu, supervisor o usuario).&lt;br /&gt;
&lt;br /&gt;
*'''Tabla de páginas en memoria:'''&lt;br /&gt;
&lt;br /&gt;
Se usa en equipos con mucha memoria, en los cuales el numero de páginas puede llegar a ser muy alto con lo que el tiempo necesario para cargar las páginas en el traductor es demasiado alto.&lt;br /&gt;
La tabla de páginas es guardada en la memoria principal y el dispositivo traductor tiene la dirección de comienzo y el tamaño de la tabla, debido a que la tabla esta en la memoria principal se necesita, por cada acceso a memoria, un acceso a memoria adicional para obtener el numero de página física asociado a la página lógica. Para mantener un tiempo de acceso aceptable se establece una memoria asociativa que conserva las parejas página lógica-página física utilizadas recientemente. &lt;br /&gt;
&lt;br /&gt;
También hay dispositivos traductores que no utilizan tablas de páginas, buscan directamente la información en una memoria asociativa. &lt;br /&gt;
&lt;br /&gt;
==Tabla de páginas multinivel==&lt;br /&gt;
El objetivo es paginar la tabla de páginas lo que permite que esta no esté cargada completa en memoria y que no ocupe direcciones consecutivas.&lt;br /&gt;
En los ss.oo. con tablas de páginas multinivel los número de página se dividen en dos partes: los bits más significativos indican el directorio de páginas correspondiente y con los bits menos significativos el índice del directorio en el que se encuentra la página buscada:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PaginacionMultinivel.jpg‎ ]]&lt;br /&gt;
&lt;br /&gt;
==Elementos de administración==&lt;br /&gt;
La administración es sencilla ya que todas las porciones de memoria son de igual tamaño (se limita a comprobar si hay suficientes marcos libres para ejecutar el proceso).&lt;br /&gt;
&lt;br /&gt;
Se pueden usar:&lt;br /&gt;
&lt;br /&gt;
*Tabla o mapa de bits: ocupa poca memoria, de orden O(1)&lt;br /&gt;
*2 listas encadenadas(colas): páginas libres, páginas ocupadas. Tiene mejor rendimiento (aunque ocupa más memoria), de orden O(1)&lt;br /&gt;
*Una tabla con una entrada para cada marco, esta contiene un 0 si el marco está libre o el numero de referencia al proceso si el marco esta adjudicado.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Paginaci%C3%B3n&amp;diff=2281</id>
		<title>Paginación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Paginaci%C3%B3n&amp;diff=2281"/>
				<updated>2012-01-06T04:07:36Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: Paginación: ampliación de contenido.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Definición=&lt;br /&gt;
La paginación es una estrategia de organización de la memoria similar a la segmentación pero con ciertas diferencias, por ejemplo la memoria se considera un espacio continuo divide en porciones de igual tamaño fijo (frente a la división en segmentos de tamaño variable de la segmentación), a dichas porciones se las conoce como marcos de pagina o simplemente como páginas.&lt;br /&gt;
Las páginas están definidas por un número de página, que identifica de forma única a cada página (dentro del espacio de memoria de un proceso). Cada página se asigna en exclusividad a un proceso.&lt;br /&gt;
&lt;br /&gt;
=Funcionamiento=&lt;br /&gt;
&lt;br /&gt;
Desde el punto de vista de la paginación la traducción de las direcciones de memoria se basa en dos conceptos:&lt;br /&gt;
&lt;br /&gt;
1. El dispositivo traductor divide las direcciones lógicas en 2 partes de la siguiente forma: los n bits mas significativos identifican la          página mientras que el resto identifica el desplazamiento.&lt;br /&gt;
&lt;br /&gt;
2. Cuando el traductor dinámico de páginas recibe, en una dirección lógica, un numero de página este examina una tabla (llamada tabla de páginas) en la cual se relacionan las páginas lógicas con las páginas físicas y obtiene la dirección real de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Paginas.png]]&lt;br /&gt;
&lt;br /&gt;
Al igual que en la segmentación al intentar acceder a una página ausente se produce un fallo (llamado en este caso '''fallo de página''').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Otras características=&lt;br /&gt;
*Los valores óptimos para las porciones son: en arquitectura de 32 bits es de 4KB, y en arquitectura de 64 bits es de 8KB.&lt;br /&gt;
*Los criterios vistos en el tema anterior no se aplican aquí, no tiene sentido hacerlo ya que todas las páginas de memoria son iguales.&lt;br /&gt;
&lt;br /&gt;
==Dispositivo de traducción de direcciones paginadas==&lt;br /&gt;
Se dispone de la tabla de páginas de cada proceso en memoria para llevar a cabo la traducción. La tabla de páginas se indexa por número de página.&lt;br /&gt;
&lt;br /&gt;
El dispositivo de traducción de direcciones paginadas debe ser un dispositivo muy rápido, ya que se usa con cada acceso a memoria que se realiza.El tamaño de la tabla de páginas es uno de los aspectos que mas influye en el diseño del dispositivo e incluso en la organización de la propia tabla. Otro aspecto relevante es la localización de dicha tabla, la cual puede encontrarse en el traductor o guardada en memoria:&lt;br /&gt;
*'''Tabla de páginas en el traductor:'''&lt;br /&gt;
&lt;br /&gt;
Se usa en equipos cuyo espacio de direcciones es de pocas páginas. &lt;br /&gt;
El dispositivo de traducción contiene un conjunto de registros organizados como una memoria en los cuales almacena la tabla de páginas.&lt;br /&gt;
Dicha página debe sustituirse (lo cual aumenta el tiempo de conmutación) en dos situaciones distintas: al cambiar de proceso y al cambiar del proceso al ss.oo. (en este caso se reduce el tiempo de conmutación utilizando dos tablas separadas, una para los procesos y otra para el ss.oo., las cuales se utilizan dependiendo del modo de uso de la cpu, supervisor o usuario).&lt;br /&gt;
&lt;br /&gt;
*'''Tabla de páginas en memoria:'''&lt;br /&gt;
&lt;br /&gt;
Se usa en equipos con mucha memoria, en los cuales el numero de páginas puede llegar a ser muy alto con lo que el tiempo necesario para cargar las páginas en el traductor es demasiado alto.&lt;br /&gt;
La tabla de páginas es guardada en la memoria principal y el dispositivo traductor tiene la dirección de comienzo y el tamaño de la tabla, debido a que la tabla esta en la memoria principal se necesita, por cada acceso a memoria, un acceso a memoria adicional para obtener el numero de página física asociado a la página lógica. Para mantener un tiempo de acceso aceptable se establece una memoria asociativa que conserva las parejas página lógica-página física utilizadas recientemente. &lt;br /&gt;
&lt;br /&gt;
También hay dispositivos traductores que no utilizan tablas de páginas, buscan directamente la información en una memoria asociativa. &lt;br /&gt;
&lt;br /&gt;
==Tabla de páginas multinivel==&lt;br /&gt;
El objetivo es paginar la tabla de páginas lo que permite que esta no esté cargada completa en memoria y que no ocupe direcciones consecutivas.&lt;br /&gt;
En los ss.oo. con tablas de páginas multinivel los número de página se dividen en dos partes: los bits más significativos indican el directorio de páginas correspondiente y con los bits menos significativos el índice del directorio en el que se encuentra la página buscada:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:PaginacionMultinivel.jpg‎ ]]&lt;br /&gt;
&lt;br /&gt;
==Elementos de administración==&lt;br /&gt;
La administración es sencilla ya que todas las porciones de memoria son de igual tamaño (se limita a comprobar si hay suficientes marcos libres para ejecutar el proceso).&lt;br /&gt;
&lt;br /&gt;
Se pueden usar:&lt;br /&gt;
&lt;br /&gt;
*Tabla o mapa de bits: ocupa poca memoria, de orden O(1)&lt;br /&gt;
*2 listas encadenadas(colas): páginas libres, páginas ocupadas. Tiene mejor rendimiento (aunque ocupa más memoria), de orden O(1)&lt;br /&gt;
*Una tabla con una entrada para cada marco, esta contiene un 0 si el marco está libre o el numero de referencia al proceso si el marco esta adjudicado.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:PaginacionMultinivel.jpg&amp;diff=2280</id>
		<title>Archivo:PaginacionMultinivel.jpg</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:PaginacionMultinivel.jpg&amp;diff=2280"/>
				<updated>2012-01-06T03:51:40Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: Procedimiento para obtener la página física usando tablas de páginas multinivel.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Procedimiento para obtener la página física usando tablas de páginas multinivel.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Segmentaci%C3%B3n&amp;diff=2279</id>
		<title>Segmentación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Segmentaci%C3%B3n&amp;diff=2279"/>
				<updated>2012-01-06T02:00:58Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Enlazado estático VS enlazado dinámico: */ ampliación.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Definición=&lt;br /&gt;
Un segmento es un espacio de memoria de tamaño variable, compuesto por:&lt;br /&gt;
*Descriptor: Identificador único del segmento (dentro del espacio de memoria del proceso).&lt;br /&gt;
*Tamaño del segmento&lt;br /&gt;
&lt;br /&gt;
=Funcionamiento=&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Segmentos.png|725px]]&lt;br /&gt;
&lt;br /&gt;
=Características=&lt;br /&gt;
*Cada proceso en ejecución (esté activo, bloqueado o preparado) tiene su tabla de segmentos.&lt;br /&gt;
&lt;br /&gt;
*Solapamiento: 2 segmentos pueden compartir zona de memoria. Ojo! problemas de concurrencia. Habría que usar algún método para su sincronización si se intenta.&lt;br /&gt;
&lt;br /&gt;
*Protección de memoria: añadir 3 bits a la tabla de descriptores de segmentos para los permisos ( r w x ).&lt;br /&gt;
&lt;br /&gt;
*Aspectos materiales : Hay 2 registros que funcionan como dispositivos de traducción segmentada; uno de dirección de comienzo de la tabla de segmentos, y otro para el número de entradas en ella.&lt;br /&gt;
&lt;br /&gt;
*Esto supone dos accesos a memoria física real. La tabla de segmentos ocupa memoria, siendo deseable que permanezcan en cache.&lt;br /&gt;
&lt;br /&gt;
*Cuando un proceso requiere más memoria se crea un nuevo segmento.&lt;br /&gt;
&lt;br /&gt;
*Dos instancias de un mismo proceso pueden compartir segmentos de memoria de instrucciones/código, pero no para datos ya que esto complicaría la gestión.&lt;br /&gt;
&lt;br /&gt;
*No se redimensionan.&lt;br /&gt;
&lt;br /&gt;
*Gestión compleja, sobretodo por su tamaño variable&lt;br /&gt;
&lt;br /&gt;
=Mecanismos=&lt;br /&gt;
Los diferentes mecanismos que nos ofrece la segmentación de memoria son los siguientes.&lt;br /&gt;
==Carga de segmentos a petición==&lt;br /&gt;
Es un mecanismo que permite a un proceso no disponer de todos sus segmentos en memoria principal, se pueden descargar a disco (en la zona de intercambio o swap) segmentos en base a un cierto criterio (ver [[Intro | Memoria virtual]]). &lt;br /&gt;
&lt;br /&gt;
Esta zona de intercambio puede ser:&lt;br /&gt;
&lt;br /&gt;
* Un lugar fijo en el disco (Linux, Unix). El administrador de memoria decide qué segmento se va a descargar&lt;br /&gt;
&lt;br /&gt;
* Un fichero oculto de tamaño fijo o variable dependiendo de la configuracion dada por el usuario (Windows).&lt;br /&gt;
&lt;br /&gt;
==Enlace dinámico==&lt;br /&gt;
Uso de llamadas a funciones que están en disco.&lt;br /&gt;
&lt;br /&gt;
El uso de esta técnica nos aporta ventajas como reducir el trabajo del montador de enlaces (y por tanto el tiempo necesario para sus operaciones) además de que podemos tener referencias a funciones o bibliotecas que no estén en memoria principal (permite ir cargando bajo demanda los segmentos que contengan el código necesario).&lt;br /&gt;
&lt;br /&gt;
=== Enlazado estático VS enlazado dinámico: ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los montadores de enlaces convencionales (estáticos) deben enlazar en tiempo de compilación todos los módulos, segmentos y referencias de un&lt;br /&gt;
programa para completar sus instrucciones (si el número de instrucciones es muy elevado la cantidad de trabajo del montador será enorme)&lt;br /&gt;
mientras que los montadores de enlaces dinámicos realizarán el enlazado durante la ejecución o durante la carga del programa.&lt;br /&gt;
&lt;br /&gt;
*'''Pros y contras:'''&lt;br /&gt;
La ventaja de usar enlaces dinámicos es que los programas serán más livianos, aunque se crea una cierta dependencia del programa el cual no&lt;br /&gt;
funcionará correctamente si se modifica algún módulo, segmento o referencia (en windows los errores debidos a actualizaciones de librerías&lt;br /&gt;
dinámicas .dll son bastante comunes [http://www.http://es.wikipedia.org/wiki/Infierno_de_las_DLL]). Por otro lado la ventaja de usar enlaces estáticos es que los programas son totalmente independientes,&lt;br /&gt;
lo que facilita su distribución.&lt;br /&gt;
&lt;br /&gt;
*'''Enlazado dinámico durante la carga:'''&lt;br /&gt;
En los ss.oo. de este tipo los ejecutables incluyen una relación de los objetos externos que necesita. Al cargar el programa se buscan los&lt;br /&gt;
segmentos ya cargados y los que se necesitan y se resuelven los enlaces.&lt;br /&gt;
&lt;br /&gt;
*'''Enlazado dinámino durante la ejecución:'''&lt;br /&gt;
El enlazado dinámico durante la ejecución se basa en emplear referencias indirectas (la referencia apunta a una dirección de memoria la cual &lt;br /&gt;
contiene la referencia al objeto) y en dotar al procesador de un tipo especial de interrupción llamado excepción de enlace.&lt;br /&gt;
El compilador establece de forma indirecta las referencias a elementos de otros segmentos, utilizando como objeto intermedio un puntero con el&lt;br /&gt;
bit de excepción de enlace activado y que apunta hacia el identificador del elemento referido. Cuando se alcanza una referencia de este tipo&lt;br /&gt;
se lanza la excepción de enlace y el ss.oo. la atrapa el cual busca el objeto y localiza su dirección segmentada, con esa información el &lt;br /&gt;
ss.oo. modifica el puntero asignandole la dirección hallada y desactivando el bit de excepción (el enlace especial se reduce a una referencia&lt;br /&gt;
indirecta normal).&lt;br /&gt;
Para facilitar la ejecución las referencias a un mismo objeto se concentran en un único puntero (así la excepción de enlace se producirá&lt;br /&gt;
una sola vez) y todos los enlaces se concentran en un segmento especial llamado segmento de enlace.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Segmentaci%C3%B3n&amp;diff=2278</id>
		<title>Segmentación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Segmentaci%C3%B3n&amp;diff=2278"/>
				<updated>2012-01-06T01:44:14Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Enlazado estático VS enlazado dinámico: */  corrección de erratas.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Definición=&lt;br /&gt;
Un segmento es un espacio de memoria de tamaño variable, compuesto por:&lt;br /&gt;
*Descriptor: Identificador único del segmento (dentro del espacio de memoria del proceso).&lt;br /&gt;
*Tamaño del segmento&lt;br /&gt;
&lt;br /&gt;
=Funcionamiento=&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Segmentos.png|725px]]&lt;br /&gt;
&lt;br /&gt;
=Características=&lt;br /&gt;
*Cada proceso en ejecución (esté activo, bloqueado o preparado) tiene su tabla de segmentos.&lt;br /&gt;
&lt;br /&gt;
*Solapamiento: 2 segmentos pueden compartir zona de memoria. Ojo! problemas de concurrencia. Habría que usar algún método para su sincronización si se intenta.&lt;br /&gt;
&lt;br /&gt;
*Protección de memoria: añadir 3 bits a la tabla de descriptores de segmentos para los permisos ( r w x ).&lt;br /&gt;
&lt;br /&gt;
*Aspectos materiales : Hay 2 registros que funcionan como dispositivos de traducción segmentada; uno de dirección de comienzo de la tabla de segmentos, y otro para el número de entradas en ella.&lt;br /&gt;
&lt;br /&gt;
*Esto supone dos accesos a memoria física real. La tabla de segmentos ocupa memoria, siendo deseable que permanezcan en cache.&lt;br /&gt;
&lt;br /&gt;
*Cuando un proceso requiere más memoria se crea un nuevo segmento.&lt;br /&gt;
&lt;br /&gt;
*Dos instancias de un mismo proceso pueden compartir segmentos de memoria de instrucciones/código, pero no para datos ya que esto complicaría la gestión.&lt;br /&gt;
&lt;br /&gt;
*No se redimensionan.&lt;br /&gt;
&lt;br /&gt;
*Gestión compleja, sobretodo por su tamaño variable&lt;br /&gt;
&lt;br /&gt;
=Mecanismos=&lt;br /&gt;
Los diferentes mecanismos que nos ofrece la segmentación de memoria son los siguientes.&lt;br /&gt;
==Carga de segmentos a petición==&lt;br /&gt;
Es un mecanismo que permite a un proceso no disponer de todos sus segmentos en memoria principal, se pueden descargar a disco (en la zona de intercambio o swap) segmentos en base a un cierto criterio (ver [[Intro | Memoria virtual]]). &lt;br /&gt;
&lt;br /&gt;
Esta zona de intercambio puede ser:&lt;br /&gt;
&lt;br /&gt;
* Un lugar fijo en el disco (Linux, Unix). El administrador de memoria decide qué segmento se va a descargar&lt;br /&gt;
&lt;br /&gt;
* Un fichero oculto de tamaño fijo o variable dependiendo de la configuracion dada por el usuario (Windows).&lt;br /&gt;
&lt;br /&gt;
==Enlace dinámico==&lt;br /&gt;
Uso de llamadas a funciones que están en disco.&lt;br /&gt;
&lt;br /&gt;
El uso de esta técnica nos aporta ventajas como reducir el trabajo del montador de enlaces (y por tanto el tiempo necesario para sus operaciones) además de que podemos tener referencias a funciones o bibliotecas que no estén en memoria principal (permite ir cargando bajo demanda los segmentos que contengan el código necesario).&lt;br /&gt;
&lt;br /&gt;
=== Enlazado estático VS enlazado dinámico: ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los montadores de enlaces convencionales (estáticos) deben enlazar en tiempo de compilación todos los módulos, segmentos y referencias de un&lt;br /&gt;
programa para completar sus instrucciones (si el número de instrucciones es muy elevado la cantidad de trabajo del montador será enorme)&lt;br /&gt;
mientras que los montadores de enlaces dinámicos realizarán el enlazado durante la ejecución o durante la carga del programa.&lt;br /&gt;
&lt;br /&gt;
*'''Pros y contras:'''&lt;br /&gt;
La ventaja de usar enlaces dinámicos es que los programas serán más livianos, aunque se crea una cierta dependencia del programa el cual no&lt;br /&gt;
funcionará correctamente si se modifica algún módulo, segmento o referencia (en windows los errores debidos a actualizaciones de librerías&lt;br /&gt;
dinámicas .dll son bastante comunes). Por otro lado la ventaja de usar enlaces estáticos es que los programas son totalmente independientes,&lt;br /&gt;
lo que facilita su distribución.&lt;br /&gt;
&lt;br /&gt;
*'''Enlazado dinámico durante la carga:'''&lt;br /&gt;
En los ss.oo. de este tipo los ejecutables incluyen una relación de los objetos externos que necesita. Al cargar el programa se buscan los&lt;br /&gt;
segmentos ya cargados y los que se necesitan y se resuelven los enlaces.&lt;br /&gt;
&lt;br /&gt;
*'''Enlazado dinámino durante la ejecución:'''&lt;br /&gt;
El enlazado dinámico durante la ejecución se basa en emplear referencias indirectas (la referencia apunta a una dirección de memoria la cual &lt;br /&gt;
contiene la referencia al objeto) y en dotar al procesador de un tipo especial de interrupción llamado excepción de enlace.&lt;br /&gt;
El compilador establece de forma indirecta las referencias a elementos de otros segmentos, utilizando como objeto intermedio un puntero con el&lt;br /&gt;
bit de excepción de enlace activado y que apunta hacia el identificador del elemento referido. Cuando se alcanza una referencia de este tipo&lt;br /&gt;
se lanza la excepción de enlace y el ss.oo. la atrapa el cual busca el objeto y localiza su dirección segmentada, con esa información el &lt;br /&gt;
ss.oo. modifica el puntero asignandole la dirección hallada y desactivando el bit de excepción (el enlace especial se reduce a una referencia&lt;br /&gt;
indirecta normal).&lt;br /&gt;
Para facilitar la ejecución las referencias a un mismo objeto se concentran en un único puntero (así la excepción de enlace se producirá&lt;br /&gt;
una sola vez) y todos los enlaces se concentran en un segmento especial llamado segmento de enlace.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Segmentaci%C3%B3n&amp;diff=2277</id>
		<title>Segmentación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Segmentaci%C3%B3n&amp;diff=2277"/>
				<updated>2012-01-06T01:33:24Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Enlace dinámico */ ampliación contenido.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Definición=&lt;br /&gt;
Un segmento es un espacio de memoria de tamaño variable, compuesto por:&lt;br /&gt;
*Descriptor: Identificador único del segmento (dentro del espacio de memoria del proceso).&lt;br /&gt;
*Tamaño del segmento&lt;br /&gt;
&lt;br /&gt;
=Funcionamiento=&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Segmentos.png|725px]]&lt;br /&gt;
&lt;br /&gt;
=Características=&lt;br /&gt;
*Cada proceso en ejecución (esté activo, bloqueado o preparado) tiene su tabla de segmentos.&lt;br /&gt;
&lt;br /&gt;
*Solapamiento: 2 segmentos pueden compartir zona de memoria. Ojo! problemas de concurrencia. Habría que usar algún método para su sincronización si se intenta.&lt;br /&gt;
&lt;br /&gt;
*Protección de memoria: añadir 3 bits a la tabla de descriptores de segmentos para los permisos ( r w x ).&lt;br /&gt;
&lt;br /&gt;
*Aspectos materiales : Hay 2 registros que funcionan como dispositivos de traducción segmentada; uno de dirección de comienzo de la tabla de segmentos, y otro para el número de entradas en ella.&lt;br /&gt;
&lt;br /&gt;
*Esto supone dos accesos a memoria física real. La tabla de segmentos ocupa memoria, siendo deseable que permanezcan en cache.&lt;br /&gt;
&lt;br /&gt;
*Cuando un proceso requiere más memoria se crea un nuevo segmento.&lt;br /&gt;
&lt;br /&gt;
*Dos instancias de un mismo proceso pueden compartir segmentos de memoria de instrucciones/código, pero no para datos ya que esto complicaría la gestión.&lt;br /&gt;
&lt;br /&gt;
*No se redimensionan.&lt;br /&gt;
&lt;br /&gt;
*Gestión compleja, sobretodo por su tamaño variable&lt;br /&gt;
&lt;br /&gt;
=Mecanismos=&lt;br /&gt;
Los diferentes mecanismos que nos ofrece la segmentación de memoria son los siguientes.&lt;br /&gt;
==Carga de segmentos a petición==&lt;br /&gt;
Es un mecanismo que permite a un proceso no disponer de todos sus segmentos en memoria principal, se pueden descargar a disco (en la zona de intercambio o swap) segmentos en base a un cierto criterio (ver [[Intro | Memoria virtual]]). &lt;br /&gt;
&lt;br /&gt;
Esta zona de intercambio puede ser:&lt;br /&gt;
&lt;br /&gt;
* Un lugar fijo en el disco (Linux, Unix). El administrador de memoria decide qué segmento se va a descargar&lt;br /&gt;
&lt;br /&gt;
* Un fichero oculto de tamaño fijo o variable dependiendo de la configuracion dada por el usuario (Windows).&lt;br /&gt;
&lt;br /&gt;
==Enlace dinámico==&lt;br /&gt;
Uso de llamadas a funciones que están en disco.&lt;br /&gt;
&lt;br /&gt;
El uso de esta técnica nos aporta ventajas como reducir el trabajo del montador de enlaces (y por tanto el tiempo necesario para sus operaciones) además de que podemos tener referencias a funciones o bibliotecas que no estén en memoria principal (permite ir cargando bajo demanda los segmentos que contengan el código necesario).&lt;br /&gt;
&lt;br /&gt;
=== Enlazado estático VS enlazado dinámico: ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los montadores de enlaces convencionales (estáticos) deben enlazar en tiempo de compilación todos los módulos, segmentos y referencias de un&lt;br /&gt;
programa para completar sus instrucciones (si el número de instrucciones es muy elevado la cantidad de trabajo del montador será enorme)&lt;br /&gt;
mientras que los montadores de enlaces dinámicos realizarán el enlazado durante la ejecución o durante la carga del programa.&lt;br /&gt;
&lt;br /&gt;
*'''Pros y contras:'''&lt;br /&gt;
La ventaja de usar enlaces dinámicos es que los programas serán más livianos, aunque se crea una cierta dependencia del programa el cual no&lt;br /&gt;
funcionará correctamente si se modifica algún módulo, segmento o referencia (en windows los errores debidos a actualizaciones de librerías&lt;br /&gt;
dinámicas .dll son bastante comunes). Por otro lado la ventaja de usar enlaces estáticos es que los problemas son totalmente independientes,&lt;br /&gt;
lo que facilita su distribución.&lt;br /&gt;
&lt;br /&gt;
*'''Enlazado dinámico durante la carga:'''&lt;br /&gt;
En los ss.oo. de este tipo los ejecutables incluyen una relación de los objetos externos que necesita. Al cargar el programa se buscan los&lt;br /&gt;
segmentos ya cargados y los que se necesitan y se resuelven los enlaces.&lt;br /&gt;
&lt;br /&gt;
*'''Enlazado dinámino durante la ejecución:'''&lt;br /&gt;
El enlazado dinámico durante la ejecución se basa en emplear referencias indirectas (la referencia apunta a una dirección de memoria la cual &lt;br /&gt;
contiene la referencia al objeto) y en dotar al procesador de un tipo especial de interrupción llamado excepción de enlace.&lt;br /&gt;
El compilador establece de forma indirecta las referencias a elementos de otros segmentos, utilizando como objeto intermedio un puntero con el&lt;br /&gt;
bit de excepción de enlace activado y que apunta hacia el identificador del elemento referido. Cuando se alcanza una referencia de este tipo&lt;br /&gt;
se lanza la excepción de enlace y el ss.oo. la atrapa el cual busca el objeto y localiza su dirección segmentada, con esa información el &lt;br /&gt;
ss.oo. modifica el puntero asignandole la dirección hallada y desactivando el bit de excepción (el enlace especial se reduce a una referencia&lt;br /&gt;
indirecta normal).&lt;br /&gt;
Para facilitar la ejecución las referencias a un mismo objeto se concentran en un único puntero (así la excepción de enlace se producirá&lt;br /&gt;
una sola vez) y todos los enlaces se concentran en un segmento especial llamado segmento de enlace.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=2273</id>
		<title>SO multiprogramables con particiones variables</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=2273"/>
				<updated>2011-12-28T16:22:38Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Ajuste rápido */  corrección de errores.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En este tipo de sistemas, las particiones para cada proceso se van creando a medida que son asignadas al procesador. Tiene como ventaja principal que evitamos el desperdicio de memoria dentro de cada bloque ya que cada uno está hecho a medida para el proceso que contiene. Por el contrario, una vez que un proceso ha concluido, su partición se queda en desuso y sería necesario aplicar algoritmos de desfragmentación de memoria(supone un alto coste de rendimiento) para poder unificar todas las partes que han quedado libres y así reciclar las particiones que quedaron huérfanas. Otra forma de obtener particiones de mayor tamaño es unificar dos o más huecos adyacentes en uno sólo.&lt;br /&gt;
&lt;br /&gt;
''Ejemplo:''&lt;br /&gt;
  _                                 _&lt;br /&gt;
 |_| P1 = 3KB                      |_| P1 = 3KB   &lt;br /&gt;
 |_| P2 = 1KB                      |_| P2 = 1KB&lt;br /&gt;
 |_| P3 = 6KB    =&amp;gt; Finaliza P3 =&amp;gt; |_| Libre = 6KB&lt;br /&gt;
 | |                               | |&lt;br /&gt;
 |_| P4 = 31KB                     |_| P4 = 31KB&lt;br /&gt;
 | |                               | |&lt;br /&gt;
 |_| Libre = 21KB                  |_| Libre = 21KB&lt;br /&gt;
&lt;br /&gt;
Si un nuevo proceso P5 requiriese 24KB de memoria, no podrían serle asignados, ya que los huecos no son contiguos y para disponer de los 27KB libres en total habría que realizar previamente una desfragmentación.&lt;br /&gt;
&lt;br /&gt;
== Elementos de administración ==&lt;br /&gt;
&lt;br /&gt;
* '''Mapas de bits''': Dividiendo la memoria en bloques (llamados unidades de asignación), se utiliza un bit para representar si dicho bloque está libre o asignado. El tamaño de los bloques tiene una cierta importancia ya que cuanto mayores sean menos bloques cabrán en memoria con lo que serán necesarios menos bits para controlar todos los bloques y el mapa de bits será de menor tamaño.&lt;br /&gt;
&lt;br /&gt;
* '''Listas de control''': Se almacena en una lista el tamaño de los huecos y las posiciones de memoria entre las que se encuentran comprendidos, así como su estado (asignado o libre).&lt;br /&gt;
&lt;br /&gt;
= Criterios de asignación =&lt;br /&gt;
&lt;br /&gt;
== Primer ajuste ==&lt;br /&gt;
&lt;br /&gt;
Consiste en asignar el primer hueco disponible que tenga un espacio suficiente para almacenar el programa. Las dos principales desventajas son su alto desperdicio interno, y el elevado uso de las primeras posiciones de memoria. Este último inconveniente repercute negativamente en la circuitería, debido a que se produce un mayor desgaste en dichas posiciones.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Suponiendo una memoria principal de 32 KB.&lt;br /&gt;
&lt;br /&gt;
     | H0 | t | M |&lt;br /&gt;
 -------------------&lt;br /&gt;
 P1  | 0  | 5 | 6 |&lt;br /&gt;
 P2  | 1  | 3 | 6 |&lt;br /&gt;
 P3  | 2  | 5 | 8 |&lt;br /&gt;
 P4  | 3  | 1 | 7 |&lt;br /&gt;
 P5  | 4  | 2 | 7 |&lt;br /&gt;
 P6  | 5  | 2 | 5 |&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
                         0-5&lt;br /&gt;
             P1  &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |    &lt;br /&gt;
                           6-11&lt;br /&gt;
             P2  |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                                 12-19&lt;br /&gt;
             P3  |   |   &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                             20-26    &lt;br /&gt;
             P4  |   |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |      &lt;br /&gt;
                                   20-26&lt;br /&gt;
             P5  |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
                                        0-4             &lt;br /&gt;
             P6  |   |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
            -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                 0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
== Siguiente ajuste ==&lt;br /&gt;
&lt;br /&gt;
Se continúa a partir de la posición de la última asignación realizada.Es muy probable que haya un hueco a partir de esa posición, reduciendo la longitud de la búsqueda. De esta forma se resuelve el inconveniente de usar en exceso las primeras posiciones de la memoria. Cuando se alcanza el final de la memoria se vuelve a comenzar la búsqueda desde el principio (por ello este criterio es también conocido como primer ajuste circular).&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Suponiendo una memoria principal de 32 KB.&lt;br /&gt;
&lt;br /&gt;
    | H0 | t | M |&lt;br /&gt;
 -------------------&lt;br /&gt;
 P1  | 0  | 5 | 6 |&lt;br /&gt;
 P2  | 1  | 3 | 6 |&lt;br /&gt;
 P3  | 2  | 5 | 8 |&lt;br /&gt;
 P4  | 3  | 1 | 7 |&lt;br /&gt;
 P5  | 4  | 2 | 7 |&lt;br /&gt;
 P6  | 5  | 2 | 5 |&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
&lt;br /&gt;
                        0-5&lt;br /&gt;
            P1  &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |    &lt;br /&gt;
                          6-11&lt;br /&gt;
            P2  |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                                12-19&lt;br /&gt;
            P3  |   |   &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                            20-26    &lt;br /&gt;
            P4  |   |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |      &lt;br /&gt;
                                  20-26&lt;br /&gt;
            P5  |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
                                      27-31             &lt;br /&gt;
            P6  |   |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
           -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
'''DUDA:'''&lt;br /&gt;
&lt;br /&gt;
Es evidente que cuando llega el P5 se necesitan 7 unidades de memoria, y éstas no están disponibles en el hueco de 27 a 31 (ahí solo hay 4) por lo que da la vuelta, vuelve a comenzar y lo asigna al primero que encuentra, que resulta ser casualmente, el 20-26. --[[Usuario:Ferguatol|fernandoenzo]] 22:14 19 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Mejor ajuste ==&lt;br /&gt;
&lt;br /&gt;
Consiste en asignarle al proceso el hueco con menor ajuste interno, i.e, el hueco el cual al serle asignado el proceso deja menos espacio sin utilizar. Su mayor inconveniente es su orden de complejidad (orden lineal, ''O(n)'') debido a que hay que recorrer todo el mapa de bits o toda la lista de control (una posible solución seria usar una lista de control encadenada que mantenga los huecos ordenados por tamaño creciente).&lt;br /&gt;
Otro problema es la fragmentación externa, debido a que se asigna el menor hueco posible, el espacio sobrante sera del menor tamaño posible lo que da lugar a huecos de tamaño normalmente insuficiente para contener programas.&lt;br /&gt;
&lt;br /&gt;
== Peor ajuste ==&lt;br /&gt;
&lt;br /&gt;
Al contrario que el criterio anterior, se busca el hueco con mayor ajuste interno, i.e, el hueco el cual al serle asignado el proceso deja más espacio sin utilizar, y se corta de él el trozo necesario (así la porción sobrante será del mayor tamaño posible y será más aprovechable). Tiene el mismo inconveniente en cuanto a orden de complejidad que el mejor ajuste (debido a la longitud de las búsquedas) y la fragmentación no resulta demasiado eficiente.&lt;br /&gt;
&lt;br /&gt;
== Ajuste rápido ==&lt;br /&gt;
&lt;br /&gt;
Mediante listas de control, se agrupan los huecos disponibles según su tamaño (0 &amp;lt; t &amp;lt; 10, 10 &amp;lt; t &amp;lt; 20, etc.). De esta manera, cuando se necesite un hueco, se seleccionarán los del grupo del tamaño que corresponda. En el caso de que haya varios huecos disponibles, se seleccionará uno en base a cualquiera de los criterios anteriores.&lt;br /&gt;
&lt;br /&gt;
Organización de los huecos en el ajuste rápido:&lt;br /&gt;
&lt;br /&gt;
  Punteros a listas       Lista de huecos&lt;br /&gt;
     según tamaño&lt;br /&gt;
  __________________     &lt;br /&gt;
 |                  |     _____     _____     _____&lt;br /&gt;
 |    0 &amp;lt; t &amp;lt; 10    |---&amp;gt;|_____|--&amp;gt;|_____|--&amp;gt;|_____|  &lt;br /&gt;
 |__________________|    &lt;br /&gt;
 |                  |     _____     _____ &lt;br /&gt;
 |   10 &amp;lt; t &amp;lt; 20    |---&amp;gt;|_____|--&amp;gt;|_____| &lt;br /&gt;
 |__________________| &lt;br /&gt;
 |                  |&lt;br /&gt;
 |       ...        |&lt;br /&gt;
 |__________________|&lt;br /&gt;
 |                  |     _____&lt;br /&gt;
 |      t &amp;lt; 200     |---&amp;gt;|_____|&lt;br /&gt;
 |__________________|&lt;br /&gt;
&lt;br /&gt;
== Método de los compañeros ==&lt;br /&gt;
&lt;br /&gt;
Es una variante del ajuste rápido, en el que los huecos se dividen en potencias de 2: 2&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;, 2&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;, ..., 2&amp;lt;sup&amp;gt;k&amp;lt;/sup&amp;gt;. No es un método usado en la práctica, ya que al realizar redondeos a potencias de 2, se produce un elevado desperdicio interno. Es un método rápido tanto en la asignación como en la liberación de bloques.&lt;br /&gt;
El funcionamiento es el siguiente: &lt;br /&gt;
Cuando se necesita un bloque de tamaño T se busca en la lista de la 1ª potencia mayor o igual a T (por ejemplo 2^k), si no hay ninguno se busca en la lista de la siguiente potencia (2^k+1), si encontramos un bloque libre se retira y se divide por la mitad: una parte se le asigna al proceso y la otra se almacena en la lista de los huecos de tamaño 2^k.&lt;br /&gt;
&lt;br /&gt;
''Organización de los bloques:'' &lt;br /&gt;
&lt;br /&gt;
   __________________     &lt;br /&gt;
 |                  |     _____     _____     _____&lt;br /&gt;
 |      2^(k+1)     |---&amp;gt;|_____|--&amp;gt;|_____|--&amp;gt;|_____|  &lt;br /&gt;
 |__________________|    &lt;br /&gt;
 |                  |     _____     _____ &lt;br /&gt;
 |       2^k        |---&amp;gt;|_____|--&amp;gt;|_____| &lt;br /&gt;
 |__________________| &lt;br /&gt;
 |                  |&lt;br /&gt;
 |       ...        |&lt;br /&gt;
 |__________________|&lt;br /&gt;
 |                  |     _____&lt;br /&gt;
 |         1        |---&amp;gt;|_____|&lt;br /&gt;
 |__________________|&lt;br /&gt;
&lt;br /&gt;
Debido a la forma de dividir los bloques al liberarse uno de ellos solamente podrá fusionarse con sus compañeros (bloques del mismo tamaño) con los que formará un bloque de tamaño superior.&lt;br /&gt;
&lt;br /&gt;
''Divisiones sucesivas de los bloques:''&lt;br /&gt;
  _______________________________________________&lt;br /&gt;
 |0                      |2                      |&lt;br /&gt;
 |_______________________|_______________________|&lt;br /&gt;
  _______________________________________________&lt;br /&gt;
 |0          |2          |4          |6          |&lt;br /&gt;
 |___________|___________|___________|___________|&lt;br /&gt;
  _______________________________________________&lt;br /&gt;
 |0    |2    |4    |6    |8    |10   |12   |14   | &lt;br /&gt;
 |_____|_____|_____|_____|_____|_____|_____|_____|&lt;br /&gt;
 ________________________________________________&lt;br /&gt;
 |0 | 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|13|14|15|&lt;br /&gt;
 |__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=2272</id>
		<title>SO multiprogramables con particiones variables</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=2272"/>
				<updated>2011-12-27T19:08:56Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Método de los compañeros */ correción&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En este tipo de sistemas, las particiones para cada proceso se van creando a medida que son asignadas al procesador. Tiene como ventaja principal que evitamos el desperdicio de memoria dentro de cada bloque ya que cada uno está hecho a medida para el proceso que contiene. Por el contrario, una vez que un proceso ha concluido, su partición se queda en desuso y sería necesario aplicar algoritmos de desfragmentación de memoria(supone un alto coste de rendimiento) para poder unificar todas las partes que han quedado libres y así reciclar las particiones que quedaron huérfanas. Otra forma de obtener particiones de mayor tamaño es unificar dos o más huecos adyacentes en uno sólo.&lt;br /&gt;
&lt;br /&gt;
''Ejemplo:''&lt;br /&gt;
  _                                 _&lt;br /&gt;
 |_| P1 = 3KB                      |_| P1 = 3KB   &lt;br /&gt;
 |_| P2 = 1KB                      |_| P2 = 1KB&lt;br /&gt;
 |_| P3 = 6KB    =&amp;gt; Finaliza P3 =&amp;gt; |_| Libre = 6KB&lt;br /&gt;
 | |                               | |&lt;br /&gt;
 |_| P4 = 31KB                     |_| P4 = 31KB&lt;br /&gt;
 | |                               | |&lt;br /&gt;
 |_| Libre = 21KB                  |_| Libre = 21KB&lt;br /&gt;
&lt;br /&gt;
Si un nuevo proceso P5 requiriese 24KB de memoria, no podrían serle asignados, ya que los huecos no son contiguos y para disponer de los 27KB libres en total habría que realizar previamente una desfragmentación.&lt;br /&gt;
&lt;br /&gt;
== Elementos de administración ==&lt;br /&gt;
&lt;br /&gt;
* '''Mapas de bits''': Dividiendo la memoria en bloques (llamados unidades de asignación), se utiliza un bit para representar si dicho bloque está libre o asignado. El tamaño de los bloques tiene una cierta importancia ya que cuanto mayores sean menos bloques cabrán en memoria con lo que serán necesarios menos bits para controlar todos los bloques y el mapa de bits será de menor tamaño.&lt;br /&gt;
&lt;br /&gt;
* '''Listas de control''': Se almacena en una lista el tamaño de los huecos y las posiciones de memoria entre las que se encuentran comprendidos, así como su estado (asignado o libre).&lt;br /&gt;
&lt;br /&gt;
= Criterios de asignación =&lt;br /&gt;
&lt;br /&gt;
== Primer ajuste ==&lt;br /&gt;
&lt;br /&gt;
Consiste en asignar el primer hueco disponible que tenga un espacio suficiente para almacenar el programa. Las dos principales desventajas son su alto desperdicio interno, y el elevado uso de las primeras posiciones de memoria. Este último inconveniente repercute negativamente en la circuitería, debido a que se produce un mayor desgaste en dichas posiciones.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Suponiendo una memoria principal de 32 KB.&lt;br /&gt;
&lt;br /&gt;
     | H0 | t | M |&lt;br /&gt;
 -------------------&lt;br /&gt;
 P1  | 0  | 5 | 6 |&lt;br /&gt;
 P2  | 1  | 3 | 6 |&lt;br /&gt;
 P3  | 2  | 5 | 8 |&lt;br /&gt;
 P4  | 3  | 1 | 7 |&lt;br /&gt;
 P5  | 4  | 2 | 7 |&lt;br /&gt;
 P6  | 5  | 2 | 5 |&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
                         0-5&lt;br /&gt;
             P1  &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |    &lt;br /&gt;
                           6-11&lt;br /&gt;
             P2  |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                                 12-19&lt;br /&gt;
             P3  |   |   &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                             20-26    &lt;br /&gt;
             P4  |   |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |      &lt;br /&gt;
                                   20-26&lt;br /&gt;
             P5  |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
                                        0-4             &lt;br /&gt;
             P6  |   |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
            -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                 0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
== Siguiente ajuste ==&lt;br /&gt;
&lt;br /&gt;
Se continúa a partir de la posición de la última asignación realizada.Es muy probable que haya un hueco a partir de esa posición, reduciendo la longitud de la búsqueda. De esta forma se resuelve el inconveniente de usar en exceso las primeras posiciones de la memoria. Cuando se alcanza el final de la memoria se vuelve a comenzar la búsqueda desde el principio (por ello este criterio es también conocido como primer ajuste circular).&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Suponiendo una memoria principal de 32 KB.&lt;br /&gt;
&lt;br /&gt;
    | H0 | t | M |&lt;br /&gt;
 -------------------&lt;br /&gt;
 P1  | 0  | 5 | 6 |&lt;br /&gt;
 P2  | 1  | 3 | 6 |&lt;br /&gt;
 P3  | 2  | 5 | 8 |&lt;br /&gt;
 P4  | 3  | 1 | 7 |&lt;br /&gt;
 P5  | 4  | 2 | 7 |&lt;br /&gt;
 P6  | 5  | 2 | 5 |&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
&lt;br /&gt;
                        0-5&lt;br /&gt;
            P1  &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |    &lt;br /&gt;
                          6-11&lt;br /&gt;
            P2  |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                                12-19&lt;br /&gt;
            P3  |   |   &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                            20-26    &lt;br /&gt;
            P4  |   |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |      &lt;br /&gt;
                                  20-26&lt;br /&gt;
            P5  |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
                                      27-31             &lt;br /&gt;
            P6  |   |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
           -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
'''DUDA:'''&lt;br /&gt;
&lt;br /&gt;
Es evidente que cuando llega el P5 se necesitan 7 unidades de memoria, y éstas no están disponibles en el hueco de 27 a 31 (ahí solo hay 4) por lo que da la vuelta, vuelve a comenzar y lo asigna al primero que encuentra, que resulta ser casualmente, el 20-26. --[[Usuario:Ferguatol|fernandoenzo]] 22:14 19 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Mejor ajuste ==&lt;br /&gt;
&lt;br /&gt;
Consiste en asignarle al proceso el hueco con menor ajuste interno, i.e, el hueco el cual al serle asignado el proceso deja menos espacio sin utilizar. Su mayor inconveniente es su orden de complejidad (orden lineal, ''O(n)'') debido a que hay que recorrer todo el mapa de bits o toda la lista de control (una posible solución seria usar una lista de control encadenada que mantenga los huecos ordenados por tamaño creciente).&lt;br /&gt;
Otro problema es la fragmentación externa, debido a que se asigna el menor hueco posible, el espacio sobrante sera del menor tamaño posible lo que da lugar a huecos de tamaño normalmente insuficiente para contener programas.&lt;br /&gt;
&lt;br /&gt;
== Peor ajuste ==&lt;br /&gt;
&lt;br /&gt;
Al contrario que el criterio anterior, se busca el hueco con mayor ajuste interno, i.e, el hueco el cual al serle asignado el proceso deja más espacio sin utilizar, y se corta de él el trozo necesario (así la porción sobrante será del mayor tamaño posible y será más aprovechable). Tiene el mismo inconveniente en cuanto a orden de complejidad que el mejor ajuste (debido a la longitud de las búsquedas) y la fragmentación no resulta demasiado eficiente.&lt;br /&gt;
&lt;br /&gt;
== Ajuste rápido ==&lt;br /&gt;
&lt;br /&gt;
Mediante listas de control, se agrupan los huecos disponibles según su tamaño (0 &amp;lt; t &amp;lt; 10, 10 &amp;lt; t &amp;lt; 20, etc.). De esta manera, cuando se necesite un hueco, se seleccionarán los del grupo del tamaño que corresponda. En el caso de que haya varios huecos disponibles, se seleccionará uno en base a cualquiera de los criterios anteriores. Cuando se encuentre un hueco lo suficientemente grande se cortará la parte necesaria y se deja el resto en la lista que le corresponda.&lt;br /&gt;
&lt;br /&gt;
Organización de los huecos en el ajuste rápido:&lt;br /&gt;
&lt;br /&gt;
  Punteros a listas       Lista de huecos&lt;br /&gt;
     según tamaño&lt;br /&gt;
  __________________     &lt;br /&gt;
 |                  |     _____     _____     _____&lt;br /&gt;
 |    0 &amp;lt; t &amp;lt; 10    |---&amp;gt;|_____|--&amp;gt;|_____|--&amp;gt;|_____|  &lt;br /&gt;
 |__________________|    &lt;br /&gt;
 |                  |     _____     _____ &lt;br /&gt;
 |   10 &amp;lt; t &amp;lt; 20    |---&amp;gt;|_____|--&amp;gt;|_____| &lt;br /&gt;
 |__________________| &lt;br /&gt;
 |                  |&lt;br /&gt;
 |       ...        |&lt;br /&gt;
 |__________________|&lt;br /&gt;
 |                  |     _____&lt;br /&gt;
 |      t &amp;lt; 200     |---&amp;gt;|_____|&lt;br /&gt;
 |__________________|&lt;br /&gt;
&lt;br /&gt;
== Método de los compañeros ==&lt;br /&gt;
&lt;br /&gt;
Es una variante del ajuste rápido, en el que los huecos se dividen en potencias de 2: 2&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;, 2&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;, ..., 2&amp;lt;sup&amp;gt;k&amp;lt;/sup&amp;gt;. No es un método usado en la práctica, ya que al realizar redondeos a potencias de 2, se produce un elevado desperdicio interno. Es un método rápido tanto en la asignación como en la liberación de bloques.&lt;br /&gt;
El funcionamiento es el siguiente: &lt;br /&gt;
Cuando se necesita un bloque de tamaño T se busca en la lista de la 1ª potencia mayor o igual a T (por ejemplo 2^k), si no hay ninguno se busca en la lista de la siguiente potencia (2^k+1), si encontramos un bloque libre se retira y se divide por la mitad: una parte se le asigna al proceso y la otra se almacena en la lista de los huecos de tamaño 2^k.&lt;br /&gt;
&lt;br /&gt;
''Organización de los bloques:'' &lt;br /&gt;
&lt;br /&gt;
   __________________     &lt;br /&gt;
 |                  |     _____     _____     _____&lt;br /&gt;
 |      2^(k+1)     |---&amp;gt;|_____|--&amp;gt;|_____|--&amp;gt;|_____|  &lt;br /&gt;
 |__________________|    &lt;br /&gt;
 |                  |     _____     _____ &lt;br /&gt;
 |       2^k        |---&amp;gt;|_____|--&amp;gt;|_____| &lt;br /&gt;
 |__________________| &lt;br /&gt;
 |                  |&lt;br /&gt;
 |       ...        |&lt;br /&gt;
 |__________________|&lt;br /&gt;
 |                  |     _____&lt;br /&gt;
 |         1        |---&amp;gt;|_____|&lt;br /&gt;
 |__________________|&lt;br /&gt;
&lt;br /&gt;
Debido a la forma de dividir los bloques al liberarse uno de ellos solamente podrá fusionarse con sus compañeros (bloques del mismo tamaño) con los que formará un bloque de tamaño superior.&lt;br /&gt;
&lt;br /&gt;
''Divisiones sucesivas de los bloques:''&lt;br /&gt;
  _______________________________________________&lt;br /&gt;
 |0                      |2                      |&lt;br /&gt;
 |_______________________|_______________________|&lt;br /&gt;
  _______________________________________________&lt;br /&gt;
 |0          |2          |4          |6          |&lt;br /&gt;
 |___________|___________|___________|___________|&lt;br /&gt;
  _______________________________________________&lt;br /&gt;
 |0    |2    |4    |6    |8    |10   |12   |14   | &lt;br /&gt;
 |_____|_____|_____|_____|_____|_____|_____|_____|&lt;br /&gt;
 ________________________________________________&lt;br /&gt;
 |0 | 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|13|14|15|&lt;br /&gt;
 |__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=2271</id>
		<title>SO multiprogramables con particiones variables</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=2271"/>
				<updated>2011-12-27T19:07:22Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Método de los compañeros */  ampliación&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En este tipo de sistemas, las particiones para cada proceso se van creando a medida que son asignadas al procesador. Tiene como ventaja principal que evitamos el desperdicio de memoria dentro de cada bloque ya que cada uno está hecho a medida para el proceso que contiene. Por el contrario, una vez que un proceso ha concluido, su partición se queda en desuso y sería necesario aplicar algoritmos de desfragmentación de memoria(supone un alto coste de rendimiento) para poder unificar todas las partes que han quedado libres y así reciclar las particiones que quedaron huérfanas. Otra forma de obtener particiones de mayor tamaño es unificar dos o más huecos adyacentes en uno sólo.&lt;br /&gt;
&lt;br /&gt;
''Ejemplo:''&lt;br /&gt;
  _                                 _&lt;br /&gt;
 |_| P1 = 3KB                      |_| P1 = 3KB   &lt;br /&gt;
 |_| P2 = 1KB                      |_| P2 = 1KB&lt;br /&gt;
 |_| P3 = 6KB    =&amp;gt; Finaliza P3 =&amp;gt; |_| Libre = 6KB&lt;br /&gt;
 | |                               | |&lt;br /&gt;
 |_| P4 = 31KB                     |_| P4 = 31KB&lt;br /&gt;
 | |                               | |&lt;br /&gt;
 |_| Libre = 21KB                  |_| Libre = 21KB&lt;br /&gt;
&lt;br /&gt;
Si un nuevo proceso P5 requiriese 24KB de memoria, no podrían serle asignados, ya que los huecos no son contiguos y para disponer de los 27KB libres en total habría que realizar previamente una desfragmentación.&lt;br /&gt;
&lt;br /&gt;
== Elementos de administración ==&lt;br /&gt;
&lt;br /&gt;
* '''Mapas de bits''': Dividiendo la memoria en bloques (llamados unidades de asignación), se utiliza un bit para representar si dicho bloque está libre o asignado. El tamaño de los bloques tiene una cierta importancia ya que cuanto mayores sean menos bloques cabrán en memoria con lo que serán necesarios menos bits para controlar todos los bloques y el mapa de bits será de menor tamaño.&lt;br /&gt;
&lt;br /&gt;
* '''Listas de control''': Se almacena en una lista el tamaño de los huecos y las posiciones de memoria entre las que se encuentran comprendidos, así como su estado (asignado o libre).&lt;br /&gt;
&lt;br /&gt;
= Criterios de asignación =&lt;br /&gt;
&lt;br /&gt;
== Primer ajuste ==&lt;br /&gt;
&lt;br /&gt;
Consiste en asignar el primer hueco disponible que tenga un espacio suficiente para almacenar el programa. Las dos principales desventajas son su alto desperdicio interno, y el elevado uso de las primeras posiciones de memoria. Este último inconveniente repercute negativamente en la circuitería, debido a que se produce un mayor desgaste en dichas posiciones.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Suponiendo una memoria principal de 32 KB.&lt;br /&gt;
&lt;br /&gt;
     | H0 | t | M |&lt;br /&gt;
 -------------------&lt;br /&gt;
 P1  | 0  | 5 | 6 |&lt;br /&gt;
 P2  | 1  | 3 | 6 |&lt;br /&gt;
 P3  | 2  | 5 | 8 |&lt;br /&gt;
 P4  | 3  | 1 | 7 |&lt;br /&gt;
 P5  | 4  | 2 | 7 |&lt;br /&gt;
 P6  | 5  | 2 | 5 |&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
                         0-5&lt;br /&gt;
             P1  &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |    &lt;br /&gt;
                           6-11&lt;br /&gt;
             P2  |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                                 12-19&lt;br /&gt;
             P3  |   |   &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                             20-26    &lt;br /&gt;
             P4  |   |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |      &lt;br /&gt;
                                   20-26&lt;br /&gt;
             P5  |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
                                        0-4             &lt;br /&gt;
             P6  |   |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
            -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                 0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
== Siguiente ajuste ==&lt;br /&gt;
&lt;br /&gt;
Se continúa a partir de la posición de la última asignación realizada.Es muy probable que haya un hueco a partir de esa posición, reduciendo la longitud de la búsqueda. De esta forma se resuelve el inconveniente de usar en exceso las primeras posiciones de la memoria. Cuando se alcanza el final de la memoria se vuelve a comenzar la búsqueda desde el principio (por ello este criterio es también conocido como primer ajuste circular).&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Suponiendo una memoria principal de 32 KB.&lt;br /&gt;
&lt;br /&gt;
    | H0 | t | M |&lt;br /&gt;
 -------------------&lt;br /&gt;
 P1  | 0  | 5 | 6 |&lt;br /&gt;
 P2  | 1  | 3 | 6 |&lt;br /&gt;
 P3  | 2  | 5 | 8 |&lt;br /&gt;
 P4  | 3  | 1 | 7 |&lt;br /&gt;
 P5  | 4  | 2 | 7 |&lt;br /&gt;
 P6  | 5  | 2 | 5 |&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
&lt;br /&gt;
                        0-5&lt;br /&gt;
            P1  &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |    &lt;br /&gt;
                          6-11&lt;br /&gt;
            P2  |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                                12-19&lt;br /&gt;
            P3  |   |   &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                            20-26    &lt;br /&gt;
            P4  |   |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |      &lt;br /&gt;
                                  20-26&lt;br /&gt;
            P5  |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
                                      27-31             &lt;br /&gt;
            P6  |   |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
           -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
'''DUDA:'''&lt;br /&gt;
&lt;br /&gt;
Es evidente que cuando llega el P5 se necesitan 7 unidades de memoria, y éstas no están disponibles en el hueco de 27 a 31 (ahí solo hay 4) por lo que da la vuelta, vuelve a comenzar y lo asigna al primero que encuentra, que resulta ser casualmente, el 20-26. --[[Usuario:Ferguatol|fernandoenzo]] 22:14 19 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Mejor ajuste ==&lt;br /&gt;
&lt;br /&gt;
Consiste en asignarle al proceso el hueco con menor ajuste interno, i.e, el hueco el cual al serle asignado el proceso deja menos espacio sin utilizar. Su mayor inconveniente es su orden de complejidad (orden lineal, ''O(n)'') debido a que hay que recorrer todo el mapa de bits o toda la lista de control (una posible solución seria usar una lista de control encadenada que mantenga los huecos ordenados por tamaño creciente).&lt;br /&gt;
Otro problema es la fragmentación externa, debido a que se asigna el menor hueco posible, el espacio sobrante sera del menor tamaño posible lo que da lugar a huecos de tamaño normalmente insuficiente para contener programas.&lt;br /&gt;
&lt;br /&gt;
== Peor ajuste ==&lt;br /&gt;
&lt;br /&gt;
Al contrario que el criterio anterior, se busca el hueco con mayor ajuste interno, i.e, el hueco el cual al serle asignado el proceso deja más espacio sin utilizar, y se corta de él el trozo necesario (así la porción sobrante será del mayor tamaño posible y será más aprovechable). Tiene el mismo inconveniente en cuanto a orden de complejidad que el mejor ajuste (debido a la longitud de las búsquedas) y la fragmentación no resulta demasiado eficiente.&lt;br /&gt;
&lt;br /&gt;
== Ajuste rápido ==&lt;br /&gt;
&lt;br /&gt;
Mediante listas de control, se agrupan los huecos disponibles según su tamaño (0 &amp;lt; t &amp;lt; 10, 10 &amp;lt; t &amp;lt; 20, etc.). De esta manera, cuando se necesite un hueco, se seleccionarán los del grupo del tamaño que corresponda. En el caso de que haya varios huecos disponibles, se seleccionará uno en base a cualquiera de los criterios anteriores. Cuando se encuentre un hueco lo suficientemente grande se cortará la parte necesaria y se deja el resto en la lista que le corresponda.&lt;br /&gt;
&lt;br /&gt;
Organización de los huecos en el ajuste rápido:&lt;br /&gt;
&lt;br /&gt;
  Punteros a listas       Lista de huecos&lt;br /&gt;
     según tamaño&lt;br /&gt;
  __________________     &lt;br /&gt;
 |                  |     _____     _____     _____&lt;br /&gt;
 |    0 &amp;lt; t &amp;lt; 10    |---&amp;gt;|_____|--&amp;gt;|_____|--&amp;gt;|_____|  &lt;br /&gt;
 |__________________|    &lt;br /&gt;
 |                  |     _____     _____ &lt;br /&gt;
 |   10 &amp;lt; t &amp;lt; 20    |---&amp;gt;|_____|--&amp;gt;|_____| &lt;br /&gt;
 |__________________| &lt;br /&gt;
 |                  |&lt;br /&gt;
 |       ...        |&lt;br /&gt;
 |__________________|&lt;br /&gt;
 |                  |     _____&lt;br /&gt;
 |      t &amp;lt; 200     |---&amp;gt;|_____|&lt;br /&gt;
 |__________________|&lt;br /&gt;
&lt;br /&gt;
== Método de los compañeros ==&lt;br /&gt;
&lt;br /&gt;
Es una variante del ajuste rápido, en el que los huecos se dividen en potencias de 2: 2&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;, 2&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;, ..., 2&amp;lt;sup&amp;gt;k&amp;lt;/sup&amp;gt;. No es un método usado en la práctica, ya que al realizar redondeos a potencias de 2, se produce un elevado desperdicio interno. Es un método rápido tanto en la asignación como en la liberación de bloques.&lt;br /&gt;
El funcionamiento es el siguiente: &lt;br /&gt;
Cuando se necesita un bloque de tamaño T se busca en la lista de la 1ª potencia mayor o igual a T (por ejemplo 2^k), si no hay ninguno se busca en la lista de la siguiente potencia (2^k+1), si encontramos un bloque libre se retira y se divide por la mitad: una parte se le asigna al proceso y la otra se almacena en la lista de los huecos de tamaño 2^k.&lt;br /&gt;
&lt;br /&gt;
''Organización de los bloques:'' &lt;br /&gt;
&lt;br /&gt;
 __________________     &lt;br /&gt;
|                  |     _____     _____     _____&lt;br /&gt;
|       ...        |---&amp;gt;|_____|--&amp;gt;|_____|--&amp;gt;|_____|  &lt;br /&gt;
|__________________|    &lt;br /&gt;
|                  |     _____     _____ &lt;br /&gt;
|      2^(k+1)     |---&amp;gt;|_____|--&amp;gt;|_____| &lt;br /&gt;
|__________________| &lt;br /&gt;
|                  |&lt;br /&gt;
|      2^k         |&lt;br /&gt;
|__________________|&lt;br /&gt;
|                  |     _____&lt;br /&gt;
|        1         |---&amp;gt;|_____|&lt;br /&gt;
|__________________|&lt;br /&gt;
&lt;br /&gt;
Debido a la forma de dividir los bloques al liberarse uno de ellos solamente podrá fusionarse con sus compañeros (bloques del mismo tamaño) con los que formará un bloque de tamaño superior.&lt;br /&gt;
&lt;br /&gt;
''Divisiones sucesivas de los bloques:''&lt;br /&gt;
  _______________________________________________&lt;br /&gt;
 |0                      |2                      |&lt;br /&gt;
 |_______________________|_______________________|&lt;br /&gt;
  _______________________________________________&lt;br /&gt;
 |0          |2          |4          |6          |&lt;br /&gt;
 |___________|___________|___________|___________|&lt;br /&gt;
  _______________________________________________&lt;br /&gt;
 |0    |2    |4    |6    |8    |10   |12   |14   | &lt;br /&gt;
 |_____|_____|_____|_____|_____|_____|_____|_____|&lt;br /&gt;
 ________________________________________________&lt;br /&gt;
 |0 | 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|13|14|15|&lt;br /&gt;
 |__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=2270</id>
		<title>SO multiprogramables con particiones variables</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=2270"/>
				<updated>2011-12-27T18:38:53Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Ajuste rápido */ ampliación&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En este tipo de sistemas, las particiones para cada proceso se van creando a medida que son asignadas al procesador. Tiene como ventaja principal que evitamos el desperdicio de memoria dentro de cada bloque ya que cada uno está hecho a medida para el proceso que contiene. Por el contrario, una vez que un proceso ha concluido, su partición se queda en desuso y sería necesario aplicar algoritmos de desfragmentación de memoria(supone un alto coste de rendimiento) para poder unificar todas las partes que han quedado libres y así reciclar las particiones que quedaron huérfanas. Otra forma de obtener particiones de mayor tamaño es unificar dos o más huecos adyacentes en uno sólo.&lt;br /&gt;
&lt;br /&gt;
''Ejemplo:''&lt;br /&gt;
  _                                 _&lt;br /&gt;
 |_| P1 = 3KB                      |_| P1 = 3KB   &lt;br /&gt;
 |_| P2 = 1KB                      |_| P2 = 1KB&lt;br /&gt;
 |_| P3 = 6KB    =&amp;gt; Finaliza P3 =&amp;gt; |_| Libre = 6KB&lt;br /&gt;
 | |                               | |&lt;br /&gt;
 |_| P4 = 31KB                     |_| P4 = 31KB&lt;br /&gt;
 | |                               | |&lt;br /&gt;
 |_| Libre = 21KB                  |_| Libre = 21KB&lt;br /&gt;
&lt;br /&gt;
Si un nuevo proceso P5 requiriese 24KB de memoria, no podrían serle asignados, ya que los huecos no son contiguos y para disponer de los 27KB libres en total habría que realizar previamente una desfragmentación.&lt;br /&gt;
&lt;br /&gt;
== Elementos de administración ==&lt;br /&gt;
&lt;br /&gt;
* '''Mapas de bits''': Dividiendo la memoria en bloques (llamados unidades de asignación), se utiliza un bit para representar si dicho bloque está libre o asignado. El tamaño de los bloques tiene una cierta importancia ya que cuanto mayores sean menos bloques cabrán en memoria con lo que serán necesarios menos bits para controlar todos los bloques y el mapa de bits será de menor tamaño.&lt;br /&gt;
&lt;br /&gt;
* '''Listas de control''': Se almacena en una lista el tamaño de los huecos y las posiciones de memoria entre las que se encuentran comprendidos, así como su estado (asignado o libre).&lt;br /&gt;
&lt;br /&gt;
= Criterios de asignación =&lt;br /&gt;
&lt;br /&gt;
== Primer ajuste ==&lt;br /&gt;
&lt;br /&gt;
Consiste en asignar el primer hueco disponible que tenga un espacio suficiente para almacenar el programa. Las dos principales desventajas son su alto desperdicio interno, y el elevado uso de las primeras posiciones de memoria. Este último inconveniente repercute negativamente en la circuitería, debido a que se produce un mayor desgaste en dichas posiciones.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Suponiendo una memoria principal de 32 KB.&lt;br /&gt;
&lt;br /&gt;
     | H0 | t | M |&lt;br /&gt;
 -------------------&lt;br /&gt;
 P1  | 0  | 5 | 6 |&lt;br /&gt;
 P2  | 1  | 3 | 6 |&lt;br /&gt;
 P3  | 2  | 5 | 8 |&lt;br /&gt;
 P4  | 3  | 1 | 7 |&lt;br /&gt;
 P5  | 4  | 2 | 7 |&lt;br /&gt;
 P6  | 5  | 2 | 5 |&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
                         0-5&lt;br /&gt;
             P1  &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |    &lt;br /&gt;
                           6-11&lt;br /&gt;
             P2  |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                                 12-19&lt;br /&gt;
             P3  |   |   &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                             20-26    &lt;br /&gt;
             P4  |   |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |      &lt;br /&gt;
                                   20-26&lt;br /&gt;
             P5  |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
                                        0-4             &lt;br /&gt;
             P6  |   |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
            -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                 0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
== Siguiente ajuste ==&lt;br /&gt;
&lt;br /&gt;
Se continúa a partir de la posición de la última asignación realizada.Es muy probable que haya un hueco a partir de esa posición, reduciendo la longitud de la búsqueda. De esta forma se resuelve el inconveniente de usar en exceso las primeras posiciones de la memoria. Cuando se alcanza el final de la memoria se vuelve a comenzar la búsqueda desde el principio (por ello este criterio es también conocido como primer ajuste circular).&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Suponiendo una memoria principal de 32 KB.&lt;br /&gt;
&lt;br /&gt;
    | H0 | t | M |&lt;br /&gt;
 -------------------&lt;br /&gt;
 P1  | 0  | 5 | 6 |&lt;br /&gt;
 P2  | 1  | 3 | 6 |&lt;br /&gt;
 P3  | 2  | 5 | 8 |&lt;br /&gt;
 P4  | 3  | 1 | 7 |&lt;br /&gt;
 P5  | 4  | 2 | 7 |&lt;br /&gt;
 P6  | 5  | 2 | 5 |&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
&lt;br /&gt;
                        0-5&lt;br /&gt;
            P1  &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |    &lt;br /&gt;
                          6-11&lt;br /&gt;
            P2  |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                                12-19&lt;br /&gt;
            P3  |   |   &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                            20-26    &lt;br /&gt;
            P4  |   |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |      &lt;br /&gt;
                                  20-26&lt;br /&gt;
            P5  |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
                                      27-31             &lt;br /&gt;
            P6  |   |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
           -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
'''DUDA:'''&lt;br /&gt;
&lt;br /&gt;
Es evidente que cuando llega el P5 se necesitan 7 unidades de memoria, y éstas no están disponibles en el hueco de 27 a 31 (ahí solo hay 4) por lo que da la vuelta, vuelve a comenzar y lo asigna al primero que encuentra, que resulta ser casualmente, el 20-26. --[[Usuario:Ferguatol|fernandoenzo]] 22:14 19 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Mejor ajuste ==&lt;br /&gt;
&lt;br /&gt;
Consiste en asignarle al proceso el hueco con menor ajuste interno, i.e, el hueco el cual al serle asignado el proceso deja menos espacio sin utilizar. Su mayor inconveniente es su orden de complejidad (orden lineal, ''O(n)'') debido a que hay que recorrer todo el mapa de bits o toda la lista de control (una posible solución seria usar una lista de control encadenada que mantenga los huecos ordenados por tamaño creciente).&lt;br /&gt;
Otro problema es la fragmentación externa, debido a que se asigna el menor hueco posible, el espacio sobrante sera del menor tamaño posible lo que da lugar a huecos de tamaño normalmente insuficiente para contener programas.&lt;br /&gt;
&lt;br /&gt;
== Peor ajuste ==&lt;br /&gt;
&lt;br /&gt;
Al contrario que el criterio anterior, se busca el hueco con mayor ajuste interno, i.e, el hueco el cual al serle asignado el proceso deja más espacio sin utilizar, y se corta de él el trozo necesario (así la porción sobrante será del mayor tamaño posible y será más aprovechable). Tiene el mismo inconveniente en cuanto a orden de complejidad que el mejor ajuste (debido a la longitud de las búsquedas) y la fragmentación no resulta demasiado eficiente.&lt;br /&gt;
&lt;br /&gt;
== Ajuste rápido ==&lt;br /&gt;
&lt;br /&gt;
Mediante listas de control, se agrupan los huecos disponibles según su tamaño (0 &amp;lt; t &amp;lt; 10, 10 &amp;lt; t &amp;lt; 20, etc.). De esta manera, cuando se necesite un hueco, se seleccionarán los del grupo del tamaño que corresponda. En el caso de que haya varios huecos disponibles, se seleccionará uno en base a cualquiera de los criterios anteriores. Cuando se encuentre un hueco lo suficientemente grande se cortará la parte necesaria y se deja el resto en la lista que le corresponda.&lt;br /&gt;
&lt;br /&gt;
Organización de los huecos en el ajuste rápido:&lt;br /&gt;
&lt;br /&gt;
  Punteros a listas       Lista de huecos&lt;br /&gt;
     según tamaño&lt;br /&gt;
  __________________     &lt;br /&gt;
 |                  |     _____     _____     _____&lt;br /&gt;
 |    0 &amp;lt; t &amp;lt; 10    |---&amp;gt;|_____|--&amp;gt;|_____|--&amp;gt;|_____|  &lt;br /&gt;
 |__________________|    &lt;br /&gt;
 |                  |     _____     _____ &lt;br /&gt;
 |   10 &amp;lt; t &amp;lt; 20    |---&amp;gt;|_____|--&amp;gt;|_____| &lt;br /&gt;
 |__________________| &lt;br /&gt;
 |                  |&lt;br /&gt;
 |       ...        |&lt;br /&gt;
 |__________________|&lt;br /&gt;
 |                  |     _____&lt;br /&gt;
 |      t &amp;lt; 200     |---&amp;gt;|_____|&lt;br /&gt;
 |__________________|&lt;br /&gt;
&lt;br /&gt;
== Método de los compañeros ==&lt;br /&gt;
&lt;br /&gt;
Es una variante del ajuste rápido, en el que los huecos se dividen en potencias de 2: 2&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;, 2&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;, ..., 2&amp;lt;sup&amp;gt;k&amp;lt;/sup&amp;gt;. No es un método usado en la práctica, ya que al realizar redondeos a potencias de 2, se produce un elevado desperdicio interno.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=2269</id>
		<title>SO multiprogramables con particiones variables</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=2269"/>
				<updated>2011-12-27T18:24:53Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Peor ajuste */ ampliación.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En este tipo de sistemas, las particiones para cada proceso se van creando a medida que son asignadas al procesador. Tiene como ventaja principal que evitamos el desperdicio de memoria dentro de cada bloque ya que cada uno está hecho a medida para el proceso que contiene. Por el contrario, una vez que un proceso ha concluido, su partición se queda en desuso y sería necesario aplicar algoritmos de desfragmentación de memoria(supone un alto coste de rendimiento) para poder unificar todas las partes que han quedado libres y así reciclar las particiones que quedaron huérfanas. Otra forma de obtener particiones de mayor tamaño es unificar dos o más huecos adyacentes en uno sólo.&lt;br /&gt;
&lt;br /&gt;
''Ejemplo:''&lt;br /&gt;
  _                                 _&lt;br /&gt;
 |_| P1 = 3KB                      |_| P1 = 3KB   &lt;br /&gt;
 |_| P2 = 1KB                      |_| P2 = 1KB&lt;br /&gt;
 |_| P3 = 6KB    =&amp;gt; Finaliza P3 =&amp;gt; |_| Libre = 6KB&lt;br /&gt;
 | |                               | |&lt;br /&gt;
 |_| P4 = 31KB                     |_| P4 = 31KB&lt;br /&gt;
 | |                               | |&lt;br /&gt;
 |_| Libre = 21KB                  |_| Libre = 21KB&lt;br /&gt;
&lt;br /&gt;
Si un nuevo proceso P5 requiriese 24KB de memoria, no podrían serle asignados, ya que los huecos no son contiguos y para disponer de los 27KB libres en total habría que realizar previamente una desfragmentación.&lt;br /&gt;
&lt;br /&gt;
== Elementos de administración ==&lt;br /&gt;
&lt;br /&gt;
* '''Mapas de bits''': Dividiendo la memoria en bloques (llamados unidades de asignación), se utiliza un bit para representar si dicho bloque está libre o asignado. El tamaño de los bloques tiene una cierta importancia ya que cuanto mayores sean menos bloques cabrán en memoria con lo que serán necesarios menos bits para controlar todos los bloques y el mapa de bits será de menor tamaño.&lt;br /&gt;
&lt;br /&gt;
* '''Listas de control''': Se almacena en una lista el tamaño de los huecos y las posiciones de memoria entre las que se encuentran comprendidos, así como su estado (asignado o libre).&lt;br /&gt;
&lt;br /&gt;
= Criterios de asignación =&lt;br /&gt;
&lt;br /&gt;
== Primer ajuste ==&lt;br /&gt;
&lt;br /&gt;
Consiste en asignar el primer hueco disponible que tenga un espacio suficiente para almacenar el programa. Las dos principales desventajas son su alto desperdicio interno, y el elevado uso de las primeras posiciones de memoria. Este último inconveniente repercute negativamente en la circuitería, debido a que se produce un mayor desgaste en dichas posiciones.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Suponiendo una memoria principal de 32 KB.&lt;br /&gt;
&lt;br /&gt;
     | H0 | t | M |&lt;br /&gt;
 -------------------&lt;br /&gt;
 P1  | 0  | 5 | 6 |&lt;br /&gt;
 P2  | 1  | 3 | 6 |&lt;br /&gt;
 P3  | 2  | 5 | 8 |&lt;br /&gt;
 P4  | 3  | 1 | 7 |&lt;br /&gt;
 P5  | 4  | 2 | 7 |&lt;br /&gt;
 P6  | 5  | 2 | 5 |&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
                         0-5&lt;br /&gt;
             P1  &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |    &lt;br /&gt;
                           6-11&lt;br /&gt;
             P2  |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                                 12-19&lt;br /&gt;
             P3  |   |   &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                             20-26    &lt;br /&gt;
             P4  |   |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |      &lt;br /&gt;
                                   20-26&lt;br /&gt;
             P5  |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
                                        0-4             &lt;br /&gt;
             P6  |   |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
            -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                 0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
== Siguiente ajuste ==&lt;br /&gt;
&lt;br /&gt;
Se continúa a partir de la posición de la última asignación realizada.Es muy probable que haya un hueco a partir de esa posición, reduciendo la longitud de la búsqueda. De esta forma se resuelve el inconveniente de usar en exceso las primeras posiciones de la memoria. Cuando se alcanza el final de la memoria se vuelve a comenzar la búsqueda desde el principio (por ello este criterio es también conocido como primer ajuste circular).&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Suponiendo una memoria principal de 32 KB.&lt;br /&gt;
&lt;br /&gt;
    | H0 | t | M |&lt;br /&gt;
 -------------------&lt;br /&gt;
 P1  | 0  | 5 | 6 |&lt;br /&gt;
 P2  | 1  | 3 | 6 |&lt;br /&gt;
 P3  | 2  | 5 | 8 |&lt;br /&gt;
 P4  | 3  | 1 | 7 |&lt;br /&gt;
 P5  | 4  | 2 | 7 |&lt;br /&gt;
 P6  | 5  | 2 | 5 |&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
&lt;br /&gt;
                        0-5&lt;br /&gt;
            P1  &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |    &lt;br /&gt;
                          6-11&lt;br /&gt;
            P2  |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                                12-19&lt;br /&gt;
            P3  |   |   &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                            20-26    &lt;br /&gt;
            P4  |   |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |      &lt;br /&gt;
                                  20-26&lt;br /&gt;
            P5  |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
                                      27-31             &lt;br /&gt;
            P6  |   |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
           -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
'''DUDA:'''&lt;br /&gt;
&lt;br /&gt;
Es evidente que cuando llega el P5 se necesitan 7 unidades de memoria, y éstas no están disponibles en el hueco de 27 a 31 (ahí solo hay 4) por lo que da la vuelta, vuelve a comenzar y lo asigna al primero que encuentra, que resulta ser casualmente, el 20-26. --[[Usuario:Ferguatol|fernandoenzo]] 22:14 19 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Mejor ajuste ==&lt;br /&gt;
&lt;br /&gt;
Consiste en asignarle al proceso el hueco con menor ajuste interno, i.e, el hueco el cual al serle asignado el proceso deja menos espacio sin utilizar. Su mayor inconveniente es su orden de complejidad (orden lineal, ''O(n)'') debido a que hay que recorrer todo el mapa de bits o toda la lista de control (una posible solución seria usar una lista de control encadenada que mantenga los huecos ordenados por tamaño creciente).&lt;br /&gt;
Otro problema es la fragmentación externa, debido a que se asigna el menor hueco posible, el espacio sobrante sera del menor tamaño posible lo que da lugar a huecos de tamaño normalmente insuficiente para contener programas.&lt;br /&gt;
&lt;br /&gt;
== Peor ajuste ==&lt;br /&gt;
&lt;br /&gt;
Al contrario que el criterio anterior, se busca el hueco con mayor ajuste interno, i.e, el hueco el cual al serle asignado el proceso deja más espacio sin utilizar, y se corta de él el trozo necesario (así la porción sobrante será del mayor tamaño posible y será más aprovechable). Tiene el mismo inconveniente en cuanto a orden de complejidad que el mejor ajuste (debido a la longitud de las búsquedas) y la fragmentación no resulta demasiado eficiente.&lt;br /&gt;
&lt;br /&gt;
== Ajuste rápido ==&lt;br /&gt;
&lt;br /&gt;
Mediante listas de control, se agrupan los huecos disponibles según su tamaño (0 &amp;lt; t &amp;lt; 10, 10 &amp;lt; t &amp;lt; 20, etc.). De esta manera, cuando se necesite un hueco, se seleccionarán los del grupo del tamaño que corresponda. En el caso de que haya varios huecos disponibles, se seleccionará uno en base a cualquiera de los criterios anteriores.&lt;br /&gt;
&lt;br /&gt;
== Método de los compañeros ==&lt;br /&gt;
&lt;br /&gt;
Es una variante del ajuste rápido, en el que los huecos se dividen en potencias de 2: 2&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;, 2&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;, ..., 2&amp;lt;sup&amp;gt;k&amp;lt;/sup&amp;gt;. No es un método usado en la práctica, ya que al realizar redondeos a potencias de 2, se produce un elevado desperdicio interno.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=2268</id>
		<title>SO multiprogramables con particiones variables</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=2268"/>
				<updated>2011-12-27T18:21:03Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Mejor ajuste */ ampliacion contenido&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En este tipo de sistemas, las particiones para cada proceso se van creando a medida que son asignadas al procesador. Tiene como ventaja principal que evitamos el desperdicio de memoria dentro de cada bloque ya que cada uno está hecho a medida para el proceso que contiene. Por el contrario, una vez que un proceso ha concluido, su partición se queda en desuso y sería necesario aplicar algoritmos de desfragmentación de memoria(supone un alto coste de rendimiento) para poder unificar todas las partes que han quedado libres y así reciclar las particiones que quedaron huérfanas. Otra forma de obtener particiones de mayor tamaño es unificar dos o más huecos adyacentes en uno sólo.&lt;br /&gt;
&lt;br /&gt;
''Ejemplo:''&lt;br /&gt;
  _                                 _&lt;br /&gt;
 |_| P1 = 3KB                      |_| P1 = 3KB   &lt;br /&gt;
 |_| P2 = 1KB                      |_| P2 = 1KB&lt;br /&gt;
 |_| P3 = 6KB    =&amp;gt; Finaliza P3 =&amp;gt; |_| Libre = 6KB&lt;br /&gt;
 | |                               | |&lt;br /&gt;
 |_| P4 = 31KB                     |_| P4 = 31KB&lt;br /&gt;
 | |                               | |&lt;br /&gt;
 |_| Libre = 21KB                  |_| Libre = 21KB&lt;br /&gt;
&lt;br /&gt;
Si un nuevo proceso P5 requiriese 24KB de memoria, no podrían serle asignados, ya que los huecos no son contiguos y para disponer de los 27KB libres en total habría que realizar previamente una desfragmentación.&lt;br /&gt;
&lt;br /&gt;
== Elementos de administración ==&lt;br /&gt;
&lt;br /&gt;
* '''Mapas de bits''': Dividiendo la memoria en bloques (llamados unidades de asignación), se utiliza un bit para representar si dicho bloque está libre o asignado. El tamaño de los bloques tiene una cierta importancia ya que cuanto mayores sean menos bloques cabrán en memoria con lo que serán necesarios menos bits para controlar todos los bloques y el mapa de bits será de menor tamaño.&lt;br /&gt;
&lt;br /&gt;
* '''Listas de control''': Se almacena en una lista el tamaño de los huecos y las posiciones de memoria entre las que se encuentran comprendidos, así como su estado (asignado o libre).&lt;br /&gt;
&lt;br /&gt;
= Criterios de asignación =&lt;br /&gt;
&lt;br /&gt;
== Primer ajuste ==&lt;br /&gt;
&lt;br /&gt;
Consiste en asignar el primer hueco disponible que tenga un espacio suficiente para almacenar el programa. Las dos principales desventajas son su alto desperdicio interno, y el elevado uso de las primeras posiciones de memoria. Este último inconveniente repercute negativamente en la circuitería, debido a que se produce un mayor desgaste en dichas posiciones.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Suponiendo una memoria principal de 32 KB.&lt;br /&gt;
&lt;br /&gt;
     | H0 | t | M |&lt;br /&gt;
 -------------------&lt;br /&gt;
 P1  | 0  | 5 | 6 |&lt;br /&gt;
 P2  | 1  | 3 | 6 |&lt;br /&gt;
 P3  | 2  | 5 | 8 |&lt;br /&gt;
 P4  | 3  | 1 | 7 |&lt;br /&gt;
 P5  | 4  | 2 | 7 |&lt;br /&gt;
 P6  | 5  | 2 | 5 |&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
                         0-5&lt;br /&gt;
             P1  &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |    &lt;br /&gt;
                           6-11&lt;br /&gt;
             P2  |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                                 12-19&lt;br /&gt;
             P3  |   |   &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                             20-26    &lt;br /&gt;
             P4  |   |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |      &lt;br /&gt;
                                   20-26&lt;br /&gt;
             P5  |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
                                        0-4             &lt;br /&gt;
             P6  |   |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
            -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                 0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
== Siguiente ajuste ==&lt;br /&gt;
&lt;br /&gt;
Se continúa a partir de la posición de la última asignación realizada.Es muy probable que haya un hueco a partir de esa posición, reduciendo la longitud de la búsqueda. De esta forma se resuelve el inconveniente de usar en exceso las primeras posiciones de la memoria. Cuando se alcanza el final de la memoria se vuelve a comenzar la búsqueda desde el principio (por ello este criterio es también conocido como primer ajuste circular).&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Suponiendo una memoria principal de 32 KB.&lt;br /&gt;
&lt;br /&gt;
    | H0 | t | M |&lt;br /&gt;
 -------------------&lt;br /&gt;
 P1  | 0  | 5 | 6 |&lt;br /&gt;
 P2  | 1  | 3 | 6 |&lt;br /&gt;
 P3  | 2  | 5 | 8 |&lt;br /&gt;
 P4  | 3  | 1 | 7 |&lt;br /&gt;
 P5  | 4  | 2 | 7 |&lt;br /&gt;
 P6  | 5  | 2 | 5 |&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
&lt;br /&gt;
                        0-5&lt;br /&gt;
            P1  &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |    &lt;br /&gt;
                          6-11&lt;br /&gt;
            P2  |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                                12-19&lt;br /&gt;
            P3  |   |   &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                            20-26    &lt;br /&gt;
            P4  |   |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |      &lt;br /&gt;
                                  20-26&lt;br /&gt;
            P5  |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
                                      27-31             &lt;br /&gt;
            P6  |   |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
           -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
'''DUDA:'''&lt;br /&gt;
&lt;br /&gt;
Es evidente que cuando llega el P5 se necesitan 7 unidades de memoria, y éstas no están disponibles en el hueco de 27 a 31 (ahí solo hay 4) por lo que da la vuelta, vuelve a comenzar y lo asigna al primero que encuentra, que resulta ser casualmente, el 20-26. --[[Usuario:Ferguatol|fernandoenzo]] 22:14 19 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Mejor ajuste ==&lt;br /&gt;
&lt;br /&gt;
Consiste en asignarle al proceso el hueco con menor ajuste interno, i.e, el hueco el cual al serle asignado el proceso deja menos espacio sin utilizar. Su mayor inconveniente es su orden de complejidad (orden lineal, ''O(n)'') debido a que hay que recorrer todo el mapa de bits o toda la lista de control (una posible solución seria usar una lista de control encadenada que mantenga los huecos ordenados por tamaño creciente).&lt;br /&gt;
Otro problema es la fragmentación externa, debido a que se asigna el menor hueco posible, el espacio sobrante sera del menor tamaño posible lo que da lugar a huecos de tamaño normalmente insuficiente para contener programas.&lt;br /&gt;
&lt;br /&gt;
== Peor ajuste ==&lt;br /&gt;
&lt;br /&gt;
Al contrario que el criterio anterior, se asigna a cada proceso el hueco con mayor ajuste interno, i.e, el hueco el cual al serle asignado el proceso deja más espacio sin utilizar. Tiene el mismo inconveniente en cuanto a orden de complejidad que el mejor ajuste.&lt;br /&gt;
&lt;br /&gt;
== Ajuste rápido ==&lt;br /&gt;
&lt;br /&gt;
Mediante listas de control, se agrupan los huecos disponibles según su tamaño (0 &amp;lt; t &amp;lt; 10, 10 &amp;lt; t &amp;lt; 20, etc.). De esta manera, cuando se necesite un hueco, se seleccionarán los del grupo del tamaño que corresponda. En el caso de que haya varios huecos disponibles, se seleccionará uno en base a cualquiera de los criterios anteriores.&lt;br /&gt;
&lt;br /&gt;
== Método de los compañeros ==&lt;br /&gt;
&lt;br /&gt;
Es una variante del ajuste rápido, en el que los huecos se dividen en potencias de 2: 2&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;, 2&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;, ..., 2&amp;lt;sup&amp;gt;k&amp;lt;/sup&amp;gt;. No es un método usado en la práctica, ya que al realizar redondeos a potencias de 2, se produce un elevado desperdicio interno.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=2267</id>
		<title>SO multiprogramables con particiones variables</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=2267"/>
				<updated>2011-12-27T18:10:44Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Siguiente ajuste */ pequeña ampliación en siguiente ajuste.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En este tipo de sistemas, las particiones para cada proceso se van creando a medida que son asignadas al procesador. Tiene como ventaja principal que evitamos el desperdicio de memoria dentro de cada bloque ya que cada uno está hecho a medida para el proceso que contiene. Por el contrario, una vez que un proceso ha concluido, su partición se queda en desuso y sería necesario aplicar algoritmos de desfragmentación de memoria(supone un alto coste de rendimiento) para poder unificar todas las partes que han quedado libres y así reciclar las particiones que quedaron huérfanas. Otra forma de obtener particiones de mayor tamaño es unificar dos o más huecos adyacentes en uno sólo.&lt;br /&gt;
&lt;br /&gt;
''Ejemplo:''&lt;br /&gt;
  _                                 _&lt;br /&gt;
 |_| P1 = 3KB                      |_| P1 = 3KB   &lt;br /&gt;
 |_| P2 = 1KB                      |_| P2 = 1KB&lt;br /&gt;
 |_| P3 = 6KB    =&amp;gt; Finaliza P3 =&amp;gt; |_| Libre = 6KB&lt;br /&gt;
 | |                               | |&lt;br /&gt;
 |_| P4 = 31KB                     |_| P4 = 31KB&lt;br /&gt;
 | |                               | |&lt;br /&gt;
 |_| Libre = 21KB                  |_| Libre = 21KB&lt;br /&gt;
&lt;br /&gt;
Si un nuevo proceso P5 requiriese 24KB de memoria, no podrían serle asignados, ya que los huecos no son contiguos y para disponer de los 27KB libres en total habría que realizar previamente una desfragmentación.&lt;br /&gt;
&lt;br /&gt;
== Elementos de administración ==&lt;br /&gt;
&lt;br /&gt;
* '''Mapas de bits''': Dividiendo la memoria en bloques (llamados unidades de asignación), se utiliza un bit para representar si dicho bloque está libre o asignado. El tamaño de los bloques tiene una cierta importancia ya que cuanto mayores sean menos bloques cabrán en memoria con lo que serán necesarios menos bits para controlar todos los bloques y el mapa de bits será de menor tamaño.&lt;br /&gt;
&lt;br /&gt;
* '''Listas de control''': Se almacena en una lista el tamaño de los huecos y las posiciones de memoria entre las que se encuentran comprendidos, así como su estado (asignado o libre).&lt;br /&gt;
&lt;br /&gt;
= Criterios de asignación =&lt;br /&gt;
&lt;br /&gt;
== Primer ajuste ==&lt;br /&gt;
&lt;br /&gt;
Consiste en asignar el primer hueco disponible que tenga un espacio suficiente para almacenar el programa. Las dos principales desventajas son su alto desperdicio interno, y el elevado uso de las primeras posiciones de memoria. Este último inconveniente repercute negativamente en la circuitería, debido a que se produce un mayor desgaste en dichas posiciones.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Suponiendo una memoria principal de 32 KB.&lt;br /&gt;
&lt;br /&gt;
     | H0 | t | M |&lt;br /&gt;
 -------------------&lt;br /&gt;
 P1  | 0  | 5 | 6 |&lt;br /&gt;
 P2  | 1  | 3 | 6 |&lt;br /&gt;
 P3  | 2  | 5 | 8 |&lt;br /&gt;
 P4  | 3  | 1 | 7 |&lt;br /&gt;
 P5  | 4  | 2 | 7 |&lt;br /&gt;
 P6  | 5  | 2 | 5 |&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
                         0-5&lt;br /&gt;
             P1  &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |    &lt;br /&gt;
                           6-11&lt;br /&gt;
             P2  |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                                 12-19&lt;br /&gt;
             P3  |   |   &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                             20-26    &lt;br /&gt;
             P4  |   |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |      &lt;br /&gt;
                                   20-26&lt;br /&gt;
             P5  |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
                                        0-4             &lt;br /&gt;
             P6  |   |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
            -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                 0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
== Siguiente ajuste ==&lt;br /&gt;
&lt;br /&gt;
Se continúa a partir de la posición de la última asignación realizada.Es muy probable que haya un hueco a partir de esa posición, reduciendo la longitud de la búsqueda. De esta forma se resuelve el inconveniente de usar en exceso las primeras posiciones de la memoria. Cuando se alcanza el final de la memoria se vuelve a comenzar la búsqueda desde el principio (por ello este criterio es también conocido como primer ajuste circular).&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Suponiendo una memoria principal de 32 KB.&lt;br /&gt;
&lt;br /&gt;
    | H0 | t | M |&lt;br /&gt;
 -------------------&lt;br /&gt;
 P1  | 0  | 5 | 6 |&lt;br /&gt;
 P2  | 1  | 3 | 6 |&lt;br /&gt;
 P3  | 2  | 5 | 8 |&lt;br /&gt;
 P4  | 3  | 1 | 7 |&lt;br /&gt;
 P5  | 4  | 2 | 7 |&lt;br /&gt;
 P6  | 5  | 2 | 5 |&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
&lt;br /&gt;
                        0-5&lt;br /&gt;
            P1  &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |    &lt;br /&gt;
                          6-11&lt;br /&gt;
            P2  |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                                12-19&lt;br /&gt;
            P3  |   |   &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                            20-26    &lt;br /&gt;
            P4  |   |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |      &lt;br /&gt;
                                  20-26&lt;br /&gt;
            P5  |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
                                      27-31             &lt;br /&gt;
            P6  |   |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
           -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
'''DUDA:'''&lt;br /&gt;
&lt;br /&gt;
Es evidente que cuando llega el P5 se necesitan 7 unidades de memoria, y éstas no están disponibles en el hueco de 27 a 31 (ahí solo hay 4) por lo que da la vuelta, vuelve a comenzar y lo asigna al primero que encuentra, que resulta ser casualmente, el 20-26. --[[Usuario:Ferguatol|fernandoenzo]] 22:14 19 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Mejor ajuste ==&lt;br /&gt;
&lt;br /&gt;
Consiste en asignarle al proceso el hueco con menor ajuste interno, i.e, el hueco el cual al serle asignado el proceso deja menos espacio sin utilizar. Su mayor inconveniente es su orden de complejidad (orden lineal, ''O(n)'')&lt;br /&gt;
&lt;br /&gt;
== Peor ajuste ==&lt;br /&gt;
&lt;br /&gt;
Al contrario que el criterio anterior, se asigna a cada proceso el hueco con mayor ajuste interno, i.e, el hueco el cual al serle asignado el proceso deja más espacio sin utilizar. Tiene el mismo inconveniente en cuanto a orden de complejidad que el mejor ajuste.&lt;br /&gt;
&lt;br /&gt;
== Ajuste rápido ==&lt;br /&gt;
&lt;br /&gt;
Mediante listas de control, se agrupan los huecos disponibles según su tamaño (0 &amp;lt; t &amp;lt; 10, 10 &amp;lt; t &amp;lt; 20, etc.). De esta manera, cuando se necesite un hueco, se seleccionarán los del grupo del tamaño que corresponda. En el caso de que haya varios huecos disponibles, se seleccionará uno en base a cualquiera de los criterios anteriores.&lt;br /&gt;
&lt;br /&gt;
== Método de los compañeros ==&lt;br /&gt;
&lt;br /&gt;
Es una variante del ajuste rápido, en el que los huecos se dividen en potencias de 2: 2&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;, 2&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;, ..., 2&amp;lt;sup&amp;gt;k&amp;lt;/sup&amp;gt;. No es un método usado en la práctica, ya que al realizar redondeos a potencias de 2, se produce un elevado desperdicio interno.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=2266</id>
		<title>SO multiprogramables con particiones variables</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=2266"/>
				<updated>2011-12-27T18:08:25Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Elementos de administración */  ampliación de los elementos de administración (SO multiogramables con particiones variables)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En este tipo de sistemas, las particiones para cada proceso se van creando a medida que son asignadas al procesador. Tiene como ventaja principal que evitamos el desperdicio de memoria dentro de cada bloque ya que cada uno está hecho a medida para el proceso que contiene. Por el contrario, una vez que un proceso ha concluido, su partición se queda en desuso y sería necesario aplicar algoritmos de desfragmentación de memoria(supone un alto coste de rendimiento) para poder unificar todas las partes que han quedado libres y así reciclar las particiones que quedaron huérfanas. Otra forma de obtener particiones de mayor tamaño es unificar dos o más huecos adyacentes en uno sólo.&lt;br /&gt;
&lt;br /&gt;
''Ejemplo:''&lt;br /&gt;
  _                                 _&lt;br /&gt;
 |_| P1 = 3KB                      |_| P1 = 3KB   &lt;br /&gt;
 |_| P2 = 1KB                      |_| P2 = 1KB&lt;br /&gt;
 |_| P3 = 6KB    =&amp;gt; Finaliza P3 =&amp;gt; |_| Libre = 6KB&lt;br /&gt;
 | |                               | |&lt;br /&gt;
 |_| P4 = 31KB                     |_| P4 = 31KB&lt;br /&gt;
 | |                               | |&lt;br /&gt;
 |_| Libre = 21KB                  |_| Libre = 21KB&lt;br /&gt;
&lt;br /&gt;
Si un nuevo proceso P5 requiriese 24KB de memoria, no podrían serle asignados, ya que los huecos no son contiguos y para disponer de los 27KB libres en total habría que realizar previamente una desfragmentación.&lt;br /&gt;
&lt;br /&gt;
== Elementos de administración ==&lt;br /&gt;
&lt;br /&gt;
* '''Mapas de bits''': Dividiendo la memoria en bloques (llamados unidades de asignación), se utiliza un bit para representar si dicho bloque está libre o asignado. El tamaño de los bloques tiene una cierta importancia ya que cuanto mayores sean menos bloques cabrán en memoria con lo que serán necesarios menos bits para controlar todos los bloques y el mapa de bits será de menor tamaño.&lt;br /&gt;
&lt;br /&gt;
* '''Listas de control''': Se almacena en una lista el tamaño de los huecos y las posiciones de memoria entre las que se encuentran comprendidos, así como su estado (asignado o libre).&lt;br /&gt;
&lt;br /&gt;
= Criterios de asignación =&lt;br /&gt;
&lt;br /&gt;
== Primer ajuste ==&lt;br /&gt;
&lt;br /&gt;
Consiste en asignar el primer hueco disponible que tenga un espacio suficiente para almacenar el programa. Las dos principales desventajas son su alto desperdicio interno, y el elevado uso de las primeras posiciones de memoria. Este último inconveniente repercute negativamente en la circuitería, debido a que se produce un mayor desgaste en dichas posiciones.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Suponiendo una memoria principal de 32 KB.&lt;br /&gt;
&lt;br /&gt;
     | H0 | t | M |&lt;br /&gt;
 -------------------&lt;br /&gt;
 P1  | 0  | 5 | 6 |&lt;br /&gt;
 P2  | 1  | 3 | 6 |&lt;br /&gt;
 P3  | 2  | 5 | 8 |&lt;br /&gt;
 P4  | 3  | 1 | 7 |&lt;br /&gt;
 P5  | 4  | 2 | 7 |&lt;br /&gt;
 P6  | 5  | 2 | 5 |&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
                         0-5&lt;br /&gt;
             P1  &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |    &lt;br /&gt;
                           6-11&lt;br /&gt;
             P2  |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                                 12-19&lt;br /&gt;
             P3  |   |   &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                             20-26    &lt;br /&gt;
             P4  |   |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |      &lt;br /&gt;
                                   20-26&lt;br /&gt;
             P5  |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
                                        0-4             &lt;br /&gt;
             P6  |   |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
            -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                 0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
== Siguiente ajuste ==&lt;br /&gt;
&lt;br /&gt;
Se continúa a partir de la posición de la última asignación realizada.Es muy probable que haya un hueco a partir de esa posición, reduciendo la longitud de la búsqueda. De esta forma se resuelve el inconveniente de usar en exceso las primeras posiciones de la memoria.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Suponiendo una memoria principal de 32 KB.&lt;br /&gt;
&lt;br /&gt;
    | H0 | t | M |&lt;br /&gt;
 -------------------&lt;br /&gt;
 P1  | 0  | 5 | 6 |&lt;br /&gt;
 P2  | 1  | 3 | 6 |&lt;br /&gt;
 P3  | 2  | 5 | 8 |&lt;br /&gt;
 P4  | 3  | 1 | 7 |&lt;br /&gt;
 P5  | 4  | 2 | 7 |&lt;br /&gt;
 P6  | 5  | 2 | 5 |&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
&lt;br /&gt;
                        0-5&lt;br /&gt;
            P1  &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |    &lt;br /&gt;
                          6-11&lt;br /&gt;
            P2  |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                                12-19&lt;br /&gt;
            P3  |   |   &amp;lt;---|---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                            20-26    &lt;br /&gt;
            P4  |   |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |      &lt;br /&gt;
                                  20-26&lt;br /&gt;
            P5  |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
                                      27-31             &lt;br /&gt;
            P6  |   |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   &lt;br /&gt;
           -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
'''DUDA:'''&lt;br /&gt;
&lt;br /&gt;
Es evidente que cuando llega el P5 se necesitan 7 unidades de memoria, y éstas no están disponibles en el hueco de 27 a 31 (ahí solo hay 4) por lo que da la vuelta, vuelve a comenzar y lo asigna al primero que encuentra, que resulta ser casualmente, el 20-26. --[[Usuario:Ferguatol|fernandoenzo]] 22:14 19 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Mejor ajuste ==&lt;br /&gt;
&lt;br /&gt;
Consiste en asignarle al proceso el hueco con menor ajuste interno, i.e, el hueco el cual al serle asignado el proceso deja menos espacio sin utilizar. Su mayor inconveniente es su orden de complejidad (orden lineal, ''O(n)'')&lt;br /&gt;
&lt;br /&gt;
== Peor ajuste ==&lt;br /&gt;
&lt;br /&gt;
Al contrario que el criterio anterior, se asigna a cada proceso el hueco con mayor ajuste interno, i.e, el hueco el cual al serle asignado el proceso deja más espacio sin utilizar. Tiene el mismo inconveniente en cuanto a orden de complejidad que el mejor ajuste.&lt;br /&gt;
&lt;br /&gt;
== Ajuste rápido ==&lt;br /&gt;
&lt;br /&gt;
Mediante listas de control, se agrupan los huecos disponibles según su tamaño (0 &amp;lt; t &amp;lt; 10, 10 &amp;lt; t &amp;lt; 20, etc.). De esta manera, cuando se necesite un hueco, se seleccionarán los del grupo del tamaño que corresponda. En el caso de que haya varios huecos disponibles, se seleccionará uno en base a cualquiera de los criterios anteriores.&lt;br /&gt;
&lt;br /&gt;
== Método de los compañeros ==&lt;br /&gt;
&lt;br /&gt;
Es una variante del ajuste rápido, en el que los huecos se dividen en potencias de 2: 2&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;, 2&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;, ..., 2&amp;lt;sup&amp;gt;k&amp;lt;/sup&amp;gt;. No es un método usado en la práctica, ya que al realizar redondeos a potencias de 2, se produce un elevado desperdicio interno.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_monoprogramables&amp;diff=2141</id>
		<title>SO monoprogramables</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_monoprogramables&amp;diff=2141"/>
				<updated>2011-12-15T11:24:44Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Admon. de memoria en SO monoprogramables */ Ampliación.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En los sistemas operativos monoprogramables la administración de memoria es muy sencilla ya que solo hay un proceso en ejecución que puede usar todo el espacio disponible, la gestión de memoria se limita casi a comprobar si el proceso cabe en el espacio libre en la memoria. El SO se coloca como bloque al principio o al final de la memoria (memoria del sistema), y el resto para el proceso a ejecutar (memoria del proceso):&lt;br /&gt;
                       _______________________                       _______________________ &lt;br /&gt;
                     /|                       | 0                  0|                       |\&lt;br /&gt;
                    | |  zona de memoria del  |                     | zona del S.O en RAM   | |&lt;br /&gt;
                    | |   sistema operativo   |                     |_______________________| | &lt;br /&gt;
                    | |_______________________|                     |                       |\|                      &lt;br /&gt;
                    |/|                       |                     |  zona de memoria del  | | &lt;br /&gt;
       Sistema \    | |                       |                     |  usuario (ejecución   | |    &amp;lt; IBM PC&lt;br /&gt;
       clásico /    | |  zona de memoria del  |                     |  de procesos)         | |    &lt;br /&gt;
                    | |       usuario         |                     |_______________________| | &lt;br /&gt;
                    | |    (ejecución de      |                     |                       |\|&lt;br /&gt;
                    | |       procesos)       |                     |  zona de Lectura      | |  &lt;br /&gt;
                    | |                       |                     |                       | | &lt;br /&gt;
                     \|_______________________| N                  N|_______________________|/        &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Solapamiento:&lt;br /&gt;
Si el proceso no cabe en el espacio libre en memoria puede recurrirse a 2 estrategias para ejecutarlo:&lt;br /&gt;
**Ejecución en cadena:&lt;br /&gt;
  El programa se divide en varios &amp;quot;subprogramas&amp;quot; y se ejecutan en cadena. Esto se consigue haciendo que cada programa termine su ejecución&lt;br /&gt;
  solicitando que se ejecute el siguiente.&lt;br /&gt;
**Fragmentar el programa en módulos de solapamiento o recubrimiento:&lt;br /&gt;
  Dichos módulos se van cargando en memoria según se necesite, algunos S.O. permiten que los submodulos también se dividan, dando lugar a una&lt;br /&gt;
  estructura en árbol.&lt;br /&gt;
&lt;br /&gt;
         '''______'''&lt;br /&gt;
       ''' |      |'''  &lt;br /&gt;
        '''|      |'''  Datos permanentes: Datos globales,&lt;br /&gt;
        '''|      |'''  programa principal y subprogramas comunes&lt;br /&gt;
        '''|      |&lt;br /&gt;
        '''|      |'''&lt;br /&gt;
       ''' |______|'''_______________________________________________________&lt;br /&gt;
        |      |         __|__          __|__          __|__         __|__            /&lt;br /&gt;
        |      |       ''' |     |        |     |        |     |       |     |'''          |&lt;br /&gt;
        |      |        '''|  A  |        |     |        |  C  |       |  D  |'''          |&lt;br /&gt;
        |      |        '''|_____|        |     |        |     |       |_____|'''         &amp;lt;         Módulos de solapamiento o recubrimiento (A, B, C, D)&lt;br /&gt;
        |      |                       '''|  D  |        |_____|'''                        |&lt;br /&gt;
        |      |                       '''|     |'''                                       |&lt;br /&gt;
        |______|                       '''|_____|'''                                        \&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Protección de memoria:&lt;br /&gt;
&lt;br /&gt;
Los sistemas operativos monoprogramables tienen debilidades en cuanto a protección de memoria. Para evitar que un proceso entre en el área del SO, se puede recurrir al uso de:&lt;br /&gt;
**'''bits de protección''': se le asocia a cada palabra un bit (1 para S.O. y 0 para proceso) para comprobar si la posición de memoria es de SO o del proceso. Este sistema no exige que la región protegida sea contigua, con lo que el sistema operativo puede marcar como suyas algunas posiciones de memoria de subprocesos especiales lo que permite que los mismos accedan de forma controlada a datos y subprogramas del núcleo.&lt;br /&gt;
&lt;br /&gt;
**'''Registros valla o registros límite''': En el limite entre la zona del sistema operativo y la zona para la ejecución de procesos se carga un registro con la primera posición de memoria que ocupa el proceso. Este sistema es mas sencillo y barato que el anterior, pero solo protege una zona (entre la posición de memoria 0 y la posición de memoria del registro) y son necesarios circuitos comparadores rápidos para evitar retrasar la ejecución de las instrucciones. Su funcionamiento es el siguiente: al intentar acceder a una posición de memoria se comprueba si esta dirección es menor que la dirección del registro valla, si es así se lanza un mensaje de error y si no es así se accede a la posición de memoria deseada.&lt;br /&gt;
&lt;br /&gt;
 Ejemplo práctico: &lt;br /&gt;
 Pablo tiene una computadora cuya memoria principal tiene una capacidad de 640KB. El SO (MS-DOS) ocupa el principio de la memoria, dejando libre una &lt;br /&gt;
 zona de 512KB para el proceso conveniente. &lt;br /&gt;
 Esto nos impide jugar al Sensible Soccer, por ejemplo, ya que ocupa 560KB. Una posible solución sería instalar un SO menos pesado, como una version &lt;br /&gt;
 más antigua de MS-DOS.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_reemplazo&amp;diff=2119</id>
		<title>Criterios de reemplazo</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_reemplazo&amp;diff=2119"/>
				<updated>2011-12-13T18:25:17Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Criterios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La evaluación se hace en base a la ''tasa de fallos de página'', que es el número de fallos de página entre el número de accesos totales a página, con lo que su valor oscila en el rango [0,1].&lt;br /&gt;
El fallo de página se produce cuando se accede a una posición de memoria que esta descargada en disco.&lt;br /&gt;
&lt;br /&gt;
                     nº fallos pág.         &lt;br /&gt;
  tasa fallos pág = -----------------&lt;br /&gt;
                     nº accesos pág.&lt;br /&gt;
&lt;br /&gt;
También hay que tener en cuenta el contexto, si estamos en arranque en frío o en caliente, así como el cumplimiento del principio de localidad espacial y temporal. &lt;br /&gt;
&lt;br /&gt;
* Arranque en frío : se dan muchos fallos de página al principio, ya que los procesos se acaban de lanzar y ninguno esta cargado en memoria principal.&lt;br /&gt;
* Arranque en caliente : se suponen ya cargadas las páginas de los procesos en memoria principal.&lt;br /&gt;
&lt;br /&gt;
==Criterios==&lt;br /&gt;
 Ejemplo: Secuencia de acceso a página : 2,2,3,1,1,3,4,5,1,1,2,3,4&lt;br /&gt;
          Suponiendo arranque en frío   &lt;br /&gt;
                                         ___1____ 2_____3_____4___&lt;br /&gt;
                   memoria principal     |     |     |     |     |&lt;br /&gt;
                    de 4 marcos          |_____|_____|_____|_____|&lt;br /&gt;
&lt;br /&gt;
;1. Criterio de página óptima: Este es un criterio teórico que viene a establecer la cota inferior de la ''tasa de fallos de página''. Consiste en escoger la página que mayor tiempo va a tardar en utilizarse. Este es el mejor caso, pero se necesita conocimiento de futuro, de ahí que sea un criterio teórico.&lt;br /&gt;
*[[sol_1|Solución]]&lt;br /&gt;
;2. Criterio de página pésima: Este también es teórico y viene a establecer la cota superior de la ''tasa de fallos de página'', para ver lo peor que podría comportarse un criterio. Consiste en seleccionar la página que menor tiempo tardará en usarse.&lt;br /&gt;
*[[sol_2|Solución]]&lt;br /&gt;
;3. Criterio MRU('''M'''ost '''R'''ecently '''U'''sed): Se selecciona la última página   a la que se ha accedido. Podría implementarse con una LIFO por orden de acceso.&lt;br /&gt;
*[[sol_3|Solución]]&lt;br /&gt;
;4. Criterio de selección estocástica (aleatoria): Consiste en seleccionar una página al azar.&lt;br /&gt;
;5. Criterio por orden de carga FIFO: Se selecciona la página que más tiempo lleva cargada en memoria principal. Se implementa con una FIFO por orden de carga, es decir, a medida que se cargan en memoria principal las páginas son añadidas a la cola. Un problema es que suele suceder que las páginas más usadas tienden a estar mucho tiempo en memoria principal y este criterio va contra eso.&lt;br /&gt;
&lt;br /&gt;
*[[sol_5|Solución]]&lt;br /&gt;
&lt;br /&gt;
;6.Criterio NRU ('''N'''ot '''R'''ecently '''U'''sed): Ofrece dos bits para cada página:&lt;br /&gt;
* bit R : Se pone a 1 si la página ha sido usada (tanto para lectura como para escritura).&lt;br /&gt;
* bit M : Se pone a 1 si la página es modificada (escritura).&lt;br /&gt;
Para seleccionar la página victima buscamos que cumpla uno de los siguientes criterios de bits si no hay ninguno se utiliza el siguiente:&lt;br /&gt;
&lt;br /&gt;
# R=0, M=0 .            &lt;br /&gt;
# R=0, M=1 .&lt;br /&gt;
# R=1, M=0 .&lt;br /&gt;
# R=1, M=1 .&lt;br /&gt;
&lt;br /&gt;
Claramente deben realizarse periodos de puesta a 0, que no tienen porque ser simultáneamente en R y M.&lt;br /&gt;
&lt;br /&gt;
*[[sol_6|Solución]]&lt;br /&gt;
&lt;br /&gt;
;7.Criterio de 2ª oportunidad: Se trata de la unión del dos criterios, FIFO más NRU sin el bit M. Tampoco se pone R a 0 periódicamente. Consiste en recorrer la cola hasta encontrar una página con R a 0 (si no hay ninguno, pues al que le toque de la cola) y los procesos que vaya encontrando con R a 1 se les pone R a 0 y se les da una segunda oportunidad poniéndolos al final de la cola (al final de todo, el nuevo elemento llegado).&lt;br /&gt;
&lt;br /&gt;
*[[sol_7|Solución]]&lt;br /&gt;
&lt;br /&gt;
;Criterio del reloj: Igual que el de 2º oportunidad pero mantenemos un puntero a la ultima pagina examinada; se implementa con una lista circular, y un puntero a la ultima pagina examinada, que sera el 1º elemento que examinaremos para el reemplazo.&lt;br /&gt;
&lt;br /&gt;
*[[sol_reloj|Solución]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;8.Criterio LRU ('''L'''east '''R'''ecently '''U'''sed): Criterio en contraposición al MRU. En MRU elegíamos aquella página que hubiéramos utilizado más recientemente (la primera de la pila de acceso) mientras que en LRU elegimos como página víctima lo contrario: La última página de la pila. Funciona como una FIFO (por orden de acceso) en la cual se actualizan los valores, poniéndose al final si llegan elementos que ya había en cola.&lt;br /&gt;
&lt;br /&gt;
*[[sol_8|Solución]]&lt;br /&gt;
&lt;br /&gt;
;9.Criterio LFU ('''L'''east '''F'''recuently '''U'''sed):Se puede implementar mediante una pila o cola situando la página más frecuentemente usada en la base de la pila o cabeza de la cola.La página víctima será la quede al final de la estructura. Otra variante de implementación es mediante un contador. Se incrementa un contador de uso por cada acceso, reseteándose si se reemplaza la página. La víctima será la que tenga el contador menor.&lt;br /&gt;
&lt;br /&gt;
*[[sol_9|Solución]]&lt;br /&gt;
&lt;br /&gt;
;10.Aproximación discreta LRU: Consiste en LFU + LRU. Se usa el bit R. Se itera periódicamente sobre la lista de páginas si R = 0 entonces aumento el contador; si R está activado se desactiva y el contador se pone a cero. Ante una sustitución: prescindir de la que tiene mayor valor en el contador. Ojito! Cuando llega un elemento, el contador se inicializa a 0, puesto que solo se modifica en los checkpoints, no con cada acceso&lt;br /&gt;
&lt;br /&gt;
*[[sol_9.2|Solución]]&lt;br /&gt;
&lt;br /&gt;
;11.Sustitución por envejecimiento: Se emplea un registro R de n bits que se va desplazando hacia la derecha periódicamente, de forma que la página victima será la que tenga el menor valor en el registro R (en caso de empate se empleao otro criterio). Por cada acceso se pone a 1 el bit más significativo del registro R. Los LSB se pierden al desplazar.&lt;br /&gt;
&lt;br /&gt;
*[[sol_10|Solución]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En el [[Algoritmos de criterios de reemplazo|Portal de la comunidad]] se encuentran implementados algunos de los anteriores criterios como ayuda para ver su funcionamiento.&lt;br /&gt;
Creo que los algoritmos están bien (coinciden con las soluciones), pero si alguien decide probarlos no estaría mal que los revisase por encima. --[[Usuario:Alexrdp|Alexrdp]] 16:24 6 jun 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
Error en Aproximación discreta LRU corregido--[[Usuario:josvaldia|josvaldia]]&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_reemplazo&amp;diff=2118</id>
		<title>Criterios de reemplazo</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_reemplazo&amp;diff=2118"/>
				<updated>2011-12-13T18:24:31Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Criterios */ Colocación del apartado criterio de reloj&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La evaluación se hace en base a la ''tasa de fallos de página'', que es el número de fallos de página entre el número de accesos totales a página, con lo que su valor oscila en el rango [0,1].&lt;br /&gt;
El fallo de página se produce cuando se accede a una posición de memoria que esta descargada en disco.&lt;br /&gt;
&lt;br /&gt;
                     nº fallos pág.         &lt;br /&gt;
  tasa fallos pág = -----------------&lt;br /&gt;
                     nº accesos pág.&lt;br /&gt;
&lt;br /&gt;
También hay que tener en cuenta el contexto, si estamos en arranque en frío o en caliente, así como el cumplimiento del principio de localidad espacial y temporal. &lt;br /&gt;
&lt;br /&gt;
* Arranque en frío : se dan muchos fallos de página al principio, ya que los procesos se acaban de lanzar y ninguno esta cargado en memoria principal.&lt;br /&gt;
* Arranque en caliente : se suponen ya cargadas las páginas de los procesos en memoria principal.&lt;br /&gt;
&lt;br /&gt;
==Criterios==&lt;br /&gt;
 Ejemplo: Secuencia de acceso a página : 2,2,3,1,1,3,4,5,1,1,2,3,4&lt;br /&gt;
          Suponiendo arranque en frío   &lt;br /&gt;
                                         ___1____ 2_____3_____4___&lt;br /&gt;
                   memoria principal     |     |     |     |     |&lt;br /&gt;
                    de 4 marcos          |_____|_____|_____|_____|&lt;br /&gt;
&lt;br /&gt;
;1. Criterio de página óptima: Este es un criterio teórico que viene a establecer la cota inferior de la ''tasa de fallos de página''. Consiste en escoger la página que mayor tiempo va a tardar en utilizarse. Este es el mejor caso, pero se necesita conocimiento de futuro, de ahí que sea un criterio teórico.&lt;br /&gt;
*[[sol_1|Solución]]&lt;br /&gt;
;2. Criterio de página pésima: Este también es teórico y viene a establecer la cota superior de la ''tasa de fallos de página'', para ver lo peor que podría comportarse un criterio. Consiste en seleccionar la página que menor tiempo tardará en usarse.&lt;br /&gt;
*[[sol_2|Solución]]&lt;br /&gt;
;3. Criterio MRU('''M'''ost '''R'''ecently '''U'''sed): Se selecciona la última página   a la que se ha accedido. Podría implementarse con una LIFO por orden de acceso.&lt;br /&gt;
*[[sol_3|Solución]]&lt;br /&gt;
;4. Criterio de selección estocástica (aleatoria): Consiste en seleccionar una página al azar.&lt;br /&gt;
;5. Criterio por orden de carga FIFO: Se selecciona la página que más tiempo lleva cargada en memoria principal. Se implementa con una FIFO por orden de carga, es decir, a medida que se cargan en memoria principal las páginas son añadidas a la cola. Un problema es que suele suceder que las páginas más usadas tienden a estar mucho tiempo en memoria principal y este criterio va contra eso.&lt;br /&gt;
&lt;br /&gt;
*[[sol_5|Solución]]&lt;br /&gt;
&lt;br /&gt;
;6.Criterio NRU ('''N'''ot '''R'''ecently '''U'''sed): Ofrece dos bits para cada página:&lt;br /&gt;
* bit R : Se pone a 1 si la página ha sido usada (tanto para lectura como para escritura).&lt;br /&gt;
* bit M : Se pone a 1 si la página es modificada (escritura).&lt;br /&gt;
Para seleccionar la página victima buscamos que cumpla uno de los siguientes criterios de bits si no hay ninguno se utiliza el siguiente:&lt;br /&gt;
&lt;br /&gt;
# R=0, M=0 .            &lt;br /&gt;
# R=0, M=1 .&lt;br /&gt;
# R=1, M=0 .&lt;br /&gt;
# R=1, M=1 .&lt;br /&gt;
&lt;br /&gt;
Claramente deben realizarse periodos de puesta a 0, que no tienen porque ser simultáneamente en R y M.&lt;br /&gt;
&lt;br /&gt;
*[[sol_6|Solución]]&lt;br /&gt;
&lt;br /&gt;
;7.Criterio de 2ª oportunidad: Se trata de la unión del dos criterios, FIFO más NRU sin el bit M. Tampoco se pone R a 0 periódicamente. Consiste en recorrer la cola hasta encontrar una página con R a 0 (si no hay ninguno, pues al que le toque de la cola) y los procesos que vaya encontrando con R a 1 se les pone R a 0 y se les da una segunda oportunidad poniéndolos al final de la cola (al final de todo, el nuevo elemento llegado).&lt;br /&gt;
&lt;br /&gt;
*[[sol_7|Solución]]&lt;br /&gt;
&lt;br /&gt;
;8.Criterio LRU ('''L'''east '''R'''ecently '''U'''sed): Criterio en contraposición al MRU. En MRU elegíamos aquella página que hubiéramos utilizado más recientemente (la primera de la pila de acceso) mientras que en LRU elegimos como página víctima lo contrario: La última página de la pila. Funciona como una FIFO (por orden de acceso) en la cual se actualizan los valores, poniéndose al final si llegan elementos que ya había en cola.&lt;br /&gt;
&lt;br /&gt;
;Criterio del reloj: Igual que el de 2º oportunidad pero mantenemos un puntero a la ultima pagina examinada; se implementa con una lista circular, y un puntero a la ultima pagina examinada, que sera el 1º elemento que examinaremos para el reemplazo.&lt;br /&gt;
&lt;br /&gt;
*[[sol_reloj|Solución]]&lt;br /&gt;
*[[sol_8|Solución]]&lt;br /&gt;
&lt;br /&gt;
;9.Criterio LFU ('''L'''east '''F'''recuently '''U'''sed):Se puede implementar mediante una pila o cola situando la página más frecuentemente usada en la base de la pila o cabeza de la cola.La página víctima será la quede al final de la estructura. Otra variante de implementación es mediante un contador. Se incrementa un contador de uso por cada acceso, reseteándose si se reemplaza la página. La víctima será la que tenga el contador menor.&lt;br /&gt;
&lt;br /&gt;
*[[sol_9|Solución]]&lt;br /&gt;
&lt;br /&gt;
;10.Aproximación discreta LRU: Consiste en LFU + LRU. Se usa el bit R. Se itera periódicamente sobre la lista de páginas si R = 0 entonces aumento el contador; si R está activado se desactiva y el contador se pone a cero. Ante una sustitución: prescindir de la que tiene mayor valor en el contador. Ojito! Cuando llega un elemento, el contador se inicializa a 0, puesto que solo se modifica en los checkpoints, no con cada acceso&lt;br /&gt;
&lt;br /&gt;
*[[sol_9.2|Solución]]&lt;br /&gt;
&lt;br /&gt;
;11.Sustitución por envejecimiento: Se emplea un registro R de n bits que se va desplazando hacia la derecha periódicamente, de forma que la página victima será la que tenga el menor valor en el registro R (en caso de empate se empleao otro criterio). Por cada acceso se pone a 1 el bit más significativo del registro R. Los LSB se pierden al desplazar.&lt;br /&gt;
&lt;br /&gt;
*[[sol_10|Solución]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En el [[Algoritmos de criterios de reemplazo|Portal de la comunidad]] se encuentran implementados algunos de los anteriores criterios como ayuda para ver su funcionamiento.&lt;br /&gt;
Creo que los algoritmos están bien (coinciden con las soluciones), pero si alguien decide probarlos no estaría mal que los revisase por encima. --[[Usuario:Alexrdp|Alexrdp]] 16:24 6 jun 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
Error en Aproximación discreta LRU corregido--[[Usuario:josvaldia|josvaldia]]&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Condiciones_para_el_interbloqueo_y_estrategias_de_resoluci%C3%B3n&amp;diff=2082</id>
		<title>Condiciones para el interbloqueo y estrategias de resolución</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Condiciones_para_el_interbloqueo_y_estrategias_de_resoluci%C3%B3n&amp;diff=2082"/>
				<updated>2011-12-08T01:59:10Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Prevención */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Condiciones para que se produzca interbloqueo ==&lt;br /&gt;
&lt;br /&gt;
Según [http://en.wikipedia.org/wiki/Edward_G._Coffman,_Jr. Coffman], para que se pueda producir un interbloqueo se tienen que dar la siguientes cuatro condiciones:&lt;br /&gt;
&lt;br /&gt;
* '''Exclusión mutua''': cada recurso está asignado a un único proceso de manera exclusiva.&lt;br /&gt;
* '''Retención y espera''': los procesos que tienen, en un momento dado, recursos asignados con anterioridad, pueden solicitar nuevos recursos y esperar a que se le asignen sin liberar antes alguno de los recursos que ya tenia asignados.&lt;br /&gt;
&lt;br /&gt;
* '''No apropiación''': los recursos otorgados con anterioridad no pueden ser forzados a dejar un  proceso. El proceso que los posee debe liberarlos en forma explícita. Ni si quiera el sistema operativo puede expropiarselo.&lt;br /&gt;
&lt;br /&gt;
* '''Espera circular''': debe existir una cadena circular de dos o más procesos, cada uno de los cuales espera un recurso poseído por el siguiente miembro de la cadena. Esta condición es una consecuencia potencial de las tres primeras, es decir, dado que se producen las tres primeras condiciones, puede ocurrir una secuencia de eventos que desemboque en un círculo vicioso de espera irresoluble. &lt;br /&gt;
&lt;br /&gt;
Las tres primeras condiciones son necesarias, pero no suficientes para que exista interbloqueo. Sólo las cuatro condiciones en conjunto constituyen una condición necesaria y suficiente para el interbloqueo.&lt;br /&gt;
&lt;br /&gt;
== Estrategias ==&lt;br /&gt;
&lt;br /&gt;
Existen diversas estrategias frente a los interbloqueos, que se pueden agrupar en:&lt;br /&gt;
&lt;br /&gt;
* Omisión&lt;br /&gt;
* Detección y recuperación&lt;br /&gt;
* Prevención&lt;br /&gt;
* Predicción&lt;br /&gt;
&lt;br /&gt;
Que se detallan a continuación.&lt;br /&gt;
&lt;br /&gt;
=== Omisión ===&lt;br /&gt;
&lt;br /&gt;
Considera que la probabilidad de un interbloqueo es muy baja, de modo que se confía en que no se van a producir. Por sorprendente que parezca, los sistemas operativos modernos convencionales suelen aplicar esta estrategia. Por justificar la decisión de los fabricantes de sistemas operativos cabe incidir en que las estrategias de resolución y prevención de interbloqueos tienen un coste alto desde el punto de vista del consumo de recursos de procesamiento y memoria.&lt;br /&gt;
&lt;br /&gt;
=== Detección y Recuperación ===&lt;br /&gt;
&lt;br /&gt;
Esta estrategia permite la detección de una situación de interbloqueo y su consiguiente resolución. De entre las medidas de detección consideramos las siguientes:&lt;br /&gt;
&lt;br /&gt;
* ''Grafo de relación recursos-procesos'': Consiste en la representación gráfica de los recursos asignados a los procesos y los recursos que dichos procesos requieren para finalizar su ejecución.&lt;br /&gt;
&lt;br /&gt;
* ''Matrices de relación recursos-procesos'': Consiste en la representación matricial de los recursos asignados a los procesos y los recursos que dichos procesos requieren para finalizar su ejecución.&lt;br /&gt;
&lt;br /&gt;
Tras la detección de un interbloqueo, se pueden aplicar algunas de las siguientes estrategias para resolverlo:&lt;br /&gt;
&lt;br /&gt;
* ''Eliminación'': El sistema operativo selecciona a uno de los procesos que forma parte del interbloqueo y elimina el ciclo acabando con la ejecución de dicho proceso, si no es suficiente se eliminarán procesos hasta que se rompa el ciclo. La selección del proceso se realiza en base a un cierto criterio, por ejemplo, aquel proceso que lleve menos tiempo en ejecución o aquel que sea más voraz consumiendo recursos. Aunque parezca una medida drástica, es la empleada en sistemas operativos convencionales. Aplicar el criterio de selección y eliminar procesos cuando el número de procesos es relativamente bajo puede solucionar el interbloqueo, pero si se da un bloqueo de por ejemplo, centenares de procesos, es una situación prácticamente inmanejable.&lt;br /&gt;
&lt;br /&gt;
* ''Apropiación temporal'': Se retira la asignación de un recurso a un proceso (durante el tiempo necesario) para deshacer el interbloqueo.Por ejemplo, supongamos que el recurso es una impresora: podríamos retirarle la asignación a un proceso P1 cuando este terminase de imprimir una página, asignarle la impresora a otro proceso P2 y volver a asignársela a P1 cuando P2 haya terminado su ejecución.  &lt;br /&gt;
&lt;br /&gt;
* ''Puntos de conformidad'' o ''checkpoints'': Consiste en tomar una imagen del estado del proceso, ya sea periódicamente o a instancia del propio proceso, de manera que si se produce un interbloqueo se vuelve a un estado de la ejecución anterior. Son muy poco usados ya que tienen un elevado coste en memoria y existe la posibilidad de que un proceso permanezca indefinidamente sin progresar.&lt;br /&gt;
&lt;br /&gt;
=== Prevención ===&lt;br /&gt;
&lt;br /&gt;
La prevención apunta a una serie de estrategias que eviten el interbloqueo. Concretamente, son cuatro las estrategias de prevención posibles en base a los  principios que [http://en.wikipedia.org/wiki/Edward_G._Coffman,_Jr. Coffman] estableció como interbloqueo. Dichas estrategias son:&lt;br /&gt;
&lt;br /&gt;
* ''Supresión de exclusión mutua'': un proceso no puede tener acceso exclusivo a un recurso.&lt;br /&gt;
* ''Supresión de retención y espera'' (1ª estrategia de Havender): El proceso debe tener asignado todos los recursos necesarios al inicio y no liberarlos hasta que éste finalice. Esto presenta un inconveniente: si un recurso sólo se utiliza al final, estará ocupado durante toda la ejecución, no permitiendo ser usado por otros procesos. El aprovechamiento de recursos puede mejorarse mediante una programación más elaborada, dividiendo la ejecución del proceso en distintas fases y gestionando los recursos para cada una de ellas.&lt;br /&gt;
* ''Supresión de no apropiación'' (2ª estrategia de Havender): Si un proceso está en ejecución y no puede obtener un recurso, dicho proceso libera todos los recursos que está usando y espera a que todos los que necesita estén disponibles. Problemas: se puede perder trabajo, además de presentar una carga extra la realización de peticiones &lt;br /&gt;
* ''Supresión de espera circular'' (3ª estrategia de Havender): Si todos los recursos comunes a varios procesos se solicitan siempre en el mismo orden no se producen interbloqueos.&lt;br /&gt;
&lt;br /&gt;
=== Predicción ===&lt;br /&gt;
&lt;br /&gt;
El sistema operativo observa la evolución que siguen los procesos, y predice una posible situación de interbloqueo. Si detecta una alta probabilidad de que suceda, adopta una trayectoria de ejecución nueva para los procesos involucrados de manera que se garantice que no va a suceder un interbloqueo.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Condiciones_para_el_interbloqueo_y_estrategias_de_resoluci%C3%B3n&amp;diff=2081</id>
		<title>Condiciones para el interbloqueo y estrategias de resolución</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Condiciones_para_el_interbloqueo_y_estrategias_de_resoluci%C3%B3n&amp;diff=2081"/>
				<updated>2011-12-08T01:35:31Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Detección y Recuperación */ corrección de erratas.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Condiciones para que se produzca interbloqueo ==&lt;br /&gt;
&lt;br /&gt;
Según [http://en.wikipedia.org/wiki/Edward_G._Coffman,_Jr. Coffman], para que se pueda producir un interbloqueo se tienen que dar la siguientes cuatro condiciones:&lt;br /&gt;
&lt;br /&gt;
* '''Exclusión mutua''': cada recurso está asignado a un único proceso de manera exclusiva.&lt;br /&gt;
* '''Retención y espera''': los procesos que tienen, en un momento dado, recursos asignados con anterioridad, pueden solicitar nuevos recursos y esperar a que se le asignen sin liberar antes alguno de los recursos que ya tenia asignados.&lt;br /&gt;
&lt;br /&gt;
* '''No apropiación''': los recursos otorgados con anterioridad no pueden ser forzados a dejar un  proceso. El proceso que los posee debe liberarlos en forma explícita. Ni si quiera el sistema operativo puede expropiarselo.&lt;br /&gt;
&lt;br /&gt;
* '''Espera circular''': debe existir una cadena circular de dos o más procesos, cada uno de los cuales espera un recurso poseído por el siguiente miembro de la cadena. Esta condición es una consecuencia potencial de las tres primeras, es decir, dado que se producen las tres primeras condiciones, puede ocurrir una secuencia de eventos que desemboque en un círculo vicioso de espera irresoluble. &lt;br /&gt;
&lt;br /&gt;
Las tres primeras condiciones son necesarias, pero no suficientes para que exista interbloqueo. Sólo las cuatro condiciones en conjunto constituyen una condición necesaria y suficiente para el interbloqueo.&lt;br /&gt;
&lt;br /&gt;
== Estrategias ==&lt;br /&gt;
&lt;br /&gt;
Existen diversas estrategias frente a los interbloqueos, que se pueden agrupar en:&lt;br /&gt;
&lt;br /&gt;
* Omisión&lt;br /&gt;
* Detección y recuperación&lt;br /&gt;
* Prevención&lt;br /&gt;
* Predicción&lt;br /&gt;
&lt;br /&gt;
Que se detallan a continuación.&lt;br /&gt;
&lt;br /&gt;
=== Omisión ===&lt;br /&gt;
&lt;br /&gt;
Considera que la probabilidad de un interbloqueo es muy baja, de modo que se confía en que no se van a producir. Por sorprendente que parezca, los sistemas operativos modernos convencionales suelen aplicar esta estrategia. Por justificar la decisión de los fabricantes de sistemas operativos cabe incidir en que las estrategias de resolución y prevención de interbloqueos tienen un coste alto desde el punto de vista del consumo de recursos de procesamiento y memoria.&lt;br /&gt;
&lt;br /&gt;
=== Detección y Recuperación ===&lt;br /&gt;
&lt;br /&gt;
Esta estrategia permite la detección de una situación de interbloqueo y su consiguiente resolución. De entre las medidas de detección consideramos las siguientes:&lt;br /&gt;
&lt;br /&gt;
* ''Grafo de relación recursos-procesos'': Consiste en la representación gráfica de los recursos asignados a los procesos y los recursos que dichos procesos requieren para finalizar su ejecución.&lt;br /&gt;
&lt;br /&gt;
* ''Matrices de relación recursos-procesos'': Consiste en la representación matricial de los recursos asignados a los procesos y los recursos que dichos procesos requieren para finalizar su ejecución.&lt;br /&gt;
&lt;br /&gt;
Tras la detección de un interbloqueo, se pueden aplicar algunas de las siguientes estrategias para resolverlo:&lt;br /&gt;
&lt;br /&gt;
* ''Eliminación'': El sistema operativo selecciona a uno de los procesos que forma parte del interbloqueo y elimina el ciclo acabando con la ejecución de dicho proceso, si no es suficiente se eliminarán procesos hasta que se rompa el ciclo. La selección del proceso se realiza en base a un cierto criterio, por ejemplo, aquel proceso que lleve menos tiempo en ejecución o aquel que sea más voraz consumiendo recursos. Aunque parezca una medida drástica, es la empleada en sistemas operativos convencionales. Aplicar el criterio de selección y eliminar procesos cuando el número de procesos es relativamente bajo puede solucionar el interbloqueo, pero si se da un bloqueo de por ejemplo, centenares de procesos, es una situación prácticamente inmanejable.&lt;br /&gt;
&lt;br /&gt;
* ''Apropiación temporal'': Se retira la asignación de un recurso a un proceso (durante el tiempo necesario) para deshacer el interbloqueo.Por ejemplo, supongamos que el recurso es una impresora: podríamos retirarle la asignación a un proceso P1 cuando este terminase de imprimir una página, asignarle la impresora a otro proceso P2 y volver a asignársela a P1 cuando P2 haya terminado su ejecución.  &lt;br /&gt;
&lt;br /&gt;
* ''Puntos de conformidad'' o ''checkpoints'': Consiste en tomar una imagen del estado del proceso, ya sea periódicamente o a instancia del propio proceso, de manera que si se produce un interbloqueo se vuelve a un estado de la ejecución anterior. Son muy poco usados ya que tienen un elevado coste en memoria y existe la posibilidad de que un proceso permanezca indefinidamente sin progresar.&lt;br /&gt;
&lt;br /&gt;
=== Prevención ===&lt;br /&gt;
&lt;br /&gt;
La prevención apunta a una serie de estrategias que eviten el interbloqueo. Concretamente, son cuatro las estrategias de prevención posibles en base a los  principios que [http://en.wikipedia.org/wiki/Edward_G._Coffman,_Jr. Coffman] estableció como interbloqueo. Dichas estrategias son:&lt;br /&gt;
&lt;br /&gt;
* ''Supresión de exclusión mutua'': un proceso no puede tener acceso exclusivo a un recurso.&lt;br /&gt;
* ''Supresión de retención y espera'' (1ª estrategia de Havender): El proceso debe tener asignado todos los recursos necesarios al inicio y no liberarlos hasta que éste finalice. Esto presenta un inconveniente: si un recurso sólo se utiliza al final, estará ocupado durante toda la ejecución, no permitiendo ser usado por otros procesos.&lt;br /&gt;
* ''Supresión de no apropiación'' (2ª estrategia de Havender): Si un proceso está en ejecución y no puede obtener un recurso, dicho proceso libera todos los recursos que está usando y espera a que todos los que necesita estén disponibles. Problemas: se puede perder trabajo, además de presentar una carga extra la realización de peticiones &lt;br /&gt;
* ''Supresión de espera circular'' (3ª estrategia de Havender): Si todos los recursos comunes a varios procesos se solicitan siempre en el mismo orden no se producen interbloqueos.&lt;br /&gt;
&lt;br /&gt;
=== Predicción ===&lt;br /&gt;
&lt;br /&gt;
El sistema operativo observa la evolución que siguen los procesos, y predice una posible situación de interbloqueo. Si detecta una alta probabilidad de que suceda, adopta una trayectoria de ejecución nueva para los procesos involucrados de manera que se garantice que no va a suceder un interbloqueo.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Condiciones_para_el_interbloqueo_y_estrategias_de_resoluci%C3%B3n&amp;diff=2080</id>
		<title>Condiciones para el interbloqueo y estrategias de resolución</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Condiciones_para_el_interbloqueo_y_estrategias_de_resoluci%C3%B3n&amp;diff=2080"/>
				<updated>2011-12-08T01:30:50Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Detección y Recuperación */  Ampliación del concepto de estrategia eliminación&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Condiciones para que se produzca interbloqueo ==&lt;br /&gt;
&lt;br /&gt;
Según [http://en.wikipedia.org/wiki/Edward_G._Coffman,_Jr. Coffman], para que se pueda producir un interbloqueo se tienen que dar la siguientes cuatro condiciones:&lt;br /&gt;
&lt;br /&gt;
* '''Exclusión mutua''': cada recurso está asignado a un único proceso de manera exclusiva.&lt;br /&gt;
* '''Retención y espera''': los procesos que tienen, en un momento dado, recursos asignados con anterioridad, pueden solicitar nuevos recursos y esperar a que se le asignen sin liberar antes alguno de los recursos que ya tenia asignados.&lt;br /&gt;
&lt;br /&gt;
* '''No apropiación''': los recursos otorgados con anterioridad no pueden ser forzados a dejar un  proceso. El proceso que los posee debe liberarlos en forma explícita. Ni si quiera el sistema operativo puede expropiarselo.&lt;br /&gt;
&lt;br /&gt;
* '''Espera circular''': debe existir una cadena circular de dos o más procesos, cada uno de los cuales espera un recurso poseído por el siguiente miembro de la cadena. Esta condición es una consecuencia potencial de las tres primeras, es decir, dado que se producen las tres primeras condiciones, puede ocurrir una secuencia de eventos que desemboque en un círculo vicioso de espera irresoluble. &lt;br /&gt;
&lt;br /&gt;
Las tres primeras condiciones son necesarias, pero no suficientes para que exista interbloqueo. Sólo las cuatro condiciones en conjunto constituyen una condición necesaria y suficiente para el interbloqueo.&lt;br /&gt;
&lt;br /&gt;
== Estrategias ==&lt;br /&gt;
&lt;br /&gt;
Existen diversas estrategias frente a los interbloqueos, que se pueden agrupar en:&lt;br /&gt;
&lt;br /&gt;
* Omisión&lt;br /&gt;
* Detección y recuperación&lt;br /&gt;
* Prevención&lt;br /&gt;
* Predicción&lt;br /&gt;
&lt;br /&gt;
Que se detallan a continuación.&lt;br /&gt;
&lt;br /&gt;
=== Omisión ===&lt;br /&gt;
&lt;br /&gt;
Considera que la probabilidad de un interbloqueo es muy baja, de modo que se confía en que no se van a producir. Por sorprendente que parezca, los sistemas operativos modernos convencionales suelen aplicar esta estrategia. Por justificar la decisión de los fabricantes de sistemas operativos cabe incidir en que las estrategias de resolución y prevención de interbloqueos tienen un coste alto desde el punto de vista del consumo de recursos de procesamiento y memoria.&lt;br /&gt;
&lt;br /&gt;
=== Detección y Recuperación ===&lt;br /&gt;
&lt;br /&gt;
Esta estrategia permite la detección de una situación de interbloqueo y su consiguiente resolución. De entre las medidas de detección consideramos las siguientes:&lt;br /&gt;
&lt;br /&gt;
* ''Grafo de relación recursos-procesos'': Consiste en la representación gráfica de los recursos asignados a los procesos y los recursos que dichos procesos requieren para finalizar su ejecución.&lt;br /&gt;
&lt;br /&gt;
* ''Matrices de relación recursos-procesos'': Consiste en la representación matricial de los recursos asignados a los procesos y los recursos que dichos procesos requieren para finalizar su ejecución.&lt;br /&gt;
&lt;br /&gt;
Tras la detección de un interbloqueo, se pueden aplicar algunas de las siguientes estrategias para resolverlo:&lt;br /&gt;
&lt;br /&gt;
* ''Eliminación'': El sistema operativo selecciona a uno de los procesos que forma parte del interbloqueo y elimina el ciclo acabando con la ejecución de dicho proceso, si no es suficiente se eliminarán procesos hasta que se rompa el ciclo. La selección del proceso se realiza en base a un cierto criterio, por ejemplo, aquel proceso que lleve menos tiempo en ejecución o aquel que sea más voraz consumiendo recursos. Aunque parezca una medida drástica, es la empleada en sistemas operativos convencionales. Aplicar el criterio de selección y eliminar procesos cuando el número de procesos es relativamente bajo puede solucionarse, pero si se da un bloqueo de por ejemplo, centenares de procesos, es una situación prácticamente inmanejable.&lt;br /&gt;
&lt;br /&gt;
* ''Apropiación temporal'': Se retira la asignación de un recurso a un proceso (durante el tiempo necesario) para deshacer el interbloqueo.Por ejemplo, supongamos que el recurso es una impresora: podríamos retirarle la asignación a un proceso P1 cuando este terminase de imprimir una página, asignarle la impresora a otro proceso P2 y volver a asignársela a P1 cuando P2 haya terminado su ejecución.  &lt;br /&gt;
&lt;br /&gt;
* ''Puntos de conformidad'' o ''checkpoints'': Consiste en tomar una imagen del estado del proceso, ya sea periódicamente o a instancia del propio proceso, de manera que si se produce un interbloqueo se vuelve a un estado de la ejecución anterior. Son muy poco usados ya que tienen un elevado coste en memoria y existe la posibilidad de que un proceso permanezca indefinidamente sin progresar.&lt;br /&gt;
&lt;br /&gt;
=== Prevención ===&lt;br /&gt;
&lt;br /&gt;
La prevención apunta a una serie de estrategias que eviten el interbloqueo. Concretamente, son cuatro las estrategias de prevención posibles en base a los  principios que [http://en.wikipedia.org/wiki/Edward_G._Coffman,_Jr. Coffman] estableció como interbloqueo. Dichas estrategias son:&lt;br /&gt;
&lt;br /&gt;
* ''Supresión de exclusión mutua'': un proceso no puede tener acceso exclusivo a un recurso.&lt;br /&gt;
* ''Supresión de retención y espera'' (1ª estrategia de Havender): El proceso debe tener asignado todos los recursos necesarios al inicio y no liberarlos hasta que éste finalice. Esto presenta un inconveniente: si un recurso sólo se utiliza al final, estará ocupado durante toda la ejecución, no permitiendo ser usado por otros procesos.&lt;br /&gt;
* ''Supresión de no apropiación'' (2ª estrategia de Havender): Si un proceso está en ejecución y no puede obtener un recurso, dicho proceso libera todos los recursos que está usando y espera a que todos los que necesita estén disponibles. Problemas: se puede perder trabajo, además de presentar una carga extra la realización de peticiones &lt;br /&gt;
* ''Supresión de espera circular'' (3ª estrategia de Havender): Si todos los recursos comunes a varios procesos se solicitan siempre en el mismo orden no se producen interbloqueos.&lt;br /&gt;
&lt;br /&gt;
=== Predicción ===&lt;br /&gt;
&lt;br /&gt;
El sistema operativo observa la evolución que siguen los procesos, y predice una posible situación de interbloqueo. Si detecta una alta probabilidad de que suceda, adopta una trayectoria de ejecución nueva para los procesos involucrados de manera que se garantice que no va a suceder un interbloqueo.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Condiciones_para_el_interbloqueo_y_estrategias_de_resoluci%C3%B3n&amp;diff=2079</id>
		<title>Condiciones para el interbloqueo y estrategias de resolución</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Condiciones_para_el_interbloqueo_y_estrategias_de_resoluci%C3%B3n&amp;diff=2079"/>
				<updated>2011-12-08T01:24:21Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Detección y Recuperación */ ejemplo de estrategia de apropiación temporal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Condiciones para que se produzca interbloqueo ==&lt;br /&gt;
&lt;br /&gt;
Según [http://en.wikipedia.org/wiki/Edward_G._Coffman,_Jr. Coffman], para que se pueda producir un interbloqueo se tienen que dar la siguientes cuatro condiciones:&lt;br /&gt;
&lt;br /&gt;
* '''Exclusión mutua''': cada recurso está asignado a un único proceso de manera exclusiva.&lt;br /&gt;
* '''Retención y espera''': los procesos que tienen, en un momento dado, recursos asignados con anterioridad, pueden solicitar nuevos recursos y esperar a que se le asignen sin liberar antes alguno de los recursos que ya tenia asignados.&lt;br /&gt;
&lt;br /&gt;
* '''No apropiación''': los recursos otorgados con anterioridad no pueden ser forzados a dejar un  proceso. El proceso que los posee debe liberarlos en forma explícita. Ni si quiera el sistema operativo puede expropiarselo.&lt;br /&gt;
&lt;br /&gt;
* '''Espera circular''': debe existir una cadena circular de dos o más procesos, cada uno de los cuales espera un recurso poseído por el siguiente miembro de la cadena. Esta condición es una consecuencia potencial de las tres primeras, es decir, dado que se producen las tres primeras condiciones, puede ocurrir una secuencia de eventos que desemboque en un círculo vicioso de espera irresoluble. &lt;br /&gt;
&lt;br /&gt;
Las tres primeras condiciones son necesarias, pero no suficientes para que exista interbloqueo. Sólo las cuatro condiciones en conjunto constituyen una condición necesaria y suficiente para el interbloqueo.&lt;br /&gt;
&lt;br /&gt;
== Estrategias ==&lt;br /&gt;
&lt;br /&gt;
Existen diversas estrategias frente a los interbloqueos, que se pueden agrupar en:&lt;br /&gt;
&lt;br /&gt;
* Omisión&lt;br /&gt;
* Detección y recuperación&lt;br /&gt;
* Prevención&lt;br /&gt;
* Predicción&lt;br /&gt;
&lt;br /&gt;
Que se detallan a continuación.&lt;br /&gt;
&lt;br /&gt;
=== Omisión ===&lt;br /&gt;
&lt;br /&gt;
Considera que la probabilidad de un interbloqueo es muy baja, de modo que se confía en que no se van a producir. Por sorprendente que parezca, los sistemas operativos modernos convencionales suelen aplicar esta estrategia. Por justificar la decisión de los fabricantes de sistemas operativos cabe incidir en que las estrategias de resolución y prevención de interbloqueos tienen un coste alto desde el punto de vista del consumo de recursos de procesamiento y memoria.&lt;br /&gt;
&lt;br /&gt;
=== Detección y Recuperación ===&lt;br /&gt;
&lt;br /&gt;
Esta estrategia permite la detección de una situación de interbloqueo y su consiguiente resolución. De entre las medidas de detección consideramos las siguientes:&lt;br /&gt;
&lt;br /&gt;
* ''Grafo de relación recursos-procesos'': Consiste en la representación gráfica de los recursos asignados a los procesos y los recursos que dichos procesos requieren para finalizar su ejecución.&lt;br /&gt;
&lt;br /&gt;
* ''Matrices de relación recursos-procesos'': Consiste en la representación matricial de los recursos asignados a los procesos y los recursos que dichos procesos requieren para finalizar su ejecución.&lt;br /&gt;
&lt;br /&gt;
Tras la detección de un interbloqueo, se pueden aplicar algunas de las siguientes estrategias para resolverlo:&lt;br /&gt;
&lt;br /&gt;
* ''Eliminación'': El sistema operativo selecciona a uno de los procesos que forma parte del interbloqueo y elimina el ciclo acabando con la ejecución de dicho proceso. La selección del proceso se realiza en base a un cierto criterio, por ejemplo, aquel proceso que lleve menos tiempo en ejecución o aquel que sea más voraz consumiendo recursos. Aunque parezca una medida drástica, es la empleada en sistemas operativos convencionales.&lt;br /&gt;
&lt;br /&gt;
* ''Apropiación temporal'': Se retira la asignación de un recurso a un proceso (durante el tiempo necesario) para deshacer el interbloqueo.Por ejemplo, supongamos que el recurso es una impresora: podríamos retirarle la asignación a un proceso P1 cuando este terminase de imprimir una página, asignarle la impresora a otro proceso P2 y volver a asignársela a P1 cuando P2 haya terminado su ejecución.  &lt;br /&gt;
&lt;br /&gt;
* ''Puntos de conformidad'' o ''checkpoints'': Consiste en tomar una imagen del estado del proceso, ya sea periódicamente o a instancia del propio proceso, de manera que si se produce un interbloqueo se vuelve a un estado de la ejecución anterior. Son muy poco usados ya que tienen un elevado coste en memoria y existe la posibilidad de que un proceso permanezca indefinidamente sin progresar.&lt;br /&gt;
&lt;br /&gt;
=== Prevención ===&lt;br /&gt;
&lt;br /&gt;
La prevención apunta a una serie de estrategias que eviten el interbloqueo. Concretamente, son cuatro las estrategias de prevención posibles en base a los  principios que [http://en.wikipedia.org/wiki/Edward_G._Coffman,_Jr. Coffman] estableció como interbloqueo. Dichas estrategias son:&lt;br /&gt;
&lt;br /&gt;
* ''Supresión de exclusión mutua'': un proceso no puede tener acceso exclusivo a un recurso.&lt;br /&gt;
* ''Supresión de retención y espera'' (1ª estrategia de Havender): El proceso debe tener asignado todos los recursos necesarios al inicio y no liberarlos hasta que éste finalice. Esto presenta un inconveniente: si un recurso sólo se utiliza al final, estará ocupado durante toda la ejecución, no permitiendo ser usado por otros procesos.&lt;br /&gt;
* ''Supresión de no apropiación'' (2ª estrategia de Havender): Si un proceso está en ejecución y no puede obtener un recurso, dicho proceso libera todos los recursos que está usando y espera a que todos los que necesita estén disponibles. Problemas: se puede perder trabajo, además de presentar una carga extra la realización de peticiones &lt;br /&gt;
* ''Supresión de espera circular'' (3ª estrategia de Havender): Si todos los recursos comunes a varios procesos se solicitan siempre en el mismo orden no se producen interbloqueos.&lt;br /&gt;
&lt;br /&gt;
=== Predicción ===&lt;br /&gt;
&lt;br /&gt;
El sistema operativo observa la evolución que siguen los procesos, y predice una posible situación de interbloqueo. Si detecta una alta probabilidad de que suceda, adopta una trayectoria de ejecución nueva para los procesos involucrados de manera que se garantice que no va a suceder un interbloqueo.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Condiciones_para_el_interbloqueo_y_estrategias_de_resoluci%C3%B3n&amp;diff=2078</id>
		<title>Condiciones para el interbloqueo y estrategias de resolución</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Condiciones_para_el_interbloqueo_y_estrategias_de_resoluci%C3%B3n&amp;diff=2078"/>
				<updated>2011-12-07T23:47:12Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Condiciones para que se produzca interbloqueo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Condiciones para que se produzca interbloqueo ==&lt;br /&gt;
&lt;br /&gt;
Según [http://en.wikipedia.org/wiki/Edward_G._Coffman,_Jr. Coffman], para que se pueda producir un interbloqueo se tienen que dar la siguientes cuatro condiciones:&lt;br /&gt;
&lt;br /&gt;
* '''Exclusión mutua''': cada recurso está asignado a un único proceso de manera exclusiva.&lt;br /&gt;
* '''Retención y espera''': los procesos que tienen, en un momento dado, recursos asignados con anterioridad, pueden solicitar nuevos recursos y esperar a que se le asignen sin liberar antes alguno de los recursos que ya tenia asignados.&lt;br /&gt;
&lt;br /&gt;
* '''No apropiación''': los recursos otorgados con anterioridad no pueden ser forzados a dejar un  proceso. El proceso que los posee debe liberarlos en forma explícita. Ni si quiera el sistema operativo puede expropiarselo.&lt;br /&gt;
&lt;br /&gt;
* '''Espera circular''': debe existir una cadena circular de dos o más procesos, cada uno de los cuales espera un recurso poseído por el siguiente miembro de la cadena. Esta condición es una consecuencia potencial de las tres primeras, es decir, dado que se producen las tres primeras condiciones, puede ocurrir una secuencia de eventos que desemboque en un círculo vicioso de espera irresoluble. &lt;br /&gt;
&lt;br /&gt;
Las tres primeras condiciones son necesarias, pero no suficientes para que exista interbloqueo. Sólo las cuatro condiciones en conjunto constituyen una condición necesaria y suficiente para el interbloqueo.&lt;br /&gt;
&lt;br /&gt;
== Estrategias ==&lt;br /&gt;
&lt;br /&gt;
Existen diversas estrategias frente a los interbloqueos, que se pueden agrupar en:&lt;br /&gt;
&lt;br /&gt;
* Omisión&lt;br /&gt;
* Detección y recuperación&lt;br /&gt;
* Prevención&lt;br /&gt;
* Predicción&lt;br /&gt;
&lt;br /&gt;
Que se detallan a continuación.&lt;br /&gt;
&lt;br /&gt;
=== Omisión ===&lt;br /&gt;
&lt;br /&gt;
Considera que la probabilidad de un interbloqueo es muy baja, de modo que se confía en que no se van a producir. Por sorprendente que parezca, los sistemas operativos modernos convencionales suelen aplicar esta estrategia. Por justificar la decisión de los fabricantes de sistemas operativos cabe incidir en que las estrategias de resolución y prevención de interbloqueos tienen un coste alto desde el punto de vista del consumo de recursos de procesamiento y memoria.&lt;br /&gt;
&lt;br /&gt;
=== Detección y Recuperación ===&lt;br /&gt;
&lt;br /&gt;
Esta estrategia permite la detección de una situación de interbloqueo y su consiguiente resolución. De entre las medidas de detección consideramos las siguientes:&lt;br /&gt;
&lt;br /&gt;
* ''Grafo de relación recursos-procesos'': Consiste en la representación gráfica de los recursos asignados a los procesos y los recursos que dichos procesos requieren para finalizar su ejecución.&lt;br /&gt;
&lt;br /&gt;
* ''Matrices de relación recursos-procesos'': Consiste en la representación matricial de los recursos asignados a los procesos y los recursos que dichos procesos requieren para finalizar su ejecución.&lt;br /&gt;
&lt;br /&gt;
Tras la detección de un interbloqueo, se pueden aplicar algunas de las siguientes estrategias para resolverlo:&lt;br /&gt;
&lt;br /&gt;
* ''Eliminación'': El sistema operativo selecciona a uno de los procesos que forma parte del interbloqueo y elimina el ciclo acabando con la ejecución de dicho proceso. La selección del proceso se realiza en base a un cierto criterio, por ejemplo, aquel proceso que lleve menos tiempo en ejecución o aquel que sea más voraz consumiendo recursos. Aunque parezca una medida drástica, es la empleada en sistemas operativos convencionales.&lt;br /&gt;
&lt;br /&gt;
* ''Apropiación temporal'': Se retira la asignación de un recurso a un proceso para deshacer el interbloqueo.&lt;br /&gt;
&lt;br /&gt;
* ''Puntos de conformidad'' o ''checkpoints'': Consiste en tomar una imagen del estado del proceso, ya sea periódicamente o a instancia del propio proceso, de manera que si se produce un interbloqueo se vuelve a un estado de la ejecución anterior. Son muy poco usados ya que tienen un elevado coste en memoria y existe la posibilidad de que un proceso permanezca indefinidamente sin progresar.&lt;br /&gt;
&lt;br /&gt;
=== Prevención ===&lt;br /&gt;
&lt;br /&gt;
La prevención apunta a una serie de estrategias que eviten el interbloqueo. Concretamente, son cuatro las estrategias de prevención posibles en base a los  principios que [http://en.wikipedia.org/wiki/Edward_G._Coffman,_Jr. Coffman] estableció como interbloqueo. Dichas estrategias son:&lt;br /&gt;
&lt;br /&gt;
* ''Supresión de exclusión mutua'': un proceso no puede tener acceso exclusivo a un recurso.&lt;br /&gt;
* ''Supresión de retención y espera'' (1ª estrategia de Havender): El proceso debe tener asignado todos los recursos necesarios al inicio y no liberarlos hasta que éste finalice. Esto presenta un inconveniente: si un recurso sólo se utiliza al final, estará ocupado durante toda la ejecución, no permitiendo ser usado por otros procesos.&lt;br /&gt;
* ''Supresión de no apropiación'' (2ª estrategia de Havender): Si un proceso está en ejecución y no puede obtener un recurso, dicho proceso libera todos los recursos que está usando y espera a que todos los que necesita estén disponibles. Problemas: se puede perder trabajo, además de presentar una carga extra la realización de peticiones &lt;br /&gt;
* ''Supresión de espera circular'' (3ª estrategia de Havender): Si todos los recursos comunes a varios procesos se solicitan siempre en el mismo orden no se producen interbloqueos.&lt;br /&gt;
&lt;br /&gt;
=== Predicción ===&lt;br /&gt;
&lt;br /&gt;
El sistema operativo observa la evolución que siguen los procesos, y predice una posible situación de interbloqueo. Si detecta una alta probabilidad de que suceda, adopta una trayectoria de ejecución nueva para los procesos involucrados de manera que se garantice que no va a suceder un interbloqueo.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_ejercicio_7&amp;diff=2059</id>
		<title>Solución ejercicio 7</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_ejercicio_7&amp;diff=2059"/>
				<updated>2011-12-07T02:12:07Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: Ejercicio 7 (Semáforos y comunicación) propuesta de solución&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hilo h1&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i = 0; i&amp;lt;2; i++){ //#1&lt;br /&gt;
   while(cerrojo_p2);      //#2&lt;br /&gt;
      cerrojo_p1 = 1;      //#3&lt;br /&gt;
      f();                 //#4&lt;br /&gt;
      cerrojo_p1 = 0;      //#5&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hilo h2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i = 0; i&amp;lt;2; i++){ //#1&lt;br /&gt;
   while(cerrojo_p1);      //#2&lt;br /&gt;
      cerrojo_p2 = 1;      //#3&lt;br /&gt;
      f();                 //#4&lt;br /&gt;
      cerrojo_p2 = 0;      //#5&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
      &lt;br /&gt;
      &amp;gt; = Fin de su ejecucion&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     | #1| #2| #3|   |   |   | #4| #5| #1|   |   |   | #2| #2| #2|   |   |   | #2| #3| #4|   |   |   | #5| #1|   |&lt;br /&gt;
   h1|---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---&amp;gt;   |&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     |   |   |   | #1| #2| #2|   |   |   | #2| #3| #4|   |   |   | #5| #1| #2|   |   |   | #3| #4| #5|   |   | #1|&lt;br /&gt;
   h2|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |---&amp;gt;&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|&lt;br /&gt;
     0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27&lt;br /&gt;
&lt;br /&gt;
     Nota: La solución que estaba antes propuesta no tenia relación con el ejercicio 7.Esta solucion todavía no ha sido revisada por Pablo.&lt;br /&gt;
&lt;br /&gt;
[[Usuario:jesgonbel|jesgonbel]] Esta es la solución que he obtenido al cambiar los cerrojos por semáforos:&lt;br /&gt;
&lt;br /&gt;
Inicialmente s1=1 y s2=0&lt;br /&gt;
&lt;br /&gt;
Hilo 1:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i = 0; i&amp;lt;2; i++){ //#1&lt;br /&gt;
   down(s1);               //#2&lt;br /&gt;
   f();                    //#3&lt;br /&gt;
   up(s2);                 //#4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hilo 2:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i = 0; i&amp;lt;2; i++){ //#1&lt;br /&gt;
   down(s2);               //#2&lt;br /&gt;
   f();                    //#3&lt;br /&gt;
   up(s1);                 //#4&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
           X: El proceso es bloqueado por el semáforo.&lt;br /&gt;
           /: El proceso pasa a estado preparado.&lt;br /&gt;
           &amp;gt;: El proceso termina su ejecución.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     | #1| #2| #3|   |   | #4| #1| #2|   |   |   | #3| #4| #1|   |   |   |   |&lt;br /&gt;
   h1|---|---|---|   |   |---|---|---X   |   /   |---|---|---&amp;gt;   |   |   |   |&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     |   |   |   | #1| #2|   |   |   | #3| #4| #1|   |   |   | #2| #3| #4| #1|&lt;br /&gt;
   h2|   |   |   |---|---X   /   |   |---|---|---|   |   |   |---|---|---|---|&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|&lt;br /&gt;
     0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol-ejer-planif-procesos-3&amp;diff=1753</id>
		<title>Sol-ejer-planif-procesos-3</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol-ejer-planif-procesos-3&amp;diff=1753"/>
				<updated>2011-11-11T05:17:50Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: Propuesta de corrección y solución al apartado B&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;APARTADO 1&lt;br /&gt;
&lt;br /&gt;
Traza de los procesos A y B&lt;br /&gt;
&lt;br /&gt;
 Proceso A&lt;br /&gt;
 ---------&lt;br /&gt;
 1, 2, 3,   4,       3,   4,       3,   5&lt;br /&gt;
       |    |        |    |        |    &lt;br /&gt;
       i=0  Bloquea  i=1  Bloquea  i=2  &lt;br /&gt;
      &lt;br /&gt;
 Por tanto tenemos t=8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Proceso B&lt;br /&gt;
 ---------&lt;br /&gt;
 1, 2,   3, 2,   3, 2,   4&lt;br /&gt;
    |       |       |    |  &lt;br /&gt;
    i=0     i=1     i=2  Bloquea &lt;br /&gt;
&lt;br /&gt;
 Por tanto t=7&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Proceso  H0  t  Plazo  &lt;br /&gt;
 -------- --  -- -----&lt;br /&gt;
 PA       0   8  16      &lt;br /&gt;
 PB       0   7  18      &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
                  | 1 |   |   |   |   |   |   |   | 2 | 3 | 4 |   |   |   | 3 | 4 |   |   |          &lt;br /&gt;
   Pa             &amp;lt;---|   |   |   |   |   |   |   |---|---|---B   |   |   P---|---B ABORTAR         &lt;br /&gt;
                  |   |   |   |   |   |   |   |   |   |i=0|   |   |   |   |i=1|   |   |   |       &lt;br /&gt;
                  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                  |   | 1 | 2 | 3 | 2 | 3 | 2 | 4 |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
   Pb             |   &amp;lt;---|---|---|---|---|---|---B       |   P FIN   |   |   |   |   |   |          &lt;br /&gt;
                  |   |   |i=0|   |i=1|   |i=2|   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
   Planificador   X   X   |   |   |   |   |   |   X   |   |   X   |   |   X   |   X   |   |      &lt;br /&gt;
                  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                  |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___&amp;gt; t&lt;br /&gt;
                  0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18&lt;br /&gt;
&lt;br /&gt;
--Creo que esa solución no es correcta (el enunciado dice que los 2 procesos se lanzan a la vez y en este cronograma se lanza P&amp;lt;sub&amp;gt;a&amp;lt;/sub&amp;gt; antes que P&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt;. Yo he llegado a las siguientes soluciones:&lt;br /&gt;
&lt;br /&gt;
a)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               &amp;amp; = El proceso realiza una llamada bloqueante.&lt;br /&gt;
               + = El proceso se ejecuta en el procesador 1.&lt;br /&gt;
               - = El proceso se ejecuta en el procesador 2.&lt;br /&gt;
               &amp;lt; = Instante de llegada del proceso.&lt;br /&gt;
               &amp;gt; = Instante de finalización del proceso.&lt;br /&gt;
               * = El proceso es abortado.&lt;br /&gt;
&lt;br /&gt;
            |   |   |   |   |   |   |   | 1 | 2 | 3 | 4 |   |   |   | 3 | 4 |   |   |&lt;br /&gt;
    Pa      &amp;lt;   |   |   |   |   |   |   |---|---|---|---|   |   |   |---|---*   |   |&lt;br /&gt;
            |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
            | 1 | 2 | 3 | 4 | 3 | 2 | 4 |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
    Pb      &amp;lt;---|---|---|---|---|---|---|   |   |   &amp;gt;   |   |   |   |   |   |   |   |&lt;br /&gt;
            |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
  planif.   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
            |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___&lt;br /&gt;
            0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19   t&lt;br /&gt;
&lt;br /&gt;
--Duda: yo he supuesto que aunque el planificador le de paso primero a A al aplicar el criterio y al tener B mayor prioridad de ejecuta B en t=0. --[[Usuario:jesgonbe|jesgonbel]]&lt;br /&gt;
&lt;br /&gt;
b) Suponiendo que solo se ejecutan procesos en el procesador 2 si esta ocupado el procesador 1&lt;br /&gt;
&lt;br /&gt;
               &amp;amp; = El proceso realiza una llamada bloqueante.&lt;br /&gt;
               + = El proceso se ejecuta en el procesador 1.&lt;br /&gt;
               - = El proceso se ejecuta en el procesador 2.&lt;br /&gt;
               &amp;lt; = Instante de llegada del proceso.&lt;br /&gt;
               &amp;gt; = Instante de finalización del proceso.&lt;br /&gt;
&lt;br /&gt;
            | 1 | 2 | 3 | 4 |   |   |   | 3 | 4 |   |   |   | 3 | 5 |   |   |   |   |&lt;br /&gt;
    Pa      &amp;lt;+++|+++|+++|+++&amp;amp;   |   |   |+++|+++|   |   |   |+++|+++|   |   |   |   |&lt;br /&gt;
            |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
            | 1 | 2 | 3 | 4 | 3 | 2 | 4 |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
    Pb      &amp;lt;---|---|---|---|+++|+++|+++|   |   |   &amp;gt;   |   |   |   |   |   |   |   |&lt;br /&gt;
            |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
  planif.   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
            |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___&lt;br /&gt;
            0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19   t&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_otros_aspectos_de_la_planificaci%C3%B3n&amp;diff=1752</id>
		<title>Ejercicios otros aspectos de la planificación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_otros_aspectos_de_la_planificaci%C3%B3n&amp;diff=1752"/>
				<updated>2011-11-11T04:40:17Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Ejercicio 2 */ aclaración&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ejercicio 1 ==&lt;br /&gt;
&lt;br /&gt;
Dada la siguiente configuración de procesos:&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! width=&amp;quot;50&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | Proceso&lt;br /&gt;
! width=&amp;quot;50&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | H&amp;lt;sub&amp;gt;0&lt;br /&gt;
! width=&amp;quot;50&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | t&lt;br /&gt;
|-&lt;br /&gt;
| P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt; &lt;br /&gt;
| 0&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt; &lt;br /&gt;
| 1&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt; &lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt; &lt;br /&gt;
| 3&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt; &lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Suponiendo un sistema operativo multiprocesador sobre dos procesadores, realice la traza de la ejecución de dichos procesos para los siguientes criterios de planificación:&lt;br /&gt;
&lt;br /&gt;
* FIFO (no apropiativo)&lt;br /&gt;
* SJF (apropiativo y no apropiativo)&lt;br /&gt;
&lt;br /&gt;
[[sol-ejer1-otros-aspectos|Ver solución ejercicio 1]]&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2 ==&lt;br /&gt;
''[Este ejercicio fue parte del primer Control de Evaluación Contínua del Curso 2010/11, del 23 de marzo de 2011]''&lt;br /&gt;
&lt;br /&gt;
Dada la siguiente configuracion de procesos:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! width=&amp;quot;50&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | Proceso&lt;br /&gt;
! width=&amp;quot;50&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | H&amp;lt;sub&amp;gt;0&lt;br /&gt;
! width=&amp;quot;50&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | t&lt;br /&gt;
|-&lt;br /&gt;
| P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt; &lt;br /&gt;
| 0 &lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt; &lt;br /&gt;
| 1 &lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt; &lt;br /&gt;
| 2 &lt;br /&gt;
| 6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Teniendo en cuenta el siguiente comportamiento:&lt;br /&gt;
&lt;br /&gt;
* El proceso A cada 1 unidad de tiempo de ejecución bloquea .&lt;br /&gt;
* El proceso B cada 3 unidades de tiempo de ejecución bloquea.&lt;br /&gt;
&lt;br /&gt;
Suponga que el tiempo de bloqueo de todos los procesos es de 2 unidades de tiempo debido al tiempo de acesso al dispositivo de E/S.&lt;br /&gt;
&lt;br /&gt;
Realice la traza de ejecución de dichos procesos y los índices de penalización para los siguientes criterios de planificación: &lt;br /&gt;
&lt;br /&gt;
#El siguiente, el más corto apropiativo en un sistema multiprocesador con dos procesadores, solo se ejecutaran procesos en el procesador 2 si el procesador 1 está ocupado. No olvide los tiempos de bloqueo de los procesos A y B. Considere asignación dinámica. (''[[sol-ejer2-1-otros-aspectos|Ver solución]]'')&lt;br /&gt;
#Por prioridades apropiativo en tiempo real, suponiendo que C &amp;lt; B &amp;lt; A. No olvide los tiempos de bloqueo de los procesos A y B. (''[[sol-ejer2-2-otros-aspectos|Ver solución]]'')&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! width=&amp;quot;50&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | Proceso&lt;br /&gt;
! width=&amp;quot;50&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | Plazo&lt;br /&gt;
|-&lt;br /&gt;
| P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt; &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt; &lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt; &lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 3 ==&lt;br /&gt;
''[Este ejercicio formó parte del Primer Parcial de Evaluación Contínua del curso 2011/12 del 8 de Noviembre de 2011]''&lt;br /&gt;
&lt;br /&gt;
Dado el código de los siguientes procesos:&lt;br /&gt;
&lt;br /&gt;
'''Código proceso A:'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int fd;                                      #1&lt;br /&gt;
fd = open(&amp;quot;fichero.txt&amp;quot;, O_WRONLY, 0600);    #2&lt;br /&gt;
for(int i=0;i&amp;lt;2;i++) {                       #3&lt;br /&gt;
    write(fd, &amp;quot;%d&amp;quot;, sizeof(int));            #4&lt;br /&gt;
}&lt;br /&gt;
close(fd);                                   #5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Código proceso B:'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int fd, contador = 0;                        #1&lt;br /&gt;
for(int i=0;i&amp;lt;2;i++) {                       #2&lt;br /&gt;
    contador+=2;                             #3&lt;br /&gt;
}&lt;br /&gt;
printf(&amp;quot;el contador vale: %d\n&amp;quot;, contador);  #4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De manera teórica, suponga que la ejecución de cada línea de código toma una unidad de tiempo. Considere que las llamadas '''write''' y '''printf''' son bloqueantes puesto que suponen accesos a dispositivos de E/S, siendo los tiempos de bloqueo de 3 unidades de tiempo. Suponga que ambos procesos se lanzan a la vez, pero el planificador da paso en primer lugar al proceso A.&lt;br /&gt;
&lt;br /&gt;
Realize la traza temporal de ejecución de dichos procesos y los índices de penalización para los siguientes criterios de planificación:&lt;br /&gt;
&lt;br /&gt;
#Por prioridades apropiativo en tiempo real, suponiendo que B&amp;gt;A. No olvide los tiempos de bloqueo de los procesos A y B. Considere que los plazos de ejecucion de proceso A es 16 y de proceso B es 18&lt;br /&gt;
&lt;br /&gt;
#Suponiendo un sistema multiprocesador con dos procesadores. No olvide los tiempos de bloqueo de los procesos A y B. Considere asignación dinámica&lt;br /&gt;
&lt;br /&gt;
[[sol-ejer-planif-procesos-3|Ver solución del ejercicio 3]]&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol-ejer6-planif-procesos&amp;diff=1751</id>
		<title>Sol-ejer6-planif-procesos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol-ejer6-planif-procesos&amp;diff=1751"/>
				<updated>2011-11-11T01:56:24Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Apartado a */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Apartado a =&lt;br /&gt;
&lt;br /&gt;
                    ____|_PA_|_PB_|_PC_|_PD_|&lt;br /&gt;
         Datos del  _H0_|_0__|_2__|_3__|_5__|&lt;br /&gt;
          problema  _t__|_3__|_1__|_4__|_6__|&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt; = indica el instante de lanzamiento del proceso&lt;br /&gt;
                      &amp;gt; = indica el instante de finalización del proceso&lt;br /&gt;
                      &amp;amp; = el proceso bloquea debido a una llamada bloqueante&lt;br /&gt;
                      # = el proceso bloquea debido a que ha consumido su cuanto&lt;br /&gt;
                      X = se ejecuta el código del planificador&lt;br /&gt;
                      p = el proceso pasa a estado preparado&lt;br /&gt;
&lt;br /&gt;
                  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PA  &amp;lt;---&amp;amp;   |   |   p---&amp;amp;   |   |   p---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PB  |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PC  |   |   |   &amp;lt;---#   |---&amp;amp;   p---#   |---&amp;gt;   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PD  |   |   |   |   |   &amp;lt;   |---#   |   |   |---|---|---|---|---&amp;gt;   |   |   |   |   |&lt;br /&gt;
     Planificador X   X   X   X   X   X   X   X   X   X   X   |   |   |   |   X   |   |   |   |   |&lt;br /&gt;
             -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                  0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
-Respuesta: debido a que el quantum tiene un tamaño muy pequeño el planificador de tareas se ejecuta continuamente (tiempo del sistema alto) con lo que el rendimiento se verá afectado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DUDA: En t=5 ¿por qué se inicia PC en vez de PD? Si entra PD en t=5 se debería ejecutar porque en RR estricto los procesos recién lanzados deben ejecutarse, similar a lo de orden de llegada. He pensado que puede ser por la prioridad pero esque aquí en la tabla no viene las prioridades, solo H0 y t. --Luisa Mª.&lt;br /&gt;
&lt;br /&gt;
- En t=4 se han ejecutado P&amp;lt;sub&amp;gt;a&amp;lt;/sub&amp;gt;,P&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt; y P&amp;lt;sub&amp;gt;c&amp;lt;/sub&amp;gt;, entonces le tocaría el turno a P&amp;lt;sub&amp;gt;d&amp;lt;/sub&amp;gt; pero como en ese momento no está preparado se le pasa el turno a P&amp;lt;sub&amp;gt;a&amp;lt;/sub&amp;gt; otra vez, después de ejecutarse este se le pasa el turno a P&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt; pero como ya ha terminado de ejecutarse se salta al proceso siguiente: P&amp;lt;sub&amp;gt;c&amp;lt;/sub&amp;gt;. ¡Aunque también es posible que me haya equivocado! --[[Usuario:jesgonbel|jesgonbel]].&lt;br /&gt;
&lt;br /&gt;
= Apartado b =&lt;br /&gt;
&lt;br /&gt;
En ambos casos la solución es la misma.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                    ____|_PA_|_PB_|_PC_|_PD_|&lt;br /&gt;
         Datos del  _H0_|_0__|_2__|_3__|_5__|&lt;br /&gt;
          problema  _t__|_3__|_1__|_4__|_6__|&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt; = indica el instante de lanzamiento del proceso&lt;br /&gt;
                      &amp;gt; = indica el instante de finalización del proceso&lt;br /&gt;
                      &amp;amp; = el proceso bloquea debido a una llamada bloqueante&lt;br /&gt;
                      # = el proceso bloquea debido a que ha consumido su cuanto&lt;br /&gt;
                      X = se ejecuta el código del planificador&lt;br /&gt;
                      p = el proceso pasa a estado preparado&lt;br /&gt;
&lt;br /&gt;
                  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PA  &amp;lt;---&amp;amp;   |   |   p---&amp;amp;   |   |   |   |---&amp;gt;   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PB  |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PC  |   |   |   &amp;lt;---#   |---&amp;amp;   p---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PD  |   |   |   |   |   &amp;lt;   |---#   |   |   |---|---|---|---|---&amp;gt;   |   |   |   |   |&lt;br /&gt;
     Planificador X   X   X   X   |   |   X   X   |   X   X   |   |   |   |   X   |   |   |   |   |&lt;br /&gt;
             -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                  0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
= Apartado c =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                    ____|_PA_|_PB_|_PC_|_PD_|&lt;br /&gt;
         Datos del  _H0_|_0__|_2__|_3__|_5__|&lt;br /&gt;
          problema  _t__|_3__|_1__|_4__|_6__|&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt; = indica el instante de lanzamiento del proceso&lt;br /&gt;
                      &amp;gt; = indica el instante de finalización del proceso&lt;br /&gt;
                      &amp;amp; = el proceso bloquea debido a una llamada bloqueante&lt;br /&gt;
                      # = el proceso bloquea debido a que el planificador le retira el procesador&lt;br /&gt;
                      X = se ejecuta el código del planificador&lt;br /&gt;
                      p = el proceso pasa a estado preparado&lt;br /&gt;
&lt;br /&gt;
                  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PA  &amp;lt;---&amp;amp;   |   |   p---&amp;amp;   |   |   p   |   |---&amp;amp;   |   |   &amp;gt;   |   |   |   |   |   |&lt;br /&gt;
              PB  |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PC  |   |   |   &amp;lt;---#   |---&amp;amp;   p---|---&amp;amp;   &amp;gt;   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PD  |   |   |   |   |   &amp;lt;   |---#   |   |---|   |---|---|---|---&amp;gt;   |   |   |   |   |&lt;br /&gt;
     Planificador X   X   X   X   X   X   X   X   X   X   X   |   |   |   |   X   |   |   |   |   |&lt;br /&gt;
             -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                  0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
Indices de penalizacion: P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;=9      P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;=1    P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;=7/4    P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;=9/6&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol-ejer6-planif-procesos&amp;diff=1750</id>
		<title>Sol-ejer6-planif-procesos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol-ejer6-planif-procesos&amp;diff=1750"/>
				<updated>2011-11-11T01:50:30Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Apartado a */ Respuesta.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Apartado a =&lt;br /&gt;
&lt;br /&gt;
                    ____|_PA_|_PB_|_PC_|_PD_|&lt;br /&gt;
         Datos del  _H0_|_0__|_2__|_3__|_5__|&lt;br /&gt;
          problema  _t__|_3__|_1__|_4__|_6__|&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt; = indica el instante de lanzamiento del proceso&lt;br /&gt;
                      &amp;gt; = indica el instante de finalización del proceso&lt;br /&gt;
                      &amp;amp; = el proceso bloquea debido a una llamada bloqueante&lt;br /&gt;
                      # = el proceso bloquea debido a que ha consumido su cuanto&lt;br /&gt;
                      X = se ejecuta el código del planificador&lt;br /&gt;
                      p = el proceso pasa a estado preparado&lt;br /&gt;
&lt;br /&gt;
                  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PA  &amp;lt;---&amp;amp;   |   |   p---&amp;amp;   |   |   p---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PB  |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PC  |   |   |   &amp;lt;---#   |---&amp;amp;   p---#   |---&amp;gt;   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PD  |   |   |   |   |   &amp;lt;   |---#   |   |   |---|---|---|---|---&amp;gt;   |   |   |   |   |&lt;br /&gt;
     Planificador X   X   X   X   X   X   X   X   X   X   X   |   |   |   |   X   |   |   |   |   |&lt;br /&gt;
             -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                  0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
-Respuesta: debido a que el quantum tiene un tamaño muy pequeño el planificador de tareas se ejecuta continuamente (tiempo del sistema alto) con lo que el rendimiento se verá afectado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DUDA: En t=5 ¿por qué se inicia PC en vez de PD? Si entra PD en t=5 se debería ejecutar porque en RR estricto los procesos recién lanzados deben ejecutarse, similar a lo de orden de llegada. He pensado que puede ser por la prioridad pero esque aquí en la tabla no viene las prioridades, solo H0 y t. --Luisa Mª.&lt;br /&gt;
&lt;br /&gt;
- En t=4 se han ejecutado P&amp;lt;sub&amp;gt;a&amp;lt;/sub&amp;gt;,P&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt; y P&amp;lt;sub&amp;gt;c&amp;lt;/sub&amp;gt;, entonces le tocaría el turno a P&amp;lt;sub&amp;gt;d&amp;lt;/sub&amp;gt; pero como en ese momento no está preparado se le pasa el turno a P&amp;lt;sub&amp;gt;a&amp;lt;/sub&amp;gt; otra vez, después de ejecutarse este se le pasa el turno a P&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt; pero como ya ha terminado de ejecutarse se salta al proceso siguiente: P&amp;lt;sub&amp;gt;c&amp;lt;/sub&amp;gt;. ¡Aunque también es posible que me haya equivocado!&lt;br /&gt;
&lt;br /&gt;
= Apartado b =&lt;br /&gt;
&lt;br /&gt;
En ambos casos la solución es la misma.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                    ____|_PA_|_PB_|_PC_|_PD_|&lt;br /&gt;
         Datos del  _H0_|_0__|_2__|_3__|_5__|&lt;br /&gt;
          problema  _t__|_3__|_1__|_4__|_6__|&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt; = indica el instante de lanzamiento del proceso&lt;br /&gt;
                      &amp;gt; = indica el instante de finalización del proceso&lt;br /&gt;
                      &amp;amp; = el proceso bloquea debido a una llamada bloqueante&lt;br /&gt;
                      # = el proceso bloquea debido a que ha consumido su cuanto&lt;br /&gt;
                      X = se ejecuta el código del planificador&lt;br /&gt;
                      p = el proceso pasa a estado preparado&lt;br /&gt;
&lt;br /&gt;
                  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PA  &amp;lt;---&amp;amp;   |   |   p---&amp;amp;   |   |   |   |---&amp;gt;   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PB  |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PC  |   |   |   &amp;lt;---#   |---&amp;amp;   p---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PD  |   |   |   |   |   &amp;lt;   |---#   |   |   |---|---|---|---|---&amp;gt;   |   |   |   |   |&lt;br /&gt;
     Planificador X   X   X   X   |   |   X   X   |   X   X   |   |   |   |   X   |   |   |   |   |&lt;br /&gt;
             -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                  0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
= Apartado c =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                    ____|_PA_|_PB_|_PC_|_PD_|&lt;br /&gt;
         Datos del  _H0_|_0__|_2__|_3__|_5__|&lt;br /&gt;
          problema  _t__|_3__|_1__|_4__|_6__|&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt; = indica el instante de lanzamiento del proceso&lt;br /&gt;
                      &amp;gt; = indica el instante de finalización del proceso&lt;br /&gt;
                      &amp;amp; = el proceso bloquea debido a una llamada bloqueante&lt;br /&gt;
                      # = el proceso bloquea debido a que el planificador le retira el procesador&lt;br /&gt;
                      X = se ejecuta el código del planificador&lt;br /&gt;
                      p = el proceso pasa a estado preparado&lt;br /&gt;
&lt;br /&gt;
                  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PA  &amp;lt;---&amp;amp;   |   |   p---&amp;amp;   |   |   p   |   |---&amp;amp;   |   |   &amp;gt;   |   |   |   |   |   |&lt;br /&gt;
              PB  |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PC  |   |   |   &amp;lt;---#   |---&amp;amp;   p---|---&amp;amp;   &amp;gt;   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PD  |   |   |   |   |   &amp;lt;   |---#   |   |---|   |---|---|---|---&amp;gt;   |   |   |   |   |&lt;br /&gt;
     Planificador X   X   X   X   X   X   X   X   X   X   X   |   |   |   |   X   |   |   |   |   |&lt;br /&gt;
             -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                  0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
Indices de penalizacion: P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;=9      P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;=1    P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;=7/4    P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;=9/6&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Planificaci%C3%B3n_de_procesos_de_tiempo_real&amp;diff=1749</id>
		<title>Planificación de procesos de tiempo real</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Planificaci%C3%B3n_de_procesos_de_tiempo_real&amp;diff=1749"/>
				<updated>2011-11-11T01:43:06Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: /* Métodos de planificación */ ampliación de &amp;quot;planificación dinámica del mejor resultado&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es un proceso de tiempo real? ==&lt;br /&gt;
&lt;br /&gt;
Proceso de tiempo real se trata de un proceso cuya actividad tiene un plazo de finalización.&lt;br /&gt;
&lt;br /&gt;
== ¿Qué es un sistema operativo de tiempo real? ==&lt;br /&gt;
&lt;br /&gt;
Un sistema operativo de tiempo real dispone de un planificador de procesos que tiene mecanismos para hacer lo máximo posible para garantizar que sus procesos de tiempo real cumplan los plazos de finalización que tienen establecidos.&lt;br /&gt;
&lt;br /&gt;
== Clasificación ==&lt;br /&gt;
&lt;br /&gt;
Podemos clasificar los procesos de tiempo real de diferentes maneras:&lt;br /&gt;
&lt;br /&gt;
Segun el plazo de tiempo:&lt;br /&gt;
*'''Rígidos(''hard-realtime'')''' : se debe realizar en un plazo de tiempo determinado. Si no lo hace, deja de tener sentido. Si el plazo de tiempo para realizarla es superado el proceso se aborta. Ejemplo: Industriales ( sensores, activadores,...).&lt;br /&gt;
&lt;br /&gt;
*'''Flexibles(''soft-realtime'')''' : es deseable que se cumpla el plazo de tiempo. Ej: Videoconferencia.(Mientras más rapido vaya mejor sera la comunicacion , pero si no , nos adaptamos a ella)&lt;br /&gt;
&lt;br /&gt;
*'''Opcionales''' : conviene hacerla en el plazo de tiempo, pero si no es posible se puede posponer. Ej: actualización de una aplicacion/programa instalada en el ordenador.&lt;br /&gt;
&lt;br /&gt;
Según la periodicidad:&lt;br /&gt;
&lt;br /&gt;
*'''Aperiódicas''' : se deben a sucesos externos que deben ser atendidos. El sistema operativo no sabe, a priori, cuándo van a llegar ni el tiempo que va a durar. Ej: Notificaciones de errores, Sensores de emergencia en un coche, Ventiladores para refrigeración.&lt;br /&gt;
&lt;br /&gt;
*'''Periódicas''' : se realizan cada cierto tiempo (actividad repetitiva). A diferencia del anterior el sistema operativo conoce a priori cuándo van a llegar y su tiempo de duración Ej: leer la temperatura de un sensor.&lt;br /&gt;
&lt;br /&gt;
== Métodos de planificación ==&lt;br /&gt;
&lt;br /&gt;
Los métodos de planificación a utilizar en SSOO de tiempo real son:&lt;br /&gt;
&lt;br /&gt;
*'''Planificación apropiativa con prioridad estática''': Cada proceso tiene asociado un índice de prioridad y el procesador elige aquel proceso de la lista de preparados con mayor prioridad, es el más tradicional y puede ser llevado a cabo por el procesador de un sistema que no sea de tiempo real.&lt;br /&gt;
&lt;br /&gt;
*'''Planificación de tablas estáticas''': se conocen las actividades a realizar (todas periódicas) y se elabora un plan fijo de ejecución.&lt;br /&gt;
&lt;br /&gt;
*'''Planificación dinámica''': Es muy parecida a la de tablas estáticas , pero también admite actividades aperiódicas. Cuando se presenta una actividad aperiódica , el planificador intenta construir un nuevo plan de ejecución que incluya a todas las actividades. Si no encuentra la solución que las englobe a todas, rechaza la actividad, que debe ser flexible u opcional. También puede retrasar alguna actividad flexible/opcional.&lt;br /&gt;
&lt;br /&gt;
*'''Planificación dinámica con un mejor resultado''':Se utiliza para aplicaciones compuestas mayormente por actividades aperiódicas.El planificador intenta cumplir el plazo de todas las actividades asignandole a cada actividad una prioridad en base a sus características (las actividades fuera de plazo se abortan). Es muy similar a la anterior, la diferencia más notable es que en la anterior existe un análisis previo aceptando actividades aperiódicas y en ésta no existe tal análisis.&lt;br /&gt;
Es un método fácil de implementar, sin embargo, no podremos saber de antemano si una actividad cumplirá su plazo o no (sabremos que no lo cumple si es abortada, y viceversa).&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo emplea planificación apropiativa por prioridades estática con actividades periódicas y aperiódicas:&lt;br /&gt;
&lt;br /&gt;
                    ____|__PA__|_PB__|_PC__|_PD___|&lt;br /&gt;
         Datos del  _H0_|__0___|_1___|_2___|_3*n__|&lt;br /&gt;
          problema  _t__|__2___|_4___|_2___|_1____|&lt;br /&gt;
                   plazo|__3___|_5___|_7___|_3*n+2|&lt;br /&gt;
               prioridad|__-20_|_0___|_10__|_15___|&lt;br /&gt;
               (-20 a 19)&lt;br /&gt;
                 UNIX  &lt;br /&gt;
                      &amp;lt; = indica el instante de lanzamiento del proceso&lt;br /&gt;
                      &amp;gt; = indica el instante de finalización del proceso&lt;br /&gt;
                      X = se ejecuta el código del planificador&lt;br /&gt;
                  plazo = si la actividad no ha terminado de ejecutarse tras pasar este instante de tiempo, se aborta&lt;br /&gt;
                      * = el proceso se aborta&lt;br /&gt;
 &lt;br /&gt;
                  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PA  &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PB  |   &amp;lt;   |---|---|---*   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PC  |   |   &amp;lt;   |   |   |---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PD  |   |   |   &amp;lt;   |   *   &amp;lt;   |---&amp;gt;   &amp;lt;---&amp;gt;   |   &amp;lt;---&amp;gt;   |   &amp;lt;---&amp;gt;   |   |   |   |&lt;br /&gt;
     Planificador X   X   X   X   |   X   X   X   |   X   |   |   X   |   |   X   |   |   |   |   |&lt;br /&gt;
             -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                  0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
                                         &lt;br /&gt;
                         _____|_P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;_|P&amp;lt;sub&amp;gt;D1ª&amp;lt;/sub&amp;gt;_|P&amp;lt;sub&amp;gt;D2ª&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;_|&lt;br /&gt;
              Cálculos   __t__|_2__|_3__|_2__|_1__|_1__|_1__|&lt;br /&gt;
             de tiempos  __T__|_2__|_*__|_4__|_*__|_2__|_1__|&lt;br /&gt;
                         _T/t_|_1__|_*__|_2__|_*__|_2__|_1__|&lt;br /&gt;
                        |&lt;br /&gt;
                        |_&amp;gt; Indice de penalización&lt;br /&gt;
&lt;br /&gt;
Si alguna actividad entrante tiene más prioridad que la que se está ejecutando, ésta última pasa a estado preparado y se da paso a la nueva.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_planificaci%C3%B3n_de_procesos&amp;diff=1738</id>
		<title>Ejercicios planificación de procesos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_planificaci%C3%B3n_de_procesos&amp;diff=1738"/>
				<updated>2011-11-10T04:20:38Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ejercicio 1 =&lt;br /&gt;
&lt;br /&gt;
Dada la siguiente configuración de procesos:&lt;br /&gt;
&lt;br /&gt;
      H0  t&lt;br /&gt;
 P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;   0   5&lt;br /&gt;
 P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;   1   3&lt;br /&gt;
 P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;   2   1&lt;br /&gt;
 P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;   3   6&lt;br /&gt;
 P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;   4   2&lt;br /&gt;
&lt;br /&gt;
Realice la traza de la ejecución de dichos procesos para los siguientes criterios de planificación:&lt;br /&gt;
&lt;br /&gt;
* FIFO (no apropiativo)&lt;br /&gt;
* SJF (apropiativo y no apropiativo)&lt;br /&gt;
* Índice de penalización (no apropiativo)&lt;br /&gt;
[[sol-ejer1-planif-procesos|Ver solución ejercicio 1]]&lt;br /&gt;
&lt;br /&gt;
= Ejercicio 2 =&lt;br /&gt;
&lt;br /&gt;
Dada la siguiente configuración de procesos:&lt;br /&gt;
&lt;br /&gt;
      H0  t&lt;br /&gt;
 P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;   0   3&lt;br /&gt;
 P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;   1   5&lt;br /&gt;
 P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;   2   6&lt;br /&gt;
&lt;br /&gt;
Teniendo en cuenta el siguiente comportamiento:&lt;br /&gt;
&lt;br /&gt;
* El proceso A cada 1 unidad de tiempo de ejecución bloquea por operación de E/S&lt;br /&gt;
* El proceso B cada 3 unidades de tiempo de ejecución bloquea por operación de E/S&lt;br /&gt;
&lt;br /&gt;
Suponga que el tiempo de bloqueo de todos los procesos es de 2 unidades de tiempo debido al tiempo de acceso al dispositivo de E/S.&lt;br /&gt;
&lt;br /&gt;
Realice la traza temporal de ejecución de dichos procesos para los siguientes criterios de planificación:&lt;br /&gt;
&lt;br /&gt;
* Turno rotatorio estricto, suponiendo que el quantum es de 2 unidades de tiempo.&lt;br /&gt;
* Por prioridades, suponiendo que A &amp;lt; B &amp;lt; C.&lt;br /&gt;
* Turno rotatorio proporcional al número de procesos en estado preparado, suponiendo que el quantum es de 2 unidades de tiempo. Si hay dos o más procesos preparados el quantum pasa a ser de una unidad de tiempo.&lt;br /&gt;
&lt;br /&gt;
[[sol-ejer2-planif-procesos|Ver solución ejercicio 2]]&lt;br /&gt;
&lt;br /&gt;
= Ejercicio 3 =&lt;br /&gt;
&lt;br /&gt;
En un planificador multinivel con realimentación se dispone de dos colas:&lt;br /&gt;
&lt;br /&gt;
* La primera cola tiene procesos que reciben un ''quantum'' de 4 unidades de tiempo.&lt;br /&gt;
* La segunda cola tiene procesos que reciben un ''quantum'' de 2 unidades de tiempo. Los procesos en esta cola reciben dos oportunidades de ejecución. Por tanto, se itera dos veces sobre esta cola antes de pasar a la primera cola.&lt;br /&gt;
&lt;br /&gt;
Los procesos que acaban de ser lanzados pasan inicialmente a la segunda cola. Si consumen completamente el ''quantum'' una vez, promocionan a la primera cola. Si dejan de consumir completamente el ''quantum'' una vez, descienden a la segunda.&lt;br /&gt;
&lt;br /&gt;
Dada la siguiente configuración de procesos:&lt;br /&gt;
&lt;br /&gt;
     H0  t&lt;br /&gt;
 Pa   0  4&lt;br /&gt;
 Pb   1  4&lt;br /&gt;
 Pc   2  12&lt;br /&gt;
 Pd   3  12&lt;br /&gt;
&lt;br /&gt;
Suponga que los procesos A y B bloquean por operación de E/S tras 1 unidad de ejecución. Los procesos C y D no bloquean. Los tiempos de bloqueo por E/S son de 1 unidad de tiempo. Represente graficamente la evolución temporal de la asignación del procesador.&lt;br /&gt;
&lt;br /&gt;
[[sol-ejer3-planif-procesos|Ver solución ejercicio 3]]&lt;br /&gt;
&lt;br /&gt;
=Ejercicio 4 =&lt;br /&gt;
''[Este ejercicio formó parte del Primer Parcial de Evaluación Contínua del curso 2010/11 del 23 de marzo de 2011]''&lt;br /&gt;
&lt;br /&gt;
Dada la siguiente configuracion de procesos:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! width=&amp;quot;50&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | Proceso&lt;br /&gt;
! width=&amp;quot;50&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | H&amp;lt;sub&amp;gt;0&lt;br /&gt;
! width=&amp;quot;50&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | t&lt;br /&gt;
|-&lt;br /&gt;
| P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt; &lt;br /&gt;
| 0 &lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt; &lt;br /&gt;
| 1 &lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt; &lt;br /&gt;
| 2 &lt;br /&gt;
| 6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Teniendo en cuenta el siguiente comportamiento:&lt;br /&gt;
&lt;br /&gt;
* El proceso A cada 1 unidad de tiempo de ejecución bloquea .&lt;br /&gt;
* El proceso B cada 3 unidades de tiempo de ejecución bloquea.&lt;br /&gt;
&lt;br /&gt;
Suponga que el tiempo de bloqueo de todos los procesos es de 2 unidades de tiempo debido al tiempo de acesso al dispositivo de E/S.&lt;br /&gt;
&lt;br /&gt;
Realice la traza de ejecución de dichos procesos y los índices de penalización para los siguientes criterios de planificación: &lt;br /&gt;
&lt;br /&gt;
#Turno rotatorio con compensacion con quantum de 2 unidades de tiempo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*En caso de que un proceso haya consumido el 50% de su quantum y en la cola de procesos preparados haya un unico proceso, insertelo delante de este.&lt;br /&gt;
&lt;br /&gt;
*Si dos o mas procesos pasan de estado preparado a la vez, considere que el orden de insercion en la cola de preparados es el siguiente: 1ºA 2ºB 3ºC&lt;br /&gt;
&lt;br /&gt;
*Recuerde que un proceso en estado bloqueado se inserta en la cola de preparados una vez que pasa el tiempo de bloqueo ( que en este ejercicio se trata de 2 unidades de tiempo)&lt;br /&gt;
&lt;br /&gt;
*En toda decisión del planificador tenga en cuenta a los procesos que justo acaban de pasar a estado preparado tras un bloqueo.&lt;br /&gt;
&lt;br /&gt;
''[[sol-ejer4-planif-procesos|Ver solución ejercicio 4]]''&lt;br /&gt;
&lt;br /&gt;
=Ejercicio 5 =&lt;br /&gt;
''[Este ejercicio formó parte del Primer Parcial de Evaluación Contínua del curso 2011/12 del 8 de Noviembre de 2011]''&lt;br /&gt;
&lt;br /&gt;
Dado el código de los siguientes procesos:&lt;br /&gt;
&lt;br /&gt;
'''Código proceso A:'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int fd;                                         #1&lt;br /&gt;
fd = open(&amp;quot;fichero.txt&amp;quot;, O_WRONLY, 0600);       #2&lt;br /&gt;
for(int i=0;i&amp;lt;2;i++) {                          #3&lt;br /&gt;
  write(fd, &amp;quot;%d&amp;quot;, sizeof(int));                 #4&lt;br /&gt;
}&lt;br /&gt;
close(fd);                                      #5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Código proceso B:'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int fd, contador = 0;                           #1&lt;br /&gt;
for(int i=0;i&amp;lt;2;i++) {                          #2&lt;br /&gt;
  contador+=2;                                  #3&lt;br /&gt;
}&lt;br /&gt;
printf(&amp;quot;el contador vale: %d\n&amp;quot;, contador);     #4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De manera teórica, suponga que la ejecución de cada línea de código toma una unidad de tiempo. Considere que las llamadas '''write''' y '''printf''' son bloqueantes puesto que suponen accesos a dispositivos de E/S, siendo los tiempos de bloqueo de 3 unidades de tiempo. Suponga que ambos procesos se lanzan a la vez, pero el planificador da paso en primer lugar al proceso A.&lt;br /&gt;
&lt;br /&gt;
Realice la traza temporal de ejecución de dichos procesos y los índices de penalización suponiendo planificación por turno rotatorio con compensación con ''quantum'' de 2 unidades de tiempo:&lt;br /&gt;
&lt;br /&gt;
* En caso de que un proceso haya consumido el 50% de su quantum y en la cola de procesos preparados haya un único proceso, insértelo delante de éste.&lt;br /&gt;
* Si dos o más procesos pasan a estado preparado a la vez, considere que el orden de inserción de preparados en la cola es el siguiente: 1º-A, 2º-B.&lt;br /&gt;
* Recuerde que un proceso en estado bloqueado se inserta en la cola de preparados una vez que pasa el tiempo de bloqueo (que en este ejercicio se trata de 3 unidades de tiempo.&lt;br /&gt;
* En toda decisión del planificador tenga en cuenta los procesos que justo acaban de pasar a estado preparado tras un bloqueo.&lt;br /&gt;
&lt;br /&gt;
[[sol-ejer-planif-procesos-5|Ver solución del ejercicio 5]]&lt;br /&gt;
&lt;br /&gt;
=Ejercicio 6=&lt;br /&gt;
&lt;br /&gt;
Dada la siguiente configuración de procesos:&lt;br /&gt;
&lt;br /&gt;
      H0  t   p&lt;br /&gt;
 P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;   0   3   -20&lt;br /&gt;
 P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;   2   1     0&lt;br /&gt;
 P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;   3   4     5&lt;br /&gt;
 P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;   5   6    10&lt;br /&gt;
&lt;br /&gt;
Realice la traza de la ejecución de dichos procesos para los siguientes criterios de planificación:&lt;br /&gt;
&lt;br /&gt;
* Round Robin estricto (quantum de 1 unidad de tiempo)&lt;br /&gt;
  ¿Puede realizar alguna observacion respecto al planificador de procesos en base al rendimiento?&lt;br /&gt;
* SJF (apropiativo y no apropiativo)&lt;br /&gt;
* Indice de penalización apropiativo (si se da un empate aplicar SJF), calcule los indices de penalizacion resultantes&lt;br /&gt;
&lt;br /&gt;
[[Sol-ejer6-planif-procesos|Ver solución del ejercicio 6]]&lt;br /&gt;
&lt;br /&gt;
IMPORTANTE: Este ejercicio aún no ha sido revisado por ningún profesor.&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol-ejer6-planif-procesos&amp;diff=1737</id>
		<title>Sol-ejer6-planif-procesos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol-ejer6-planif-procesos&amp;diff=1737"/>
				<updated>2011-11-10T04:18:13Z</updated>
		
		<summary type="html">&lt;p&gt;Jesgonbel: correccion de erratas&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Apartado a =&lt;br /&gt;
&lt;br /&gt;
                    ____|_PA_|_PB_|_PC_|_PD_|&lt;br /&gt;
         Datos del  _H0_|_0__|_2__|_3__|_5__|&lt;br /&gt;
          problema  _t__|_3__|_1__|_4__|_6__|&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt; = indica el instante de lanzamiento del proceso&lt;br /&gt;
                      &amp;gt; = indica el instante de finalización del proceso&lt;br /&gt;
                      &amp;amp; = el proceso bloquea debido a una llamada bloqueante&lt;br /&gt;
                      # = el proceso bloquea debido a que ha consumido su cuanto&lt;br /&gt;
                      X = se ejecuta el código del planificador&lt;br /&gt;
                      p = el proceso pasa a estado preparado&lt;br /&gt;
&lt;br /&gt;
                  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PA  &amp;lt;---&amp;amp;   |   |   p---&amp;amp;   |   |   p---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PB  |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PC  |   |   |   &amp;lt;---#   |---&amp;amp;   p---#   |---&amp;gt;   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PD  |   |   |   |   |   &amp;lt;   |---#   |   |   |---|---|---|---|---&amp;gt;   |   |   |   |   |&lt;br /&gt;
     Planificador X   X   X   X   X   X   X   X   X   X   X   |   |   |   |   X   |   |   |   |   |&lt;br /&gt;
             -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                  0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
-Respuesta: debido a que el quantum tiene un tamaño muy pequeño el planificador de tareas se ejecuta continuamente (tiempo del sistema alto) con lo que el rendimiento se verá afectado.&lt;br /&gt;
&lt;br /&gt;
= Apartado b =&lt;br /&gt;
&lt;br /&gt;
En ambos casos la solución es la misma.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                    ____|_PA_|_PB_|_PC_|_PD_|&lt;br /&gt;
         Datos del  _H0_|_0__|_2__|_3__|_5__|&lt;br /&gt;
          problema  _t__|_3__|_1__|_4__|_6__|&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt; = indica el instante de lanzamiento del proceso&lt;br /&gt;
                      &amp;gt; = indica el instante de finalización del proceso&lt;br /&gt;
                      &amp;amp; = el proceso bloquea debido a una llamada bloqueante&lt;br /&gt;
                      # = el proceso bloquea debido a que ha consumido su cuanto&lt;br /&gt;
                      X = se ejecuta el código del planificador&lt;br /&gt;
                      p = el proceso pasa a estado preparado&lt;br /&gt;
&lt;br /&gt;
                  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PA  &amp;lt;---&amp;amp;   |   |   p---&amp;amp;   |   |   |   |---&amp;gt;   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PB  |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PC  |   |   |   &amp;lt;---#   |---&amp;amp;   p---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PD  |   |   |   |   |   &amp;lt;   |---#   |   |   |---|---|---|---|---&amp;gt;   |   |   |   |   |&lt;br /&gt;
     Planificador X   X   X   X   |   |   X   X   |   X   X   |   |   |   |   X   |   |   |   |   |&lt;br /&gt;
             -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                  0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
= Apartado c =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                    ____|_PA_|_PB_|_PC_|_PD_|&lt;br /&gt;
         Datos del  _H0_|_0__|_2__|_3__|_5__|&lt;br /&gt;
          problema  _t__|_3__|_1__|_4__|_6__|&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt; = indica el instante de lanzamiento del proceso&lt;br /&gt;
                      &amp;gt; = indica el instante de finalización del proceso&lt;br /&gt;
                      &amp;amp; = el proceso bloquea debido a una llamada bloqueante&lt;br /&gt;
                      # = el proceso bloquea debido a que el planificador le retira el procesador&lt;br /&gt;
                      X = se ejecuta el código del planificador&lt;br /&gt;
                      p = el proceso pasa a estado preparado&lt;br /&gt;
&lt;br /&gt;
                  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PA  &amp;lt;---&amp;amp;   |   |   p---&amp;amp;   |   |   p   |   |---&amp;amp;   |   |   &amp;gt;   |   |   |   |   |   |&lt;br /&gt;
              PB  |   |   &amp;lt;---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PC  |   |   |   &amp;lt;---#   |---&amp;amp;   p---|---&amp;amp;   &amp;gt;   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
              PD  |   |   |   |   |   &amp;lt;   |---#   |   |---|   |---|---|---|---&amp;gt;   |   |   |   |   |&lt;br /&gt;
     Planificador X   X   X   X   X   X   X   X   X   X   X   |   |   |   |   X   |   |   |   |   |&lt;br /&gt;
             -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                  0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
Indices de penalizacion: P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;=9      P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;=1    P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;=7/4    P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;=9/6&lt;/div&gt;</summary>
		<author><name>Jesgonbel</name></author>	</entry>

	</feed>