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

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

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol_6&amp;diff=2260</id>
		<title>Sol 6</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol_6&amp;diff=2260"/>
				<updated>2011-12-22T08:21:03Z</updated>
		
		<summary type="html">&lt;p&gt;Antmorzam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La lista de paginas a la que se acceden son las siguientes : &lt;br /&gt;
''' 2(R)--2(W)--3(R)--1(R)--1(W)--3(R)--4(W)--5(R)--1(R)--1(W)--2(R)--3(W)--4(R)'''&lt;br /&gt;
&lt;br /&gt;
El bit R se pone a 0 cada 4 accesos&lt;br /&gt;
                               ___1__ __ 2__ __3___ __4___&lt;br /&gt;
                  1º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  2   |      |      |      | Nª de fallos: 1&lt;br /&gt;
                   Pagina 2   |R=1M=0|R=0M=0|R=0M=0|R=0M=0|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
                  2º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  2   |      |      |      | Nª de fallos: 1&lt;br /&gt;
                   Pagina 2   |R=1M=1|R=0M=0|R=0M=0|R=0M=0|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
                  3º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  2   |  3   |      |      | Nª de fallos: 2&lt;br /&gt;
                   Pagina 3   |R=1M=1|R=1M=0|R=0M=0|R=0M=0|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
                  4º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  2   |  3   |  1   |      | Nª de fallos: 3&lt;br /&gt;
                   Pagina 1   |R=1M=1|R=1M=0|R=1M=0|R=0M=0|&lt;br /&gt;
                              |______|______|______|______|&amp;lt;------------------- EL BIT R SE PONE A 0&lt;br /&gt;
                  5º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  2   |  3   |  1   |      | Nª de fallos: 3&lt;br /&gt;
                   Pagina 1   |R=0M=1|R=0M=0|R=1M=1|R=0M=0|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
                  6º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  2   |  3   |  1   |      | Nª de fallos: 3&lt;br /&gt;
                   Pagina 3   |R=0M=1|R=1M=0|R=1M=1|R=0M=0|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
                  7º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  2   |  3   |  1   |  4   | Nª de fallos: 4&lt;br /&gt;
                   Pagina 4   |R=0M=1|R=1M=0|R=1M=1|R=1M=1|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
                  8º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  5   |  3   |  1   |  4   | Nª de fallos: 5&lt;br /&gt;
                   Pagina 5   |R=1M=0|R=1M=0|R=1M=1|R=1M=1|&lt;br /&gt;
                              |______|______|______|______|&amp;lt;------------------- EL BIT R SE PONE A 0&lt;br /&gt;
                  9º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  5   |  3   |  1   |  4   | Nª de fallos: 5&lt;br /&gt;
                   Pagina 1   |R=0M=0|R=0M=0|R=1M=1|R=0M=1|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
                 10º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  5   |  3   |  1   |  4   | Nª de fallos: 5&lt;br /&gt;
                   Pagina 1   |R=0M=0|R=0M=0|R=1M=1|R=0M=1|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
                 11º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  2   |  3   |  1   |  4   | Nª de fallos: 6&lt;br /&gt;
                   Pagina 2   |R=1M=0|R=0M=0|R=1M=1|R=0M=1|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
                 12º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  2   |  3   |  1   |  4   | Nª de fallos: 6&lt;br /&gt;
                   Pagina 3   |R=1M=0|R=1M=1|R=1M=1|R=0M=1|&lt;br /&gt;
                              |______|______|______|______|&amp;lt;------------------- EL BIT R SE PONE A 0&lt;br /&gt;
                 13º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  2   |  3   |  1   |  4   | Nª de fallos: 6&lt;br /&gt;
                   Pagina 4   |R=0M=0|R=0M=1|R=0M=1|R=1M=1|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Fcoramlop|Fcoramlop]] 22:17 4 jun 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Rafvermor|Rafvermor]] modificado 17:53 21 dic 2011 (UTC)&lt;br /&gt;
                      6&lt;br /&gt;
  tasa fallos pág = ---- = 0,4615&lt;br /&gt;
                     13&lt;br /&gt;
