<?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=JCGarrido</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=JCGarrido"/>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php/Especial:Contribuciones/JCGarrido"/>
		<updated>2026-04-08T14:41:57Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.29.0</generator>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Tipos_de_errores_en_discos_magn%C3%A9ticos&amp;diff=1239</id>
		<title>Tipos de errores en discos magnéticos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Tipos_de_errores_en_discos_magn%C3%A9ticos&amp;diff=1239"/>
				<updated>2011-06-07T23:00:46Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: corregidos errores ortográficos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Los errores típicos relacionados con los discos duros magnéticos pueden ser:&lt;br /&gt;
&lt;br /&gt;
* Relacionados con el &amp;lt;ins&amp;gt;material&amp;lt;/ins&amp;gt;:&lt;br /&gt;
** '''Permanentes''': La unidad se encuentra mal en algún sentido. No existe forma “tradicional” de acceder a ellos. En los discos magnéticos existen dos estrategias para tratar estos errores:&lt;br /&gt;
# Archivo que contiene todos los sectores defectuosos.&lt;br /&gt;
# Mantener en una tabla aquellos bloques defectuosos (p.e. FAT).&lt;br /&gt;
** '''Transitorios''': Errores temporales del dispositivo. Por ejemplo, caídas de tensión. La solución consiste en reintentar acceder al    dispositivo un nº finito de veces, antes de declarar el error permanente. También existen rutinas de checksum (dispersión, como CRC)  para detectarlos.&lt;br /&gt;
*&amp;lt;ins&amp;gt;Errores de software&amp;lt;/ins&amp;gt;:&lt;br /&gt;
**Errores de '''programación''':Cuando el error se encuentra en el propio código del programa. Por ejemplo, un acceso a un cilindro, sector o  pista inexistente, o a un fichero inexistente. Para solucionarlo, se devuelve un código de error para indicar al usuario lo que ha  ocurrido.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_ejercicio_1_memoria_virtual&amp;diff=1234</id>
		<title>Solución ejercicio 1 memoria virtual</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_ejercicio_1_memoria_virtual&amp;diff=1234"/>
				<updated>2011-06-07T21:44:27Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* NRU con 2º oportunidad */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= FIFO =&lt;br /&gt;
                                          accesos a páginas&lt;br /&gt;
                 -------------------------------------------------------------------------&lt;br /&gt;
                 |  1  |  1  |  1  |  2  |  3  |  4  |  5  |  3  |  1  |  2  |  3  |  4  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
         |   1   |  1  |  =  |  =  |  =  |  =  |  =  |  5  |  =  |  =  |  =  |  =  |  4  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
 marcos  |   2   |     |     |     |  2  |  =  |  =  |  =  |  =  |  1  |  =  |  =  |  =  |&lt;br /&gt;
         --------------------------------------------------------------------------------&lt;br /&gt;
         |   3   |     |     |     |     |  3  |  =  |  =  |  =  |  =  |  2  |  =  |  =  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
         |   4   |     |     |     |     |     |  4  |  =  |  =  |  =  |  =  |  3  |  =  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
 fallo           |  X  |     |     |  X  |  X  |  X  |  X  |     |  X  |  X  |  X  |  X  |&lt;br /&gt;
 página          -------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
                                               tiempo -&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
                                9&lt;br /&gt;
 talla de fallos de página =  ------ = 0.75&lt;br /&gt;
                                12&lt;br /&gt;
&lt;br /&gt;
= NRU =&lt;br /&gt;
&lt;br /&gt;
En caso de empate, se emplea LRU.&lt;br /&gt;
                                          accesos a páginas&lt;br /&gt;
 &lt;br /&gt;
                 |   r   |   r   |   w   |   r   |   r   |   r   |   r   |   w   |   w   |   w   |   r   |   r   |&lt;br /&gt;
                 -------------------------------------------------------------------------------------------------&lt;br /&gt;
                 |   1   |   1   |   1   |   2   |   3   |   4   |   5   |   3   |   1   |   2   |   3   |   4   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
         |   1   |   1   |   =   |   =   |   =   |   =   |   =   |   =   |   =   |   =   |   =   |   =   |   =   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         | R | M | 1 | 0 | = | = | 1 | 1 | = | = | = | = | = | = | = | = | = | = | = | = | = | = | = | = | = | = |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
 marcos  |   2   |       |       |       |   2   |   =   |   =   |   5   |   =   |   =   |   =   |   =   |   4   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         | R | M |   |   |   |   |   |   | 1 | 0 | = | = | = | = | 1 | 0 | = | = | = | = | = | = | = | = | 1 | 0 |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
         |   3   |       |       |       |       |   3   |   =   |   =   |   3   |   =   |   =   |   =   |   =   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         | R | M |   |   |   |   |   |   |   |   | 1 | 0 | = | = | = | = | 1 | 1 | = | = | = | = | = | = | = | = |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
         |   4   |       |       |       |       |       |   4   |   =   |   =   |   =   |   2   |   =   |   =   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         | R | M |   |   |   |   |   |   |   |   |   |   | 1 | 0 | = | = | = | = | = | = | 1 | 1 | = | = | = | = |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
 fallo           |   X   |       |       |   X   |   X   |   X   |   X   |       |       |   X   |       |   X   |&lt;br /&gt;
 página          -------------------------------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
                                               tiempo -&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
                                 7&lt;br /&gt;
 talla de fallos de página =  ------ = 0.583&lt;br /&gt;
                                12&lt;br /&gt;
&lt;br /&gt;
= NRU con 2º oportunidad =&lt;br /&gt;
&lt;br /&gt;
                                              accesos a páginas&lt;br /&gt;
 &lt;br /&gt;
                 |   r   |   r   |   w   |   r   |   r   |   r   |   r   |   w   |   w   |   w   |   r   |   r   |&lt;br /&gt;
                 -------------------------------------------------------------------------------------------------&lt;br /&gt;
                 |   1   |   1   |   1   |   2   |   3   |   4   |   5   |   3   |   1   |   2   |   3   |   4   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
         |   1   |   1   |   =   |   =   |   =   |   =   |   =   |   5   |   =   |   =   |   =   |   =   |   4   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         |   R   |   1   |   =   |   =   |   =   |   =   |   =   |   1   |   =   |   =   |   =   |   =   |   1   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
 marcos  |   2   |       |       |       |   2   |   =   |   =   |   2   |   =   |   1   |   =   |   =   |   1   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         |   R   |       |       |       |   1   |   =   |   =   |   0   |   =   |   1   |   =   |   =   |   0   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
         |   3   |       |       |       |       |   3   |   =   |   3   |   3   |   =   |   =   |   3   |   3   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         |   R   |       |       |       |       |   1   |   =   |   0   |   1   |   =   |   =   |   1   |   0   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
         |   4   |       |       |       |       |       |   4   |   4   |   =   |   =   |   2   |   =   |   2   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         |   R   |       |       |       |       |       |   1   |   0   |   =   |   =   |   1   |   =   |   0   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
 fallo           |   X   |       |       |   X   |   X   |   X   |   X   |       |   X   |   X   |       |   X   |&lt;br /&gt;
 página          -------------------------------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
                                               tiempo -&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
                                 8&lt;br /&gt;
 talla de fallos de página =  ------ &lt;br /&gt;
                                12&lt;br /&gt;
&lt;br /&gt;
 Creo que es asi, pero no me lo tomeis a pies juntillas que no estoy muy seguro.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Por favor que alguien explique bien este criterio, que en cada ejercicio se aplica de una forma diferente.Gracias&lt;br /&gt;
&lt;br /&gt;
Explicación:&lt;br /&gt;
&lt;br /&gt;
El criterio se basa en combinar el NRU (sin bit M) con FIFO. En la cola se van añadiendo las páginas según se cargan con su respectivo valor del bit R. A la hora de sustituir se mira el candidato de la cabecera de la cola. Si su R=1, se le da una segunda oportunidad desplazándolo al final de la cola y poniendo su bit R=0. Si hubiera tenido el R=0, se hubiera tomada esa página como víctima. Eso es lo que sucede cuando llega la página 5. En ese momento la cola es 1 2 3 4 con su bit R=1 en todas las páginas. Se va mirando el candidato si tiene el bit R=0 como no es así, pasa al final de la cola. Llega un momento en el que la página 1 vuelve a la cabecera(en este caso con R=0),por lo que ahora si es sustituida por la página 5.[[Usuario:Jherrera|Jherrera]]&lt;br /&gt;
&lt;br /&gt;
Una Dudilla : la FIFO es por orden de carga o por orden de acceso?¿ Según veo en el ejercicio lo hace por orden de acceso --[[Usuario:DvS 013|DvS 013]]&lt;br /&gt;
--&lt;br /&gt;
Respuesta : La fifo almacena el tiempo que una página lleva cargada en memoria, por lo que es por orden de carga. [[Usuario : JCGarrido|JCGarrido]]&lt;br /&gt;
&lt;br /&gt;
= LRU =&lt;br /&gt;
&lt;br /&gt;
                                       accesos a páginas&lt;br /&gt;
                 -------------------------------------------------------------------------&lt;br /&gt;
                 |  1  |  1  |  1  |  2  |  3  |  4  |  5  |  3  |  1  |  2  |  3  |  4  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
         |   1   |  1  |  =  |  =  |  =  |  =  |  =  |  5  |  =  |  =  |  =  |  =  |  4  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
 marcos  |   2   |     |     |     |  2  |  =  |  =  |  =  |  =  |  1  |  =  |  =  |  =  |&lt;br /&gt;
         --------------------------------------------------------------------------------&lt;br /&gt;
         |   3   |     |     |     |     |  3  |  =  |  =  |  =  |  =  |  =  |  =  |  =  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
         |   4   |     |     |     |     |     |  4  |  =  |  =  |  =  |  2  |  =  |  =  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
 fallo           |  X  |     |     |  X  |  X  |  X  |  X  |     |  X  |  X  |     |  X  |&lt;br /&gt;
 página          -------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
                                               tiempo -&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
                                8&lt;br /&gt;
 talla de fallos de página =  ------ &lt;br /&gt;
                                12&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= LFU =&lt;br /&gt;
&lt;br /&gt;
                                                   accesos a páginas&lt;br /&gt;
 &lt;br /&gt;
                 |   r   |   r   |   w   |   r   |   r   |   r   |   r   |   w   |   w   |   w   |   r   |   r   |&lt;br /&gt;
                 -------------------------------------------------------------------------------------------------&lt;br /&gt;
                 |   1   |   1   |   1   |   2   |   3   |   4   |   5   |   3   |   1   |   2   |   3   |   4   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
         |   1   |   1   |   1   |   1   |   =   |   =   |   =   |   =   |   =   |   1   |   =   |   =   |   1   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         |   C   |   1   |   2   |   3   |   =   |   =   |   =   |   =   |   =   |   4   |   =   |   =   |   4   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
 marcos  |   2   |       |       |       |   2   |   =   |   =   |   5   |   =   |   =   |   =   |   =   |   4   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         |   C   |       |       |       |   1   |   =   |   =   |   1   |   =   |   =   |   =   |   =   |   1   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
         |   3   |       |       |       |       |   3   |   =   |   =   |   3   |   =   |   =   |   3   |   3   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         |   C   |       |       |       |       |   1   |   =   |   =   |   2   |   =   |   =   |   3   |   3   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
         |   4   |       |       |       |       |       |   4   |   =   |   =   |   =   |   2   |   =   |   2   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         |   C   |       |       |       |       |       |   1   |   =   |   =   |   =   |   1   |   =   |   1   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
 fallo           |   X   |       |       |   X   |   X   |   X   |   X   |       |       |   X   |       |   X   |&lt;br /&gt;
 página          -------------------------------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
                                               tiempo -&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
                                 7&lt;br /&gt;
 talla de fallos de página =  ------ &lt;br /&gt;
                                12&lt;br /&gt;
&lt;br /&gt;
Observación: al quitar un elemento se resetea su contador&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Sustitución por envejecimiento =&lt;br /&gt;
 Periodo de 4, registro R de 3 bits, desempate: FIFO (por orden de carga)&lt;br /&gt;
&lt;br /&gt;
     _________________accesos a página__________________&lt;br /&gt;
     |_1_|_1_|_1_|_2_||_3_|_4_|_5_|_3_||_1_|_2_|_3_|_4_|&lt;br /&gt;
  ======================================================&lt;br /&gt;
   1 | 1 | = | = | = || 1 | = | 5 | 5 || 5 | = | = | 4 |&lt;br /&gt;
     |100| = | = | = ||010| = |100|100||010| = | = |100|&lt;br /&gt;
 m---|---|---|---|---||---|---|---|---||---|---|---|---|&lt;br /&gt;
 a 2 |   |   |   | 2 || 2 | = | = | = || 1 | = | = | = |&lt;br /&gt;
 r   |   |   |   |100||010| = | = | = ||100| = | = | = |&lt;br /&gt;
 c---|---|---|---|---||---|---|---|---||---|---|---|---|&lt;br /&gt;
 o 3 |   |   |   |   || 3 | = | = | = || 3 | 2 | = | = |&lt;br /&gt;
 s   |   |   |   |   ||100| = | = | = ||010|100| = | = |&lt;br /&gt;
  ---|---|---|---|---||---|---|---|---||---|---|---|---|&lt;br /&gt;
   4 |   |   |   |   ||   | 4 | = | = || 4 | = | 3 | = |&lt;br /&gt;
     |   |   |   |   ||   |100| = | = ||010| = |100| = |&lt;br /&gt;
  --------------------------------------------------------&amp;gt; t&lt;br /&gt;
       x           x    x   x   x        x   x   x   x&lt;br /&gt;
 &lt;br /&gt;
                     9&lt;br /&gt;
  tasa fallos pág = ---- &lt;br /&gt;
                     12&lt;br /&gt;
----------------------------------&lt;br /&gt;
En este ejercicio hay un error cuando en la iteraccion 8 entra el 3, se ha puesto 5 100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     _________________accesos a página__________________&lt;br /&gt;
     |_1_|_1_|_1_|_2_||_3_|_4_|_5_|_3_||_1_|_2_|_3_|_4_|&lt;br /&gt;
  ======================================================&lt;br /&gt;
   1 | 1 | = | = | = || 1 | = | 5 | = || 5 | = | = | 4 |&lt;br /&gt;
     |100| = | = | = ||010| = |100| = ||010| = | = |100|&lt;br /&gt;
 m---|---|---|---|---||---|---|---|---||---|---|---|---|&lt;br /&gt;
 a 2 |   |   |   | 2 || 2 | = | = | = || 1 | = | = | = |&lt;br /&gt;
 r   |   |   |   |100||010| = | = | = ||100| = | = | = |&lt;br /&gt;
 c---|---|---|---|---||---|---|---|---||---|---|---|---|&lt;br /&gt;
 o 3 |   |   |   |   || 3 | = | = | 3 || 3 | = | 3 | = |&lt;br /&gt;
 s   |   |   |   |   ||100| = | = |110||011| = |111| = |&lt;br /&gt;
  ---|---|---|---|---||---|---|---|---||---|---|---|---|&lt;br /&gt;
   4 |   |   |   |   ||   | 4 | = | = || 4 | 2 | = | = |&lt;br /&gt;
     |   |   |   |   ||   |100| = | = ||010|100| = | = |&lt;br /&gt;
  --------------------------------------------------------&amp;gt; t&lt;br /&gt;
       x           x    x   x   x        x   x   x   x&lt;br /&gt;
&lt;br /&gt;
Esta seria la solucion creo --[[Usuario:Luidela1|Luidela1]] 19:07 7 jun 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yo creo que esta solución no es correcta, la correcta es la de arriba. En el segundo acceso al 3, se activaría el bit más significativo del registro R que ya está activado, luego no se activa. No entiendo porqué se activa el bit 2 del registro.&lt;br /&gt;
--[[Usuario:Robertomartin|Robertomartin]] 19:17 7 jun 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
Exacto, en el segundo periodo, cuando hace el segundo acceso al 3, este ya tenia 100, por lo cual se queda igual (100) y al pasar el 3 periodo el 3 ya pasaria a ser 010, y al hacer el desempate con 4 (010), como 3 está cargado antes que el cuatro, 3 es la página elegida. --[[Usuario:Fergaliay|Fergaliay]]&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_ejercicio_1_memoria_virtual&amp;diff=1233</id>
		<title>Solución ejercicio 1 memoria virtual</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_ejercicio_1_memoria_virtual&amp;diff=1233"/>
				<updated>2011-06-07T21:43:54Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* NRU con 2º oportunidad */ Respuesta&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= FIFO =&lt;br /&gt;
                                          accesos a páginas&lt;br /&gt;
                 -------------------------------------------------------------------------&lt;br /&gt;
                 |  1  |  1  |  1  |  2  |  3  |  4  |  5  |  3  |  1  |  2  |  3  |  4  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
         |   1   |  1  |  =  |  =  |  =  |  =  |  =  |  5  |  =  |  =  |  =  |  =  |  4  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
 marcos  |   2   |     |     |     |  2  |  =  |  =  |  =  |  =  |  1  |  =  |  =  |  =  |&lt;br /&gt;
         --------------------------------------------------------------------------------&lt;br /&gt;
         |   3   |     |     |     |     |  3  |  =  |  =  |  =  |  =  |  2  |  =  |  =  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
         |   4   |     |     |     |     |     |  4  |  =  |  =  |  =  |  =  |  3  |  =  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
 fallo           |  X  |     |     |  X  |  X  |  X  |  X  |     |  X  |  X  |  X  |  X  |&lt;br /&gt;
 página          -------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
                                               tiempo -&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
                                9&lt;br /&gt;
 talla de fallos de página =  ------ = 0.75&lt;br /&gt;
                                12&lt;br /&gt;
&lt;br /&gt;
= NRU =&lt;br /&gt;
&lt;br /&gt;
En caso de empate, se emplea LRU.&lt;br /&gt;
                                          accesos a páginas&lt;br /&gt;
 &lt;br /&gt;
                 |   r   |   r   |   w   |   r   |   r   |   r   |   r   |   w   |   w   |   w   |   r   |   r   |&lt;br /&gt;
                 -------------------------------------------------------------------------------------------------&lt;br /&gt;
                 |   1   |   1   |   1   |   2   |   3   |   4   |   5   |   3   |   1   |   2   |   3   |   4   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
         |   1   |   1   |   =   |   =   |   =   |   =   |   =   |   =   |   =   |   =   |   =   |   =   |   =   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         | R | M | 1 | 0 | = | = | 1 | 1 | = | = | = | = | = | = | = | = | = | = | = | = | = | = | = | = | = | = |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
 marcos  |   2   |       |       |       |   2   |   =   |   =   |   5   |   =   |   =   |   =   |   =   |   4   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         | R | M |   |   |   |   |   |   | 1 | 0 | = | = | = | = | 1 | 0 | = | = | = | = | = | = | = | = | 1 | 0 |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
         |   3   |       |       |       |       |   3   |   =   |   =   |   3   |   =   |   =   |   =   |   =   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         | R | M |   |   |   |   |   |   |   |   | 1 | 0 | = | = | = | = | 1 | 1 | = | = | = | = | = | = | = | = |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
         |   4   |       |       |       |       |       |   4   |   =   |   =   |   =   |   2   |   =   |   =   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         | R | M |   |   |   |   |   |   |   |   |   |   | 1 | 0 | = | = | = | = | = | = | 1 | 1 | = | = | = | = |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
 fallo           |   X   |       |       |   X   |   X   |   X   |   X   |       |       |   X   |       |   X   |&lt;br /&gt;
 página          -------------------------------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
                                               tiempo -&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
                                 7&lt;br /&gt;
 talla de fallos de página =  ------ = 0.583&lt;br /&gt;
                                12&lt;br /&gt;
&lt;br /&gt;
= NRU con 2º oportunidad =&lt;br /&gt;
&lt;br /&gt;
                                              accesos a páginas&lt;br /&gt;
 &lt;br /&gt;
                 |   r   |   r   |   w   |   r   |   r   |   r   |   r   |   w   |   w   |   w   |   r   |   r   |&lt;br /&gt;
                 -------------------------------------------------------------------------------------------------&lt;br /&gt;
                 |   1   |   1   |   1   |   2   |   3   |   4   |   5   |   3   |   1   |   2   |   3   |   4   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
         |   1   |   1   |   =   |   =   |   =   |   =   |   =   |   5   |   =   |   =   |   =   |   =   |   4   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         |   R   |   1   |   =   |   =   |   =   |   =   |   =   |   1   |   =   |   =   |   =   |   =   |   1   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
 marcos  |   2   |       |       |       |   2   |   =   |   =   |   2   |   =   |   1   |   =   |   =   |   1   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         |   R   |       |       |       |   1   |   =   |   =   |   0   |   =   |   1   |   =   |   =   |   0   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
         |   3   |       |       |       |       |   3   |   =   |   3   |   3   |   =   |   =   |   3   |   3   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         |   R   |       |       |       |       |   1   |   =   |   0   |   1   |   =   |   =   |   1   |   0   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
         |   4   |       |       |       |       |       |   4   |   4   |   =   |   =   |   2   |   =   |   2   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         |   R   |       |       |       |       |       |   1   |   0   |   =   |   =   |   1   |   =   |   0   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
 fallo           |   X   |       |       |   X   |   X   |   X   |   X   |       |   X   |   X   |       |   X   |&lt;br /&gt;
 página          -------------------------------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
                                               tiempo -&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
                                 8&lt;br /&gt;
 talla de fallos de página =  ------ &lt;br /&gt;
                                12&lt;br /&gt;
&lt;br /&gt;
 Creo que es asi, pero no me lo tomeis a pies juntillas que no estoy muy seguro.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Por favor que alguien explique bien este criterio, que en cada ejercicio se aplica de una forma diferente.Gracias&lt;br /&gt;
&lt;br /&gt;
Explicación:&lt;br /&gt;
&lt;br /&gt;
El criterio se basa en combinar el NRU (sin bit M) con FIFO. En la cola se van añadiendo las páginas según se cargan con su respectivo valor del bit R. A la hora de sustituir se mira el candidato de la cabecera de la cola. Si su R=1, se le da una segunda oportunidad desplazándolo al final de la cola y poniendo su bit R=0. Si hubiera tenido el R=0, se hubiera tomada esa página como víctima. Eso es lo que sucede cuando llega la página 5. En ese momento la cola es 1 2 3 4 con su bit R=1 en todas las páginas. Se va mirando el candidato si tiene el bit R=0 como no es así, pasa al final de la cola. Llega un momento en el que la página 1 vuelve a la cabecera(en este caso con R=0),por lo que ahora si es sustituida por la página 5.[[Usuario:Jherrera|Jherrera]]&lt;br /&gt;
&lt;br /&gt;
Una Dudilla : la FIFO es por orden de carga o por orden de acceso?¿ Según veo en el ejercicio lo hace por orden de acceso --[[Usuario:DvS 013|DvS 013]]&lt;br /&gt;
Respuesta : La fifo almacena el tiempo que una página lleva cargada en memoria, por lo que es por orden de carga. [[Usuario : JCGarrido|JCGarrido]]&lt;br /&gt;
&lt;br /&gt;
= LRU =&lt;br /&gt;
&lt;br /&gt;
                                       accesos a páginas&lt;br /&gt;
                 -------------------------------------------------------------------------&lt;br /&gt;
                 |  1  |  1  |  1  |  2  |  3  |  4  |  5  |  3  |  1  |  2  |  3  |  4  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
         |   1   |  1  |  =  |  =  |  =  |  =  |  =  |  5  |  =  |  =  |  =  |  =  |  4  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
 marcos  |   2   |     |     |     |  2  |  =  |  =  |  =  |  =  |  1  |  =  |  =  |  =  |&lt;br /&gt;
         --------------------------------------------------------------------------------&lt;br /&gt;
         |   3   |     |     |     |     |  3  |  =  |  =  |  =  |  =  |  =  |  =  |  =  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
         |   4   |     |     |     |     |     |  4  |  =  |  =  |  =  |  2  |  =  |  =  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
 fallo           |  X  |     |     |  X  |  X  |  X  |  X  |     |  X  |  X  |     |  X  |&lt;br /&gt;
 página          -------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
                                               tiempo -&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
                                8&lt;br /&gt;
 talla de fallos de página =  ------ &lt;br /&gt;
                                12&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= LFU =&lt;br /&gt;
&lt;br /&gt;
                                                   accesos a páginas&lt;br /&gt;
 &lt;br /&gt;
                 |   r   |   r   |   w   |   r   |   r   |   r   |   r   |   w   |   w   |   w   |   r   |   r   |&lt;br /&gt;
                 -------------------------------------------------------------------------------------------------&lt;br /&gt;
                 |   1   |   1   |   1   |   2   |   3   |   4   |   5   |   3   |   1   |   2   |   3   |   4   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
         |   1   |   1   |   1   |   1   |   =   |   =   |   =   |   =   |   =   |   1   |   =   |   =   |   1   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         |   C   |   1   |   2   |   3   |   =   |   =   |   =   |   =   |   =   |   4   |   =   |   =   |   4   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
 marcos  |   2   |       |       |       |   2   |   =   |   =   |   5   |   =   |   =   |   =   |   =   |   4   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         |   C   |       |       |       |   1   |   =   |   =   |   1   |   =   |   =   |   =   |   =   |   1   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
         |   3   |       |       |       |       |   3   |   =   |   =   |   3   |   =   |   =   |   3   |   3   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         |   C   |       |       |       |       |   1   |   =   |   =   |   2   |   =   |   =   |   3   |   3   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
         |   4   |       |       |       |       |       |   4   |   =   |   =   |   =   |   2   |   =   |   2   |&lt;br /&gt;
         |       |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|&lt;br /&gt;
         |   C   |       |       |       |       |       |   1   |   =   |   =   |   =   |   1   |   =   |   1   |&lt;br /&gt;
         ---------------------------------------------------------------------------------------------------------&lt;br /&gt;
 fallo           |   X   |       |       |   X   |   X   |   X   |   X   |       |       |   X   |       |   X   |&lt;br /&gt;
 página          -------------------------------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
                                               tiempo -&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
                                 7&lt;br /&gt;
 talla de fallos de página =  ------ &lt;br /&gt;
                                12&lt;br /&gt;
&lt;br /&gt;
Observación: al quitar un elemento se resetea su contador&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Sustitución por envejecimiento =&lt;br /&gt;
 Periodo de 4, registro R de 3 bits, desempate: FIFO (por orden de carga)&lt;br /&gt;
&lt;br /&gt;
     _________________accesos a página__________________&lt;br /&gt;
     |_1_|_1_|_1_|_2_||_3_|_4_|_5_|_3_||_1_|_2_|_3_|_4_|&lt;br /&gt;
  ======================================================&lt;br /&gt;
   1 | 1 | = | = | = || 1 | = | 5 | 5 || 5 | = | = | 4 |&lt;br /&gt;
     |100| = | = | = ||010| = |100|100||010| = | = |100|&lt;br /&gt;
 m---|---|---|---|---||---|---|---|---||---|---|---|---|&lt;br /&gt;
 a 2 |   |   |   | 2 || 2 | = | = | = || 1 | = | = | = |&lt;br /&gt;
 r   |   |   |   |100||010| = | = | = ||100| = | = | = |&lt;br /&gt;
 c---|---|---|---|---||---|---|---|---||---|---|---|---|&lt;br /&gt;
 o 3 |   |   |   |   || 3 | = | = | = || 3 | 2 | = | = |&lt;br /&gt;
 s   |   |   |   |   ||100| = | = | = ||010|100| = | = |&lt;br /&gt;
  ---|---|---|---|---||---|---|---|---||---|---|---|---|&lt;br /&gt;
   4 |   |   |   |   ||   | 4 | = | = || 4 | = | 3 | = |&lt;br /&gt;
     |   |   |   |   ||   |100| = | = ||010| = |100| = |&lt;br /&gt;
  --------------------------------------------------------&amp;gt; t&lt;br /&gt;
       x           x    x   x   x        x   x   x   x&lt;br /&gt;
 &lt;br /&gt;
                     9&lt;br /&gt;
  tasa fallos pág = ---- &lt;br /&gt;
                     12&lt;br /&gt;
----------------------------------&lt;br /&gt;
En este ejercicio hay un error cuando en la iteraccion 8 entra el 3, se ha puesto 5 100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     _________________accesos a página__________________&lt;br /&gt;
     |_1_|_1_|_1_|_2_||_3_|_4_|_5_|_3_||_1_|_2_|_3_|_4_|&lt;br /&gt;
  ======================================================&lt;br /&gt;
   1 | 1 | = | = | = || 1 | = | 5 | = || 5 | = | = | 4 |&lt;br /&gt;
     |100| = | = | = ||010| = |100| = ||010| = | = |100|&lt;br /&gt;
 m---|---|---|---|---||---|---|---|---||---|---|---|---|&lt;br /&gt;
 a 2 |   |   |   | 2 || 2 | = | = | = || 1 | = | = | = |&lt;br /&gt;
 r   |   |   |   |100||010| = | = | = ||100| = | = | = |&lt;br /&gt;
 c---|---|---|---|---||---|---|---|---||---|---|---|---|&lt;br /&gt;
 o 3 |   |   |   |   || 3 | = | = | 3 || 3 | = | 3 | = |&lt;br /&gt;
 s   |   |   |   |   ||100| = | = |110||011| = |111| = |&lt;br /&gt;
  ---|---|---|---|---||---|---|---|---||---|---|---|---|&lt;br /&gt;
   4 |   |   |   |   ||   | 4 | = | = || 4 | 2 | = | = |&lt;br /&gt;
     |   |   |   |   ||   |100| = | = ||010|100| = | = |&lt;br /&gt;
  --------------------------------------------------------&amp;gt; t&lt;br /&gt;
       x           x    x   x   x        x   x   x   x&lt;br /&gt;
&lt;br /&gt;
Esta seria la solucion creo --[[Usuario:Luidela1|Luidela1]] 19:07 7 jun 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yo creo que esta solución no es correcta, la correcta es la de arriba. En el segundo acceso al 3, se activaría el bit más significativo del registro R que ya está activado, luego no se activa. No entiendo porqué se activa el bit 2 del registro.&lt;br /&gt;
--[[Usuario:Robertomartin|Robertomartin]] 19:17 7 jun 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
Exacto, en el segundo periodo, cuando hace el segundo acceso al 3, este ya tenia 100, por lo cual se queda igual (100) y al pasar el 3 periodo el 3 ya pasaria a ser 010, y al hacer el desempate con 4 (010), como 3 está cargado antes que el cuatro, 3 es la página elegida. --[[Usuario:Fergaliay|Fergaliay]]&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_ejercicio_2_memoria_virtual&amp;diff=1216</id>
		<title>Solución ejercicio 2 memoria virtual</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_ejercicio_2_memoria_virtual&amp;diff=1216"/>
				<updated>2011-06-07T19:26:05Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: Corrección ortográfica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==MRU==&lt;br /&gt;
                                       accesos a páginas&lt;br /&gt;
                 -------------------------------------------------------------------------&lt;br /&gt;
                 |  1  |  2  |  3  |  4  |  5  |  6  |  1  |  2  |  3  |  4  |  5  |  6  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
         |   1   |  1  |  =  |  =  |  =  |  =  |  =  |  =  |  =  |  =  |  =  |  =  |  1  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
 marcos  |   2   |     |  2  |  =  |  =  |  =  |  =  |  =  |  =  |  =  |  =  |  =  |  2  |&lt;br /&gt;
         --------------------------------------------------------------------------------&lt;br /&gt;
         |   3   |     |     |  3  |  =  |  =  |  =  |  =  |  =  |  =  |  4  |  5  |  5  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
         |   4   |     |     |     |  4  |  5  |  6  |  =  |  =  |  =  |  =  |  =  |  6  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
 fallo           |  X  |  X  |  X  |  X  |  X  |  X  |     |     |     |  X  |  X  |     |&lt;br /&gt;
 página          -------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
                                               tiempo -&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
                                8&lt;br /&gt;
 talla de fallos de página =  ------ &lt;br /&gt;
                                12&lt;br /&gt;
&lt;br /&gt;
==LRU==&lt;br /&gt;
                                       accesos a páginas&lt;br /&gt;
                 -------------------------------------------------------------------------&lt;br /&gt;
                 |  1  |  2  |  3  |  4  |  5  |  6  |  1  |  2  |  3  |  4  |  5  |  6  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
         |   1   |  1  |  =  |  =  |  =  |  5  |  =  |  =  |  =  |  3  |  =  |  =  |  3  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
 marcos  |   2   |     |  2  |  =  |  =  |  =  |  6  |  =  |  =  |  =  |  4  |  =  |  4  |&lt;br /&gt;
         --------------------------------------------------------------------------------&lt;br /&gt;
         |   3   |     |     |  3  |  =  |  =  |  =  |  1  |  =  |  =  |  =  |  5  |  5  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
         |   4   |     |     |     |  4  |  =  |  =  |  =  |  2  |  =  |  =  |  =  |  6  |&lt;br /&gt;
         ---------------------------------------------------------------------------------&lt;br /&gt;
 fallo           |  X  |  X  |  X  |  X  |  X  |  X  |  X  |  X  |  X  |  X  |  X  |  X  |&lt;br /&gt;
 página          -------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
                                               tiempo -&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
                                12&lt;br /&gt;
 talla de fallos de página =  ------ = 1&lt;br /&gt;
                                12&lt;br /&gt;
&lt;br /&gt;
Ofrece mejor resultado el MRU en este caso porque las páginas vienen de forma secuencial. Esto repercute negativamente en el LRU porque supone que la página menos recientemente usada no va a volver a ser pedida, hecho que no ocurre en la secuencia de páginas. Por lo que estamos descargando las páginas que en futuro cercano va a volver a ser utilizado.[[Usuario:Jherrera|Jherrera]]&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol_7&amp;diff=1171</id>
		<title>Sol 7</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol_7&amp;diff=1171"/>
				<updated>2011-06-07T13:22:36Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: cambiado el volver de sitio&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La lista de paginas a la que se acceden son las siguientes : &lt;br /&gt;
&lt;br /&gt;
2--2--3--1--1--3--4--5--1--1--2--3--4&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
                              ___1____ 2_____3_____4___&lt;br /&gt;
                 1º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  2  |     |     |     | Nª de fallos: 1   Cola = 2-&lt;br /&gt;
                  Pagina 2    |_R=1_|_R=0_|_R=0_|_R=0_|&lt;br /&gt;
                 2º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  2  |     |     |     | Nª de fallos: 1   Cola = 2-&lt;br /&gt;
                  Pagina 2    |_R=1_|_R=0_|_R=0_|_R=0_| &lt;br /&gt;
                 3º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  2  |  3  |     |     | Nª de fallos: 2   Cola = 2-3&lt;br /&gt;
                  Pagina 3    |_R=1_|_R=1_|_R=0_|_R=0_|    &lt;br /&gt;
                 4º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  2  |  3  |  1  |     | Nª de fallos: 3   Cola = 2-3-1&lt;br /&gt;
                  Pagina 1    |_R=1_|_R=1_|_R=1_|_R=0_| &lt;br /&gt;
                 5º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  2  |  3  |  1  |     | Nª de fallos: 3   Cola = 2-3-1&lt;br /&gt;
                  Pagina 1    |_R=1_|_R=1_|_R=1_|_R=0_|&lt;br /&gt;
                 6º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  2  |  3  |  1  |     | Nª de fallos: 3   Cola = 2-1-3&lt;br /&gt;
                  Pagina 3    |_R=1_|_R=1_|_R=1_|_R=0_|&lt;br /&gt;
                 7º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  2  |  3  |  1  |  4  | Nª de fallos: 4   Cola = 2-1-3-4&lt;br /&gt;
                  Pagina 4    |_R=1_|_R=1_|_R=1_|_R=1_| &lt;br /&gt;
                 8º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  5  |  3  |  1  |  4  | Nª de fallos: 5   Cola = 1-3-4-5&lt;br /&gt;
                  Pagina 5    |_R=1_|_R=0_|_R=0_|_R=0_|    &lt;br /&gt;
                 9º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  5  |  3  |  1  |  4  | Nª de fallos: 5   Cola = 3-4-5-1&lt;br /&gt;
                  Pagina 1    |_R=1_|_R=0_|_R=1_|_R=0_|  &lt;br /&gt;
                10º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  5  |  3  |  1  |  4  | Nª de fallos: 5   Cola = 3-4-5-1&lt;br /&gt;
                  Pagina 1    |_R=1_|_R=0_|_R=1_|_R=0_|  &lt;br /&gt;
                11º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  5  |  2  |  1  |  4  | Nª de fallos: 6   Cola = 4-5-1-2&lt;br /&gt;
                  Pagina 2    |_R=1_|_R=1_|_R=1_|_R=0_|&lt;br /&gt;
                12º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  5  |  2  |  1  |  3  | Nª de fallos: 7   Cola = 5-1-2-3&lt;br /&gt;
                  Pagina 3    |_R=1_|_R=1_|_R=1_|_R=1_| &lt;br /&gt;
                13º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  4  |  2  |  1  |  3  | Nª de fallos: 8   Cola = 1-2-3-4&lt;br /&gt;
                  Pagina 4    |_R=1_|_R=0_|_R=0_|_R=0_|              &lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Fcoramlop|Fcoramlop]] 22:58 4 jun 2011 (UTC)&lt;br /&gt;
                     8&lt;br /&gt;
  tasa fallos pág = ---- = 0,615&lt;br /&gt;
                     13&lt;br /&gt;
&lt;br /&gt;
- Duda: En el acceso nº6 ¿Por que ponemos el 3 al final de la cola? se supone que solo se hace eso si recorremos la cola y el bit R se encuentra a 1, entonces ponemos el bit a 0 y colocamos la pagina al final de la cola para darle una 2º oportunidad&lt;br /&gt;
&lt;br /&gt;
&amp;lt;[[Usuario:PCamino|pablo]]&amp;gt;-Respuesta a la duda: Porque asi funcionan las colas. Si llega un elemento que ya habia, pues le corresponde ponerse al final...o no?&lt;br /&gt;
&lt;br /&gt;
[[Usuario:alberto|alberto]] ---&amp;gt;En el acceso 11 , el R de 5 debería de estar a 0 , puesto que al meter 2 vamos recorriendo para encontrar algún R a 0(En este caso sustituimos 3 que tiene su R a 0) y además si durante esa búsqueda encontramos algún R=1 , debemos ponerlo a 0 y ponerlo al final de la cola para darle una segunda oportunidad. Por tanto pienso que  el acceso 11 quedaría:  5(0) 2(1) 1(1) 4(0) Cola=4-1-5-2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Respuesta 2 a duda: Pienso que en el acceso 6 no debemos tocar las posiciones de la cola, ya que la cola sólo se toca cuando ocurre un reemplazo. En este caso no es como lo hacíamos con el planificador,que teníamos que elegir según el orden para darle paso a un proceso, sino que en este caso ya tenemos un orden de páginas preestablecido. Por tanto, aunque vuelva a aparecer el 3, su posición en la cola no cambia, ya que ésta lo que indica es el orden en el que apareció por primera vez. Claro que también debemos tener en cuenta la puesta a cero cuando recorremos la cola, pero en el acceso 6 todavía no la hemos recorrido,ya que no se ha sucedido ningún reemplazo. Por favor, corríjanme si me equivoco, pero estoy bastante seguro de que lo que he escrito es cierto.[[Usuario:JCGarrido|JCGarrido]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Criterios_de_reemplazo|Volver]]&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol_7&amp;diff=1170</id>
		<title>Sol 7</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol_7&amp;diff=1170"/>
				<updated>2011-06-07T13:21:58Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: Respuesta 2 a duda&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La lista de paginas a la que se acceden son las siguientes : &lt;br /&gt;
&lt;br /&gt;
2--2--3--1--1--3--4--5--1--1--2--3--4&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
                              ___1____ 2_____3_____4___&lt;br /&gt;
                 1º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  2  |     |     |     | Nª de fallos: 1   Cola = 2-&lt;br /&gt;
                  Pagina 2    |_R=1_|_R=0_|_R=0_|_R=0_|&lt;br /&gt;
                 2º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  2  |     |     |     | Nª de fallos: 1   Cola = 2-&lt;br /&gt;
                  Pagina 2    |_R=1_|_R=0_|_R=0_|_R=0_| &lt;br /&gt;
                 3º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  2  |  3  |     |     | Nª de fallos: 2   Cola = 2-3&lt;br /&gt;
                  Pagina 3    |_R=1_|_R=1_|_R=0_|_R=0_|    &lt;br /&gt;
                 4º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  2  |  3  |  1  |     | Nª de fallos: 3   Cola = 2-3-1&lt;br /&gt;
                  Pagina 1    |_R=1_|_R=1_|_R=1_|_R=0_| &lt;br /&gt;
                 5º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  2  |  3  |  1  |     | Nª de fallos: 3   Cola = 2-3-1&lt;br /&gt;
                  Pagina 1    |_R=1_|_R=1_|_R=1_|_R=0_|&lt;br /&gt;
                 6º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  2  |  3  |  1  |     | Nª de fallos: 3   Cola = 2-1-3&lt;br /&gt;
                  Pagina 3    |_R=1_|_R=1_|_R=1_|_R=0_|&lt;br /&gt;
                 7º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  2  |  3  |  1  |  4  | Nª de fallos: 4   Cola = 2-1-3-4&lt;br /&gt;
                  Pagina 4    |_R=1_|_R=1_|_R=1_|_R=1_| &lt;br /&gt;
                 8º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  5  |  3  |  1  |  4  | Nª de fallos: 5   Cola = 1-3-4-5&lt;br /&gt;
                  Pagina 5    |_R=1_|_R=0_|_R=0_|_R=0_|    &lt;br /&gt;
                 9º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  5  |  3  |  1  |  4  | Nª de fallos: 5   Cola = 3-4-5-1&lt;br /&gt;
                  Pagina 1    |_R=1_|_R=0_|_R=1_|_R=0_|  &lt;br /&gt;
                10º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  5  |  3  |  1  |  4  | Nª de fallos: 5   Cola = 3-4-5-1&lt;br /&gt;
                  Pagina 1    |_R=1_|_R=0_|_R=1_|_R=0_|  &lt;br /&gt;
                11º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  5  |  2  |  1  |  4  | Nª de fallos: 6   Cola = 4-5-1-2&lt;br /&gt;
                  Pagina 2    |_R=1_|_R=1_|_R=1_|_R=0_|&lt;br /&gt;
                12º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  5  |  2  |  1  |  3  | Nª de fallos: 7   Cola = 5-1-2-3&lt;br /&gt;
                  Pagina 3    |_R=1_|_R=1_|_R=1_|_R=1_| &lt;br /&gt;
                13º Acceso    |     |     |     |     |&lt;br /&gt;
                 Acceso a:    |  4  |  2  |  1  |  3  | Nª de fallos: 8   Cola = 1-2-3-4&lt;br /&gt;
                  Pagina 4    |_R=1_|_R=0_|_R=0_|_R=0_|              &lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Fcoramlop|Fcoramlop]] 22:58 4 jun 2011 (UTC)&lt;br /&gt;
                     8&lt;br /&gt;
  tasa fallos pág = ---- = 0,615&lt;br /&gt;
                     13&lt;br /&gt;
&lt;br /&gt;
- Duda: En el acceso nº6 ¿Por que ponemos el 3 al final de la cola? se supone que solo se hace eso si recorremos la cola y el bit R se encuentra a 1, entonces ponemos el bit a 0 y colocamos la pagina al final de la cola para darle una 2º oportunidad&lt;br /&gt;
&lt;br /&gt;
&amp;lt;[[Usuario:PCamino|pablo]]&amp;gt;-Respuesta a la duda: Porque asi funcionan las colas. Si llega un elemento que ya habia, pues le corresponde ponerse al final...o no?&lt;br /&gt;
&lt;br /&gt;
[[Usuario:alberto|alberto]] ---&amp;gt;En el acceso 11 , el R de 5 debería de estar a 0 , puesto que al meter 2 vamos recorriendo para encontrar algún R a 0(En este caso sustituimos 3 que tiene su R a 0) y además si durante esa búsqueda encontramos algún R=1 , debemos ponerlo a 0 y ponerlo al final de la cola para darle una segunda oportunidad. Por tanto pienso que  el acceso 11 quedaría:  5(0) 2(1) 1(1) 4(0) Cola=4-1-5-2&lt;br /&gt;
&lt;br /&gt;
[[Criterios_de_reemplazo|Volver]]&lt;br /&gt;
&lt;br /&gt;
- Respuesta 2 a duda: Pienso que en el acceso 6 no debemos tocar las posiciones de la cola, ya que la cola sólo se toca cuando ocurre un reemplazo. En este caso no es como lo hacíamos con el planificador,que teníamos que elegir según el orden para darle paso a un proceso, sino que en este caso ya tenemos un orden de páginas preestablecido. Por tanto, aunque vuelva a aparecer el 3, su posición en la cola no cambia, ya que ésta lo que indica es el orden en el que apareció por primera vez. Claro que también debemos tener en cuenta la puesta a cero cuando recorremos la cola, pero en el acceso 6 todavía no la hemos recorrido,ya que no se ha sucedido ningún reemplazo. Por favor, corríjanme si me equivoco, pero estoy bastante seguro de que lo que he escrito es cierto.[[Usuario:JCGarrido|JCGarrido]]&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_fijas&amp;diff=1063</id>
		<title>SO multiprogramables con particiones fijas</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_fijas&amp;diff=1063"/>
				<updated>2011-06-06T11:47:59Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Mecanismos de protección de memoria */ Reescrito &amp;quot;Ampliación bits de proteccion&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La memoria se encuentra dividida en particiones, en cada una habrá un proceso. Por lo tanto, se pueden ejecutar tantos procesos como particiones haya.&lt;br /&gt;