&lt;br /&gt;
[[Criterios_de_reemplazo|Volver]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El acceso 10 no debería de ser fallo, no?&lt;br /&gt;
Y el acceso 11 podria elegir el marco 1 y quitar la pagina 5?? Es que de esa forma también bajaría la tasa de fallos a 6/13... Con los bits R y M no sabes que la página 5 llego despues de la 3...&lt;br /&gt;
Alguien responde?? --[[Usuario:Lcarlosp|Lcarlosp]] 11:54 6 jun 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Usuario:Lcarlosp|Lcarlosp]] Efectivamente en el acceso 10 no debería ser fallo, ¿alguien en contra? y lo del acceso 11 depende del criterio que se siga en caso de empate, parece ser que en este caso es criterio por orden de carga FIFO. --[[Usuario:Robertomartin|Robertomartin]] 15:59 6 jun 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;[[Usuario:PCamino|pablo]]&amp;gt; Creo humildemente que eso está equivocado. El contenido final me sale igual: 3 (01), 2 (00), 1 (01), 4 (11), pero el MR es 7/13 (xvxxvvxxvvxxv)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;[[Usuario:alberto|alberto]]&amp;gt; En el acceso 7 , porque al meter 4, tanto R como M pasan a 1 directamente , no sería 10  ?&lt;br /&gt;
&lt;br /&gt;
En el acceso 7, al meter el 4 si observas es de W, por lo que ambos valores R y M tienen que ir a 1 1 directamente y no 1 0.--[[Usuario:Luiferest|Luiferest]] 15:22 7 jun 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:JDomingo|J. Domingo]] 19:33 13 jun 2011 (UTC) Efectivamente el acceso 10 no debe ser fallo, de hecho en el mismo ejemplo se ve que no cambia ningun marco. Lo corrijo (¡si está equivocado vuelvan a editar!). A mi me sale igual que en el ejemplo, escogiendo FIFO como politica de desempate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Jesgonper1|J.Daniel]] 19:13 17 Dic 2011 En el acceso nº 12. ¿Alguien sabe porqué cambia el marco 5 por la 3, no debería de quitar el marco 1 ?&lt;/div&gt;</summary>
		<author><name>Antmorzam</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol_6&amp;diff=2248</id>
		<title>Sol 6</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol_6&amp;diff=2248"/>
				<updated>2011-12-21T11:33:39Z</updated>
		
		<summary type="html">&lt;p&gt;Antmorzam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La lista de paginas a la que se acceden son las siguientes : &lt;br /&gt;