&lt;br /&gt;
=Estrategias=&lt;br /&gt;
Las estrategias a seguir cuando no hay memoria suficiente para otro proceso son dos:&lt;br /&gt;
*Cancelación: &amp;quot;lo siento, no hay memoria libre, prueba más tarde&amp;quot;.&lt;br /&gt;
*Espera: añadir el proceso a una cola hasta que haya memoria disponible.&lt;br /&gt;
&lt;br /&gt;
=Limitaciones=&lt;br /&gt;
*Si un proceso necesita mayor memoria que la partición más grande, entonces éste no se ejecuta.&lt;br /&gt;
*Desperdicio de memoria. Por ejemplo, si los procesos son muy pequeños y las particiones grandes.&lt;br /&gt;
&lt;br /&gt;
=Criterios de asignación=&lt;br /&gt;
Se lanza un proceso, y hay que elegir a qué partición va (estrategia de espera). Puede haber una cola por partición, o una sola para todas las particiones.&lt;br /&gt;
&lt;br /&gt;
 Ej: tenemos los siguientes procesos: m(P1) = 6KB, m(P2) = 1KB, m(P3) = 3KB, m(P4) = 31KB, m(P5) = 30KB;&lt;br /&gt;
     suponemos que la decisión sobre la asignación de procesos a particiones se hace ordenadamente de manera consecutiva según el número del proceso&lt;br /&gt;
     y una memoria de 64 KB divididos en 4 huecos como sigue:&lt;br /&gt;
  _____&lt;br /&gt;
 |_____| H1 = 8KB   &lt;br /&gt;
 |_____| H2 = 8KB &lt;br /&gt;
 |     |&lt;br /&gt;
 |_____| H3 = 16KB&lt;br /&gt;
 |     |&lt;br /&gt;
 |     |&lt;br /&gt;
 |     | H4 = 32KB   &lt;br /&gt;
 |_____|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste estático''': se adjudica cada proceso a la menor partición que quepa. Complejidad: O(1)&lt;br /&gt;
&lt;br /&gt;
[[solución mejor ajuste estático|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Primer ajuste''': cuando una partición queda libre, se asigna el primer proceso según el orden de la cola que quepa en ella. Complejidad: O(1)&lt;br /&gt;
&lt;br /&gt;
[[solución primer ajuste|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste dinámico''': cuando una partición queda libre, se asigna el mayor proceso que quepa en ella. Complejidad: O(nlog(p))&lt;br /&gt;
&lt;br /&gt;
[[solución ajuste dinámico|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste dinámico con aplazamiento limitado''': Es una variante del criterio anterior que evita el aplazamiento indefinido. Cuando queda una partición libre, se selecciona el mayor proceso que quepa en ella, pero se cuenta el nº de veces que un proceso se aplaza. Si se superan esas '''n''' veces (umbral), se le da paso.&lt;br /&gt;
&lt;br /&gt;
*'''Subparticiones''': No es un criterio como tal sino que viene a complementar a los anteriores. Si no hay un proceso que pueda aprovechar la partición madre: se asignan las subparticiones a procesos pequeños (para que el desperdicio interno sea lo menor posible). Si llega un proceso grande: los procesos pequeños se vuelcan a disco y se asigna partición madre.&lt;br /&gt;
''Partición madre'': tipo especial de partición que se puede dividir en múltiples particiones menores.&lt;br /&gt;
&lt;br /&gt;
[[Otro ejemplo|Otro ejemplo]]&lt;br /&gt;
&lt;br /&gt;
= Métodos de colocación en memoria =&lt;br /&gt;
&lt;br /&gt;
*'''Montaje absoluto''': Se asigna una dirección de memoria constante, siendo por tanto este método muy restrictivo. Se utiliza para la carga del sistema operativo.&lt;br /&gt;
&lt;br /&gt;
* '''Carga con reubicación''': Al realizar la carga, se le aplica a las direcciones lógicas del programa un ''offset'' o desplazamiento. Este desplazamiento es establecido por el programador antes de que se ejecute el programa.&lt;br /&gt;
&lt;br /&gt;
* '''Reubicación dinámica''': A diferencia de la carga con reubicación, el desplazamiento se asigna en tiempo de ejecución.&lt;br /&gt;
** '''Reubicación dinámica parcial''': Es una variante del anterior, en la que existe también un registro límite.&lt;br /&gt;
&lt;br /&gt;
= Mecanismos de protección de memoria =&lt;br /&gt;
&lt;br /&gt;
Es necesario proteger el SO frente a procesos; y proteger a los procesos entre sí.&lt;br /&gt;
&lt;br /&gt;
* '''Ampliación bits de protección''' : Se le asocia a cada palabra de la memoria principal un bit para saber si pertenece al SO o al proceso.&lt;br /&gt;
&lt;br /&gt;
* '''Ampliación registros valla''' : De esta manera se conocen la posición inicial y final, de manera que si no está entre esas dos posiciones no se permite el acceso a memoria.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_fijas&amp;diff=1058</id>
		<title>SO multiprogramables con particiones fijas</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_fijas&amp;diff=1058"/>
				<updated>2011-06-06T11:35:49Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Criterios de asignación */ Corrección ortográfica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La memoria se encuentra dividida en particiones, en cada una habrá un proceso. Por lo tanto, se pueden ejecutar tantos procesos como particiones haya.&lt;br /&gt;
&lt;br /&gt;
=Estrategias=&lt;br /&gt;
Las estrategias a seguir cuando no hay memoria suficiente para otro proceso son dos:&lt;br /&gt;
*Cancelación: &amp;quot;lo siento, no hay memoria libre, prueba más tarde&amp;quot;.&lt;br /&gt;
*Espera: añadir el proceso a una cola hasta que haya memoria disponible.&lt;br /&gt;
&lt;br /&gt;
=Limitaciones=&lt;br /&gt;
*Si un proceso necesita mayor memoria que la partición más grande, entonces éste no se ejecuta.&lt;br /&gt;
*Desperdicio de memoria. Por ejemplo, si los procesos son muy pequeños y las particiones grandes.&lt;br /&gt;
&lt;br /&gt;
=Criterios de asignación=&lt;br /&gt;
Se lanza un proceso, y hay que elegir a qué partición va (estrategia de espera). Puede haber una cola por partición, o una sola para todas las particiones.&lt;br /&gt;
&lt;br /&gt;
 Ej: tenemos los siguientes procesos: m(P1) = 6KB, m(P2) = 1KB, m(P3) = 3KB, m(P4) = 31KB, m(P5) = 30KB;&lt;br /&gt;
     suponemos que la decisión sobre la asignación de procesos a particiones se hace ordenadamente de manera consecutiva según el número del proceso&lt;br /&gt;
     y una memoria de 64 KB divididos en 4 huecos como sigue:&lt;br /&gt;
  _____&lt;br /&gt;
 |_____| H1 = 8KB   &lt;br /&gt;
 |_____| H2 = 8KB &lt;br /&gt;
 |     |&lt;br /&gt;
 |_____| H3 = 16KB&lt;br /&gt;
 |     |&lt;br /&gt;
 |     |&lt;br /&gt;
 |     | H4 = 32KB   &lt;br /&gt;
 |_____|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste estático''': se adjudica cada proceso a la menor partición que quepa. Complejidad: O(1)&lt;br /&gt;
&lt;br /&gt;
[[solución mejor ajuste estático|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Primer ajuste''': cuando una partición queda libre, se asigna el primer proceso según el orden de la cola que quepa en ella. Complejidad: O(1)&lt;br /&gt;
&lt;br /&gt;
[[solución primer ajuste|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste dinámico''': cuando una partición queda libre, se asigna el mayor proceso que quepa en ella. Complejidad: O(nlog(p))&lt;br /&gt;
&lt;br /&gt;
[[solución ajuste dinámico|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste dinámico con aplazamiento limitado''': Es una variante del criterio anterior que evita el aplazamiento indefinido. Cuando queda una partición libre, se selecciona el mayor proceso que quepa en ella, pero se cuenta el nº de veces que un proceso se aplaza. Si se superan esas '''n''' veces (umbral), se le da paso.&lt;br /&gt;
&lt;br /&gt;
*'''Subparticiones''': No es un criterio como tal sino que viene a complementar a los anteriores. Si no hay un proceso que pueda aprovechar la partición madre: se asignan las subparticiones a procesos pequeños (para que el desperdicio interno sea lo menor posible). Si llega un proceso grande: los procesos pequeños se vuelcan a disco y se asigna partición madre.&lt;br /&gt;
''Partición madre'': tipo especial de partición que se puede dividir en múltiples particiones menores.&lt;br /&gt;
&lt;br /&gt;
[[Otro ejemplo|Otro ejemplo]]&lt;br /&gt;
&lt;br /&gt;
= Métodos de colocación en memoria =&lt;br /&gt;
&lt;br /&gt;
*'''Montaje absoluto''': Se asigna una dirección de memoria constante, siendo por tanto este método muy restrictivo. Se utiliza para la carga del sistema operativo.&lt;br /&gt;
&lt;br /&gt;
* '''Carga con reubicación''': Al realizar la carga, se le aplica a las direcciones lógicas del programa un ''offset'' o desplazamiento. Este desplazamiento es establecido por el programador antes de que se ejecute el programa.&lt;br /&gt;
&lt;br /&gt;
* '''Reubicación dinámica''': A diferencia de la carga con reubicación, el desplazamiento se asigna en tiempo de ejecución.&lt;br /&gt;
** '''Reubicación dinámica parcial''': Es una variante del anterior, en la que existe también un registro límite.&lt;br /&gt;
&lt;br /&gt;
= Mecanismos de protección de memoria =&lt;br /&gt;
&lt;br /&gt;
Es necesario proteger el SO frente a procesos; y proteger a los procesos entre sí.&lt;br /&gt;
&lt;br /&gt;
* '''Ampliación bits de protección''' : Se le asocia a cada palabra un bit para comprobar si es de SO o del proceso.&lt;br /&gt;
&lt;br /&gt;
* '''Ampliación registros valla''' : De esta manera se conocen la posición inicial y final, de manera que si no está entre esas dos posiciones no se permite el acceso a memoria.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_fijas&amp;diff=1053</id>
		<title>SO multiprogramables con particiones fijas</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_fijas&amp;diff=1053"/>
				<updated>2011-06-06T11:32:08Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Limitaciones */ Corrección ortográfica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La memoria se encuentra dividida en particiones, en cada una habrá un proceso. Por lo tanto, se pueden ejecutar tantos procesos como particiones haya.&lt;br /&gt;
&lt;br /&gt;
=Estrategias=&lt;br /&gt;
Las estrategias a seguir cuando no hay memoria suficiente para otro proceso son dos:&lt;br /&gt;
*Cancelación: &amp;quot;lo siento, no hay memoria libre, prueba más tarde&amp;quot;.&lt;br /&gt;
*Espera: añadir el proceso a una cola hasta que haya memoria disponible.&lt;br /&gt;
&lt;br /&gt;
=Limitaciones=&lt;br /&gt;
*Si un proceso necesita mayor memoria que la partición más grande, entonces éste no se ejecuta.&lt;br /&gt;
*Desperdicio de memoria. Por ejemplo, si los procesos son muy pequeños y las particiones grandes.&lt;br /&gt;
&lt;br /&gt;
=Criterios de asignación=&lt;br /&gt;
Se lanza un proceso, y hay que elegir a que partición va (estrategia de espera). Puede haber una cola por partición, o una sola para todas las particiones.&lt;br /&gt;
&lt;br /&gt;
 Ej: tenemos los siguientes procesos: m(P1) = 6KB, m(P2) = 1KB, m(P3) = 3KB, m(P4) = 31KB, m(P5) = 30KB;&lt;br /&gt;
     suponemos que la decisión sobre la asignación de procesos a particiones se hace ordenadamente de manera consecutiva según el número del proceso&lt;br /&gt;
     y una memoria de 64 KB divididos en 4 huecos como sigue:&lt;br /&gt;
  _____&lt;br /&gt;
 |_____| H1 = 8KB   &lt;br /&gt;
 |_____| H2 = 8KB &lt;br /&gt;
 |     |&lt;br /&gt;
 |_____| H3 = 16KB&lt;br /&gt;
 |     |&lt;br /&gt;
 |     |&lt;br /&gt;
 |     | H4 = 32KB   &lt;br /&gt;
 |_____|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste estático''': se adjudica cada proceso a la menor partición que quepa. Complejidad: O(1)&lt;br /&gt;
&lt;br /&gt;
[[solución mejor ajuste estático|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Primer ajuste''': cuando una partición queda libre, se asigna el primer proceso según el orden de la cola que quepa en ella. Complejidad: O(1)&lt;br /&gt;
&lt;br /&gt;
[[solución primer ajuste|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste dinámico''': cuando una partición queda libre, se asigna el mayor proceso que quepa en ella. Complejidad: O(nlog(p))&lt;br /&gt;
&lt;br /&gt;
[[solución ajuste dinámico|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste dinámico con aplazamiento limitado''': Es una variante del criterio anterior que evita el aplazamiento indefinido. Cuando queda una partición libre, se selecciona el mayor proceso que quepa en ella, pero se cuenta el nº de veces que un proceso se aplaza. Si se superan esas '''n''' veces (umbral), se le da paso.&lt;br /&gt;
&lt;br /&gt;
*'''Subparticiones''': No es un criterio como tal sino que viene a complementar a los anteriores. Si no hay un proceso que pueda aprovechar la partición madre: se asignan las subparticiones a procesos pequeños (para que el desperdicio interno sea lo menor posible). Si llega un proceso grande: los procesos pequeños se vuelcan a disco y se asigna partición madre.&lt;br /&gt;
''Partición madre'': tipo especial de partición que se puede dividir en múltiples particiones menores.&lt;br /&gt;
&lt;br /&gt;
[[Otro ejemplo|Otro ejemplo]]&lt;br /&gt;
&lt;br /&gt;
= Métodos de colocación en memoria =&lt;br /&gt;
&lt;br /&gt;
*'''Montaje absoluto''': Se asigna una dirección de memoria constante, siendo por tanto este método muy restrictivo. Se utiliza para la carga del sistema operativo.&lt;br /&gt;
&lt;br /&gt;
* '''Carga con reubicación''': Al realizar la carga, se le aplica a las direcciones lógicas del programa un ''offset'' o desplazamiento. Este desplazamiento es establecido por el programador antes de que se ejecute el programa.&lt;br /&gt;
&lt;br /&gt;
* '''Reubicación dinámica''': A diferencia de la carga con reubicación, el desplazamiento se asigna en tiempo de ejecución.&lt;br /&gt;
** '''Reubicación dinámica parcial''': Es una variante del anterior, en la que existe también un registro límite.&lt;br /&gt;
&lt;br /&gt;
= Mecanismos de protección de memoria =&lt;br /&gt;
&lt;br /&gt;
Es necesario proteger el SO frente a procesos; y proteger a los procesos entre sí.&lt;br /&gt;
&lt;br /&gt;
* '''Ampliación bits de protección''' : Se le asocia a cada palabra un bit para comprobar si es de SO o del proceso.&lt;br /&gt;
&lt;br /&gt;
* '''Ampliación registros valla''' : De esta manera se conocen la posición inicial y final, de manera que si no está entre esas dos posiciones no se permite el acceso a memoria.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Paginaci%C3%B3n&amp;diff=1037</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=1037"/>
				<updated>2011-06-05T15:27:41Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Tabla de páginas multinivel */ Corrección ortográfica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Definición=&lt;br /&gt;
Toda la memoria se divide en porciones de igual tamaño fijo, 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;
&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&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;
==Tabla de páginas multinivel==&lt;br /&gt;
El objetivo es paginar la tabla de páginas. Ésta no tiene porqué estar cargada completa en memoria y no tiene porqué ocupar direcciones consecutivas.&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.&lt;br /&gt;
&lt;br /&gt;
Se puede usar:&lt;br /&gt;
&lt;br /&gt;
*Tabla o mapa de bits: ocupa poca memoria, de orden O(1)&lt;br /&gt;
*2 listas(colas): páginas libres, páginas ocupadas. Tiene mejor rendimiento, de orden O(1)&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Segmentaci%C3%B3n&amp;diff=1005</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=1005"/>
				<updated>2011-06-04T16:23:01Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Carga de segmentos a petición */ editada la memoria virtual&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;
=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              &amp;lt;&amp;lt;&amp;lt;--------------- ¿No eran de tamaño variable? [[Usuario: JCGarrido|JCGarrido]]&lt;br /&gt;
&lt;br /&gt;
*Gestión compleja, sobretodo por su tamaño variable&lt;br /&gt;
&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([[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)(quien decide que segmento se va a descargar es el administrador de memoria)&lt;br /&gt;
&lt;br /&gt;
*o un fichero de tamaño variable y oculto (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;
(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;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Segmentaci%C3%B3n&amp;diff=1004</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=1004"/>
				<updated>2011-06-04T16:22:30Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Carga de segmentos a petición */ editada la carga de segmentos&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;
=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              &amp;lt;&amp;lt;&amp;lt;--------------- ¿No eran de tamaño variable? [[Usuario: JCGarrido|JCGarrido]]&lt;br /&gt;
&lt;br /&gt;
*Gestión compleja, sobretodo por su tamaño variable&lt;br /&gt;
&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([[Memoria virtual | Intro]]). &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)(quien decide que segmento se va a descargar es el administrador de memoria)&lt;br /&gt;
&lt;br /&gt;
*o un fichero de tamaño variable y oculto (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;
(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;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Segmentaci%C3%B3n&amp;diff=1003</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=1003"/>
				<updated>2011-06-04T16:20:13Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Carga de segmentos a petición */ corregido el enlace&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;
=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              &amp;lt;&amp;lt;&amp;lt;--------------- ¿No eran de tamaño variable? [[Usuario: JCGarrido|JCGarrido]]&lt;br /&gt;
&lt;br /&gt;
*Gestión compleja, sobretodo por su tamaño variable&lt;br /&gt;
&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[[Memoria virtual | 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)(quien decide que segmento se va a descargar es el administrador de memoria)&lt;br /&gt;
&lt;br /&gt;
*o un fichero de tamaño variable y oculto (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;
(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;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Segmentaci%C3%B3n&amp;diff=1002</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=1002"/>
				<updated>2011-06-04T16:18:07Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Características */ ¿No eran de tamaño variable?&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;
=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              &amp;lt;&amp;lt;&amp;lt;--------------- ¿No eran de tamaño variable? [[Usuario: JCGarrido|JCGarrido]]&lt;br /&gt;
&lt;br /&gt;
*Gestión compleja, sobretodo por su tamaño variable&lt;br /&gt;
&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[Memoria virtual | 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)(quien decide que segmento se va a descargar es el administrador de memoria)&lt;br /&gt;
&lt;br /&gt;
*o un fichero de tamaño variable y oculto (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;
(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;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Segmentaci%C3%B3n&amp;diff=999</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=999"/>
				<updated>2011-06-04T16:08:12Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Características */ Correcciones en aspectos materiales&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;
=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;
==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[Memoria virtual | 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)(quien decide que segmento se va a descargar es el administrador de memoria)&lt;br /&gt;
&lt;br /&gt;
*o un fichero de tamaño variable y oculto (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;
(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;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Segmentaci%C3%B3n&amp;diff=997</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=997"/>
				<updated>2011-06-04T16:03:07Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Características */ Editada la protección de memoria.&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;
=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 numero 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;
==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[Memoria virtual | 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)(quien decide que segmento se va a descargar es el administrador de memoria)&lt;br /&gt;
&lt;br /&gt;
*o un fichero de tamaño variable y oculto (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;
(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;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Segmentaci%C3%B3n&amp;diff=996</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=996"/>
				<updated>2011-06-04T15:59:12Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Características */ Corrección ortográfica.&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;
=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 bit a la tabla de descriptores de segmentos para los permisos ( r w x )permisos a los segmentos&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 numero 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;
==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[Memoria virtual | 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)(quien decide que segmento se va a descargar es el administrador de memoria)&lt;br /&gt;
&lt;br /&gt;
*o un fichero de tamaño variable y oculto (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;
(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;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Segmentaci%C3%B3n&amp;diff=994</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=994"/>
				<updated>2011-06-04T15:53:22Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Definición */ Editada la definició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;
=Características=&lt;br /&gt;
*Cada proceso en ejecución (este 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 bit a la tabla de descriptores de segmentos para los permisos ( r w x )permisos a los segmentos&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 numero 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;
==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[Memoria virtual | 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)(quien decide que segmento se va a descargar es el administrador de memoria)&lt;br /&gt;
&lt;br /&gt;
*o un fichero de tamaño variable y oculto (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;
(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;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=964</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=964"/>
				<updated>2011-06-03T18:10:49Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Criterios de asignación */ peticion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Definición ==&lt;br /&gt;
&lt;br /&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, se utiliza un bit para representar si dicho bloque está libre o asignado.&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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Criterios de asignación ==&lt;br /&gt;
&lt;br /&gt;
* '''Primer ajuste''': 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;
* '''Siguiente ajuste''': 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;
* '''Mejor ajuste''': Consiste en asignarle al proceso el hueco con menor ajuste interno. Su mayor inconveniente es su orden de complejidad (orden lineal, ''O(n)'')&lt;br /&gt;
&lt;br /&gt;
* '''Peor ajuste''': Al contrario que el criterio anterior, se asigna a cada proceso el hueco con mayor ajuste interno. Tiene el mismo inconveniente en cuanto a orden de complejidad que el mejor ajuste.&lt;br /&gt;
&lt;br /&gt;
* '''Ajuste rápido''': 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''': 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;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Petición:Por favor,alguien que entienda bien el mejor ajuste y el peor ajuste, que explique lo que significa que tenga menor o mayor ajuste interno, que no se entiende bien.&lt;br /&gt;
Gracias.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=963</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=963"/>
				<updated>2011-06-03T18:09:57Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Criterios de asignación */ Peticion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Definición ==&lt;br /&gt;
&lt;br /&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, se utiliza un bit para representar si dicho bloque está libre o asignado.&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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Criterios de asignación ==&lt;br /&gt;
&lt;br /&gt;
* '''Primer ajuste''': 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;
* '''Siguiente ajuste''': 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;
* '''Mejor ajuste''': Consiste en asignarle al proceso el hueco con menor ajuste interno. Su mayor inconveniente es su orden de complejidad (orden lineal, ''O(n)'')&lt;br /&gt;
&lt;br /&gt;
* '''Peor ajuste''': Al contrario que el criterio anterior, se asigna a cada proceso el hueco con mayor ajuste interno. Tiene el mismo inconveniente en cuanto a orden de complejidad que el mejor ajuste.&lt;br /&gt;
&lt;br /&gt;
* '''Ajuste rápido''': 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''': 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;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 ''Petición:''&lt;br /&gt;
Por favor,alguien que entienda bien el mejor ajuste y el peor ajuste, que explique lo que significa que tenga menor o mayor ajuste interno, que no se entiende bien.&lt;br /&gt;
Gracias.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_variables&amp;diff=962</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=962"/>
				<updated>2011-06-03T18:09:05Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Criterios de asignación */ Petición&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Definición ==&lt;br /&gt;
&lt;br /&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, se utiliza un bit para representar si dicho bloque está libre o asignado.&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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Criterios de asignación ==&lt;br /&gt;
&lt;br /&gt;
* '''Primer ajuste''': 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;
* '''Siguiente ajuste''': 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;
* '''Mejor ajuste''': Consiste en asignarle al proceso el hueco con menor ajuste interno. Su mayor inconveniente es su orden de complejidad (orden lineal, ''O(n)'')&lt;br /&gt;
&lt;br /&gt;
* '''Peor ajuste''': Al contrario que el criterio anterior, se asigna a cada proceso el hueco con mayor ajuste interno. Tiene el mismo inconveniente en cuanto a orden de complejidad que el mejor ajuste.&lt;br /&gt;
&lt;br /&gt;
* '''Ajuste rápido''': 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''': 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;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Petición:&lt;br /&gt;
Por favor,alguien que entienda bien el mejor ajuste y el peor ajuste, que explique lo que significa que tenga menor o mayor ajuste interno, que no se entiende bien.&lt;br /&gt;
Gracias.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_fijas&amp;diff=961</id>
		<title>SO multiprogramables con particiones fijas</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_fijas&amp;diff=961"/>
				<updated>2011-06-03T17:25:40Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Mecanismos de protección de memoria */ tildes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La memoria se encuentra dividida en particiones, en cada una habrá un proceso. Por lo tanto, se pueden ejecutar tantos procesos como particiones haya.&lt;br /&gt;
&lt;br /&gt;
=Estrategias=&lt;br /&gt;
Las estrategias a seguir cuando no hay memoria suficiente para otro proceso son dos:&lt;br /&gt;
*Cancelación: &amp;quot;lo siento, no hay memoria libre, prueba más tarde&amp;quot;.&lt;br /&gt;
*Espera: añadir el proceso a una cola hasta que haya memoria disponible.&lt;br /&gt;
&lt;br /&gt;
=Limitaciones=&lt;br /&gt;
*Si un procesos necesita mayor memoria que la partición más grande, entonces este no se ejecuta.&lt;br /&gt;
*Desperdicio de memoria. Por ejemplo, si los procesos son muy pequeños y las particiones grandes.&lt;br /&gt;
&lt;br /&gt;
=Criterios de asignación=&lt;br /&gt;
Se lanza un proceso, y hay que elegir a que partición va (estrategia de espera). Puede haber una cola por partición, o una sola para todas las particiones.&lt;br /&gt;
&lt;br /&gt;
 Ej: tenemos los siguientes procesos: m(P1) = 6KB, m(P2) = 1KB, m(P3) = 3KB, m(P4) = 31KB, m(P5) = 30KB;&lt;br /&gt;
     suponemos que la decisión sobre la asignación de procesos a particiones se hace ordenadamente de manera consecutiva según el número del proceso&lt;br /&gt;
     y una memoria de 64 KB divididos en 4 huecos como sigue:&lt;br /&gt;
  _____&lt;br /&gt;
 |_____| H1 = 8KB   &lt;br /&gt;
 |_____| H2 = 8KB &lt;br /&gt;
 |     |&lt;br /&gt;
 |_____| H3 = 16KB&lt;br /&gt;
 |     |&lt;br /&gt;
 |     |&lt;br /&gt;
 |     | H4 = 32KB   &lt;br /&gt;
 |_____|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste estático''': se adjudica cada proceso a la menor partición que quepa. Complejidad: O(1)&lt;br /&gt;
&lt;br /&gt;
[[solución mejor ajuste estático|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Primer ajuste''': cuando una partición queda libre, se asigna el primer proceso que quepa en ella. Complejidad: O(1)&lt;br /&gt;
&lt;br /&gt;
[[solución primer ajuste|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste dinámico''': cuando una partición queda libre, se asigna el mayor proceso que quepa en ella. Complejidad: O(nlog(p))&lt;br /&gt;
&lt;br /&gt;
[[solución ajuste dinámico|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Mejor que quepa con aplazamiento limitado''': Cuando queda una partición libre, se selecciona el mayor proceso que quepa en ella, pero se cuenta el nº de veces que un proceso se aplaza. Si se superan esas '''n''' veces (umbral), se le da paso.&lt;br /&gt;
&lt;br /&gt;
*'''Subparticiones''': No es un criterio como tal sino que viene a complementar a los anteriores. Si no hay un proceso que pueda aprovechar la partición madre: se asignan las subparticiones a procesos pequeños (para que el desperdicio interno sea lo menor posible). Si llega un proceso grande: los procesos pequeños se vuelcan a disco y se asigna partición madre.&lt;br /&gt;
''Partición madre'': tipo especial de partición que se puede dividir en múltiples particiones menores.&lt;br /&gt;
&lt;br /&gt;
[[Otro ejemplo|Otro ejemplo]]&lt;br /&gt;
&lt;br /&gt;
= Métodos de colocación en memoria =&lt;br /&gt;
&lt;br /&gt;
*'''Montaje absoluto''': Se asigna una dirección de memoria constante, siendo por tanto este método muy restrictivo. Se utiliza para la carga del sistema operativo.&lt;br /&gt;
&lt;br /&gt;
* '''Carga con reubicación''': Al realizar la carga, se le aplica a las direcciones lógicas del programa un ''offset'' o desplazamiento. Este desplazamiento es establecido por el programador antes de que se ejecute el programa.&lt;br /&gt;
&lt;br /&gt;
* '''Reubicación dinámica''': A diferencia de la carga con reubicación, el desplazamiento se asigna en tiempo de ejecución.&lt;br /&gt;
** '''Reubicación dinámica parcial''': Es una variante del anterior, en la que existe también un registro límite.&lt;br /&gt;
&lt;br /&gt;
= Mecanismos de protección de memoria =&lt;br /&gt;
&lt;br /&gt;
Es necesario proteger el SO frente a procesos; y proteger a los procesos entre sí.&lt;br /&gt;
&lt;br /&gt;
* '''Ampliación bits de protección''' : Se le asocia a cada palabra un bit para comprobar si es de SO o del proceso.&lt;br /&gt;
&lt;br /&gt;
* '''Ampliación registros valla''' : De esta manera se conocen la posición inicial y final, de manera que si no está entre esas dos posiciones no se permite el acceso a memoria.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_fijas&amp;diff=960</id>
		<title>SO multiprogramables con particiones fijas</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_fijas&amp;diff=960"/>
				<updated>2011-06-03T17:22:21Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Criterios de asignación */ Corrección en una frase&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La memoria se encuentra dividida en particiones, en cada una habrá un proceso. Por lo tanto, se pueden ejecutar tantos procesos como particiones haya.&lt;br /&gt;
&lt;br /&gt;
=Estrategias=&lt;br /&gt;
Las estrategias a seguir cuando no hay memoria suficiente para otro proceso son dos:&lt;br /&gt;
*Cancelación: &amp;quot;lo siento, no hay memoria libre, prueba más tarde&amp;quot;.&lt;br /&gt;
*Espera: añadir el proceso a una cola hasta que haya memoria disponible.&lt;br /&gt;
&lt;br /&gt;
=Limitaciones=&lt;br /&gt;
*Si un procesos necesita mayor memoria que la partición más grande, entonces este no se ejecuta.&lt;br /&gt;
*Desperdicio de memoria. Por ejemplo, si los procesos son muy pequeños y las particiones grandes.&lt;br /&gt;
&lt;br /&gt;
=Criterios de asignación=&lt;br /&gt;
Se lanza un proceso, y hay que elegir a que partición va (estrategia de espera). Puede haber una cola por partición, o una sola para todas las particiones.&lt;br /&gt;
&lt;br /&gt;
 Ej: tenemos los siguientes procesos: m(P1) = 6KB, m(P2) = 1KB, m(P3) = 3KB, m(P4) = 31KB, m(P5) = 30KB;&lt;br /&gt;
     suponemos que la decisión sobre la asignación de procesos a particiones se hace ordenadamente de manera consecutiva según el número del proceso&lt;br /&gt;
     y una memoria de 64 KB divididos en 4 huecos como sigue:&lt;br /&gt;
  _____&lt;br /&gt;
 |_____| H1 = 8KB   &lt;br /&gt;
 |_____| H2 = 8KB &lt;br /&gt;
 |     |&lt;br /&gt;
 |_____| H3 = 16KB&lt;br /&gt;
 |     |&lt;br /&gt;
 |     |&lt;br /&gt;
 |     | H4 = 32KB   &lt;br /&gt;
 |_____|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste estático''': se adjudica cada proceso a la menor partición que quepa. Complejidad: O(1)&lt;br /&gt;
&lt;br /&gt;
[[solución mejor ajuste estático|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Primer ajuste''': cuando una partición queda libre, se asigna el primer proceso que quepa en ella. Complejidad: O(1)&lt;br /&gt;
&lt;br /&gt;
[[solución primer ajuste|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste dinámico''': cuando una partición queda libre, se asigna el mayor proceso que quepa en ella. Complejidad: O(nlog(p))&lt;br /&gt;
&lt;br /&gt;
[[solución ajuste dinámico|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Mejor que quepa con aplazamiento limitado''': Cuando queda una partición libre, se selecciona el mayor proceso que quepa en ella, pero se cuenta el nº de veces que un proceso se aplaza. Si se superan esas '''n''' veces (umbral), se le da paso.&lt;br /&gt;
&lt;br /&gt;
*'''Subparticiones''': No es un criterio como tal sino que viene a complementar a los anteriores. Si no hay un proceso que pueda aprovechar la partición madre: se asignan las subparticiones a procesos pequeños (para que el desperdicio interno sea lo menor posible). Si llega un proceso grande: los procesos pequeños se vuelcan a disco y se asigna partición madre.&lt;br /&gt;
''Partición madre'': tipo especial de partición que se puede dividir en múltiples particiones menores.&lt;br /&gt;
&lt;br /&gt;
[[Otro ejemplo|Otro ejemplo]]&lt;br /&gt;
&lt;br /&gt;
= Métodos de colocación en memoria =&lt;br /&gt;
&lt;br /&gt;
*'''Montaje absoluto''': Se asigna una dirección de memoria constante, siendo por tanto este método muy restrictivo. Se utiliza para la carga del sistema operativo.&lt;br /&gt;
&lt;br /&gt;
* '''Carga con reubicación''': Al realizar la carga, se le aplica a las direcciones lógicas del programa un ''offset'' o desplazamiento. Este desplazamiento es establecido por el programador antes de que se ejecute el programa.&lt;br /&gt;
&lt;br /&gt;
* '''Reubicación dinámica''': A diferencia de la carga con reubicación, el desplazamiento se asigna en tiempo de ejecución.&lt;br /&gt;
** '''Reubicación dinámica parcial''': Es una variante del anterior, en la que existe también un registro límite.&lt;br /&gt;
&lt;br /&gt;
= Mecanismos de protección de memoria =&lt;br /&gt;
&lt;br /&gt;
Es necesario proteger el SO frente a procesos; y proteger a los procesos entre sí.&lt;br /&gt;
&lt;br /&gt;
* '''Ampliación bits de protección''' : Se le asocia a cada palabra un bit para comprobar si es de SO o del proceso.&lt;br /&gt;
&lt;br /&gt;
* '''Ampliación registros valla''' : De esta manera se conocen la posición inicial y final, de manera que si no esta entre esas dos posiciones no se permite el acceso a memoria.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_fijas&amp;diff=946</id>
		<title>SO multiprogramables con particiones fijas</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_fijas&amp;diff=946"/>
				<updated>2011-06-02T17:44:42Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Mecanismos de protección de memoria */ Explicación de &amp;quot;Ampliación bits de protección&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La memoria se encuentra dividida en particiones, en cada una habrá un proceso. Por lo tanto, se pueden ejecutar tantos procesos como particiones haya.&lt;br /&gt;
&lt;br /&gt;
=Estrategias=&lt;br /&gt;
Las estrategias a seguir cuando no hay memoria suficiente para otro proceso son dos:&lt;br /&gt;
*Cancelación: &amp;quot;lo siento, no hay memoria libre, prueba más tarde&amp;quot;.&lt;br /&gt;
*Espera: añadir el proceso a una cola hasta que haya memoria disponible.&lt;br /&gt;
&lt;br /&gt;
=Limitaciones=&lt;br /&gt;
*Si un procesos necesita mayor memoria que la partición más grande, entonces este no se ejecuta.&lt;br /&gt;
*Desperdicio de memoria. Por ejemplo, si los procesos son muy pequeños y las particiones grandes.&lt;br /&gt;
&lt;br /&gt;
=Criterios de asignación=&lt;br /&gt;
Se lanza un proceso, y hay que elegir a que partición va (estrategia de espera). Puede haber una cola por partición, o una sola para todas las particiones.&lt;br /&gt;
&lt;br /&gt;
 Ej: tenemos los siguientes procesos: m(P1) = 6KB, m(P2) = 1KB, m(P3) = 3KB, m(P4) = 31KB, m(P5) = 30KB;&lt;br /&gt;
     suponemos que la decisión sobre la asignación de procesos a particiones se hace ordenadamente de manera consecutiva según el número del proceso&lt;br /&gt;
     y una memoria de 64 KB divididos en 4 huecos como sigue:&lt;br /&gt;
  _____&lt;br /&gt;
 |_____| H1 = 8KB   &lt;br /&gt;
 |_____| H2 = 8KB &lt;br /&gt;
 |     |&lt;br /&gt;
 |_____| H3 = 16KB&lt;br /&gt;
 |     |&lt;br /&gt;
 |     |&lt;br /&gt;
 |     | H4 = 32KB   &lt;br /&gt;
 |_____|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste estático''': se adjudica cada proceso a la menor partición que quepa. Complejidad: O(1)&lt;br /&gt;
&lt;br /&gt;
[[solución mejor ajuste estático|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Primer ajuste''': cuando una partición queda libre, se asigna el primer proceso que quepa en ella. Complejidad: O(1)&lt;br /&gt;
&lt;br /&gt;
[[solución primer ajuste|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste dinámico''': cuando una partición queda libre, se asigna el mayor proceso que quepa en ella. Complejidad: O(nlog(p))&lt;br /&gt;
&lt;br /&gt;
[[solución ajuste dinámico|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Mejor que quepa con aplazamiento limitado''': Cuando queda una partición libre, se selecciona el mayor proceso que quepa en ella, pero se cuenta el nº de veces que un proceso se aplaza. Si se superan esas '''n''' veces (umbral), se le da paso.&lt;br /&gt;
&lt;br /&gt;
*'''Subparticiones''': No es un criterio como tal sino que viene a complementar a los anteriores. Si no hay un proceso que pueda aprovechar partición madre: se asignan las subparticiones a procesos pequeños (para que el desperdicio interno sea lo menor posible). Si llega un proceso grande: los procesos pequeños se vuelcan a disco y se asigna partición madre.&lt;br /&gt;
''Partición madre'': tipo especial de partición que se puede dividir en múltiples particiones menores.&lt;br /&gt;
&lt;br /&gt;
[[Otro ejemplo|Otro ejemplo]]&lt;br /&gt;
&lt;br /&gt;
= Métodos de colocación en memoria =&lt;br /&gt;
&lt;br /&gt;
*'''Montaje absoluto''': Se asigna una dirección de memoria constante, siendo por tanto este método muy restrictivo. Se utiliza para la carga del sistema operativo.&lt;br /&gt;
&lt;br /&gt;
* '''Carga con reubicación''': Al realizar la carga, se le aplica a las direcciones lógicas del programa un ''offset'' o desplazamiento. Este desplazamiento es establecido por el programador antes de que se ejecute el programa.&lt;br /&gt;
&lt;br /&gt;
* '''Reubicación dinámica''': A diferencia de la carga con reubicación, el desplazamiento se asigna en tiempo de ejecución.&lt;br /&gt;
** '''Reubicación dinámica parcial''': Es una variante del anterior, en la que existe también un registro límite.&lt;br /&gt;
&lt;br /&gt;
= Mecanismos de protección de memoria =&lt;br /&gt;
&lt;br /&gt;
Es necesario proteger el SO frente a procesos; y proteger a los procesos entre sí.&lt;br /&gt;
&lt;br /&gt;
* '''Ampliación bits de protección''' : Se le asocia a cada palabra un bit para comprobar si es de SO o del proceso.&lt;br /&gt;
&lt;br /&gt;
* '''Ampliación registros valla''' : De esta manera se conocen la posición inicial y final, de manera que si no esta entre esas dos posiciones no se permite el acceso a memoria.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_fijas&amp;diff=945</id>
		<title>SO multiprogramables con particiones fijas</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_fijas&amp;diff=945"/>
				<updated>2011-06-02T17:37:36Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Métodos de colocación en memoria */ Eliminada una palabra innecesaria.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La memoria se encuentra dividida en particiones, en cada una habrá un proceso. Por lo tanto, se pueden ejecutar tantos procesos como particiones haya.&lt;br /&gt;
&lt;br /&gt;
=Estrategias=&lt;br /&gt;
Las estrategias a seguir cuando no hay memoria suficiente para otro proceso son dos:&lt;br /&gt;
*Cancelación: &amp;quot;lo siento, no hay memoria libre, prueba más tarde&amp;quot;.&lt;br /&gt;
*Espera: añadir el proceso a una cola hasta que haya memoria disponible.&lt;br /&gt;
&lt;br /&gt;
=Limitaciones=&lt;br /&gt;
*Si un procesos necesita mayor memoria que la partición más grande, entonces este no se ejecuta.&lt;br /&gt;
*Desperdicio de memoria. Por ejemplo, si los procesos son muy pequeños y las particiones grandes.&lt;br /&gt;
&lt;br /&gt;
=Criterios de asignación=&lt;br /&gt;
Se lanza un proceso, y hay que elegir a que partición va (estrategia de espera). Puede haber una cola por partición, o una sola para todas las particiones.&lt;br /&gt;
&lt;br /&gt;
 Ej: tenemos los siguientes procesos: m(P1) = 6KB, m(P2) = 1KB, m(P3) = 3KB, m(P4) = 31KB, m(P5) = 30KB;&lt;br /&gt;
     suponemos que la decisión sobre la asignación de procesos a particiones se hace ordenadamente de manera consecutiva según el número del proceso&lt;br /&gt;
     y una memoria de 64 KB divididos en 4 huecos como sigue:&lt;br /&gt;
  _____&lt;br /&gt;
 |_____| H1 = 8KB   &lt;br /&gt;
 |_____| H2 = 8KB &lt;br /&gt;
 |     |&lt;br /&gt;
 |_____| H3 = 16KB&lt;br /&gt;
 |     |&lt;br /&gt;
 |     |&lt;br /&gt;
 |     | H4 = 32KB   &lt;br /&gt;
 |_____|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste estático''': se adjudica cada proceso a la menor partición que quepa. Complejidad: O(1)&lt;br /&gt;
&lt;br /&gt;
[[solución mejor ajuste estático|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Primer ajuste''': cuando una partición queda libre, se asigna el primer proceso que quepa en ella. Complejidad: O(1)&lt;br /&gt;
&lt;br /&gt;
[[solución primer ajuste|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste dinámico''': cuando una partición queda libre, se asigna el mayor proceso que quepa en ella. Complejidad: O(nlog(p))&lt;br /&gt;
&lt;br /&gt;
[[solución ajuste dinámico|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Mejor que quepa con aplazamiento limitado''': Cuando queda una partición libre, se selecciona el mayor proceso que quepa en ella, pero se cuenta el nº de veces que un proceso se aplaza. Si se superan esas '''n''' veces (umbral), se le da paso.&lt;br /&gt;
&lt;br /&gt;
*'''Subparticiones''': No es un criterio como tal sino que viene a complementar a los anteriores. Si no hay un proceso que pueda aprovechar partición madre: se asignan las subparticiones a procesos pequeños (para que el desperdicio interno sea lo menor posible). Si llega un proceso grande: los procesos pequeños se vuelcan a disco y se asigna partición madre.&lt;br /&gt;
''Partición madre'': tipo especial de partición que se puede dividir en múltiples particiones menores.&lt;br /&gt;
&lt;br /&gt;
[[Otro ejemplo|Otro ejemplo]]&lt;br /&gt;
&lt;br /&gt;
= Métodos de colocación en memoria =&lt;br /&gt;
&lt;br /&gt;
*'''Montaje absoluto''': Se asigna una dirección de memoria constante, siendo por tanto este método muy restrictivo. Se utiliza para la carga del sistema operativo.&lt;br /&gt;
&lt;br /&gt;
* '''Carga con reubicación''': Al realizar la carga, se le aplica a las direcciones lógicas del programa un ''offset'' o desplazamiento. Este desplazamiento es establecido por el programador antes de que se ejecute el programa.&lt;br /&gt;
&lt;br /&gt;
* '''Reubicación dinámica''': A diferencia de la carga con reubicación, el desplazamiento se asigna en tiempo de ejecución.&lt;br /&gt;
** '''Reubicación dinámica parcial''': Es una variante del anterior, en la que existe también un registro límite.&lt;br /&gt;
&lt;br /&gt;
= Mecanismos de protección de memoria =&lt;br /&gt;
&lt;br /&gt;
Es necesario proteger el SO frente a procesos; y proteger a los procesos entre sí.&lt;br /&gt;
&lt;br /&gt;
* '''Ampliación bits de protección'''&lt;br /&gt;
&lt;br /&gt;
* '''Ampliación registros valla''' : De esta manera se conocen la posición inicial y final, de manera que si no esta entre esas dos posiciones no se permite el acceso a memoria.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_fijas&amp;diff=941</id>
		<title>SO multiprogramables con particiones fijas</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_multiprogramables_con_particiones_fijas&amp;diff=941"/>
				<updated>2011-06-02T16:06:34Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Limitaciones */ corrección de la frase.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La memoria se encuentra dividida en particiones, en cada una habrá un proceso. Por lo tanto, se pueden ejecutar tantos procesos como particiones haya.&lt;br /&gt;
&lt;br /&gt;
=Estrategias=&lt;br /&gt;
Las estrategias a seguir cuando no hay memoria suficiente para otro proceso son dos:&lt;br /&gt;
*Cancelación: &amp;quot;lo siento, no hay memoria libre, prueba más tarde&amp;quot;.&lt;br /&gt;
*Espera: añadir el proceso a una cola hasta que haya memoria disponible.&lt;br /&gt;
&lt;br /&gt;
=Limitaciones=&lt;br /&gt;
*Si un procesos necesita mayor memoria que la partición más grande, entonces este no se ejecuta.&lt;br /&gt;
*Desperdicio de memoria. Por ejemplo, si los procesos son muy pequeños y las particiones grandes.&lt;br /&gt;
&lt;br /&gt;
=Criterios de asignación=&lt;br /&gt;
Se lanza un proceso, y hay que elegir a que partición va (estrategia de espera). Puede haber una cola por partición, o una sola para todas las particiones.&lt;br /&gt;
&lt;br /&gt;
 Ej: tenemos los siguientes procesos: m(P1) = 6KB, m(P2) = 1KB, m(P3) = 3KB, m(P4) = 31KB, m(P5) = 30KB;&lt;br /&gt;
     suponemos que la decisión sobre la asignación de procesos a particiones se hace ordenadamente de manera consecutiva según el número del proceso&lt;br /&gt;
     y una memoria de 64 KB divididos en 4 huecos como sigue:&lt;br /&gt;
  _____&lt;br /&gt;
 |_____| H1 = 8KB   &lt;br /&gt;
 |_____| H2 = 8KB &lt;br /&gt;
 |     |&lt;br /&gt;
 |_____| H3 = 16KB&lt;br /&gt;
 |     |&lt;br /&gt;
 |     |&lt;br /&gt;
 |     | H4 = 32KB   &lt;br /&gt;
 |_____|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste estático''': se adjudica cada proceso a la menor partición que quepa. Complejidad: O(1)&lt;br /&gt;
&lt;br /&gt;
[[solución mejor ajuste estático|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Primer ajuste''': cuando una partición queda libre, se asigna el primer proceso que quepa en ella. Complejidad: O(1)&lt;br /&gt;
&lt;br /&gt;
[[solución primer ajuste|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Mejor ajuste dinámico''': cuando una partición queda libre, se asigna el mayor proceso que quepa en ella. Complejidad: O(nlog(p))&lt;br /&gt;
&lt;br /&gt;
[[solución ajuste dinámico|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
*'''Mejor que quepa con aplazamiento limitado''': Cuando queda una partición libre, se selecciona el mayor proceso que quepa en ella, pero se cuenta el nº de veces que un proceso se aplaza. Si se superan esas '''n''' veces (umbral), se le da paso.&lt;br /&gt;
&lt;br /&gt;
*'''Subparticiones''': No es un criterio como tal sino que viene a complementar a los anteriores. Si no hay un proceso que pueda aprovechar partición madre: se asignan las subparticiones a procesos pequeños (para que el desperdicio interno sea lo menor posible). Si llega un proceso grande: los procesos pequeños se vuelcan a disco y se asigna partición madre.&lt;br /&gt;
''Partición madre'': tipo especial de partición que se puede dividir en múltiples particiones menores.&lt;br /&gt;
&lt;br /&gt;
[[Otro ejemplo|Otro ejemplo]]&lt;br /&gt;
&lt;br /&gt;
= Métodos de colocación en memoria =&lt;br /&gt;
&lt;br /&gt;
*'''Montaje absoluto''': Se asigna una dirección de memoria constante, siendo por tanto este método muy restrictivo. Se utiliza para la carga del sistema operativo.&lt;br /&gt;
&lt;br /&gt;
* '''Carga con reubicación''': Al realizar la carga, se le aplica a las direcciones lógicas del programa un ''offset'' o desplazamiento asociada. Este desplazamiento es establecido por el programador antes de que se ejecute el programa.&lt;br /&gt;
&lt;br /&gt;
* '''Reubicación dinámica''': A diferencia de la carga con reubicación, el desplazamiento se asigna en tiempo de ejecución.&lt;br /&gt;
** '''Reubicación dinámica parcial''': Es una variante del anterior, en la que existe también un registro límite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mecanismos de protección de memoria =&lt;br /&gt;
&lt;br /&gt;
Es necesario proteger el SO frente a procesos; y proteger a los procesos entre sí.&lt;br /&gt;
&lt;br /&gt;
* '''Ampliación bits de protección'''&lt;br /&gt;
&lt;br /&gt;
* '''Ampliación registros valla''' : De esta manera se conocen la posición inicial y final, de manera que si no esta entre esas dos posiciones no se permite el acceso a memoria.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=SO_monoprogramables&amp;diff=940</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=940"/>
				<updated>2011-06-02T16:00:05Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: Apmpliación de una frase.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La administración de memoria es muy sencilla. El SO se coloca como bloque al principio de la memoria (memoria del sistema), y el resto para el proceso a ejecutar (memoria del proceso). Si el proceso no cabe, podría recurrirse al solapamiento o a la ejecución en cadena.&lt;br /&gt;
&lt;br /&gt;
Tiene 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 bits de protección (se le asocia a cada palabra un bit para comprobar si es de SO o del proceso) o a los registros valla (se conoce el limite de la dirección entre SO y proceso).&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 seria instalar un SO menos pesado, como una version &lt;br /&gt;
 más antigua de MS-DOS.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=805</id>
		<title>Monitores</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=805"/>
				<updated>2011-05-10T15:23:24Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Definición */ corregidos errores ortográficos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Idea desarrollada en los años 70 Brinch-Hansen y Hoare &amp;lt;ref&amp;gt;http://java.sun.com/developer/Books/performance2/chap4.pdf&amp;lt;/ref&amp;gt;que notaron los siguientes problemas con respecto al uso de los semáforos:&lt;br /&gt;
&lt;br /&gt;
* Los semáforos son difíciles de usar. Es frecuente que el programador cometa errores al emplearlos.&lt;br /&gt;
* El compilador no asiste al programador en el desarrollo de programas concurrentes mediante semáforos, pues no ofrece ningún tipo de validación en tiempo de compilación.&lt;br /&gt;
* No hay nada que obligue a usarlos. Puede suceder que el programador los necesite y lo desconozca&lt;br /&gt;
* Son independientes del recurso compartido&lt;br /&gt;
&lt;br /&gt;
Los monitores tienen que estar integrados en el lenguaje de programación.&lt;br /&gt;
&lt;br /&gt;
== Definición ==&lt;br /&gt;
Un monitor es una estructura del lenguaje cuyas principales características son:&lt;br /&gt;
&lt;br /&gt;
* Los datos son privados.&lt;br /&gt;
* Ofrecen una serie de métodos públicos para acceder a dichos datos.&lt;br /&gt;
* En cada momento sólo puede haber un proceso activo en algún método del monitor, es decir, ejecutando código de esos métodos públicos del monitor. Seria equivalente a decir que el recurso que queremos compartir se declara como monitor. Los procesos que usan el monitor son independientes unos de otros y cuando deseen usar el recurso, llamarán a los métodos del monitor que implementen la operación que se desea ejecutar. &lt;br /&gt;
&lt;br /&gt;
Permiten organizar procesos en espera mediante:&lt;br /&gt;
&lt;br /&gt;
* Variables de condición: lista de procesos inicialmente vacía.&lt;br /&gt;
* Primitivas: ''wait(c)'', añade el proceso p invocante a c y proceso p bloquea; ''signal(c)'', selecciona a uno de los procesos en c y lo pone en preparado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class recursoCompartido {&lt;br /&gt;
&lt;br /&gt;
    public int get(void);&lt;br /&gt;
    public void set(int valor);&lt;br /&gt;
    private int recursoCompartido;&lt;br /&gt;
    private Semaforo s = 1;&lt;br /&gt;
&lt;br /&gt;
    public int get(void){&lt;br /&gt;
        int ret;&lt;br /&gt;
        down(s);&lt;br /&gt;
        ret = recursoCompartido;&lt;br /&gt;
        up(s);&lt;br /&gt;
        return ret;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void set(int valor){&lt;br /&gt;
        down(s);&lt;br /&gt;
        recursoCompartido = valor;&lt;br /&gt;
        up(s);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como vemos, los monitores se implementan con semáforos, son una abstracción de los mismos.&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_de_los_ejercicios_de_concurrencia&amp;diff=767</id>
		<title>Solución de los ejercicios de concurrencia</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_concurrencia&amp;diff=767"/>
				<updated>2011-05-09T16:32:52Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: Corregido Observación&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &lt;br /&gt;
       | #1| #2| #3|   |   |   | #4| #1| #2|   |   |   | #3| #4|#1-El programa ya termina &lt;br /&gt;
 H1    |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   | #1| #2| #2|   |   |   | #2| #2| #2|   |   |   | #2| #3| #4| #1| #2| #3| #4| El programa termina.&lt;br /&gt;
 H2    |   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|---|   |&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&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este ejercicio, el hilo 2 se queda esperando continuamente a que el hilo 1 libere el cerrojo para poder acceder a la función.&lt;br /&gt;
El programa finaliza en el hilo 1 cuando llega dos veces a la instrucción 4 (bucle for).&lt;br /&gt;
&lt;br /&gt;
Modificación:&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
       | #1| #2| #3|   |   |   | #4| #1| #2|   |   |   | #3| #4| &amp;gt; |   |   |   |   |   |   |   |&lt;br /&gt;
 H1    |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   | #1| __| __|   |   |   | __| __| __|   |   |   | #2| #3| #4| #1| #2| #3| #4|&lt;br /&gt;
 H2    |   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|---|---|---|---|&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&lt;br /&gt;
&lt;br /&gt;
Posible solución:&lt;br /&gt;
&lt;br /&gt;
Los hilos comparten variables por lo que la variable i está siendo compartida por ambos hilos. Además, al ser los cerrojos un control de concurrencia de espera activa, tiene que comprobar continuamente la condición que me permite acceder a la sección crítica. En un bucle for, el incremento se hace una vez realizada la iteración, por lo que tendrá que comprobar en la instrucción 1 si el contador cumple la condición o no. Dicho esto y si no me equivoco la solución sería la siguiente--[[Usuario:Jherrera|Jherrera]]:&lt;br /&gt;
&lt;br /&gt;
       | #1| #2| #3|   |   |   | #4| #1| #2|   |   |   | #3| #4| #1|   |   |   |   |   |&lt;br /&gt;
 H1    |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   | #1| #2| #2|   |   |   | #2| #2| #2|   |   |   | #2| #3| #4| #1|   |&lt;br /&gt;
 H2    |   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|---|   |&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&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Posible solución2: Lo que explicas esta muy bien, pero creo que la condición que expones en tu apartado es i=&amp;lt;2, cuando el ejercicio pide i&amp;lt;2. Por lo que habria que cortar un trozo, ¿no?&lt;br /&gt;
&lt;br /&gt;
       | #1| #2| #3|   |   |   | #4| #1| #1|   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
 H1    |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   | #1| #2| #2|   |   |   | #2| #3| #4|   |   |   |   |   |   |   |   |&lt;br /&gt;
 H2    |   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|---|   |&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&lt;br /&gt;
&lt;br /&gt;
Yo creo que esta bien ya que es i&amp;lt;2 y empieza con i = 0  --[[Usuario:Luidela1|Luidela1]] 15:35 9 may 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Observación:&lt;br /&gt;
--&amp;gt; Me parece que al ser dos hilos diferentes,aunque compartan el mismo código, las variables son individuales para cada hilo, con lo que cada hilo hace el bucle for completo,quedando la siguiente solución:&lt;br /&gt;
&lt;br /&gt;
       | #1| #2| #3|   |   |   | #4| #1| #2|   |   |   | #3| #4| #1|   |   |   |   |   |   |   |   |&lt;br /&gt;
 H1    |&amp;lt;--|---|---|   |   |   |---|---|---|   |   |   |---|---|--&amp;gt;|   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   | #1| #2| #2|   |   |   | #2| #2| #2|   |   |   | #2| #3| #4| #1| #2| #3| #4| #1|&lt;br /&gt;
 H2    |   |   |   |&amp;lt;--|---|---|   |   |   |---|---|---|   |   |   |---|---|---|---|---|---|---|--&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&lt;br /&gt;
[[Usuario:JCGarrido|JCGarrido]]&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_de_los_ejercicios_de_concurrencia&amp;diff=765</id>
		<title>Solución de los ejercicios de concurrencia</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_concurrencia&amp;diff=765"/>
				<updated>2011-05-09T16:31:12Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: Observación&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &lt;br /&gt;
       | #1| #2| #3|   |   |   | #4| #1| #2|   |   |   | #3| #4|#1-El programa ya termina &lt;br /&gt;
 H1    |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   | #1| #2| #2|   |   |   | #2| #2| #2|   |   |   | #2| #3| #4| #1| #2| #3| #4| El programa termina.&lt;br /&gt;
 H2    |   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|---|   |&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&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este ejercicio, el hilo 2 se queda esperando continuamente a que el hilo 1 libere el cerrojo para poder acceder a la función.&lt;br /&gt;
El programa finaliza en el hilo 1 cuando llega dos veces a la instrucción 4 (bucle for).&lt;br /&gt;
&lt;br /&gt;
Modificación:&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
       | #1| #2| #3|   |   |   | #4| #1| #2|   |   |   | #3| #4| &amp;gt; |   |   |   |   |   |   |   |&lt;br /&gt;
 H1    |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   | #1| __| __|   |   |   | __| __| __|   |   |   | #2| #3| #4| #1| #2| #3| #4|&lt;br /&gt;
 H2    |   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|---|---|---|---|&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&lt;br /&gt;
&lt;br /&gt;
Posible solución:&lt;br /&gt;
&lt;br /&gt;
Los hilos comparten variables por lo que la variable i está siendo compartida por ambos hilos. Además, al ser los cerrojos un control de concurrencia de espera activa, tiene que comprobar continuamente la condición que me permite acceder a la sección crítica. En un bucle for, el incremento se hace una vez realizada la iteración, por lo que tendrá que comprobar en la instrucción 1 si el contador cumple la condición o no. Dicho esto y si no me equivoco la solución sería la siguiente--[[Usuario:Jherrera|Jherrera]]:&lt;br /&gt;
&lt;br /&gt;
       | #1| #2| #3|   |   |   | #4| #1| #2|   |   |   | #3| #4| #1|   |   |   |   |   |&lt;br /&gt;
 H1    |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   | #1| #2| #2|   |   |   | #2| #2| #2|   |   |   | #2| #3| #4| #1|   |&lt;br /&gt;
 H2    |   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|---|   |&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&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Posible solución2: Lo que explicas esta muy bien, pero creo que la condición que expones en tu apartado es i=&amp;lt;2, cuando el ejercicio pide i&amp;lt;2. Por lo que habria que cortar un trozo, ¿no?&lt;br /&gt;
&lt;br /&gt;
       | #1| #2| #3|   |   |   | #4| #1| #1|   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
 H1    |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   | #1| #2| #2|   |   |   | #2| #3| #4|   |   |   |   |   |   |   |   |&lt;br /&gt;
 H2    |   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|---|   |&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&lt;br /&gt;
&lt;br /&gt;
Yo creo que esta bien ya que es i&amp;lt;2 y empieza con i = 0  --[[Usuario:Luidela1|Luidela1]] 15:35 9 may 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Observación:&lt;br /&gt;
--&amp;gt; Me parece que al ser dos hilos diferentes,aunque compartan el mismo código, las variables son individuales para cada hilo, con lo que cada hilo hace el bucle for completo,quedando la siguiente solución:&lt;br /&gt;
&lt;br /&gt;
       | #1| #2| #3|   |   |   | #4| #1| #2|   |   |   | #3| #4| #1|   |   |   |   |   |   |   |   |&lt;br /&gt;
 H1    |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   | #1| #2| #2|   |   |   | #2| #2| #2|   |   |   | #2| #3| #4| #1| #2| #3| #4| #1|&lt;br /&gt;
 H2    |   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|---|---|---|---|---|&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&lt;br /&gt;
[[Usuario:JCGarrido|JCGarrido]]&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_sincronizaci%C3%B3n_y_comunicaci%C3%B3n&amp;diff=731</id>
		<title>Ejercicios sincronización y comunicación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_sincronizaci%C3%B3n_y_comunicaci%C3%B3n&amp;diff=731"/>
				<updated>2011-05-09T11:31:09Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: Corregidor errores ortográficos.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ejercicio 1 =&lt;br /&gt;
&lt;br /&gt;
Realice el cronograma temporal que represente la ejecución de dos procesos P1 y P2. El proceso P1 ejecuta el siguiente código:&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++) {&lt;br /&gt;
    down(s1);&lt;br /&gt;
    f1();&lt;br /&gt;
    if (get(s1) == 0)&lt;br /&gt;
        up(s2);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el proceso P2 ejecuta el siguiente código:&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++) {&lt;br /&gt;
    down(s2);&lt;br /&gt;
    f2();&lt;br /&gt;
    up(s1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para el semáforo s1 el contador vale 1, mientras que para el semáforo s2 el contador vale 0.&lt;br /&gt;
&lt;br /&gt;
Suponga que:&lt;br /&gt;
&lt;br /&gt;
* El planificador emplea turno rotatorio estricto con quantum de 3 unidades de ejecución.&lt;br /&gt;
* Se sabe que el proceso P2 es seleccionado en primer lugar por el planificador para ejecutarse.&lt;br /&gt;
* La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución.&lt;br /&gt;
* La función get(semáforo s) devuelve el valor del contador del semáforo.&lt;br /&gt;
&lt;br /&gt;
El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución.&lt;br /&gt;
&lt;br /&gt;
[[solución ejercicio 1|Ver solución del ejercicio 1]]&lt;br /&gt;
&lt;br /&gt;
= Ejercicio 2 =&lt;br /&gt;
&lt;br /&gt;
Realice el cronograma temporal que represente la ejecución de dos procesos P1 y P2. El proceso P1 ejecuta el siguiente código:&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++) {&lt;br /&gt;
    down(s1);&lt;br /&gt;
    f1();&lt;br /&gt;
    up(s2);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el proceso P2 ejecuta el siguiente código:&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++) {&lt;br /&gt;
    down(s2);&lt;br /&gt;
    f2();&lt;br /&gt;
    up(s1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para el semáforo s1 el contador vale 1, mientras que para el semáforo s2 el contador vale 0.&lt;br /&gt;
&lt;br /&gt;
Suponga que:&lt;br /&gt;
&lt;br /&gt;
* El planificador emplea turno rotatorio estricto con quantum de 3 unidades de ejecución.&lt;br /&gt;
* Se sabe que el proceso P1 es seleccionado en primer lugar por el planificador para ejecutarse.&lt;br /&gt;
* La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución.&lt;br /&gt;
&lt;br /&gt;
El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución.&lt;br /&gt;
&lt;br /&gt;
[[solución ejercicio 2|Ver solución del ejercicio 2]]&lt;br /&gt;
&lt;br /&gt;
= Ejercicio 3 =&lt;br /&gt;
&lt;br /&gt;
En un exámen de sistemas operativos, un estudiante plantea la siguiente solución basada en dos procesos, un proceso P1 productor y un proceso P2 consumidor, en el que el contador de los semáforos s1 y s2 valen inicialmente 0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
while(1) {&lt;br /&gt;
    down(s1);&lt;br /&gt;
    produce();&lt;br /&gt;
    up(s2);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el proceso P2 ejecuta el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
while(1) {&lt;br /&gt;
    down(s2);&lt;br /&gt;
    consume();&lt;br /&gt;
    up(s1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responda brevemente si la solución que propone es idónea justificando su respuesta. &lt;br /&gt;
&lt;br /&gt;
[[solución ejercicio 3|Ver solución del ejercicio 3]]&lt;br /&gt;
&lt;br /&gt;
= Ejercicio 4 =&lt;br /&gt;
&lt;br /&gt;
Realice el cronograma temporal que represente la ejecución de dos procesos P1 y P2. El proceso P1 ejecuta el siguiente código:&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++) {&lt;br /&gt;
    send(msg);&lt;br /&gt;
    recv(msg);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el proceso P2 ejecuta el siguiente código:&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++) {&lt;br /&gt;
    recv(msg);&lt;br /&gt;
    send(msg);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Suponga que:&lt;br /&gt;
&lt;br /&gt;
* El planificador emplea turno rotatorio estricto con quantum de 3 unidades de ejecución.&lt;br /&gt;
* Se sabe que el proceso P1 es seleccionado en primer lugar por el planificador para ejecutarse.&lt;br /&gt;
* La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución.&lt;br /&gt;
* El comportamiento de la primitiva send() es síncrono y el la primitiva recv() es bloqueante.&lt;br /&gt;
&lt;br /&gt;
El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución.&lt;br /&gt;
&lt;br /&gt;
[[solución ejercicio 4|Ver solución del ejercicio 4]]&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicio_de_concurrencia_de_procesos&amp;diff=726</id>
		<title>Ejercicio de concurrencia de procesos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicio_de_concurrencia_de_procesos&amp;diff=726"/>
				<updated>2011-05-09T11:06:22Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Ejercicio 1 */ Corrección ortográfica.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ejercicio 1 =&lt;br /&gt;
&lt;br /&gt;
Realice el cronograma temporal que represente la ejecución de un proceso P1 que dispone de dos hilos, h1 y h2. Ambos hilos sincronizan su ejecución mediante cerrojos y ejecutan el mismo código:&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++) {  /* instrucción 1 */&lt;br /&gt;
    lock_down();           /* instrucción 2 */&lt;br /&gt;
    funcion();             /* instrucción 3 */&lt;br /&gt;
    lock_up();             /* instrucción 4 */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Suponga que:&lt;br /&gt;
&lt;br /&gt;
* El planificador emplea turno rotatorio estricto con quantum de 3 unidades de ejecución.&lt;br /&gt;
* Se sabe que el hilo h1 es seleccionado en primer lugar por el planificador para ejecutarse.&lt;br /&gt;
* La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución.&lt;br /&gt;
&lt;br /&gt;
El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución.&lt;br /&gt;
&lt;br /&gt;
[[solucion ejercicio 1|Solución Ejercicio 1]]&lt;/div&gt;</summary>
		<author><name>JCGarrido</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=716</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=716"/>
				<updated>2011-05-08T17:17:31Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Prevención */ tildes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Condiciones ==&lt;br /&gt;
&lt;br /&gt;
En la política del sistema operativo deben darse una serie de condiciones para que se produzca un interbloqueo.&lt;br /&gt;
&lt;br /&gt;
* '''Exclusión mutua''': cada recurso está asignado a un único proceso o está disponible.&lt;br /&gt;
&lt;br /&gt;
* '''Retención y espera''': los procesos que tienen, en un momento dado, recursos asignados con anterioridad, pueden solicitar nuevos recursos.&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.&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;
=== Omisión ===&lt;br /&gt;
&lt;br /&gt;
Consiste en suponer que los programadores lo han hecho bien, y obviar las posibles situaciones de interbloqueo. Es la más usada.&lt;br /&gt;
&lt;br /&gt;
=== Detección y Recuperación ===&lt;br /&gt;
&lt;br /&gt;
* '''Detección'''&lt;br /&gt;
** '''Grafo de relación recursos-procesos'''&lt;br /&gt;
** '''Matrices de relación recursos-procesos'''&lt;br /&gt;
&lt;br /&gt;
* '''Recuperación'''&lt;br /&gt;
** '''Apropiación temporal''': Se retira la asignación de un recurso a un proceso para deshacer el interbloqueo. &lt;br /&gt;
** '''Checkpoints''': Durante la ejecución de los procesos se toma una &amp;quot;foto&amp;quot; del estado de éstos, de manera que si se produce un interbloqueo se vuelve al estado anterior. Son muy poco usados ya que tienen un elevado coste en memoria y existe la posibilidad de que un proceso esté indefinidamente sin progresar.&lt;br /&gt;
** '''Eliminación''': El SO elimina un proceso en base a unos determinados criterios. Aunque parezca una medida drástica, es usada con frecuencia.&lt;br /&gt;
&lt;br /&gt;
=== Prevención ===&lt;br /&gt;
&lt;br /&gt;
* '''Supresión de exclusión mutua'''&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, e intenta anticiparse a los futuros conflictos&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sem%C3%A1foros&amp;diff=713</id>
		<title>Semáforos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sem%C3%A1foros&amp;diff=713"/>
				<updated>2011-05-07T14:19:18Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: tildes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Planificador de procesos: Diagrama de estados simplicado =&lt;br /&gt;
&lt;br /&gt;
Para comprender apropiadamente cómo funcionan los semáforos vamos a recordar el diagrama de estados simplificado que emplea el planificador de procesos del sistema operativo.&lt;br /&gt;
&lt;br /&gt;
                           |---------------|&lt;br /&gt;
   pendiente               |               |              recibido&lt;br /&gt;
    evento      ---------&amp;gt; |   bloqueado   |-----------    evento&lt;br /&gt;
    externo     |          |               |          |    externo&lt;br /&gt;
                |          |---------------|          |&lt;br /&gt;
                |                                     |&lt;br /&gt;
                |             planificador           \/&lt;br /&gt;
        |--------------|       retira CPU     |---------------|&lt;br /&gt;
        |              | -------------------&amp;gt; |               |&lt;br /&gt;
        |    activo    |                      |   preparado   |&lt;br /&gt;
        |              | &amp;lt;------------------- |               |&lt;br /&gt;
        |--------------|                      |---------------|&lt;br /&gt;
                             planificador&lt;br /&gt;
                              asigna CPU&lt;br /&gt;
&lt;br /&gt;
La vida de un proceso pasa por tres estados:&lt;br /&gt;
&lt;br /&gt;
* Activo: el proceso está empleando la CPU, por tanto, está ejecutándose. Hay tantos procesos activos como recurso de procesamiento disponible. Por tanto, si el sistema dispone de un único procesador, únicamente puede haber un proceso activo a la vez.&lt;br /&gt;
* Preparado: el proceso no está ejecutándose pero es candidato a pasar a estado activo. Es el planificador el que, en base a un criterio de planificación, decide qué proceso selecciona de la lista de procesos preparados para pasar a estado activo.&lt;br /&gt;
* Bloqueado: el proceso está pendiente de un evento externo, tales como la espera de finalización de un proceso hijo, una señal, una operación sobre un semáforo o una operación de lectura/escritura.&lt;br /&gt;
&lt;br /&gt;
La transición de activo a preparado y viceversa depende de decisiones tomadas por el planificador del sistema operativo (que emplea algún criterio visto en clases teóricas, tales como el turno rotatorio), el programador no puede interferir en estas decisiones. Mientras que la transición de activo a bloqueado, y de bloqueado a preparado pueden ser controladas por el programador mediante llamadas al sistema.&lt;br /&gt;
&lt;br /&gt;
= Semáforos =&lt;br /&gt;
&lt;br /&gt;
Los semáforos son un mecanismo de sincronización de procesos inventados por [http://es.wikipedia.org/wiki/Edsger_Dijkstra Edsger Dijkstra]. Los semáforos nos permiten '''asistir al planificador del sistema operativo en su toma de decisiones''' de manera que nos permiten sincronizar la ejecución de dos o más procesos.&lt;br /&gt;
&lt;br /&gt;
Los semáforos son un tipo de datos (TAD) que están compuestos por dos atributos:&lt;br /&gt;
&lt;br /&gt;
* Un contador, que siempre vale &amp;gt;= 0.&lt;br /&gt;
* Una lista de procesos, inicialmente vacía.&lt;br /&gt;
&lt;br /&gt;
Son usados para controlar el acceso a ciertas partes de un programa llamadas '''secciones críticas''', en la que se manipulan recursos que deben ser tratados de forma especial.&lt;br /&gt;
&lt;br /&gt;
El valor del semáforo, tanto en su inicialización como a lo largo de la ejecución del proceso, es muy importante ya que será lo que controle el número de procesos accediendo al recurso compartido de manera simultánea.&lt;br /&gt;
&lt;br /&gt;
El tipo más simple de semáforo es el binario. Pueden tomar como valor 0 o 1 y sólo permite el acceso a un único proceso a la vez.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los semáforos disponen de dos operaciones básicas que pasamos a describir en pseudocódigo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
down(semáforo s)&lt;br /&gt;
{&lt;br /&gt;
       si s.contador == 0:&lt;br /&gt;
              proceso a estado bloqueado&lt;br /&gt;
              añade proceso a s.lista&lt;br /&gt;
       sino:&lt;br /&gt;
              s.contador--&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nótese que siempre que queramos forzar una transición de un proceso a estado bloqueado, tenemos que hacer que dicho proceso realice una operación ''down'' sobre un semáforo cuyo contador vale cero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
up(semáforo s)&lt;br /&gt;
{&lt;br /&gt;
       si hay procesos en s.lista&lt;br /&gt;
              retira proceso de s.lista&lt;br /&gt;
              proceso a estado preparado&lt;br /&gt;
       sino:&lt;br /&gt;
              s.contador++&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nótese que una operación ''up'' sobre un semáforo en el que hay procesos en su lista resulta en que se retire uno de los procesos (el que más tiempo lleva en la lista), realizando éste la transición a estado preparado. Es un error frecuente pensar que una operación ''up'' resulte en que el proceso retirado de la lista pase a estado activo. Recuerde que las transiciones de estado activo a preparado y viceversa son siempre controladas por el planificador del sistema operativo.&lt;br /&gt;
&lt;br /&gt;
Los semáforos son un mecanismo de esperas no ocupadas, lo que significa que permite sincronizar a los procesos de forma que no se desperdician recursos de CPU cuando un cierto no proceso no tiene actividad a realizar (la espera ocupada, también conocida como espera activa, es en la que se queda comprobando la condición hasta verificarla, como el caso de los cerrojos).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Granularidad''': número de recursos controlados por un semáforo&lt;br /&gt;
&lt;br /&gt;
'''Problemas''': El uso de semáforos también tiene algunos inconvenientes, entre los que destacan:&lt;br /&gt;
&lt;br /&gt;
* Facilidad para emplearlos incorrectamente.&lt;br /&gt;
* Son independientes del lenguaje de programación, y por tanto no hay comprobación ninguna en tiempo de compilación.&lt;br /&gt;
* No hay nada que obligue a usarlos.&lt;br /&gt;
* Son independientes del recurso compartido al que intentan regular.&lt;br /&gt;
&lt;br /&gt;
Debido a ellos fueron desarrollados los [[Monitores]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Ejemplo productor-consumidor''': Supongamos un proceso que produce y otro que consume lo producido. Lo deseable es que el productor actúe primero, y no más de 1 vez consecutiva, puesto que el consumidor consume de 1 en 1.&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;4&amp;quot; &lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 1px 1px 1px&amp;quot;|Inicializacion&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;|Productor&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;|Consumidor&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;200&amp;quot;|semaforo prod,cons;&lt;br /&gt;
|width=&amp;quot;90&amp;quot;|while(1){&lt;br /&gt;
|width=&amp;quot;90&amp;quot;|while(1){&lt;br /&gt;
|-&lt;br /&gt;
|semaforo_create(cons,0);&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| down (prod);&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| down (cons);&lt;br /&gt;
|-&lt;br /&gt;
|semaforo_create(prod,1);&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| produce();&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| consume();&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| up(cons);&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| up(prod);&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| }&lt;br /&gt;
| }&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sem%C3%A1foros&amp;diff=712</id>
		<title>Semáforos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sem%C3%A1foros&amp;diff=712"/>
				<updated>2011-05-07T13:51:17Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: tildes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Planificador de procesos: Diagrama de estados simplicado =&lt;br /&gt;
&lt;br /&gt;
Para comprender apropiadamente cómo funcionan los semáforos vamos a recordar el diagrama de estados simplificado que emplea el planificador de procesos del sistema operativo.&lt;br /&gt;
&lt;br /&gt;
                           |---------------|&lt;br /&gt;
   pendiente               |               |              recibido&lt;br /&gt;
    evento      ---------&amp;gt; |   bloqueado   |-----------    evento&lt;br /&gt;
    externo     |          |               |          |    externo&lt;br /&gt;
                |          |---------------|          |&lt;br /&gt;
                |                                     |&lt;br /&gt;
                |             planificador           \/&lt;br /&gt;
        |--------------|       retira CPU     |---------------|&lt;br /&gt;
        |              | -------------------&amp;gt; |               |&lt;br /&gt;
        |    activo    |                      |   preparado   |&lt;br /&gt;
        |              | &amp;lt;------------------- |               |&lt;br /&gt;
        |--------------|                      |---------------|&lt;br /&gt;
                             planificador&lt;br /&gt;
                              asigna CPU&lt;br /&gt;
&lt;br /&gt;
La vida de un proceso pasa por tres estados:&lt;br /&gt;
&lt;br /&gt;
* Activo: el proceso está empleando la CPU, por tanto, está ejecutándose. Hay tantos procesos activos como recurso de procesamiento disponible. Por tanto, si el sistema dispone de un único procesador, únicamente puede haber un proceso activo a la vez.&lt;br /&gt;
* Preparado: el proceso no está ejecutándose pero es candidato a pasar a estado activo. Es el planificador el que, en base a un criterio de planificación, decide qué proceso selecciona de la lista de procesos preparados para pasar a estado activo.&lt;br /&gt;
* Bloqueado: el proceso está pendiente de un evento externo, tales como la espera de finalización de un proceso hijo, una señal, una operación sobre un semáforo o una operación de lectura/escritura.&lt;br /&gt;
&lt;br /&gt;
La transición de activo a preparado y viceversa depende de decisiones tomadas por el planificador del sistema operativo (que emplea algún criterio visto en clases teóricas, tales como el turno rotatorio), el programador no puede interferir en estas decisiones. Mientras que la transición de activo a bloqueado, y de bloqueado a preparado pueden ser controladas por el programador mediante llamadas al sistema.&lt;br /&gt;
&lt;br /&gt;
= Semáforos =&lt;br /&gt;
&lt;br /&gt;
Los semáforos son un mecanismo de sincronización de procesos inventados por [http://es.wikipedia.org/wiki/Edsger_Dijkstra Edsger Dijkstra]. Los semáforos nos permiten '''asistir al planificador del sistema operativo en su toma de decisiones''' de manera que nos permiten sincronizar la ejecución de dos o más procesos.&lt;br /&gt;
&lt;br /&gt;
Los semáforos son un tipo de datos (TAD) que están compuestos por dos atributos:&lt;br /&gt;
&lt;br /&gt;
* Un contador, que siempre vale &amp;gt;= 0.&lt;br /&gt;
* Una lista de procesos, inicialmente vacía.&lt;br /&gt;
&lt;br /&gt;
Son usados para controlar el acceso a ciertas partes de un programa llamadas '''secciones críticas''', en la que se manipulan recursos que deben ser tratados de forma especial.&lt;br /&gt;
&lt;br /&gt;
El valor del semáforo, tanto en su inicialización como a lo largo de la ejecución del proceso, es muy importante ya que será lo que controle el número de procesos accediendo al recurso compartido de manera simultánea.&lt;br /&gt;
&lt;br /&gt;
El tipo mas simple de semáforo es el binario. Pueden tomar como valor 0 o 1 y sólo permite el acceso a un único proceso a la vez.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los semáforos disponen de dos operaciones básicas que pasamos a describir en pseudocódigo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
down(semáforo s)&lt;br /&gt;
{&lt;br /&gt;
       si s.contador == 0:&lt;br /&gt;
              proceso a estado bloqueado&lt;br /&gt;
              añade proceso a s.lista&lt;br /&gt;
       sino:&lt;br /&gt;
              s.contador--&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nótese que siempre que queramos forzar una transición de un proceso a estado bloqueado, tenemos que hacer que dicho proceso realice una operación ''down'' sobre un semáforo cuyo contador vale cero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
up(semáforo s)&lt;br /&gt;
{&lt;br /&gt;
       si hay procesos en s.lista&lt;br /&gt;
              retira proceso de s.lista&lt;br /&gt;
              proceso a estado preparado&lt;br /&gt;
       sino:&lt;br /&gt;
              s.contador++&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nótese que una operación ''up'' sobre un semáforo en el que hay procesos en su lista resulta en que se retire uno de los procesos (el que más tiempo lleva en la lista), realizando éste la transición a estado preparado. Es un error frecuente pensar que una operación ''up'' resulte en que el proceso retirado de la lista pase a estado activo. Recuerde que las transiciones de estado activo a preparado y viceversa son siempre controladas por el planificador del sistema operativo.&lt;br /&gt;
&lt;br /&gt;
Los semáforos son un mecanismo de esperas no ocupadas, lo que significa que permite sincronizar a los procesos de forma que no se desperdician recursos de CPU cuando un cierto no proceso no tiene actividad a realizar (la espera ocupada, también conocida como espera activa, es en la que se queda comprobando la condición hasta verificarla, como el caso de los cerrojos).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Granularidad''': número de recursos controlados por un semáforo&lt;br /&gt;
&lt;br /&gt;
'''Problemas''': El uso de semáforos también tiene algunos inconvenientes, entre los que destacan:&lt;br /&gt;
&lt;br /&gt;
* Facilidad para emplearlos incorrectamente.&lt;br /&gt;
* Son independientes del lenguaje de programación, y por tanto no hay comprobación ninguna en tiempo de compilación.&lt;br /&gt;
* No hay nada que obligue a usarlos.&lt;br /&gt;
* Son independientes del recurso compartido al que intentan regular.&lt;br /&gt;
&lt;br /&gt;
Debido a ellos fueron desarrollados los [[Monitores]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Ejemplo productor-consumidor''': Supongamos un proceso que produce y otro que consume lo producido. Lo deseable es que el productor actúe primero, y no más de 1 vez consecutiva, puesto que el consumidor consume de 1 en 1.&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;4&amp;quot; &lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 1px 1px 1px&amp;quot;|Inicializacion&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;|Productor&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;|Consumidor&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;200&amp;quot;|semaforo prod,cons;&lt;br /&gt;
|width=&amp;quot;90&amp;quot;|while(1){&lt;br /&gt;
|width=&amp;quot;90&amp;quot;|while(1){&lt;br /&gt;
|-&lt;br /&gt;
|semaforo_create(cons,0);&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| down (prod);&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| down (cons);&lt;br /&gt;
|-&lt;br /&gt;
|semaforo_create(prod,1);&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| produce();&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| consume();&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| up(cons);&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| up(prod);&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| }&lt;br /&gt;
| }&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Cerrojos&amp;diff=711</id>
		<title>Cerrojos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Cerrojos&amp;diff=711"/>
				<updated>2011-05-06T16:45:11Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: Corregido un pequeño error en la frase.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ejemplo de implementación =&lt;br /&gt;
&lt;br /&gt;
El siguiente código sería un posible ejemplo del uso de control de concurrencia mediante cerrojos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int cerrojo = 1;      /* Inicializamos la variable cerrojo. Esto sería sólo válido para&lt;br /&gt;
                         hilos, ya que los procesos no comparten espacio de memoria */&lt;br /&gt;
&lt;br /&gt;
while(cerrojo == 0);  // Protocolo de&lt;br /&gt;
cerrojo = 0;          // entrada&lt;br /&gt;
&lt;br /&gt;
...                   // Sección crítica&lt;br /&gt;
&lt;br /&gt;
cerrojo = 1;          // Protocolo de salida&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sin embargo, esto es problemático: Supongamos que tenemos únicamente un proceso con dos hilos (Hx y Hy) y el planificador retire al hilo Hx justo antes de ejecutarse la instrucción ''cerrojo = 0;''. El hilo Hy ejecuta su código, entra en la sección crítica (Esto puede ocurrir ya que cerrojo sigue a 1) y el planificador le retira el uso del procesador dentro de ésta. A continuación, se le vuelve a asignar el procesador a Hx.&lt;br /&gt;
&lt;br /&gt;
De esta forma, tenemos a dos hilos ejecutando código de la sección crítica. Para evitar este problema, debemos implementar los protocolos de entrada y salida de forma que se ejecuten en una sola instrucción, con lo cual o el planificador retira el uso del procesador antes de esta instrucción, o sino lo retira después de haberla ejecutado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Cerrojos mediante instrucciones atómicas =&lt;br /&gt;
&lt;br /&gt;
Podemos implementar cerrojos mediante instrucciones especiales de comprobación y puesta a 0 y 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int cerrojo = 0;&lt;br /&gt;
&lt;br /&gt;
void lock() {&lt;br /&gt;
    while (__sync_lock_test_and_set(&amp;amp;cerrojo, 1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void unlock() {&lt;br /&gt;
    __sync_lock_release(&amp;amp;cerrojo);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El método lock comprueba mediante __sync_locktest_and_set(&amp;amp;cerrojo,1) el valor del cerrojo: si es 0, cambia el valor del cerrojo a 1 y devuelve 0, por tanto, se sale del while y entra en sección crítica; si es 1, devuelve 1 y continúa comprobando el valor, por tanto, no entra en situación crítica hasta que cambie el valor del cerrojo.&lt;br /&gt;
&lt;br /&gt;
El método unlock, mediante _sync_lock_release(&amp;amp;cerrojo), cambia el valor del cerrojo a 0.&lt;br /&gt;
&lt;br /&gt;
* http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html&lt;br /&gt;
* http://stackoverflow.com/questions/1383363/is-my-spin-lock-implementation-correct-and-optimal&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Cerrojos&amp;diff=710</id>
		<title>Cerrojos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Cerrojos&amp;diff=710"/>
				<updated>2011-05-06T15:59:32Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: Corregida la última frase.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ejemplo de implementación =&lt;br /&gt;
&lt;br /&gt;
El siguiente código sería un posible ejemplo del uso de control de concurrencia mediante cerrojos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int cerrojo = 1;      /* Inicializamos la variable cerrojo. Esto sería sólo válido para&lt;br /&gt;
                         hilos, ya que los procesos no comparten espacio de memoria */&lt;br /&gt;
&lt;br /&gt;
while(cerrojo == 0);  // Protocolo de&lt;br /&gt;
cerrojo = 0;          // entrada&lt;br /&gt;
&lt;br /&gt;
...                   // Sección crítica&lt;br /&gt;
&lt;br /&gt;
cerrojo = 1;          // Protocolo de salida&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sin embargo, esto es problemático: Supongamos que tenemos únicamente un proceso con dos hilos (Hx y Hy) y el planificador retire al proceso Hx justo antes de ejecutarse la instrucción ''cerrojo = 0;''. El proceso Hy ejecuta su código, entra en la sección crítica (Esto puede ocurrir ya que cerrojo sigue a 1) y el planificador le retira el uso del procesador dentro de ésta. A continuación, se le vuelve a asignar el procesador a Hx.&lt;br /&gt;
&lt;br /&gt;
De esta forma, tenemos a dos hilos ejecutando código de la sección crítica. Para evitar este problema, debemos implementar los protocolos de entrada y salida de forma que se ejecuten en una sola instrucción, con lo cual o el planificador retira el uso del procesador antes de esta instrucción, o sino lo retira después de haberla ejecutado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Cerrojos mediante instrucciones atómicas =&lt;br /&gt;
&lt;br /&gt;
Podemos implementar cerrojos mediante instrucciones especiales de comprobación y puesta a 0 y 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int cerrojo = 0;&lt;br /&gt;
&lt;br /&gt;
void lock() {&lt;br /&gt;
    while (__sync_lock_test_and_set(&amp;amp;cerrojo, 1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void unlock() {&lt;br /&gt;
    __sync_lock_release(&amp;amp;cerrojo);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El método lock comprueba mediante __sync_locktest_and_set(&amp;amp;cerrojo,1) el valor del cerrojo: si es 0, cambia el valor del cerrojo a 1 y devuelve 0, por tanto, se sale del while y entra en sección crítica; si es 1, devuelve 1 y continúa comprobando el valor, por tanto, no entra en situación crítica hasta que cambie el valor del cerrojo.&lt;br /&gt;
&lt;br /&gt;
El método unlock, mediante _sync_lock_release(&amp;amp;cerrojo), cambia el valor del cerrojo a 0.&lt;br /&gt;
&lt;br /&gt;
* http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html&lt;br /&gt;
* http://stackoverflow.com/questions/1383363/is-my-spin-lock-implementation-correct-and-optimal&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Mecanismos_de_sincronizaci%C3%B3n&amp;diff=709</id>
		<title>Mecanismos de sincronización</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Mecanismos_de_sincronizaci%C3%B3n&amp;diff=709"/>
				<updated>2011-05-06T10:10:41Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: Pequeña corrección en una frase(No se ha modificado el significado de la misma).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Optimistas =&lt;br /&gt;
&lt;br /&gt;
Este mecanismo debe emplearse si el programador considera que la frecuencia de acceso a un recurso compartido es baja, es decir, que supone que la probabilidad de coincidencia de dos o más procesos al recurso compartido es baja.&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo muestra el código ejecutado por dos hilos: h&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt; y h&amp;lt;sub&amp;gt;y&amp;lt;/sub&amp;gt; de un mismo proceso.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
        int compartida = 1, tmp;&lt;br /&gt;
retry:&lt;br /&gt;
        tmp = compartida;        /* almaceno el valor de la variable compartida en una temporal. */&lt;br /&gt;
        tmp++;                   /* actualizo la varible temporal. */&lt;br /&gt;
        if (compartida+1 != tmp) /* compruebo si la variable compartida ha sido modificada */&lt;br /&gt;
            goto retry;          /* mientras operaba con la variable temporal. */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La principal ventaja es el mayor grado de paralelismo.&lt;br /&gt;
&lt;br /&gt;
Los inconvenientes de este tipo de mecanismo son dos:&lt;br /&gt;
&lt;br /&gt;
* Se consume más memoria, pues hay que realizar una copia del recurso compartido para efectuar la comprobación.&lt;br /&gt;
* En situaciones de coincidencia, se tiene que volver a realizar la operación, por tanto, se desperdician recursos de procesamiento.&lt;br /&gt;
&lt;br /&gt;
Por último, si el programador ha empleado una aproximación optimista para una situación en la que la frecuencia de coincidencia es alta, podría darse el caso de que un hilo no progrese en su ejecución de manera indefinida, al tener que volver a reintentar la actualización una y otra vez hasta conseguirlo sin que haya concurrencia.&lt;br /&gt;
&lt;br /&gt;
= Pesimista =&lt;br /&gt;
Este mecanismo debe emplearse si se considera que la frecuencia de acceso al recurso compartido es alta.&lt;br /&gt;
&lt;br /&gt;
En este mecanismo disponemos de tres partes:&lt;br /&gt;
&lt;br /&gt;
* El protocolo de entrada, en el que se emplea un mecanismo que no permite continuar con la ejecución si otro u otros procesos están accediendo al recurso compartido.&lt;br /&gt;
* La sección crítica, en el que se se realizan las operaciones pertinentes con el recurso compartido.&lt;br /&gt;
* El protocolo de salida, en el que se vuelve a permitir el acceso al recurso compartido.&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo muestra como se implementa el control de concurrencia pesimista para 2 hilos, h&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt; y h&amp;lt;sub&amp;gt;y&amp;lt;/sub&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
   int compartida = 1;&lt;br /&gt;
   protocolo_de_entrada();     /* no permito acceso a variable compartida. */&lt;br /&gt;
   compartida++;               /* sección crítica: actualización de la variable compartidad. */&lt;br /&gt;
   protocolo_de_salida();      /* vuelvo a permitir acceso a la variable compartida. */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los protocolos de entrada y salida son, generalmente, operaciones costosas en términos de recursos de procesamiento.&lt;br /&gt;
&lt;br /&gt;
El inconveniente de este mecanismo es:&lt;br /&gt;
&lt;br /&gt;
*Que aunque siempre se pueda implementar, se fuerzan esperas que pueden llegar a ser innecesarias.&lt;br /&gt;
&lt;br /&gt;
Por último, se podría emplear un control de concurrencia pesimista para resolver un problema que se resuelve con un control de concurrencia optimista, pero no al revés.&lt;br /&gt;
&lt;br /&gt;
== Implementación del control de concurrencia pesimista ==&lt;br /&gt;
&lt;br /&gt;
El control de concurrencia pesimista se puede implementar de dos formas mediante:&lt;br /&gt;
&lt;br /&gt;
* Espera ocupada o activa, mediante cerrojos. En este mecanismo se comprueba continuamente la condición que permite franquear en el protocolo de entrada, por tanto, el proceso permanece en estado activo comprobando continuadamente la condición que le permite progresar en su ejecución, tiempo que está siendo desaprovechado por el procesador.&lt;br /&gt;
* Espera no ocupada o bloqueante, mediante semáforos, monitores y mensajes. Estos mecanismos hacen que el proceso pase a estado bloqueado cuando no se puede franquear el protocolo de entrada, por tanto, al quedar un proceso que no puede progresar en estado bloqueado, el planificador de procesos tiene que seleccionar a otro proceso.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Llamadas_al_sistema&amp;diff=524</id>
		<title>Llamadas al sistema</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Llamadas_al_sistema&amp;diff=524"/>
				<updated>2011-03-23T09:08:32Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Compatibilidad hacia atrás y hacia delante */ errores ortográficos corregidos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Las llamadas al sistema son el conjunto de instrucciones de medio-bajo nivel pertenecientes al sistema operativo que proveen a los programas de recursos y funciones de software y hardware que generalmente necesitan de una gestión especial por ser recursos compartidos por otros programas y procesos.&lt;br /&gt;
&lt;br /&gt;
=Compatibilidad hacia atrás y hacia delante=&lt;br /&gt;
&lt;br /&gt;
En un sistema operativo bien diseñado, la interfaz de las llamadas al sistema han de ser ser estables a lo largo del tiempo, de forma que la modificación de su funcionamiento interno no repercuta en el funcionamiento externo de éstas para asegurar la compatibilidad hacia atrás([http://en.wikipedia.org/wiki/Backward_compatibility Backward compatibility]). Además, aquellas llamadas que queden obsoletas o en desuso han de ser conservadas para, de la misma manera, asegurar el funcionamiento de programas antiguos ([http://en.wikipedia.org/wiki/Legacy_system?=Legacy_support Legacy Support]).&lt;br /&gt;
&lt;br /&gt;
En ocasiones los sistemas operativos pueden incluir en su diseño criterios de compatibilidad hacia adelante([http://en.wikipedia.org/wiki/Forward_compatibility Fordward compatibility]). Un ejemplo de este tipo de sistemas son aquellos capaces de mostrar información detallada al usuario de aquello que no pueden comprender o los sistemas ignorantes, que son aquellos que solo ejecutan lo que pueden comprender y obvian el resto.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Conceptos_b%C3%A1sicos&amp;diff=523</id>
		<title>Conceptos básicos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Conceptos_b%C3%A1sicos&amp;diff=523"/>
				<updated>2011-03-23T09:03:51Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Proceso */ tilde&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A continuación se desarrollan conceptos básicos que se emplearán a lo largo de la asignatura.&lt;br /&gt;
&lt;br /&gt;
= Programa =&lt;br /&gt;
&lt;br /&gt;
Se trata de una secuencia de instrucciones que desarrolla algún tipo de actividad útil.&lt;br /&gt;
&lt;br /&gt;
= Proceso =&lt;br /&gt;
&lt;br /&gt;
Un proceso es una instancia de un programa que está en ejecución. Todo proceso dispone como mínimo de una línea de ejecución. También se puede entender como la vista dinámica de un programa en ejecución.Se conoce también como la imagen del estado de la CPU y la memoria durante la ejecución de un programa.&lt;br /&gt;
&lt;br /&gt;
Queda definido por: {programa, estado}&lt;br /&gt;
&lt;br /&gt;
= Usuario = &lt;br /&gt;
&lt;br /&gt;
Puede ser un humano o un autómata(software). &lt;br /&gt;
&lt;br /&gt;
En sistemas UNIX encontramos un código único para cada uno, el UID (User IDentifier). A su vez debe pertenecer a un grupo, definido por el GID (Group IDentifier).&lt;br /&gt;
&lt;br /&gt;
= Fichero = &lt;br /&gt;
&lt;br /&gt;
Estructura de datos que almacena información.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_planificaci%C3%B3n&amp;diff=519</id>
		<title>Criterios de planificación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_planificaci%C3%B3n&amp;diff=519"/>
				<updated>2011-03-23T08:21:11Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Por prioridades */ tilde&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Métodos no apropiativos =&lt;br /&gt;
&lt;br /&gt;
El procesador es asignado al proceso hasta fin de ejecución. Suele darse en sistemas operativos monoprogramables y sistemas de tiempo real.&lt;br /&gt;
&lt;br /&gt;
== Estocástico ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona aleatoriamente el proceso a ser asignado al procesador. No cumple varios [[Planificación de procesos#Aspectos para diseñar un buen planificador|aspectos de diseño de un buen planificador]], como repetitividad o predecibilidad. Es un criterio de planificación teórico que sirve de referencia, si se emplea un criterio de planificación que ofrece resultados peores que la planificación de procesos estocástica, entonces es que no se trata de un buen criterio de planificación.&lt;br /&gt;
&lt;br /&gt;
No se ofrece un ejemplo, puesto que para un conjunto de procesos existen tantas trazas de ejecución como posible combinaciones aleatorias.&lt;br /&gt;
&lt;br /&gt;
== Con conocimiento del futuro ==&lt;br /&gt;
&lt;br /&gt;
En base al conocimiento del futuro se asignan los procesos. Se trata también de un criterio de planificación teórico. Si un criterio de planificación se acerca al criterio de planificación con conocimiento de futuro, entonces es que se trata de un buen planificador.&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_3__|_6__|_7__|&lt;br /&gt;
            problema  _t__|_3__|_5__|_2__|_3__|_1__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                        &amp;gt; = finalización del proceso                                                                       &lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
         |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pb  |---&amp;lt;---|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pc  |---|---|---&amp;lt;xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pd  |---|---|---|---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|&lt;br /&gt;
     Pe  |---|---|---|---|---|---|---&amp;lt;---|---|---|xxx&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;
 &lt;br /&gt;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_2__|_3__|_1__|&lt;br /&gt;
       de tiempos   _T__|_3__|_9__|_2__|_8__|_4__|      z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_9/5|_1__|_8/3|_4/1|&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, al conocer los tiempos en los que llegará cada proceso, y el tiempo de proceso, podemos buscar la forma de asignarlos de forma que, por ejemplo, consigamos la mínima penalización.&lt;br /&gt;
&lt;br /&gt;
== Por orden de llegada (First In, First Out: FIFO) ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso por orden de llegada al sistema, cuando un proceso está preparado se añade al final de la cola y se ejecuta según el orden de incorporacion. Su principales ventajas son su facilidad de implementación, consume muy poco tiempo de procesador (casi ninguno) y su orden de complejidad, O(1). Su desventaja es que los procesos de corta duración pueden quedar a la espera de procesos muy prolongados, así que presentarán un alto índice de penalización.&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_3__|_9__|_12_|&lt;br /&gt;
            problema  _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                        &amp;gt; = finalización del proceso&lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
        |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pb  |---&amp;lt;---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pc  |---|---|---&amp;lt;---|---|---|---|---|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pd  |---|---|---|---|---|---|---|---|---&amp;lt;---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
    Pe  |---|---|---|---|---|---|---|---|---|---|---|---&amp;lt;---|---|---|xxx|xxx|xxx|xxx|xxx&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
       de tiempos   _T__|_3__|_7__|_7__|_6__|_8__|        z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_7/5|_7/2|_6/5|_8/5|&lt;br /&gt;
&lt;br /&gt;
== El siguiente, el más corto (Shortest Job First: SJF) ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso que requiera menos tiempo de ejecución de entre todos los que están listos para ejecutarse. Se necesita conocer con antelación el tiempo de ejecucion de cada proceso, algo que es muy dificil en muchas ocasiones.&lt;br /&gt;
Para procesos largos puede presentar un índice de penalización elevado: Si se tienen muchos procesos cortos, el de mayor duración puede quedar en espera indefinidamente. Otro inconveniente es que todo trabajo corto que llegue cuando ya ha comenzado un trabajo largo tiene un gran retraso. Su orden de complejidad es O(n).&lt;br /&gt;
&lt;br /&gt;
    Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                     ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_3__|_9__|_12_|&lt;br /&gt;
           problema  _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
 &lt;br /&gt;
                       &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                       &amp;gt; = finalización del proceso&lt;br /&gt;
                       x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                       &amp;amp; = se ejecuta el planficador&lt;br /&gt;
         |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pb  |---&amp;lt;---|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pc  |---|---|---&amp;lt;xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pd  |---|---|---|---|---|---|---|---|---&amp;lt;---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
     Pe  |---|---|---|---|---|---|---|---|---|---|---|---&amp;lt;---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;&lt;br /&gt;
 planif. &amp;amp;---|---|---&amp;amp;---|---&amp;amp;---|---|---|---|---&amp;amp;---|---|---|---|---&amp;amp;---|---|---|---|---|&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
       de tiempos   _T__|_3__|_9__|_2__|_6__|_8__|      z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_9/5|_1__|_6/5|_8/5|&lt;br /&gt;
&lt;br /&gt;
== Basado en índice de penalización ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso que tendrá el índice de penalización  (P=T/t=(w+t)/t) de mayor valor. Este método puede producir aplazamientos de ejecución de procesos,pero no son indefinidos. Su orden de complejidad es O(n).&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_3__|_7__|_6__|&lt;br /&gt;
            problema  _t__|_3__|_5__|_4__|_3__|_5__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                        &amp;gt; = finalización del proceso&lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                        &amp;amp; = se ejecuta el planficador&lt;br /&gt;
   &lt;br /&gt;
        |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pb  |---&amp;lt;---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pc  |---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pd  |---|---|---|---|---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
    Pe  |---|---|---|---|---|---&amp;lt;---|---|---|---|---|---|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;&lt;br /&gt;
 planif.&amp;amp;---|---|---&amp;amp;---|---|---|---|---&amp;amp;---|---|---|---&amp;amp;---|---|---&amp;amp;---|---|---|---|---|&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_4__|_3__|_5__|&lt;br /&gt;
       de tiempos   _T__|_3__|_7__|_9__|_13_|_11_|&lt;br /&gt;
                    z(3)|_1__|_'''7/5'''|_1__|____|____|&lt;br /&gt;
                    z(8)|_1__|_7/5|_'''9/4'''|_4/3|_7/5|&lt;br /&gt;
                   z(12)|_1__|_7/5|_9/4|_'''8/3'''|11/5|      z = índice de penalización&lt;br /&gt;
                   z(15)|_1__|_7/5|_9/4|_8/3|'''14/5'''|&lt;br /&gt;
                   z(20)|_1__|_7/5|_9/4|_8/3|14/5|&lt;br /&gt;
&lt;br /&gt;
= Métodos apropiativos =&lt;br /&gt;
&lt;br /&gt;
El planificador puede retirar el procesador en cualquier momento al proceso activo. Suele darse en sistemas operativos [[Multiprogramación|multiprogramables]]. Este metodo es necesario si existen procesos de alta prioridad.&lt;br /&gt;
&lt;br /&gt;
== El siguiente, el más corto (Shortest Job First: SJF) ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso que requiera menos tiempo de ejecución. Si hay un proceso en estado preparado que requiere menos tiempo de ejecución del que le falta al actual, se le retira el procesador al actual proceso y se le asigna al nuevo. Su orden de complejidad es O(n), pero, a diferencia del no apropiativo, cuando entra un proceso en la lista de procesos, se ejecuta código de planificador.Con este método los procesos más largos se ven perjudicados, pues se puede retrasar tanto su tiempo de inicio, como el de finalización.&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_4__|_6__|_12_|&lt;br /&gt;
            problema  _t__|_3__|_5__|_1__|_8__|_3__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                        &amp;gt; = finalización del proceso&lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                        $ = indica la ejecución del planificador para retirar un&lt;br /&gt;
                            proceso y establecer otro según el criterio&lt;br /&gt;
                        &amp;amp; = se ejecuta el código del planificador&lt;br /&gt;
        |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---$---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pb  |---&amp;lt;---|---|xxx|---|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pc  |---|---|---|---&amp;lt;xxx&amp;gt;---|---|---|---|---|---|---$---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pd  |---|---|---|---|---|---&amp;lt;---|---|---|xxx|xxx|xxx|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;&lt;br /&gt;
    Pe  |---|---|---|---|---|---|---|---|---|---|---|---&amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
 Planif.|---&amp;amp;---|---&amp;amp;---&amp;amp;---&amp;amp;---&amp;amp;---|---|---&amp;amp;---|---|---&amp;amp;---|---|---&amp;amp;---|---|---|---|---|&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_1__|_8__|_3__|&lt;br /&gt;
       de tiempos   _T__|_3__|_8__|_1__|_14_|_3__|        z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_8/5|_1__|14/8|_1__|&lt;br /&gt;
&lt;br /&gt;
== Por prioridades ==&lt;br /&gt;
&lt;br /&gt;
Se establecen índices de prioridad a cada proceso:&lt;br /&gt;
&lt;br /&gt;
* '''Índice estático''': Establecido por el usuario. En el caso de sistemas operativos tipo Unix, se dispone de una índice denominado ''nice value'' cuyos valores están entre -20 (máxima prioridad) y 19 (mínima prioridad).&lt;br /&gt;
* '''Índice dinámico''': Establecido por el planificador, inicialmente basado en el índice estático, después se va recalculando en base a las observaciones que realiza el planificador sobre el comportamiento de los procesos, aumentándola cuando un proceso está a la espera o disminuyéndola cuando tiene adjudicado el procesador.&lt;br /&gt;
&lt;br /&gt;
El método funciona de la siguiente manera: El planificador mantiene ordenada la cola de procesos preparados, según prioridades decrecientes. Si el proceso en ejecución se bloquea, el planificador selecciona el primero de la lista. Cuando un proceso pasa a la situación de preparado, comprueba si su prioridad es mayor que la del proceso activo. En tal caso, suspende la ejecución de éste, colocándolo al principio de la cola de preparados, y elige al recién llegado; si no, lo inserta en la cola según su prioridad.&lt;br /&gt;
Cuando hay varios procesos con la misma prioridad se pueden aplicar diversos criterios, como seguir el orden de llegada a la cola de preparados, o el que necesite menos tiempo para acabar entre otros.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El orden es siempre O(n).&lt;br /&gt;
&lt;br /&gt;
    Ejemplo:&lt;br /&gt;
                                                                                         &lt;br /&gt;
                     ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|&lt;br /&gt;
           problema  _t__|_2__|_4__|_2__|_7__|    p = prioridad estática&lt;br /&gt;
                     _p__|_0__|-20_|_4__|_10_|&lt;br /&gt;
                                                       &lt;br /&gt;
                       &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                       &amp;gt; = finalización del proceso&lt;br /&gt;
                       x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                       $ = indica la ejecución del planificador para retirar un&lt;br /&gt;
                           proceso y establecer otro según el criterio&lt;br /&gt;
                       &amp;amp; = se ejecuta el código del planificador&lt;br /&gt;
         |---$---|---|---|---$---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pa  &amp;lt;xxx|---|---|---|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pb  |---&amp;lt;xxx|xxx|xxx|xxx&amp;gt;---$---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pc  |---|---&amp;lt;---|---|---|---|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pd  |---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
 Planif. |---&amp;amp;---&amp;amp;---&amp;amp;---|---&amp;amp;---&amp;amp;---|---&amp;amp;---|---|---|---|---|---|---|---|---|---|---|---|&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;
                   ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
       Cálculos    _t__|_2__|_4__|_2__|_7__|&lt;br /&gt;
      de tiempos   _T__|_6__|_4__|_6__|_12_|        z = índice de penalización&lt;br /&gt;
                   _z__|_3__|_1__|_3__|12/7|&lt;br /&gt;
&lt;br /&gt;
== Turno rotatorio estricto (Round Robin: RR) ==&lt;br /&gt;
&lt;br /&gt;
En este criterio, todo proceso es asignado al procesador durante un tiempo establecido denominado ''quantum'', tras el cual se le retira y se asigna a otro proceso rotatoriamente. De esta manera, los procesos acceden al procesador por turnos.&lt;br /&gt;
&lt;br /&gt;
El tamaño del ''quantum'' es fundamental para determinar el comportamiento de este criterio de planificación. &lt;br /&gt;
Si el ''quantum'' empleado es pequeño, por ejemplo de 10 ms, suponiendo que la conmutación de procesos requiere 10ms, el 50% del tiempo se empleará el procesador para ejecutar el código que permite conmutar entre procesos. Sin embargo, si el ''quantum'' empleado es grande, por ejemplo de 5 s, la latencia será mayor, degradando la experiencia del usuario que notará como sus procesos progresan ''a saltos'', puesto que, en el peor de los casos, hasta pasados 5 s no se le asignará el procesador a otro proceso .&lt;br /&gt;
&lt;br /&gt;
Si un proceso bloquea antes de consumir su ''quantum'' '''se le retira el procesador''' y se añade al final de la cola. Esto beneficia a los procesos cuyo comportamiento está limitado por el procesador, pues se pasan más tiempo asignados al procesador.&lt;br /&gt;
&lt;br /&gt;
Este criterio se puede implementar con una cola, de manera que la complejidad de la selección de un proceso es O(1). Nótese que a mayor número de procesos preparados, mayor tiempo tardará un proceso en volver a pasar a estado activo.&lt;br /&gt;
&lt;br /&gt;
    Ejemplo:&lt;br /&gt;
                                                                                         &lt;br /&gt;
                     ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|&lt;br /&gt;
           problema  _t__|_2__|_4__|_2__|_7__|    quantum = 1 unidad de tiempo&lt;br /&gt;
                                                       &lt;br /&gt;
                       &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                       &amp;gt; = finalización del proceso&lt;br /&gt;
                       x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                       $ = indica la ejecución del planificador para retirar un&lt;br /&gt;
                           proceso y establecer otro según el criterio&lt;br /&gt;
        |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pa  &amp;lt;xxx|---|---|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pb  |---&amp;lt;xxx|---|---|---|xxx|---|---|xxx|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pc  |---|---&amp;lt;xxx|---|---|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pd  |---|---|---&amp;lt;xxx|---|---|---|xxx|---|xxx|---|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&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  19  20&lt;br /&gt;
                                                                                                   &lt;br /&gt;
                   ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
       Cálculos    _t__|_2__|_4__|_2__|_7__|&lt;br /&gt;
      de tiempos   _T__|_5__|_10_|_5__|_12_|        z = índice de penalización&lt;br /&gt;
                   _z__|_5/2|10/4|_5/2|12/7|&lt;br /&gt;
&lt;br /&gt;
== Turno rotatorio con compensación ==&lt;br /&gt;
&lt;br /&gt;
Es una variante del anterior. Para no perjudicar a los procesos cuyo comportamiento está limitado por operaciones de entrada/salida, se reinsertan en la cola en proporción al tiempo consumido. Es decir, que si un cierto proceso ha consumido el 25% de su '''quantum''', se reinserta en el 25% de la cola, contando desde el principio (dispondrá de otro quantum completo).&lt;br /&gt;
Este tipo de criterio tiene un problema y es que se pueden posponer indefinidamente algunos procesos si hay varios procesos que bloqueen.&lt;br /&gt;
&lt;br /&gt;
== Turno rotatorio con quantum dependiente del número de procesos ==&lt;br /&gt;
&lt;br /&gt;
Otra variante se trata de emplear un '''quantum''' proporcional al número de procesos que haya en estado preparado. De esta forma se obtiene una progresión más uniforme, y por tanto una mejor experiencia para el usuario. Sin embargo, esto aumenta el número de conmutaciones entre procesos. Para evitar la degradación del rendimiento por un exceso de conmutaciones, se establece un mínimo de manera que el quantum no puede ser menor a éste.&lt;br /&gt;
&lt;br /&gt;
== Colas multinivel ==&lt;br /&gt;
&lt;br /&gt;
En este tipo de criterio se mantienen múltiples colas con los procesos en estado preparado. Los procesos se clasifican en las colas según sus características, cada cola recibe un tratamiento distinto.&lt;br /&gt;
&lt;br /&gt;
Un ejemplo sería el siguiente, compuesto de cuatro colas:&lt;br /&gt;
&lt;br /&gt;
# Esta primera cola es para procesos que poseen mayor tiempo de ejecución, son los gestores de interrupción y los gestores de dispositivos (drivers). Hay que tomar los datos y almacenarlos en memoria lo antes posible para poder recoger más, aunque se posponga el procesamiento de dichos datos.&lt;br /&gt;
# En esta cola se almacenan los procesos del servidor, tales como : proceso administrador de memoria, administrador de ficheros, administrador de red, etc.&lt;br /&gt;
# Esta cola esta reservada a los procesos de usuario (procesos útiles para el usuario). Esta se divide a su vez en dos colas:&lt;br /&gt;
## Cola de procesos interactivos, limitados por E/S.&lt;br /&gt;
## Cola de procesos por lotes, limitados por el procesador.&lt;br /&gt;
&lt;br /&gt;
Las colas tienen prioridad según su número, por ejemplo mientras que haya procesos preparados en la primera cola, no se mira la segunda. Esto puede dar lugar a que si hay muchos procesos de gestión de dispositivos se degrade la eficiencia del sistema.&lt;br /&gt;
&lt;br /&gt;
La primera cola esta implementada con una FIFO(no apropiativo), mientras que las colas 2 y 3 se basan en un sistema de RR (turno rotatorio).&lt;br /&gt;
&lt;br /&gt;
== Colas multinivel con realimentación (feedback)==&lt;br /&gt;
&lt;br /&gt;
Es una variante de las colas multinivel en las que los procesos pasan de una cola a otra según su comportamiento, de manera que:&lt;br /&gt;
&lt;br /&gt;
* Los procesos interactivos tienen más oportunidades de emplear el procesador.&lt;br /&gt;
* Los procesos por lotes disponen del procesador durante más tiempo.&lt;br /&gt;
&lt;br /&gt;
Los procesos se asignan al procesador por turnos rotatorios, empleando un ''quantum'' dependiente de la cola en la que se encuentren. Los procesos que consumen el ''quantum'' asignado completamente un número determinado de veces pasan a colas en las que se asignan ''quantum'' mayores. Nótese que los procesos que no consumen su ''quantum'' muestran un comportamiento interactivo. Para no discriminar a los procesos que se encuentran en las colas con ''quantum'' menores, se les dan más oportunidades de ejecución. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, en un sencillo planificador de colas multinivel con realimentación compuesto por dos colas:&lt;br /&gt;
&lt;br /&gt;
* En la primera cola se le asignan un ''quantum'' de 2 unidades de tiempo a los procesos.&lt;br /&gt;
* En la segunda cola se le asignan un ''quantum'' de 1 unidad de tiempo a los procesos.&lt;br /&gt;
&lt;br /&gt;
Si un proceso no consume el ''quantum'' asignado dos veces, pasa a la cola en la que en la se le asignan ''quantum'' de 1 unidad de tiempo.&lt;br /&gt;
&lt;br /&gt;
Para que los procesos interactivos no salgan perjudicados, en aras de hacer un reparto del procesador más equitativo, se le dan dos oportunidades de ejecución a los procesos situados en la cola con ''quantum'' de 1 unidad de tiempo. De esta manera, los procesos de la primera cola reciben una oportunidad de ejecución con un ''quantum'' de 2 unidades de tiempo y los de la segunda reciben dos oportunidades de ejecución con un ''quantum'' de 1 unidad de tiempo.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_planificaci%C3%B3n&amp;diff=518</id>
		<title>Criterios de planificación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_planificaci%C3%B3n&amp;diff=518"/>
				<updated>2011-03-23T08:19:46Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* El siguiente, el más corto (Shortest Job First: SJF) */ editada de nuevo la frase para que sea más comprensible.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Métodos no apropiativos =&lt;br /&gt;
&lt;br /&gt;
El procesador es asignado al proceso hasta fin de ejecución. Suele darse en sistemas operativos monoprogramables y sistemas de tiempo real.&lt;br /&gt;
&lt;br /&gt;
== Estocástico ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona aleatoriamente el proceso a ser asignado al procesador. No cumple varios [[Planificación de procesos#Aspectos para diseñar un buen planificador|aspectos de diseño de un buen planificador]], como repetitividad o predecibilidad. Es un criterio de planificación teórico que sirve de referencia, si se emplea un criterio de planificación que ofrece resultados peores que la planificación de procesos estocástica, entonces es que no se trata de un buen criterio de planificación.&lt;br /&gt;
&lt;br /&gt;
No se ofrece un ejemplo, puesto que para un conjunto de procesos existen tantas trazas de ejecución como posible combinaciones aleatorias.&lt;br /&gt;
&lt;br /&gt;
== Con conocimiento del futuro ==&lt;br /&gt;
&lt;br /&gt;
En base al conocimiento del futuro se asignan los procesos. Se trata también de un criterio de planificación teórico. Si un criterio de planificación se acerca al criterio de planificación con conocimiento de futuro, entonces es que se trata de un buen planificador.&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_3__|_6__|_7__|&lt;br /&gt;
            problema  _t__|_3__|_5__|_2__|_3__|_1__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                        &amp;gt; = finalización del proceso                                                                       &lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
         |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pb  |---&amp;lt;---|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pc  |---|---|---&amp;lt;xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pd  |---|---|---|---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|&lt;br /&gt;
     Pe  |---|---|---|---|---|---|---&amp;lt;---|---|---|xxx&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;
 &lt;br /&gt;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_2__|_3__|_1__|&lt;br /&gt;
       de tiempos   _T__|_3__|_9__|_2__|_8__|_4__|      z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_9/5|_1__|_8/3|_4/1|&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, al conocer los tiempos en los que llegará cada proceso, y el tiempo de proceso, podemos buscar la forma de asignarlos de forma que, por ejemplo, consigamos la mínima penalización.&lt;br /&gt;
&lt;br /&gt;
== Por orden de llegada (First In, First Out: FIFO) ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso por orden de llegada al sistema, cuando un proceso está preparado se añade al final de la cola y se ejecuta según el orden de incorporacion. Su principales ventajas son su facilidad de implementación, consume muy poco tiempo de procesador (casi ninguno) y su orden de complejidad, O(1). Su desventaja es que los procesos de corta duración pueden quedar a la espera de procesos muy prolongados, así que presentarán un alto índice de penalización.&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_3__|_9__|_12_|&lt;br /&gt;
            problema  _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                        &amp;gt; = finalización del proceso&lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
        |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pb  |---&amp;lt;---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pc  |---|---|---&amp;lt;---|---|---|---|---|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pd  |---|---|---|---|---|---|---|---|---&amp;lt;---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
    Pe  |---|---|---|---|---|---|---|---|---|---|---|---&amp;lt;---|---|---|xxx|xxx|xxx|xxx|xxx&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
       de tiempos   _T__|_3__|_7__|_7__|_6__|_8__|        z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_7/5|_7/2|_6/5|_8/5|&lt;br /&gt;
&lt;br /&gt;
== El siguiente, el más corto (Shortest Job First: SJF) ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso que requiera menos tiempo de ejecución de entre todos los que están listos para ejecutarse. Se necesita conocer con antelación el tiempo de ejecucion de cada proceso, algo que es muy dificil en muchas ocasiones.&lt;br /&gt;
Para procesos largos puede presentar un índice de penalización elevado: Si se tienen muchos procesos cortos, el de mayor duración puede quedar en espera indefinidamente. Otro inconveniente es que todo trabajo corto que llegue cuando ya ha comenzado un trabajo largo tiene un gran retraso. Su orden de complejidad es O(n).&lt;br /&gt;
&lt;br /&gt;
    Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                     ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_3__|_9__|_12_|&lt;br /&gt;
           problema  _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
 &lt;br /&gt;
                       &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                       &amp;gt; = finalización del proceso&lt;br /&gt;
                       x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                       &amp;amp; = se ejecuta el planficador&lt;br /&gt;
         |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pb  |---&amp;lt;---|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pc  |---|---|---&amp;lt;xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pd  |---|---|---|---|---|---|---|---|---&amp;lt;---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
     Pe  |---|---|---|---|---|---|---|---|---|---|---|---&amp;lt;---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;&lt;br /&gt;
 planif. &amp;amp;---|---|---&amp;amp;---|---&amp;amp;---|---|---|---|---&amp;amp;---|---|---|---|---&amp;amp;---|---|---|---|---|&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
       de tiempos   _T__|_3__|_9__|_2__|_6__|_8__|      z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_9/5|_1__|_6/5|_8/5|&lt;br /&gt;
&lt;br /&gt;
== Basado en índice de penalización ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso que tendrá el índice de penalización  (P=T/t=(w+t)/t) de mayor valor. Este método puede producir aplazamientos de ejecución de procesos,pero no son indefinidos. Su orden de complejidad es O(n).&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_3__|_7__|_6__|&lt;br /&gt;
            problema  _t__|_3__|_5__|_4__|_3__|_5__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                        &amp;gt; = finalización del proceso&lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                        &amp;amp; = se ejecuta el planficador&lt;br /&gt;
   &lt;br /&gt;
        |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pb  |---&amp;lt;---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pc  |---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pd  |---|---|---|---|---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
    Pe  |---|---|---|---|---|---&amp;lt;---|---|---|---|---|---|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;&lt;br /&gt;
 planif.&amp;amp;---|---|---&amp;amp;---|---|---|---|---&amp;amp;---|---|---|---&amp;amp;---|---|---&amp;amp;---|---|---|---|---|&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_4__|_3__|_5__|&lt;br /&gt;
       de tiempos   _T__|_3__|_7__|_9__|_13_|_11_|&lt;br /&gt;
                    z(3)|_1__|_'''7/5'''|_1__|____|____|&lt;br /&gt;
                    z(8)|_1__|_7/5|_'''9/4'''|_4/3|_7/5|&lt;br /&gt;
                   z(12)|_1__|_7/5|_9/4|_'''8/3'''|11/5|      z = índice de penalización&lt;br /&gt;
                   z(15)|_1__|_7/5|_9/4|_8/3|'''14/5'''|&lt;br /&gt;
                   z(20)|_1__|_7/5|_9/4|_8/3|14/5|&lt;br /&gt;
&lt;br /&gt;
= Métodos apropiativos =&lt;br /&gt;
&lt;br /&gt;
El planificador puede retirar el procesador en cualquier momento al proceso activo. Suele darse en sistemas operativos [[Multiprogramación|multiprogramables]]. Este metodo es necesario si existen procesos de alta prioridad.&lt;br /&gt;
&lt;br /&gt;
== El siguiente, el más corto (Shortest Job First: SJF) ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso que requiera menos tiempo de ejecución. Si hay un proceso en estado preparado que requiere menos tiempo de ejecución del que le falta al actual, se le retira el procesador al actual proceso y se le asigna al nuevo. Su orden de complejidad es O(n), pero, a diferencia del no apropiativo, cuando entra un proceso en la lista de procesos, se ejecuta código de planificador.Con este método los procesos más largos se ven perjudicados, pues se puede retrasar tanto su tiempo de inicio, como el de finalización.&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_4__|_6__|_12_|&lt;br /&gt;
            problema  _t__|_3__|_5__|_1__|_8__|_3__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                        &amp;gt; = finalización del proceso&lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                        $ = indica la ejecución del planificador para retirar un&lt;br /&gt;
                            proceso y establecer otro según el criterio&lt;br /&gt;
                        &amp;amp; = se ejecuta el código del planificador&lt;br /&gt;
        |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---$---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pb  |---&amp;lt;---|---|xxx|---|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pc  |---|---|---|---&amp;lt;xxx&amp;gt;---|---|---|---|---|---|---$---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pd  |---|---|---|---|---|---&amp;lt;---|---|---|xxx|xxx|xxx|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;&lt;br /&gt;
    Pe  |---|---|---|---|---|---|---|---|---|---|---|---&amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
 Planif.|---&amp;amp;---|---&amp;amp;---&amp;amp;---&amp;amp;---&amp;amp;---|---|---&amp;amp;---|---|---&amp;amp;---|---|---&amp;amp;---|---|---|---|---|&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_1__|_8__|_3__|&lt;br /&gt;
       de tiempos   _T__|_3__|_8__|_1__|_14_|_3__|        z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_8/5|_1__|14/8|_1__|&lt;br /&gt;
&lt;br /&gt;
== Por prioridades ==&lt;br /&gt;
&lt;br /&gt;
Se establecen índices de prioridad a cada proceso:&lt;br /&gt;
&lt;br /&gt;
* '''Índice estático''': Establecido por el usuario. En el caso de sistemas operativos tipo Unix, se dispone de una índice denominado ''nice value'' cuyos valores están entre -20 (máxima prioridad) y 19 (mínima prioridad).&lt;br /&gt;
* '''Índice dinámico''': Establecido por el planificador, inicialmente basado en el índice estático, después se va recalculando en base a las observaciones que realiza el planificador sobre el comportamiento de los procesos, aumentándola cuando un proceso está a la espera o disminuyendola cuando tiene adjudicado el procesador.&lt;br /&gt;
&lt;br /&gt;
El método funciona de la siguiente manera: El planificador mantiene ordenada la cola de procesos preparados, según prioridades decrecientes. Si el proceso en ejecución se bloquea, el planificador selecciona el primero de la lista. Cuando un proceso pasa a la situación de preparado, comprueba si su prioridad es mayor que la del proceso activo. En tal caso, suspende la ejecución de éste, colocándolo al principio de la cola de preparados, y elige al recién llegado; si no, lo inserta en la cola según su prioridad.&lt;br /&gt;
Cuando hay varios procesos con la misma prioridad se pueden aplicar diversos criterios, como seguir el orden de llegada a la cola de preparados, o el que necesite menos tiempo para acabar entre otros.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El orden es siempre O(n).&lt;br /&gt;
&lt;br /&gt;
    Ejemplo:&lt;br /&gt;
                                                                                         &lt;br /&gt;
                     ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|&lt;br /&gt;
           problema  _t__|_2__|_4__|_2__|_7__|    p = prioridad estática&lt;br /&gt;
                     _p__|_0__|-20_|_4__|_10_|&lt;br /&gt;
                                                       &lt;br /&gt;
                       &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                       &amp;gt; = finalización del proceso&lt;br /&gt;
                       x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                       $ = indica la ejecución del planificador para retirar un&lt;br /&gt;
                           proceso y establecer otro según el criterio&lt;br /&gt;
                       &amp;amp; = se ejecuta el código del planificador&lt;br /&gt;
         |---$---|---|---|---$---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pa  &amp;lt;xxx|---|---|---|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pb  |---&amp;lt;xxx|xxx|xxx|xxx&amp;gt;---$---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pc  |---|---&amp;lt;---|---|---|---|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pd  |---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
 Planif. |---&amp;amp;---&amp;amp;---&amp;amp;---|---&amp;amp;---&amp;amp;---|---&amp;amp;---|---|---|---|---|---|---|---|---|---|---|---|&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;
                   ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
       Cálculos    _t__|_2__|_4__|_2__|_7__|&lt;br /&gt;
      de tiempos   _T__|_6__|_4__|_6__|_12_|        z = índice de penalización&lt;br /&gt;
                   _z__|_3__|_1__|_3__|12/7|&lt;br /&gt;
&lt;br /&gt;
== Turno rotatorio estricto (Round Robin: RR) ==&lt;br /&gt;
&lt;br /&gt;
En este criterio, todo proceso es asignado al procesador durante un tiempo establecido denominado ''quantum'', tras el cual se le retira y se asigna a otro proceso rotatoriamente. De esta manera, los procesos acceden al procesador por turnos.&lt;br /&gt;
&lt;br /&gt;
El tamaño del ''quantum'' es fundamental para determinar el comportamiento de este criterio de planificación. &lt;br /&gt;
Si el ''quantum'' empleado es pequeño, por ejemplo de 10 ms, suponiendo que la conmutación de procesos requiere 10ms, el 50% del tiempo se empleará el procesador para ejecutar el código que permite conmutar entre procesos. Sin embargo, si el ''quantum'' empleado es grande, por ejemplo de 5 s, la latencia será mayor, degradando la experiencia del usuario que notará como sus procesos progresan ''a saltos'', puesto que, en el peor de los casos, hasta pasados 5 s no se le asignará el procesador a otro proceso .&lt;br /&gt;
&lt;br /&gt;
Si un proceso bloquea antes de consumir su ''quantum'' '''se le retira el procesador''' y se añade al final de la cola. Esto beneficia a los procesos cuyo comportamiento está limitado por el procesador, pues se pasan más tiempo asignados al procesador.&lt;br /&gt;
&lt;br /&gt;
Este criterio se puede implementar con una cola, de manera que la complejidad de la selección de un proceso es O(1). Nótese que a mayor número de procesos preparados, mayor tiempo tardará un proceso en volver a pasar a estado activo.&lt;br /&gt;
&lt;br /&gt;
    Ejemplo:&lt;br /&gt;
                                                                                         &lt;br /&gt;
                     ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|&lt;br /&gt;
           problema  _t__|_2__|_4__|_2__|_7__|    quantum = 1 unidad de tiempo&lt;br /&gt;
                                                       &lt;br /&gt;
                       &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                       &amp;gt; = finalización del proceso&lt;br /&gt;
                       x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                       $ = indica la ejecución del planificador para retirar un&lt;br /&gt;
                           proceso y establecer otro según el criterio&lt;br /&gt;
        |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pa  &amp;lt;xxx|---|---|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pb  |---&amp;lt;xxx|---|---|---|xxx|---|---|xxx|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pc  |---|---&amp;lt;xxx|---|---|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pd  |---|---|---&amp;lt;xxx|---|---|---|xxx|---|xxx|---|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&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  19  20&lt;br /&gt;
                                                                                                   &lt;br /&gt;
                   ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
       Cálculos    _t__|_2__|_4__|_2__|_7__|&lt;br /&gt;
      de tiempos   _T__|_5__|_10_|_5__|_12_|        z = índice de penalización&lt;br /&gt;
                   _z__|_5/2|10/4|_5/2|12/7|&lt;br /&gt;
&lt;br /&gt;
== Turno rotatorio con compensación ==&lt;br /&gt;
&lt;br /&gt;
Es una variante del anterior. Para no perjudicar a los procesos cuyo comportamiento está limitado por operaciones de entrada/salida, se reinsertan en la cola en proporción al tiempo consumido. Es decir, que si un cierto proceso ha consumido el 25% de su '''quantum''', se reinserta en el 25% de la cola, contando desde el principio (dispondrá de otro quantum completo).&lt;br /&gt;
Este tipo de criterio tiene un problema y es que se pueden posponer indefinidamente algunos procesos si hay varios procesos que bloqueen.&lt;br /&gt;
&lt;br /&gt;
== Turno rotatorio con quantum dependiente del número de procesos ==&lt;br /&gt;
&lt;br /&gt;
Otra variante se trata de emplear un '''quantum''' proporcional al número de procesos que haya en estado preparado. De esta forma se obtiene una progresión más uniforme, y por tanto una mejor experiencia para el usuario. Sin embargo, esto aumenta el número de conmutaciones entre procesos. Para evitar la degradación del rendimiento por un exceso de conmutaciones, se establece un mínimo de manera que el quantum no puede ser menor a éste.&lt;br /&gt;
&lt;br /&gt;
== Colas multinivel ==&lt;br /&gt;
&lt;br /&gt;
En este tipo de criterio se mantienen múltiples colas con los procesos en estado preparado. Los procesos se clasifican en las colas según sus características, cada cola recibe un tratamiento distinto.&lt;br /&gt;
&lt;br /&gt;
Un ejemplo sería el siguiente, compuesto de cuatro colas:&lt;br /&gt;
&lt;br /&gt;
# Esta primera cola es para procesos que poseen mayor tiempo de ejecución, son los gestores de interrupción y los gestores de dispositivos (drivers). Hay que tomar los datos y almacenarlos en memoria lo antes posible para poder recoger más, aunque se posponga el procesamiento de dichos datos.&lt;br /&gt;
# En esta cola se almacenan los procesos del servidor, tales como : proceso administrador de memoria, administrador de ficheros, administrador de red, etc.&lt;br /&gt;
# Esta cola esta reservada a los procesos de usuario (procesos útiles para el usuario). Esta se divide a su vez en dos colas:&lt;br /&gt;
## Cola de procesos interactivos, limitados por E/S.&lt;br /&gt;
## Cola de procesos por lotes, limitados por el procesador.&lt;br /&gt;
&lt;br /&gt;
Las colas tienen prioridad según su número, por ejemplo mientras que haya procesos preparados en la primera cola, no se mira la segunda. Esto puede dar lugar a que si hay muchos procesos de gestión de dispositivos se degrade la eficiencia del sistema.&lt;br /&gt;
&lt;br /&gt;
La primera cola esta implementada con una FIFO(no apropiativo), mientras que las colas 2 y 3 se basan en un sistema de RR (turno rotatorio).&lt;br /&gt;
&lt;br /&gt;
== Colas multinivel con realimentación (feedback)==&lt;br /&gt;
&lt;br /&gt;
Es una variante de las colas multinivel en las que los procesos pasan de una cola a otra según su comportamiento, de manera que:&lt;br /&gt;
&lt;br /&gt;
* Los procesos interactivos tienen más oportunidades de emplear el procesador.&lt;br /&gt;
* Los procesos por lotes disponen del procesador durante más tiempo.&lt;br /&gt;
&lt;br /&gt;
Los procesos se asignan al procesador por turnos rotatorios, empleando un ''quantum'' dependiente de la cola en la que se encuentren. Los procesos que consumen el ''quantum'' asignado completamente un número determinado de veces pasan a colas en las que se asignan ''quantum'' mayores. Nótese que los procesos que no consumen su ''quantum'' muestran un comportamiento interactivo. Para no discriminar a los procesos que se encuentran en las colas con ''quantum'' menores, se les dan más oportunidades de ejecución. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, en un sencillo planificador de colas multinivel con realimentación compuesto por dos colas:&lt;br /&gt;
&lt;br /&gt;
* En la primera cola se le asignan un ''quantum'' de 2 unidades de tiempo a los procesos.&lt;br /&gt;
* En la segunda cola se le asignan un ''quantum'' de 1 unidad de tiempo a los procesos.&lt;br /&gt;
&lt;br /&gt;
Si un proceso no consume el ''quantum'' asignado dos veces, pasa a la cola en la que en la se le asignan ''quantum'' de 1 unidad de tiempo.&lt;br /&gt;
&lt;br /&gt;
Para que los procesos interactivos no salgan perjudicados, en aras de hacer un reparto del procesador más equitativo, se le dan dos oportunidades de ejecución a los procesos situados en la cola con ''quantum'' de 1 unidad de tiempo. De esta manera, los procesos de la primera cola reciben una oportunidad de ejecución con un ''quantum'' de 2 unidades de tiempo y los de la segunda reciben dos oportunidades de ejecución con un ''quantum'' de 1 unidad de tiempo.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_planificaci%C3%B3n&amp;diff=517</id>
		<title>Criterios de planificación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_planificaci%C3%B3n&amp;diff=517"/>
				<updated>2011-03-23T08:18:23Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* El siguiente, el más corto (Shortest Job First: SJF) */ Modificada la explicación sin modificar el contexto.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Métodos no apropiativos =&lt;br /&gt;
&lt;br /&gt;
El procesador es asignado al proceso hasta fin de ejecución. Suele darse en sistemas operativos monoprogramables y sistemas de tiempo real.&lt;br /&gt;
&lt;br /&gt;
== Estocástico ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona aleatoriamente el proceso a ser asignado al procesador. No cumple varios [[Planificación de procesos#Aspectos para diseñar un buen planificador|aspectos de diseño de un buen planificador]], como repetitividad o predecibilidad. Es un criterio de planificación teórico que sirve de referencia, si se emplea un criterio de planificación que ofrece resultados peores que la planificación de procesos estocástica, entonces es que no se trata de un buen criterio de planificación.&lt;br /&gt;
&lt;br /&gt;
No se ofrece un ejemplo, puesto que para un conjunto de procesos existen tantas trazas de ejecución como posible combinaciones aleatorias.&lt;br /&gt;
&lt;br /&gt;
== Con conocimiento del futuro ==&lt;br /&gt;
&lt;br /&gt;
En base al conocimiento del futuro se asignan los procesos. Se trata también de un criterio de planificación teórico. Si un criterio de planificación se acerca al criterio de planificación con conocimiento de futuro, entonces es que se trata de un buen planificador.&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_3__|_6__|_7__|&lt;br /&gt;
            problema  _t__|_3__|_5__|_2__|_3__|_1__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                        &amp;gt; = finalización del proceso                                                                       &lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
         |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pb  |---&amp;lt;---|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pc  |---|---|---&amp;lt;xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pd  |---|---|---|---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|&lt;br /&gt;
     Pe  |---|---|---|---|---|---|---&amp;lt;---|---|---|xxx&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;
 &lt;br /&gt;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_2__|_3__|_1__|&lt;br /&gt;
       de tiempos   _T__|_3__|_9__|_2__|_8__|_4__|      z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_9/5|_1__|_8/3|_4/1|&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, al conocer los tiempos en los que llegará cada proceso, y el tiempo de proceso, podemos buscar la forma de asignarlos de forma que, por ejemplo, consigamos la mínima penalización.&lt;br /&gt;
&lt;br /&gt;
== Por orden de llegada (First In, First Out: FIFO) ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso por orden de llegada al sistema, cuando un proceso está preparado se añade al final de la cola y se ejecuta según el orden de incorporacion. Su principales ventajas son su facilidad de implementación, consume muy poco tiempo de procesador (casi ninguno) y su orden de complejidad, O(1). Su desventaja es que los procesos de corta duración pueden quedar a la espera de procesos muy prolongados, así que presentarán un alto índice de penalización.&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_3__|_9__|_12_|&lt;br /&gt;
            problema  _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                        &amp;gt; = finalización del proceso&lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
        |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pb  |---&amp;lt;---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pc  |---|---|---&amp;lt;---|---|---|---|---|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pd  |---|---|---|---|---|---|---|---|---&amp;lt;---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
    Pe  |---|---|---|---|---|---|---|---|---|---|---|---&amp;lt;---|---|---|xxx|xxx|xxx|xxx|xxx&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
       de tiempos   _T__|_3__|_7__|_7__|_6__|_8__|        z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_7/5|_7/2|_6/5|_8/5|&lt;br /&gt;
&lt;br /&gt;
== El siguiente, el más corto (Shortest Job First: SJF) ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso que requiera menos tiempo de ejecución de entre todos los que están listos para ejecutarse. Se necesita conocer con antelación el tiempo de ejecucion de cada proceso, algo que es muy dificil en muchas ocasiones.&lt;br /&gt;
Para procesos largos puede presentar un índice de penalización elevado: Si se tienen muchos procesos cortos, el de mayor duración puede quedar en espera indefinidamente. Otro inconveniente es que todo trabajo corto que llegue cuando ya ha comenzado un trabajo largo tiene un gran retraso. Su orden de complejidad es O(n).&lt;br /&gt;
&lt;br /&gt;
    Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                     ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_3__|_9__|_12_|&lt;br /&gt;
           problema  _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
 &lt;br /&gt;
                       &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                       &amp;gt; = finalización del proceso&lt;br /&gt;
                       x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                       &amp;amp; = se ejecuta el planficador&lt;br /&gt;
         |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pb  |---&amp;lt;---|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pc  |---|---|---&amp;lt;xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pd  |---|---|---|---|---|---|---|---|---&amp;lt;---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
     Pe  |---|---|---|---|---|---|---|---|---|---|---|---&amp;lt;---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;&lt;br /&gt;
 planif. &amp;amp;---|---|---&amp;amp;---|---&amp;amp;---|---|---|---|---&amp;amp;---|---|---|---|---&amp;amp;---|---|---|---|---|&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
       de tiempos   _T__|_3__|_9__|_2__|_6__|_8__|      z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_9/5|_1__|_6/5|_8/5|&lt;br /&gt;
&lt;br /&gt;
== Basado en índice de penalización ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso que tendrá el índice de penalización  (P=T/t=(w+t)/t) de mayor valor. Este método puede producir aplazamientos de ejecución de procesos,pero no son indefinidos. Su orden de complejidad es O(n).&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_3__|_7__|_6__|&lt;br /&gt;
            problema  _t__|_3__|_5__|_4__|_3__|_5__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                        &amp;gt; = finalización del proceso&lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                        &amp;amp; = se ejecuta el planficador&lt;br /&gt;
   &lt;br /&gt;
        |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pb  |---&amp;lt;---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pc  |---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pd  |---|---|---|---|---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
    Pe  |---|---|---|---|---|---&amp;lt;---|---|---|---|---|---|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;&lt;br /&gt;
 planif.&amp;amp;---|---|---&amp;amp;---|---|---|---|---&amp;amp;---|---|---|---&amp;amp;---|---|---&amp;amp;---|---|---|---|---|&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_4__|_3__|_5__|&lt;br /&gt;
       de tiempos   _T__|_3__|_7__|_9__|_13_|_11_|&lt;br /&gt;
                    z(3)|_1__|_'''7/5'''|_1__|____|____|&lt;br /&gt;
                    z(8)|_1__|_7/5|_'''9/4'''|_4/3|_7/5|&lt;br /&gt;
                   z(12)|_1__|_7/5|_9/4|_'''8/3'''|11/5|      z = índice de penalización&lt;br /&gt;
                   z(15)|_1__|_7/5|_9/4|_8/3|'''14/5'''|&lt;br /&gt;
                   z(20)|_1__|_7/5|_9/4|_8/3|14/5|&lt;br /&gt;
&lt;br /&gt;
= Métodos apropiativos =&lt;br /&gt;
&lt;br /&gt;
El planificador puede retirar el procesador en cualquier momento al proceso activo. Suele darse en sistemas operativos [[Multiprogramación|multiprogramables]]. Este metodo es necesario si existen procesos de alta prioridad.&lt;br /&gt;
&lt;br /&gt;
== El siguiente, el más corto (Shortest Job First: SJF) ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso que requiera menos tiempo de ejecución. Si hay un proceso en estado preparado que requiere menos tiempo de ejecución del que le falta al actual, se le retira el procesador al anterior proceso y se le asigna al nuevo. Su orden de complejidad es O(n), pero, a diferencia del no apropiativo, cuando entra un proceso en la lista de procesos, se ejecuta código de planificador.Con este método los procesos más largos se ven perjudicados, pues se puede retrasar tanto su tiempo de inicio, como el de finalización.&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_4__|_6__|_12_|&lt;br /&gt;
            problema  _t__|_3__|_5__|_1__|_8__|_3__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                        &amp;gt; = finalización del proceso&lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                        $ = indica la ejecución del planificador para retirar un&lt;br /&gt;
                            proceso y establecer otro según el criterio&lt;br /&gt;
                        &amp;amp; = se ejecuta el código del planificador&lt;br /&gt;
        |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---$---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pb  |---&amp;lt;---|---|xxx|---|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pc  |---|---|---|---&amp;lt;xxx&amp;gt;---|---|---|---|---|---|---$---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pd  |---|---|---|---|---|---&amp;lt;---|---|---|xxx|xxx|xxx|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;&lt;br /&gt;
    Pe  |---|---|---|---|---|---|---|---|---|---|---|---&amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
 Planif.|---&amp;amp;---|---&amp;amp;---&amp;amp;---&amp;amp;---&amp;amp;---|---|---&amp;amp;---|---|---&amp;amp;---|---|---&amp;amp;---|---|---|---|---|&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_1__|_8__|_3__|&lt;br /&gt;
       de tiempos   _T__|_3__|_8__|_1__|_14_|_3__|        z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_8/5|_1__|14/8|_1__|&lt;br /&gt;
&lt;br /&gt;
== Por prioridades ==&lt;br /&gt;
&lt;br /&gt;
Se establecen índices de prioridad a cada proceso:&lt;br /&gt;
&lt;br /&gt;
* '''Índice estático''': Establecido por el usuario. En el caso de sistemas operativos tipo Unix, se dispone de una índice denominado ''nice value'' cuyos valores están entre -20 (máxima prioridad) y 19 (mínima prioridad).&lt;br /&gt;
* '''Índice dinámico''': Establecido por el planificador, inicialmente basado en el índice estático, después se va recalculando en base a las observaciones que realiza el planificador sobre el comportamiento de los procesos, aumentándola cuando un proceso está a la espera o disminuyendola cuando tiene adjudicado el procesador.&lt;br /&gt;
&lt;br /&gt;
El método funciona de la siguiente manera: El planificador mantiene ordenada la cola de procesos preparados, según prioridades decrecientes. Si el proceso en ejecución se bloquea, el planificador selecciona el primero de la lista. Cuando un proceso pasa a la situación de preparado, comprueba si su prioridad es mayor que la del proceso activo. En tal caso, suspende la ejecución de éste, colocándolo al principio de la cola de preparados, y elige al recién llegado; si no, lo inserta en la cola según su prioridad.&lt;br /&gt;
Cuando hay varios procesos con la misma prioridad se pueden aplicar diversos criterios, como seguir el orden de llegada a la cola de preparados, o el que necesite menos tiempo para acabar entre otros.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El orden es siempre O(n).&lt;br /&gt;
&lt;br /&gt;
    Ejemplo:&lt;br /&gt;
                                                                                         &lt;br /&gt;
                     ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|&lt;br /&gt;
           problema  _t__|_2__|_4__|_2__|_7__|    p = prioridad estática&lt;br /&gt;
                     _p__|_0__|-20_|_4__|_10_|&lt;br /&gt;
                                                       &lt;br /&gt;
                       &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                       &amp;gt; = finalización del proceso&lt;br /&gt;
                       x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                       $ = indica la ejecución del planificador para retirar un&lt;br /&gt;
                           proceso y establecer otro según el criterio&lt;br /&gt;
                       &amp;amp; = se ejecuta el código del planificador&lt;br /&gt;
         |---$---|---|---|---$---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pa  &amp;lt;xxx|---|---|---|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pb  |---&amp;lt;xxx|xxx|xxx|xxx&amp;gt;---$---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pc  |---|---&amp;lt;---|---|---|---|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pd  |---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
 Planif. |---&amp;amp;---&amp;amp;---&amp;amp;---|---&amp;amp;---&amp;amp;---|---&amp;amp;---|---|---|---|---|---|---|---|---|---|---|---|&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;
                   ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
       Cálculos    _t__|_2__|_4__|_2__|_7__|&lt;br /&gt;
      de tiempos   _T__|_6__|_4__|_6__|_12_|        z = índice de penalización&lt;br /&gt;
                   _z__|_3__|_1__|_3__|12/7|&lt;br /&gt;
&lt;br /&gt;
== Turno rotatorio estricto (Round Robin: RR) ==&lt;br /&gt;
&lt;br /&gt;
En este criterio, todo proceso es asignado al procesador durante un tiempo establecido denominado ''quantum'', tras el cual se le retira y se asigna a otro proceso rotatoriamente. De esta manera, los procesos acceden al procesador por turnos.&lt;br /&gt;
&lt;br /&gt;
El tamaño del ''quantum'' es fundamental para determinar el comportamiento de este criterio de planificación. &lt;br /&gt;
Si el ''quantum'' empleado es pequeño, por ejemplo de 10 ms, suponiendo que la conmutación de procesos requiere 10ms, el 50% del tiempo se empleará el procesador para ejecutar el código que permite conmutar entre procesos. Sin embargo, si el ''quantum'' empleado es grande, por ejemplo de 5 s, la latencia será mayor, degradando la experiencia del usuario que notará como sus procesos progresan ''a saltos'', puesto que, en el peor de los casos, hasta pasados 5 s no se le asignará el procesador a otro proceso .&lt;br /&gt;
&lt;br /&gt;
Si un proceso bloquea antes de consumir su ''quantum'' '''se le retira el procesador''' y se añade al final de la cola. Esto beneficia a los procesos cuyo comportamiento está limitado por el procesador, pues se pasan más tiempo asignados al procesador.&lt;br /&gt;
&lt;br /&gt;
Este criterio se puede implementar con una cola, de manera que la complejidad de la selección de un proceso es O(1). Nótese que a mayor número de procesos preparados, mayor tiempo tardará un proceso en volver a pasar a estado activo.&lt;br /&gt;
&lt;br /&gt;
    Ejemplo:&lt;br /&gt;
                                                                                         &lt;br /&gt;
                     ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|&lt;br /&gt;
           problema  _t__|_2__|_4__|_2__|_7__|    quantum = 1 unidad de tiempo&lt;br /&gt;
                                                       &lt;br /&gt;
                       &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                       &amp;gt; = finalización del proceso&lt;br /&gt;
                       x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                       $ = indica la ejecución del planificador para retirar un&lt;br /&gt;
                           proceso y establecer otro según el criterio&lt;br /&gt;
        |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pa  &amp;lt;xxx|---|---|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pb  |---&amp;lt;xxx|---|---|---|xxx|---|---|xxx|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pc  |---|---&amp;lt;xxx|---|---|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pd  |---|---|---&amp;lt;xxx|---|---|---|xxx|---|xxx|---|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&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  19  20&lt;br /&gt;
                                                                                                   &lt;br /&gt;
                   ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
       Cálculos    _t__|_2__|_4__|_2__|_7__|&lt;br /&gt;
      de tiempos   _T__|_5__|_10_|_5__|_12_|        z = índice de penalización&lt;br /&gt;
                   _z__|_5/2|10/4|_5/2|12/7|&lt;br /&gt;
&lt;br /&gt;
== Turno rotatorio con compensación ==&lt;br /&gt;
&lt;br /&gt;
Es una variante del anterior. Para no perjudicar a los procesos cuyo comportamiento está limitado por operaciones de entrada/salida, se reinsertan en la cola en proporción al tiempo consumido. Es decir, que si un cierto proceso ha consumido el 25% de su '''quantum''', se reinserta en el 25% de la cola, contando desde el principio (dispondrá de otro quantum completo).&lt;br /&gt;
Este tipo de criterio tiene un problema y es que se pueden posponer indefinidamente algunos procesos si hay varios procesos que bloqueen.&lt;br /&gt;
&lt;br /&gt;
== Turno rotatorio con quantum dependiente del número de procesos ==&lt;br /&gt;
&lt;br /&gt;
Otra variante se trata de emplear un '''quantum''' proporcional al número de procesos que haya en estado preparado. De esta forma se obtiene una progresión más uniforme, y por tanto una mejor experiencia para el usuario. Sin embargo, esto aumenta el número de conmutaciones entre procesos. Para evitar la degradación del rendimiento por un exceso de conmutaciones, se establece un mínimo de manera que el quantum no puede ser menor a éste.&lt;br /&gt;
&lt;br /&gt;
== Colas multinivel ==&lt;br /&gt;
&lt;br /&gt;
En este tipo de criterio se mantienen múltiples colas con los procesos en estado preparado. Los procesos se clasifican en las colas según sus características, cada cola recibe un tratamiento distinto.&lt;br /&gt;
&lt;br /&gt;
Un ejemplo sería el siguiente, compuesto de cuatro colas:&lt;br /&gt;
&lt;br /&gt;
# Esta primera cola es para procesos que poseen mayor tiempo de ejecución, son los gestores de interrupción y los gestores de dispositivos (drivers). Hay que tomar los datos y almacenarlos en memoria lo antes posible para poder recoger más, aunque se posponga el procesamiento de dichos datos.&lt;br /&gt;
# En esta cola se almacenan los procesos del servidor, tales como : proceso administrador de memoria, administrador de ficheros, administrador de red, etc.&lt;br /&gt;
# Esta cola esta reservada a los procesos de usuario (procesos útiles para el usuario). Esta se divide a su vez en dos colas:&lt;br /&gt;
## Cola de procesos interactivos, limitados por E/S.&lt;br /&gt;
## Cola de procesos por lotes, limitados por el procesador.&lt;br /&gt;
&lt;br /&gt;
Las colas tienen prioridad según su número, por ejemplo mientras que haya procesos preparados en la primera cola, no se mira la segunda. Esto puede dar lugar a que si hay muchos procesos de gestión de dispositivos se degrade la eficiencia del sistema.&lt;br /&gt;
&lt;br /&gt;
La primera cola esta implementada con una FIFO(no apropiativo), mientras que las colas 2 y 3 se basan en un sistema de RR (turno rotatorio).&lt;br /&gt;
&lt;br /&gt;
== Colas multinivel con realimentación (feedback)==&lt;br /&gt;
&lt;br /&gt;
Es una variante de las colas multinivel en las que los procesos pasan de una cola a otra según su comportamiento, de manera que:&lt;br /&gt;
&lt;br /&gt;
* Los procesos interactivos tienen más oportunidades de emplear el procesador.&lt;br /&gt;
* Los procesos por lotes disponen del procesador durante más tiempo.&lt;br /&gt;
&lt;br /&gt;
Los procesos se asignan al procesador por turnos rotatorios, empleando un ''quantum'' dependiente de la cola en la que se encuentren. Los procesos que consumen el ''quantum'' asignado completamente un número determinado de veces pasan a colas en las que se asignan ''quantum'' mayores. Nótese que los procesos que no consumen su ''quantum'' muestran un comportamiento interactivo. Para no discriminar a los procesos que se encuentran en las colas con ''quantum'' menores, se les dan más oportunidades de ejecución. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, en un sencillo planificador de colas multinivel con realimentación compuesto por dos colas:&lt;br /&gt;
&lt;br /&gt;
* En la primera cola se le asignan un ''quantum'' de 2 unidades de tiempo a los procesos.&lt;br /&gt;
* En la segunda cola se le asignan un ''quantum'' de 1 unidad de tiempo a los procesos.&lt;br /&gt;
&lt;br /&gt;
Si un proceso no consume el ''quantum'' asignado dos veces, pasa a la cola en la que en la se le asignan ''quantum'' de 1 unidad de tiempo.&lt;br /&gt;
&lt;br /&gt;
Para que los procesos interactivos no salgan perjudicados, en aras de hacer un reparto del procesador más equitativo, se le dan dos oportunidades de ejecución a los procesos situados en la cola con ''quantum'' de 1 unidad de tiempo. De esta manera, los procesos de la primera cola reciben una oportunidad de ejecución con un ''quantum'' de 2 unidades de tiempo y los de la segunda reciben dos oportunidades de ejecución con un ''quantum'' de 1 unidad de tiempo.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_planificaci%C3%B3n&amp;diff=516</id>
		<title>Criterios de planificación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_planificaci%C3%B3n&amp;diff=516"/>
				<updated>2011-03-23T08:13:50Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: /* Basado en índice de penalización */ Modificada la explicación,eliminada la primera frase, porque no se elige el proceso con más t preparado, sino el que va a tener mayor índice d p.contrdecia al ej&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Métodos no apropiativos =&lt;br /&gt;
&lt;br /&gt;
El procesador es asignado al proceso hasta fin de ejecución. Suele darse en sistemas operativos monoprogramables y sistemas de tiempo real.&lt;br /&gt;
&lt;br /&gt;
== Estocástico ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona aleatoriamente el proceso a ser asignado al procesador. No cumple varios [[Planificación de procesos#Aspectos para diseñar un buen planificador|aspectos de diseño de un buen planificador]], como repetitividad o predecibilidad. Es un criterio de planificación teórico que sirve de referencia, si se emplea un criterio de planificación que ofrece resultados peores que la planificación de procesos estocástica, entonces es que no se trata de un buen criterio de planificación.&lt;br /&gt;
&lt;br /&gt;
No se ofrece un ejemplo, puesto que para un conjunto de procesos existen tantas trazas de ejecución como posible combinaciones aleatorias.&lt;br /&gt;
&lt;br /&gt;
== Con conocimiento del futuro ==&lt;br /&gt;
&lt;br /&gt;
En base al conocimiento del futuro se asignan los procesos. Se trata también de un criterio de planificación teórico. Si un criterio de planificación se acerca al criterio de planificación con conocimiento de futuro, entonces es que se trata de un buen planificador.&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_3__|_6__|_7__|&lt;br /&gt;
            problema  _t__|_3__|_5__|_2__|_3__|_1__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                        &amp;gt; = finalización del proceso                                                                       &lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
         |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pb  |---&amp;lt;---|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pc  |---|---|---&amp;lt;xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pd  |---|---|---|---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|&lt;br /&gt;
     Pe  |---|---|---|---|---|---|---&amp;lt;---|---|---|xxx&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;
 &lt;br /&gt;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_2__|_3__|_1__|&lt;br /&gt;
       de tiempos   _T__|_3__|_9__|_2__|_8__|_4__|      z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_9/5|_1__|_8/3|_4/1|&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, al conocer los tiempos en los que llegará cada proceso, y el tiempo de proceso, podemos buscar la forma de asignarlos de forma que, por ejemplo, consigamos la mínima penalización.&lt;br /&gt;
&lt;br /&gt;
== Por orden de llegada (First In, First Out: FIFO) ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso por orden de llegada al sistema, cuando un proceso está preparado se añade al final de la cola y se ejecuta según el orden de incorporacion. Su principales ventajas son su facilidad de implementación, consume muy poco tiempo de procesador (casi ninguno) y su orden de complejidad, O(1). Su desventaja es que los procesos de corta duración pueden quedar a la espera de procesos muy prolongados, así que presentarán un alto índice de penalización.&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_3__|_9__|_12_|&lt;br /&gt;
            problema  _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                        &amp;gt; = finalización del proceso&lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
        |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pb  |---&amp;lt;---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pc  |---|---|---&amp;lt;---|---|---|---|---|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pd  |---|---|---|---|---|---|---|---|---&amp;lt;---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
    Pe  |---|---|---|---|---|---|---|---|---|---|---|---&amp;lt;---|---|---|xxx|xxx|xxx|xxx|xxx&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
       de tiempos   _T__|_3__|_7__|_7__|_6__|_8__|        z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_7/5|_7/2|_6/5|_8/5|&lt;br /&gt;
&lt;br /&gt;
== El siguiente, el más corto (Shortest Job First: SJF) ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso que requiera menos tiempo de ejecución de entre todos los que están listos para ejecutarse. Se necesita conocer con antelación el tiempo de ejecucion de cada proceso, algo que es muy dificil en muchas ocasiones.&lt;br /&gt;
Para procesos largos puede presentar un índice de penalización elevado: Si se tienen muchos procesos cortos, el de mayor duración puede quedar en espera indefinidamente. Otro inconveniente es que todo trabajo corto que llegue cuando ya ha comenzado un trabajo largo tiene un gran retraso. Su orden de complejidad es O(n).&lt;br /&gt;
&lt;br /&gt;
    Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                     ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_3__|_9__|_12_|&lt;br /&gt;
           problema  _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
 &lt;br /&gt;
                       &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                       &amp;gt; = finalización del proceso&lt;br /&gt;
                       x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                       &amp;amp; = se ejecuta el planficador&lt;br /&gt;
         |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pb  |---&amp;lt;---|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pc  |---|---|---&amp;lt;xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pd  |---|---|---|---|---|---|---|---|---&amp;lt;---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
     Pe  |---|---|---|---|---|---|---|---|---|---|---|---&amp;lt;---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;&lt;br /&gt;
 planif. &amp;amp;---|---|---&amp;amp;---|---&amp;amp;---|---|---|---|---&amp;amp;---|---|---|---|---&amp;amp;---|---|---|---|---|&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
       de tiempos   _T__|_3__|_9__|_2__|_6__|_8__|      z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_9/5|_1__|_6/5|_8/5|&lt;br /&gt;
&lt;br /&gt;
== Basado en índice de penalización ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso que tendrá el índice de penalización  (P=T/t=(w+t)/t) de mayor valor. Este método puede producir aplazamientos de ejecución de procesos,pero no son indefinidos. Su orden de complejidad es O(n).&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_3__|_7__|_6__|&lt;br /&gt;
            problema  _t__|_3__|_5__|_4__|_3__|_5__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                        &amp;gt; = finalización del proceso&lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                        &amp;amp; = se ejecuta el planficador&lt;br /&gt;
   &lt;br /&gt;
        |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pb  |---&amp;lt;---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pc  |---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pd  |---|---|---|---|---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
    Pe  |---|---|---|---|---|---&amp;lt;---|---|---|---|---|---|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;&lt;br /&gt;
 planif.&amp;amp;---|---|---&amp;amp;---|---|---|---|---&amp;amp;---|---|---|---&amp;amp;---|---|---&amp;amp;---|---|---|---|---|&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_4__|_3__|_5__|&lt;br /&gt;
       de tiempos   _T__|_3__|_7__|_9__|_13_|_11_|&lt;br /&gt;
                    z(3)|_1__|_'''7/5'''|_1__|____|____|&lt;br /&gt;
                    z(8)|_1__|_7/5|_'''9/4'''|_4/3|_7/5|&lt;br /&gt;
                   z(12)|_1__|_7/5|_9/4|_'''8/3'''|11/5|      z = índice de penalización&lt;br /&gt;
                   z(15)|_1__|_7/5|_9/4|_8/3|'''14/5'''|&lt;br /&gt;
                   z(20)|_1__|_7/5|_9/4|_8/3|14/5|&lt;br /&gt;
&lt;br /&gt;
= Métodos apropiativos =&lt;br /&gt;
&lt;br /&gt;
El planificador puede retirar el procesador en cualquier momento al proceso activo. Suele darse en sistemas operativos [[Multiprogramación|multiprogramables]]. Este metodo es necesario si existen procesos de alta prioridad.&lt;br /&gt;
&lt;br /&gt;
== El siguiente, el más corto (Shortest Job First: SJF) ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso que requiera menos tiempo de ejecución. Si hay un proceso en estado preparado que requiere menos tiempo de ejecución, se le asigna el procesador, sólo si el proceso nuevo necesita menos tiempo del que le falta al actual.  Su orden de complejidad es O(n), pero, a diferencia del no apropiativo, cuando entra un proceso en la lista de procesos, se ejecuta código de planificador.Con este método los procesos más largos se ven perjudicados, pues se puede retrasar tanto su tiempo de inicio, como el de finalización.&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_4__|_6__|_12_|&lt;br /&gt;
            problema  _t__|_3__|_5__|_1__|_8__|_3__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                        &amp;gt; = finalización del proceso&lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                        $ = indica la ejecución del planificador para retirar un&lt;br /&gt;
                            proceso y establecer otro según el criterio&lt;br /&gt;
                        &amp;amp; = se ejecuta el código del planificador&lt;br /&gt;
        |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---$---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pb  |---&amp;lt;---|---|xxx|---|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pc  |---|---|---|---&amp;lt;xxx&amp;gt;---|---|---|---|---|---|---$---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pd  |---|---|---|---|---|---&amp;lt;---|---|---|xxx|xxx|xxx|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;&lt;br /&gt;
    Pe  |---|---|---|---|---|---|---|---|---|---|---|---&amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
 Planif.|---&amp;amp;---|---&amp;amp;---&amp;amp;---&amp;amp;---&amp;amp;---|---|---&amp;amp;---|---|---&amp;amp;---|---|---&amp;amp;---|---|---|---|---|&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_1__|_8__|_3__|&lt;br /&gt;
       de tiempos   _T__|_3__|_8__|_1__|_14_|_3__|        z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_8/5|_1__|14/8|_1__|&lt;br /&gt;
&lt;br /&gt;
== Por prioridades ==&lt;br /&gt;
&lt;br /&gt;
Se establecen índices de prioridad a cada proceso:&lt;br /&gt;
&lt;br /&gt;
* '''Índice estático''': Establecido por el usuario. En el caso de sistemas operativos tipo Unix, se dispone de una índice denominado ''nice value'' cuyos valores están entre -20 (máxima prioridad) y 19 (mínima prioridad).&lt;br /&gt;
* '''Índice dinámico''': Establecido por el planificador, inicialmente basado en el índice estático, después se va recalculando en base a las observaciones que realiza el planificador sobre el comportamiento de los procesos, aumentándola cuando un proceso está a la espera o disminuyendola cuando tiene adjudicado el procesador.&lt;br /&gt;
&lt;br /&gt;
El método funciona de la siguiente manera: El planificador mantiene ordenada la cola de procesos preparados, según prioridades decrecientes. Si el proceso en ejecución se bloquea, el planificador selecciona el primero de la lista. Cuando un proceso pasa a la situación de preparado, comprueba si su prioridad es mayor que la del proceso activo. En tal caso, suspende la ejecución de éste, colocándolo al principio de la cola de preparados, y elige al recién llegado; si no, lo inserta en la cola según su prioridad.&lt;br /&gt;
Cuando hay varios procesos con la misma prioridad se pueden aplicar diversos criterios, como seguir el orden de llegada a la cola de preparados, o el que necesite menos tiempo para acabar entre otros.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El orden es siempre O(n).&lt;br /&gt;
&lt;br /&gt;
    Ejemplo:&lt;br /&gt;
                                                                                         &lt;br /&gt;
                     ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|&lt;br /&gt;
           problema  _t__|_2__|_4__|_2__|_7__|    p = prioridad estática&lt;br /&gt;
                     _p__|_0__|-20_|_4__|_10_|&lt;br /&gt;
                                                       &lt;br /&gt;
                       &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                       &amp;gt; = finalización del proceso&lt;br /&gt;
                       x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                       $ = indica la ejecución del planificador para retirar un&lt;br /&gt;
                           proceso y establecer otro según el criterio&lt;br /&gt;
                       &amp;amp; = se ejecuta el código del planificador&lt;br /&gt;
         |---$---|---|---|---$---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pa  &amp;lt;xxx|---|---|---|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pb  |---&amp;lt;xxx|xxx|xxx|xxx&amp;gt;---$---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pc  |---|---&amp;lt;---|---|---|---|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
     Pd  |---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
 Planif. |---&amp;amp;---&amp;amp;---&amp;amp;---|---&amp;amp;---&amp;amp;---|---&amp;amp;---|---|---|---|---|---|---|---|---|---|---|---|&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;
                   ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
       Cálculos    _t__|_2__|_4__|_2__|_7__|&lt;br /&gt;
      de tiempos   _T__|_6__|_4__|_6__|_12_|        z = índice de penalización&lt;br /&gt;
                   _z__|_3__|_1__|_3__|12/7|&lt;br /&gt;
&lt;br /&gt;
== Turno rotatorio estricto (Round Robin: RR) ==&lt;br /&gt;
&lt;br /&gt;
En este criterio, todo proceso es asignado al procesador durante un tiempo establecido denominado ''quantum'', tras el cual se le retira y se asigna a otro proceso rotatoriamente. De esta manera, los procesos acceden al procesador por turnos.&lt;br /&gt;
&lt;br /&gt;
El tamaño del ''quantum'' es fundamental para determinar el comportamiento de este criterio de planificación. &lt;br /&gt;
Si el ''quantum'' empleado es pequeño, por ejemplo de 10 ms, suponiendo que la conmutación de procesos requiere 10ms, el 50% del tiempo se empleará el procesador para ejecutar el código que permite conmutar entre procesos. Sin embargo, si el ''quantum'' empleado es grande, por ejemplo de 5 s, la latencia será mayor, degradando la experiencia del usuario que notará como sus procesos progresan ''a saltos'', puesto que, en el peor de los casos, hasta pasados 5 s no se le asignará el procesador a otro proceso .&lt;br /&gt;
&lt;br /&gt;
Si un proceso bloquea antes de consumir su ''quantum'' '''se le retira el procesador''' y se añade al final de la cola. Esto beneficia a los procesos cuyo comportamiento está limitado por el procesador, pues se pasan más tiempo asignados al procesador.&lt;br /&gt;
&lt;br /&gt;
Este criterio se puede implementar con una cola, de manera que la complejidad de la selección de un proceso es O(1). Nótese que a mayor número de procesos preparados, mayor tiempo tardará un proceso en volver a pasar a estado activo.&lt;br /&gt;
&lt;br /&gt;
    Ejemplo:&lt;br /&gt;
                                                                                         &lt;br /&gt;
                     ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|&lt;br /&gt;
           problema  _t__|_2__|_4__|_2__|_7__|    quantum = 1 unidad de tiempo&lt;br /&gt;
                                                       &lt;br /&gt;
                       &amp;lt; = lanzamiento del proceso&lt;br /&gt;
                       &amp;gt; = finalización del proceso&lt;br /&gt;
                       x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                       $ = indica la ejecución del planificador para retirar un&lt;br /&gt;
                           proceso y establecer otro según el criterio&lt;br /&gt;
        |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pa  &amp;lt;xxx|---|---|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pb  |---&amp;lt;xxx|---|---|---|xxx|---|---|xxx|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pc  |---|---&amp;lt;xxx|---|---|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pd  |---|---|---&amp;lt;xxx|---|---|---|xxx|---|xxx|---|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&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  19  20&lt;br /&gt;
                                                                                                   &lt;br /&gt;
                   ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
       Cálculos    _t__|_2__|_4__|_2__|_7__|&lt;br /&gt;
      de tiempos   _T__|_5__|_10_|_5__|_12_|        z = índice de penalización&lt;br /&gt;
                   _z__|_5/2|10/4|_5/2|12/7|&lt;br /&gt;
&lt;br /&gt;
== Turno rotatorio con compensación ==&lt;br /&gt;
&lt;br /&gt;
Es una variante del anterior. Para no perjudicar a los procesos cuyo comportamiento está limitado por operaciones de entrada/salida, se reinsertan en la cola en proporción al tiempo consumido. Es decir, que si un cierto proceso ha consumido el 25% de su '''quantum''', se reinserta en el 25% de la cola, contando desde el principio (dispondrá de otro quantum completo).&lt;br /&gt;
Este tipo de criterio tiene un problema y es que se pueden posponer indefinidamente algunos procesos si hay varios procesos que bloqueen.&lt;br /&gt;
&lt;br /&gt;
== Turno rotatorio con quantum dependiente del número de procesos ==&lt;br /&gt;
&lt;br /&gt;
Otra variante se trata de emplear un '''quantum''' proporcional al número de procesos que haya en estado preparado. De esta forma se obtiene una progresión más uniforme, y por tanto una mejor experiencia para el usuario. Sin embargo, esto aumenta el número de conmutaciones entre procesos. Para evitar la degradación del rendimiento por un exceso de conmutaciones, se establece un mínimo de manera que el quantum no puede ser menor a éste.&lt;br /&gt;
&lt;br /&gt;
== Colas multinivel ==&lt;br /&gt;
&lt;br /&gt;
En este tipo de criterio se mantienen múltiples colas con los procesos en estado preparado. Los procesos se clasifican en las colas según sus características, cada cola recibe un tratamiento distinto.&lt;br /&gt;
&lt;br /&gt;
Un ejemplo sería el siguiente, compuesto de cuatro colas:&lt;br /&gt;
&lt;br /&gt;
# Esta primera cola es para procesos que poseen mayor tiempo de ejecución, son los gestores de interrupción y los gestores de dispositivos (drivers). Hay que tomar los datos y almacenarlos en memoria lo antes posible para poder recoger más, aunque se posponga el procesamiento de dichos datos.&lt;br /&gt;
# En esta cola se almacenan los procesos del servidor, tales como : proceso administrador de memoria, administrador de ficheros, administrador de red, etc.&lt;br /&gt;
# Esta cola esta reservada a los procesos de usuario (procesos útiles para el usuario). Esta se divide a su vez en dos colas:&lt;br /&gt;
## Cola de procesos interactivos, limitados por E/S.&lt;br /&gt;
## Cola de procesos por lotes, limitados por el procesador.&lt;br /&gt;
&lt;br /&gt;
Las colas tienen prioridad según su número, por ejemplo mientras que haya procesos preparados en la primera cola, no se mira la segunda. Esto puede dar lugar a que si hay muchos procesos de gestión de dispositivos se degrade la eficiencia del sistema.&lt;br /&gt;
&lt;br /&gt;
La primera cola esta implementada con una FIFO(no apropiativo), mientras que las colas 2 y 3 se basan en un sistema de RR (turno rotatorio).&lt;br /&gt;
&lt;br /&gt;
== Colas multinivel con realimentación (feedback)==&lt;br /&gt;
&lt;br /&gt;
Es una variante de las colas multinivel en las que los procesos pasan de una cola a otra según su comportamiento, de manera que:&lt;br /&gt;
&lt;br /&gt;
* Los procesos interactivos tienen más oportunidades de emplear el procesador.&lt;br /&gt;
* Los procesos por lotes disponen del procesador durante más tiempo.&lt;br /&gt;
&lt;br /&gt;
Los procesos se asignan al procesador por turnos rotatorios, empleando un ''quantum'' dependiente de la cola en la que se encuentren. Los procesos que consumen el ''quantum'' asignado completamente un número determinado de veces pasan a colas en las que se asignan ''quantum'' mayores. Nótese que los procesos que no consumen su ''quantum'' muestran un comportamiento interactivo. Para no discriminar a los procesos que se encuentran en las colas con ''quantum'' menores, se les dan más oportunidades de ejecución. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, en un sencillo planificador de colas multinivel con realimentación compuesto por dos colas:&lt;br /&gt;
&lt;br /&gt;
* En la primera cola se le asignan un ''quantum'' de 2 unidades de tiempo a los procesos.&lt;br /&gt;
* En la segunda cola se le asignan un ''quantum'' de 1 unidad de tiempo a los procesos.&lt;br /&gt;
&lt;br /&gt;
Si un proceso no consume el ''quantum'' asignado dos veces, pasa a la cola en la que en la se le asignan ''quantum'' de 1 unidad de tiempo.&lt;br /&gt;
&lt;br /&gt;
Para que los procesos interactivos no salgan perjudicados, en aras de hacer un reparto del procesador más equitativo, se le dan dos oportunidades de ejecución a los procesos situados en la cola con ''quantum'' de 1 unidad de tiempo. De esta manera, los procesos de la primera cola reciben una oportunidad de ejecución con un ''quantum'' de 2 unidades de tiempo y los de la segunda reciben dos oportunidades de ejecución con un ''quantum'' de 1 unidad de tiempo.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Planificaci%C3%B3n_de_procesos&amp;diff=514</id>
		<title>Planificación de procesos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Planificaci%C3%B3n_de_procesos&amp;diff=514"/>
				<updated>2011-03-23T07:47:14Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: Reescritura de una frase(en esencia dice lo mismo)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Todo planificador de procesos emplea uno o varios criterios (''scheduling policy'', en inglés) que determinan el criterio de selección del proceso que empleará el procesador.&lt;br /&gt;
&lt;br /&gt;
== Aspectos para diseñar un buen criterio de planificación ==&lt;br /&gt;
&lt;br /&gt;
Además de ofrecer una alta ''tasa de transferencia'' (throughput) y una baja latencia (latency), es deseable que un planificador implemente las siguientes características:&lt;br /&gt;
&lt;br /&gt;
*'''Repetitividad''' : con cargas de trabajo similares(cantidad de procesos a atender) , el procesador debe tener comportamientos similares.&lt;br /&gt;
*'''Predecibilidad''' : hace referencia al tiempo de terminación de un proceso para cierta carga de trabajo, que debe ser similar para cargas de trabajo parecidas.&lt;br /&gt;
*'''Eficiencia''' : debe tomar decisiones rápidas para aumentar el rendimiento.&lt;br /&gt;
*'''Reducción del número de conmutaciones''' : de nuevo, para aumentar el rendimiento y reducir la penalización asociada.&lt;br /&gt;
*'''Atención de  prioridades''': uso de criterios de selección basados en prioridades&lt;br /&gt;
*'''Degradación uniforme del rendimiento''': a mayores cargas de trabajo el rendimiento debe degradarse uniformemente.&lt;br /&gt;
*'''Capacidad de respuesta instantánea''': los tiempos de espera para atender a un proceso deben ser aceptables de cara al usuario, generalmente &amp;lt;100ms para seres humanos.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_otros_aspectos_de_la_planificaci%C3%B3n/Solucion_del_ejercicio_1&amp;diff=507</id>
		<title>Ejercicios otros aspectos de la planificación/Solucion del ejercicio 1</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/Solucion_del_ejercicio_1&amp;diff=507"/>
				<updated>2011-03-22T23:31:50Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: Retocadas las observaciones&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= FIFO no apropiativo con multiprocesamiento =&lt;br /&gt;
Para este caso disponemos de 2 Procesadores, y supondremos que el planificador se ejecuta en uno de ellos&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;D&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;__|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|_4__|&lt;br /&gt;
           problema  _t__|_5__|_3__|_1__|_6__|_2__|&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;
                       X = se ejecuta el código del planificador&lt;br /&gt;
                       +++ = procesador 1&lt;br /&gt;
                       --- = procesador 2&lt;br /&gt;
 &lt;br /&gt;
                   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
    Pa             &amp;lt;+++|+++|+++|+++|+++&amp;gt;   |   |   |   |   |   |   |&lt;br /&gt;
    Pb             |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |&lt;br /&gt;
    Pc             |   |   &amp;lt;   |   |---&amp;gt;   |   |   |   |   |   |   |&lt;br /&gt;
    Pd             |   |   |   &amp;lt;   |   |+++|+++|+++|+++|+++|+++&amp;gt;   |&lt;br /&gt;
    Pe             |   |   |   |   &amp;lt;   |---|---&amp;gt;   |   |   |   |   |&lt;br /&gt;
    Planificador   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&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;D&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;__|&lt;br /&gt;
              Cálculos   __t__|_5__|_3__|_1__|_6__|_2__|&lt;br /&gt;
             de tiempos  __T__|_5__|_3__|_3__|_8__|_3__|&lt;br /&gt;
                         _T/t_|_1__|_1__|_3__|1.33|_1.5|&lt;br /&gt;
                           |&lt;br /&gt;
                           |_&amp;gt; Indice de penalización&lt;br /&gt;
&lt;br /&gt;
= SFJ no apropriativo con multiprocesamiento =&lt;br /&gt;
&lt;br /&gt;
La solución es igual que el FIFO no apropiativo con multiprocesamiento.&lt;br /&gt;
&lt;br /&gt;
= SFJ apropiativo con multiprocesamiento =&lt;br /&gt;
&lt;br /&gt;
Para este caso disponemos de 2 Procesadores, y supondremos que el planificador se ejecuta en uno de ellos&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;D&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;__|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|_4__|&lt;br /&gt;
           problema  _t__|_5__|_3__|_1__|_6__|_2__|&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;
                       X = se ejecuta el código del planificador&lt;br /&gt;
                       +++ = procesador 1&lt;br /&gt;
                       --- = procesador 2&lt;br /&gt;
    &lt;br /&gt;
                   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
    Pa             &amp;lt;+++|+++|   |+++|+++|+++&amp;gt;   |   |   |   |   |   |&lt;br /&gt;
    Pb             |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |&lt;br /&gt;
    Pc             |   |   &amp;lt;+++&amp;gt;   |   |   |   |   |   |   |   |   |&lt;br /&gt;
    Pd             |   |   |   &amp;lt;   |   |   |+++|+++|+++|+++|+++|+++&amp;gt;&lt;br /&gt;
    Pe             |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |&lt;br /&gt;
     Planificador  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&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;D&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;__|&lt;br /&gt;
              Cálculos   __t__|_5__|_3__|_1__|_6__|_2__|&lt;br /&gt;
             de tiempos  __T__|_6__|_3__|_1__|_9__|_2__|&lt;br /&gt;
                         _T/t_|_1.2|_1__|_1__|_1.5|_1__|&lt;br /&gt;
                           |&lt;br /&gt;
                           |_&amp;gt; Indice de penalización&lt;br /&gt;
&lt;br /&gt;
=============&lt;br /&gt;
Observaciones&lt;br /&gt;
=============&lt;br /&gt;
&lt;br /&gt;
-En este caso, pd podría haberse procesado en cualquiera de los dos procesadores,¿no?. ¿O hay que suponer que cuando ambos procesadores están ociosos se utiliza el primero?.&lt;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_otros_aspectos_de_la_planificaci%C3%B3n/Solucion_del_ejercicio_1&amp;diff=506</id>
		<title>Ejercicios otros aspectos de la planificación/Solucion del ejercicio 1</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/Solucion_del_ejercicio_1&amp;diff=506"/>
				<updated>2011-03-22T23:30:02Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: Observaciones&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= FIFO no apropiativo con multiprocesamiento =&lt;br /&gt;
Para este caso disponemos de 2 Procesadores, y supondremos que el planificador se ejecuta en uno de ellos&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;D&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;__|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|_4__|&lt;br /&gt;
           problema  _t__|_5__|_3__|_1__|_6__|_2__|&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;
                       X = se ejecuta el código del planificador&lt;br /&gt;
                       +++ = procesador 1&lt;br /&gt;
                       --- = procesador 2&lt;br /&gt;
 &lt;br /&gt;
                   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
    Pa             &amp;lt;+++|+++|+++|+++|+++&amp;gt;   |   |   |   |   |   |   |&lt;br /&gt;
    Pb             |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |&lt;br /&gt;
    Pc             |   |   &amp;lt;   |   |---&amp;gt;   |   |   |   |   |   |   |&lt;br /&gt;
    Pd             |   |   |   &amp;lt;   |   |+++|+++|+++|+++|+++|+++&amp;gt;   |&lt;br /&gt;
    Pe             |   |   |   |   &amp;lt;   |---|---&amp;gt;   |   |   |   |   |&lt;br /&gt;
    Planificador   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&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;D&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;__|&lt;br /&gt;
              Cálculos   __t__|_5__|_3__|_1__|_6__|_2__|&lt;br /&gt;
             de tiempos  __T__|_5__|_3__|_3__|_8__|_3__|&lt;br /&gt;
                         _T/t_|_1__|_1__|_3__|1.33|_1.5|&lt;br /&gt;
                           |&lt;br /&gt;
                           |_&amp;gt; Indice de penalización&lt;br /&gt;
&lt;br /&gt;
= SFJ no apropriativo con multiprocesamiento =&lt;br /&gt;
&lt;br /&gt;
La solución es igual que el FIFO no apropiativo con multiprocesamiento.&lt;br /&gt;
&lt;br /&gt;
= SFJ apropiativo con multiprocesamiento =&lt;br /&gt;
&lt;br /&gt;
Para este caso disponemos de 2 Procesadores, y supondremos que el planificador se ejecuta en uno de ellos&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;D&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;__|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|_4__|&lt;br /&gt;
           problema  _t__|_5__|_3__|_1__|_6__|_2__|&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;
                       X = se ejecuta el código del planificador&lt;br /&gt;
                       +++ = procesador 1&lt;br /&gt;
                       --- = procesador 2&lt;br /&gt;
    &lt;br /&gt;
                   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
    Pa             &amp;lt;+++|+++|   |+++|+++|+++&amp;gt;   |   |   |   |   |   |&lt;br /&gt;
    Pb             |   &amp;lt;---|---|---&amp;gt;   |   |   |   |   |   |   |   |&lt;br /&gt;
    Pc             |   |   &amp;lt;+++&amp;gt;   |   |   |   |   |   |   |   |   |&lt;br /&gt;
    Pd             |   |   |   &amp;lt;   |   |   |+++|+++|+++|+++|+++|+++&amp;gt;&lt;br /&gt;
    Pe             |   |   |   |   &amp;lt;---|---&amp;gt;   |   |   |   |   |   |&lt;br /&gt;
     Planificador  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&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;D&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;__|&lt;br /&gt;
              Cálculos   __t__|_5__|_3__|_1__|_6__|_2__|&lt;br /&gt;
             de tiempos  __T__|_6__|_3__|_1__|_9__|_2__|&lt;br /&gt;
                         _T/t_|_1.2|_1__|_1__|_1.5|_1__|&lt;br /&gt;
                           |&lt;br /&gt;
                           |_&amp;gt; Indice de penalización&lt;br /&gt;
&lt;br /&gt;
=&lt;br /&gt;
Observaciones&lt;br /&gt;
=&lt;br /&gt;
--&amp;gt;En este caso, pd podría haberse procesado en cualquiera de los dos procesadores,¿no?. ¿O hay que suponer que cuando ambos procesadores están ociosos se utiliza el primero?.&lt;/div&gt;</summary>
		<author><name>JCGarrido</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=505</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=505"/>
				<updated>2011-03-22T23:14:20Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: He escrito un poco mejor la frase &amp;quot;suponiendo...&amp;quot;&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;
 PA   0   5&lt;br /&gt;
 PB   1   3&lt;br /&gt;
 PC   2   1&lt;br /&gt;
 PD   3   6&lt;br /&gt;
 PE   4   2&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;/div&gt;</summary>
		<author><name>JCGarrido</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=502</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=502"/>
				<updated>2011-03-22T23:01:27Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: tildes&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 denomina a aquella actividad que debe ser realizada en un plazo de tiempo, si la actividad no es realizada en dicho plazo de tiempo carece de sentido realizarla. Ej: Actividades industriales, videoconferencias, etc&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 una 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.&lt;br /&gt;
&lt;br /&gt;
*'''Planificación de tablas estáticas''': se conocen las actividades a realizar 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''': 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;
&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;
                      * = 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;/div&gt;</summary>
		<author><name>JCGarrido</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=500</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=500"/>
				<updated>2011-03-22T22:56:21Z</updated>
		
		<summary type="html">&lt;p&gt;JCGarrido: tildes&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 denomina a aquella actividad que debe ser realizada en un plazo de tiempo, si la actividad no es realizada en dicho plazo de tiempo carece de sentido realizarla. Ej: Actividades industriales, videoconferencias, etc&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 una 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 indice de prioridad y el procesador elige aquel proceso de la lista de preparados con mayor prioridad.&lt;br /&gt;
&lt;br /&gt;
*'''Planificación de tablas estáticas''': se conocen las actividades a realizar 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 estaticas , pero tambien admite actividades aperiodicas. Cuando se presenta una actividad aperiodica , el planificador intenta construir un nuevo plan de ejecucion que incluya a todas las actividades. Si no encuentra la solucion que las englobe a todas, rechaza la actividad, que debe ser flexible u opcional. Tambien puede retrasar alguna actividad flexible/opcional.&lt;br /&gt;
&lt;br /&gt;
*'''Planificación dinámica con un mejor resultado''': Las actividades fuera de plazo se abortan. Es muy similar a la anterior, la diferencia mas notable es que en la anterior existe un análisis previo aceptando actividades aperiodicas y en ésta no existe tal analisis.&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;
                      * = 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;/div&gt;</summary>
		<author><name>JCGarrido</name></author>	</entry>

	</feed>