''' 2(R)--2(W)--3(R)--1(R)--1(W)--3(R)--4(W)--5(R)--1(R)--1(W)--2(R)--3(W)--4(R)'''&lt;br /&gt;
&lt;br /&gt;
El bit R se pone a 0 cada 4 accesos&lt;br /&gt;
                               ___1__ __ 2__ __3___ __4___&lt;br /&gt;
                  1º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  2   |      |      |      | Nª de fallos: 1&lt;br /&gt;
                   Pagina 2   |R=1M=0|R=0M=0|R=0M=0|R=0M=0|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
                  2º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  2   |      |      |      | Nª de fallos: 1&lt;br /&gt;
                   Pagina 2   |R=1M=1|R=0M=0|R=0M=0|R=0M=0|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
                  3º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  2   |  3   |      |      | Nª de fallos: 2&lt;br /&gt;
                   Pagina 3   |R=1M=1|R=1M=0|R=0M=0|R=0M=0|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
                  4º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  2   |  3   |  1   |      | Nª de fallos: 3&lt;br /&gt;
                   Pagina 1   |R=1M=1|R=1M=0|R=1M=0|R=0M=0|&lt;br /&gt;
                              |______|______|______|______|&amp;lt;------------------- EL BIT R SE PONE A 0&lt;br /&gt;
                  5º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  2   |  3   |  1   |      | Nª de fallos: 3&lt;br /&gt;
                   Pagina 1   |R=0M=1|R=0M=0|R=1M=1|R=0M=0|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
                  6º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  2   |  3   |  1   |      | Nª de fallos: 3&lt;br /&gt;
                   Pagina 3   |R=0M=1|R=1M=0|R=1M=1|R=0M=0|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
                  7º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  2   |  3   |  1   |  4   | Nª de fallos: 4&lt;br /&gt;
                   Pagina 4   |R=0M=1|R=1M=0|R=1M=1|R=1M=1|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
                  8º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  5   |  3   |  1   |  4   | Nª de fallos: 5&lt;br /&gt;
                   Pagina 5   |R=1M=0|R=1M=0|R=1M=1|R=1M=1|&lt;br /&gt;
                              |______|______|______|______|&amp;lt;------------------- EL BIT R SE PONE A 0&lt;br /&gt;
                  9º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  5   |  3   |  1   |  4   | Nª de fallos: 5&lt;br /&gt;
                   Pagina 1   |R=0M=0|R=0M=0|R=1M=1|R=0M=1|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
                 10º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  5   |  3   |  1   |  4   | Nª de fallos: 5&lt;br /&gt;
                   Pagina 1   |R=0M=0|R=0M=0|R=1M=1|R=0M=1|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
                 11º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  5   |  2   |  1   |  4   | Nª de fallos: 6&lt;br /&gt;
                   Pagina 2   |R=0M=0|R=1M=0|R=1M=1|R=0M=1|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
                 12º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  3   |  2   |  1   |  4   | Nª de fallos: 7&lt;br /&gt;
                   Pagina 3   |R=1M=1|R=1M=0|R=1M=1|R=0M=1|&lt;br /&gt;
                              |______|______|______|______|&amp;lt;------------------- EL BIT R SE PONE A 0&lt;br /&gt;
                 13º Acceso   |      |      |      |      |&lt;br /&gt;
                  Acceso a:   |  3   |  2   |  1   |  4   | Nª de fallos: 7&lt;br /&gt;
                   Pagina 4   |R=0M=1|R=0M=0|R=0M=1|R=1M=1|&lt;br /&gt;
                              |______|______|______|______|&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Fcoramlop|Fcoramlop]] 22:17 4 jun 2011 (UTC)&lt;br /&gt;
                      7&lt;br /&gt;
  tasa fallos pág = ---- = 0,5385&lt;br /&gt;
                     13&lt;br /&gt;
&lt;br /&gt;
[[Criterios_de_reemplazo|Volver]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El acceso 10 no debería de ser fallo, no?&lt;br /&gt;
Y el acceso 11 podria elegir el marco 1 y quitar la pagina 5?? Es que de esa forma también bajaría la tasa de fallos a 6/13... Con los bits R y M no sabes que la página 5 llego despues de la 3...&lt;br /&gt;
Alguien responde?? --[[Usuario:Lcarlosp|Lcarlosp]] 11:54 6 jun 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Usuario:Lcarlosp|Lcarlosp]] Efectivamente en el acceso 10 no debería ser fallo, ¿alguien en contra? y lo del acceso 11 depende del criterio que se siga en caso de empate, parece ser que en este caso es criterio por orden de carga FIFO. --[[Usuario:Robertomartin|Robertomartin]] 15:59 6 jun 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;[[Usuario:PCamino|pablo]]&amp;gt; Creo humildemente que eso está equivocado. El contenido final me sale igual: 3 (01), 2 (00), 1 (01), 4 (11), pero el MR es 7/13 (xvxxvvxxvvxxv)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;[[Usuario:alberto|alberto]]&amp;gt; En el acceso 7 , porque al meter 4, tanto R como M pasan a 1 directamente , no sería 10  ?&lt;br /&gt;
&lt;br /&gt;
En el acceso 7, al meter el 4 si observas es de W, por lo que ambos valores R y M tienen que ir a 1 1 directamente y no 1 0.--[[Usuario:Luiferest|Luiferest]] 15:22 7 jun 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:JDomingo|J. Domingo]] 19:33 13 jun 2011 (UTC) Efectivamente el acceso 10 no debe ser fallo, de hecho en el mismo ejemplo se ve que no cambia ningun marco. Lo corrijo (¡si está equivocado vuelvan a editar!). A mi me sale igual que en el ejemplo, escogiendo FIFO como politica de desempate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Jesgonper1|J.Daniel]] 19:13 17 Dic 2011 En el acceso nº 12. ¿Alguien sabe porqué cambia el marco 5 por la 3, no debería de quitar el marco 1 ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;[[Usuario:antmorzam|Antonio Moreno]]&amp;gt; Como dice en teoría, para elegir la página víctima hay que iterar por los marcos y elegir la página según los valores de R y M:&lt;br /&gt;
&lt;br /&gt;
1º R=0, M=0&lt;br /&gt;
&lt;br /&gt;
2º R=0, M=1&lt;br /&gt;
&lt;br /&gt;
3º R=1, M=0&lt;br /&gt;
&lt;br /&gt;
4º R=1, M=1&lt;br /&gt;
&lt;br /&gt;
Por eso se elige el 5 que es 00. &lt;br /&gt;
Debes tener claro que antes hay que mirar R y M y si hay empate, usas FIFO (en este caso).&lt;/div&gt;</summary>
		<author><name>Antmorzam</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_ejercicio2_Mejor_Ajuste_Est%C3%A1tico&amp;diff=2226</id>
		<title>Solución ejercicio2 Mejor Ajuste Estático</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_ejercicio2_Mejor_Ajuste_Est%C3%A1tico&amp;diff=2226"/>
				<updated>2011-12-20T11:11:20Z</updated>
		
		<summary type="html">&lt;p&gt;Antmorzam: correcion del cronograma&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;                         A&lt;br /&gt;
              P1  &amp;lt;---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                          B&lt;br /&gt;
              P2  &amp;lt;---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                                           A     &lt;br /&gt;
              P3  &amp;lt;   |   |   |   ---|---|---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                      C                  &lt;br /&gt;
              P4  &amp;lt;---|---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
                            C                        &lt;br /&gt;
              P5  &amp;lt;   |   |---&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       &lt;br /&gt;
             -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&lt;br /&gt;
                  0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Albsolnog|Albsolnog]] 10:06 20 dic 2011 (UTC)&lt;br /&gt;
Duda: ¿en caso de empate como ocurre en este ejercicio entre P1,P2 y P3, que criterio se sigue para elegir primero P1, segundo P2 y tercero P3?.&lt;/div&gt;</summary>
		<author><name>Antmorzam</name></author>	</entry>

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

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

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=2061</id>
		<title>Monitores</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=2061"/>
				<updated>2011-12-07T12:33:48Z</updated>
		
		<summary type="html">&lt;p&gt;Antmorzam: /* Ejemplo del funcionamiento de una clase monitor */&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;
&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;
    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;                   #1&lt;br /&gt;
        down(s);                   #2&lt;br /&gt;
        ret = recursoCompartido;   #3&lt;br /&gt;
        up(s);                     #4&lt;br /&gt;
        return ret;                #5&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void set(int valor){&lt;br /&gt;
        down(s);                   #1&lt;br /&gt;
        recursoCompartido = valor; #2&lt;br /&gt;
        up(s);                     #3&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;
== Ejemplo del funcionamiento de una clase monitor ==&lt;br /&gt;
&lt;br /&gt;
Dado un cierto recurso compartido protegido por una clase monitor denominada ''RecursoCompartido'' con los siguientes métodos:&lt;br /&gt;
&lt;br /&gt;
* '''get''', permite obtener el valor del recurso compartido, devuelve un entero.&lt;br /&gt;
* '''set''', permite establecer el valor del recurso compartido.&lt;br /&gt;
&lt;br /&gt;
Suponga ya creada un objeto RecursoCompartido para dos hilos h1 y h2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
RecursoCompartido r = new RecursoCompartido();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dichos hilos tienen el siguiente código:&lt;br /&gt;
&lt;br /&gt;
* Lector (h1):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int valor;&lt;br /&gt;
for(int j=0; j&amp;lt;2; j++) {     #1&lt;br /&gt;
  valor=r.get();             #2&lt;br /&gt;
  print(valor);              #3&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
* Escritor (h2):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int i=0;&lt;br /&gt;
for(int j=0; j&amp;lt;2; j++) {     #1&lt;br /&gt;
  r.set(i);                  #2&lt;br /&gt;
  i++;                       #3&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Suponiendo turno rotatorio estricto con quantum de 4 unidades de tiempo y que el planificador da paso en primer lugar al hilo h1. El cronograma con la representación de la ejecución sería el siguiente:&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;
                        B = el proceso pasa a estado bloqueado&lt;br /&gt;
                        P = el proceso pasa a estado preparado&lt;br /&gt;
 &lt;br /&gt;
                               Asignación del recurso procesador&lt;br /&gt;
 &lt;br /&gt;
         | 1 |2.1|2.2|2.3|   |   |2.4|2.5| 3 | 1 |   |   |   |   |2.1|2.2|2.3|2.4|   |   |   |   |2.5| 3 | 1 |   |&lt;br /&gt;
     h1  &amp;lt;---|---|---|---P   |   |---|---|---|---P   |   |   |   |---|---|---|---|   |   |   |   |---|---|---&amp;gt;   |&lt;br /&gt;
         |   |   |   |   | 1 |2.1|   |   |   |   |2.2|2.3| 3 | 1 |   |   |   |   |2.1|2.2|2.3| 3 |   |   |   | 1 |&lt;br /&gt;
     h2  |   |   |   |   &amp;lt;---|---B   P   |   |   |---|---|---|---P   |   |   |   |---|---|---|---|   |   |   |---&amp;gt;&lt;br /&gt;
         ----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
         0   1   2   3   4   5   6   7   8   9   10  11  12  13 14  15  16  17  18  19  20  21  22  23  24  25  26&lt;br /&gt;
  &lt;br /&gt;
          Nota: Los números de la parte superior a los guiones, indican el número de instrucción que &lt;br /&gt;
                se está ejecutando en dicho momento. En el caso de los 2.1, 2.2 y sucesivos se &lt;br /&gt;
                refieren al número de instrucción qué internamente se ejecutan en el get() y set() &lt;br /&gt;
                del monitor (Ver la implementación de la clase monitor de RecursoCompartido vista en clase).&lt;br /&gt;
&lt;br /&gt;
[[Usuario:Migoligon|Migoligon]] 16:51 4 dic 2011 (UTC)Porqué h1 no tiene la P de preparado en el 2.4 ni h2 en el último 3, y porqué h2 no se bloquea en el 2º down??&lt;br /&gt;
&lt;br /&gt;
H1 y H2 si pasan a preparado en 2.4 y 3 respectivamente, si no está la P será por olvido. Por otro lado, H2 no bloquea en el segundo down porque el semáforo en ese instante es s=1. El h1 en el instante 2.4 lo pone a 1, y pasa a preparado por consumir todo el quantum. Cuando h2 hace el down, el contador sigue a 1, lo decrementa y sigue ejecutando código.&lt;br /&gt;
&lt;br /&gt;
En la página de [https://1984.lsi.us.es/wiki-ssoo/index.php/Discusi%C3%B3n:Monitores discusión] hay un ejemplo en java.&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Antmorzam</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=2060</id>
		<title>Monitores</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=2060"/>
				<updated>2011-12-07T09:02:27Z</updated>
		
		<summary type="html">&lt;p&gt;Antmorzam: /* Ejemplo del funcionamiento de una clase monitor */&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;
&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;
    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;                   #1&lt;br /&gt;
        down(s);                   #2&lt;br /&gt;
        ret = recursoCompartido;   #3&lt;br /&gt;
        up(s);                     #4&lt;br /&gt;
        return ret;                #5&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void set(int valor){&lt;br /&gt;
        down(s);                   #1&lt;br /&gt;
        recursoCompartido = valor; #2&lt;br /&gt;
        up(s);                     #3&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;
== Ejemplo del funcionamiento de una clase monitor ==&lt;br /&gt;
&lt;br /&gt;
Dado un cierto recurso compartido protegido por una clase monitor denominada ''RecursoCompartido'' con los siguientes métodos:&lt;br /&gt;
&lt;br /&gt;
* '''get''', permite obtener el valor del recurso compartido, devuelve un entero.&lt;br /&gt;
* '''set''', permite establecer el valor del recurso compartido.&lt;br /&gt;
&lt;br /&gt;
Suponga ya creada un objeto RecursoCompartido para dos hilos h1 y h2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
RecursoCompartido r = new RecursoCompartido();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dichos hilos tienen el siguiente código:&lt;br /&gt;
&lt;br /&gt;
* Lector (h1):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int valor;&lt;br /&gt;
for(int j=0; j&amp;lt;2; j++) {     #1&lt;br /&gt;
  valor=r.get();             #2&lt;br /&gt;
  print(valor);              #3&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
* Escritor (h2):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int i=0;&lt;br /&gt;
for(int j=0; j&amp;lt;2; j++) {     #1&lt;br /&gt;
  r.set(i);                  #2&lt;br /&gt;
  i++;                       #3&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Suponiendo turno rotatorio estricto con quantum de 4 unidades de tiempo y que el planificador da paso en primer lugar al hilo h1. El cronograma con la representación de la ejecución sería el siguiente:&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;
                        B = el proceso pasa a estado bloqueado&lt;br /&gt;
                        P = el proceso pasa a estado preparado&lt;br /&gt;
 &lt;br /&gt;
                               Asignación del recurso procesador&lt;br /&gt;
 &lt;br /&gt;
         | 1 |2.1|2.2|2.3|   |   |2.4|2.5| 3 | 1 |   |   |   |   |2.1|2.2|2.3|2.4|   |   |   |   |2.5| 3 | 1 |   |&lt;br /&gt;
     h1  &amp;lt;---|---|---|---P   |   |---|---|---|---P   |   |   |   |---|---|---|---|   |   |   |   |---|---|---&amp;gt;   |&lt;br /&gt;
         |   |   |   |   | 1 |2.1|   |   |   |   |2.2|2.3| 3 | 1 |   |   |   |   |2.1|2.2|2.3| 3 |   |   |   | 1 |&lt;br /&gt;
     h2  |   |   |   |   &amp;lt;---|---B   P   |   |   |---|---|---|---P   |   |   |   |---|---|---|---|   |   |   |---&amp;gt;&lt;br /&gt;
         ----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
         0   1   2   3   4   5   6   7   8   9   10  11  12  13 14  15  16  17  18  19  20  21  22  23  24  25  26&lt;br /&gt;
  &lt;br /&gt;
          Nota: Los números de la parte superior a los guiones, indican el número de instrucción que &lt;br /&gt;
                se está ejecutando en dicho momento. En el caso de los 2.1, 2.2 y sucesivos se &lt;br /&gt;
                refieren al número de instrucción qué internamente se ejecutan en el get() y set() &lt;br /&gt;
                del monitor (Ver la implementación de la clase monitor de RecursoCompartido vista en clase).&lt;br /&gt;
&lt;br /&gt;
[[Usuario:Migoligon|Migoligon]] 16:51 4 dic 2011 (UTC)Porqué h1 no tiene la P de preparado en el 2.4 ni h2 en el último 3, y porqué h2 no se bloquea en el 2º down??&lt;br /&gt;
&lt;br /&gt;
H1 y H2 si pasan a preparado en 2.4 y 3 respectivamente, si no está la P será por olvido. Por otro lado, H2 no bloquea en el segundo down porque el semáforo en ese instante es s=1. El h1 en el instante 2.4 lo pone a 1, y pasa a preparado por consumir todo el quantum. cuando h2 hace el down el contador sigue a 1, lo decrementa y sigue ejecutando código.&lt;br /&gt;
&lt;br /&gt;
En la página de [https://1984.lsi.us.es/wiki-ssoo/index.php/Discusi%C3%B3n:Monitores discusión] hay un ejemplo en java.&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Antmorzam</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_planificaci%C3%B3n&amp;diff=1805</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=1805"/>
				<updated>2011-11-15T08:51:44Z</updated>
		
		<summary type="html">&lt;p&gt;Antmorzam: /* Turno rotatorio con compensación */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=4.3.1 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;
En los métodos no apropiativos, si el proceso se bloquea  o entra en estado bloqueado, el procesador quedará sin uso durante todo ese tiempo, pues estaba dedicado/reservado para ése proceso.&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_|        t = tiempo de ejecución&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_2__|_5__|_5__|        T = tiempo de terminación (Instante de&lt;br /&gt;
       de tiempos   _T__|_3__|_7__|_7__|_6__|_8__|        terminación - Instante de lanzamiento)&lt;br /&gt;
                    _z__|_1__|_7/5|_7/2|_6/5|_8/5|        z = índice de penalización&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;---|---|---|---|---&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 &amp;lt;math&amp;gt;I_p=\frac{T}{t}=\frac{H_f-H_0}{t}&amp;lt;/math&amp;gt; de mayor valor. Este método puede producir aplazamientos de ejecución de procesos,pero no son indefinidos. Su orden de complejidad es &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&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;---|---|---|---|---&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;
=4.3.2 Métodos apropiativos =&lt;br /&gt;
&lt;br /&gt;
El planificador puede retirar el procesador en cualquier momento al proceso activo. Se emplea fundamentalmente en sistemas operativos [[Multiprogramación|multiprogramables]].&lt;br /&gt;
&lt;br /&gt;
Con métodos apropiativos, la decisión de planificación tiene lugar si:&lt;br /&gt;
&lt;br /&gt;
* El proceso activo pasa a estado bloqueado.&lt;br /&gt;
* El proceso activo termina su ejecución.&lt;br /&gt;
* Se lanza un nuevo proceso.&lt;br /&gt;
* El proceso activo agota el tiempo máximo de asignación del procesador (veáse ''Turno Rotatorio'').&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;---|---|---|---|---&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;---|---|---|---|---|---|---&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 ==&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 por lotes, cuyo comportamiento está limitado por el procesador, pues se pasan más tiempo asignados al procesador.&lt;br /&gt;
&lt;br /&gt;
Puesto que el reparto del procesador es estricto, los procesos recién lanzados deben acceder al procesador lo antes posible, por tanto, se les da oportunidad de ejecución por orden de llegada por delante de los procesos en la cola de procesos preparados. De esta manera, se evita que los procesos recién lanzados queden postergados indefinidamente.&lt;br /&gt;
&lt;br /&gt;
Este criterio se puede implementar con una cola, de manera que el orden de complejidad en la selección del proceso que pasa a estado activo es &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;. 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;
&lt;br /&gt;
        Ejemplo:&lt;br /&gt;
                                                                                         &lt;br /&gt;
                     ____|_Pa_|_Pb_|_Pc_|_Pd_|    Pa y Pc bloquean cada 1 unidad de tiempo&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|    El bloqueo se resuelve tras 2 unidades de tiempo&lt;br /&gt;
           problema  _t__|_2__|_4__|_2__|_7__|    quantum = 2 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;xxxxxxx|---|---|---|---|---|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pc  |---|---&amp;lt;---|xxx|---|---|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pd  |---|---|---&amp;lt;---|xxx|xxx|---|---|---|---|xxxxxxxxxxxxxxxxxxx&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__|_7__|_9__|_6__|_12_|        z = índice de penalización&lt;br /&gt;
                   _z__|_7/2|_9/4|_6/2|12/7|&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 menor 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;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    Ejemplo:&lt;br /&gt;
&lt;br /&gt;
 Pa y Pc bloquean cada 1 unidad de tiempo&lt;br /&gt;
 El bloqueo se resuelve tras 2 unidades de tiempo&lt;br /&gt;
 Colas multinivel:  1. Procesos interactivos (quantum = 1 unidad de tiempo)&lt;br /&gt;
                    2. Procesos por lotes    (quantum = 2 unidad de tiempo)    &lt;br /&gt;
 Inicialmente todos los procesos van a la cola 2&lt;br /&gt;
 Los procesos que no consuman su quantum al menos una vez pasan a la cola 1&lt;br /&gt;
 Las colas implementan turno rotatorio estricto.&lt;br /&gt;
 Siempre que haya procesos en la cola 1, debe ser atendidos de manera preferente frente a la cola 2.&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__|                      &lt;br /&gt;
                                               &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;xxxxxxx|---|---|---|---|---|xxxxxxx&amp;gt;---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pc  |---|---&amp;lt;---|---|xxx|---|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
    Pd  |---|---|---&amp;lt;---|---|xxxxxxx|---|---|---|xxxxxxxxxxxxxxxxxxx&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__|_4__|_9__|_6__|_12_|        z = índice de penalización&lt;br /&gt;
                   _z__|_4/2|_9/4|_6/2|12/7|&lt;/div&gt;</summary>
		<author><name>Antmorzam</name></author>	</entry>

	</feed>