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

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Evaluame_mis_contribuciones_a_la_wiki&amp;diff=2725</id>
		<title>Evaluame mis contribuciones a la wiki</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Evaluame_mis_contribuciones_a_la_wiki&amp;diff=2725"/>
				<updated>2013-01-19T11:33:55Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A continuación, indica tu nombre y apellidos:&lt;br /&gt;
&lt;br /&gt;
* Juan Carlos Roldán Salvador&lt;br /&gt;
* Daniel Ayala Hernández&lt;br /&gt;
* Daniel de los Reyes Leal&lt;br /&gt;
* Olga Minerva Moreno Martín IS-G1&lt;br /&gt;
* Vanessa Chipirrás Navalón&lt;br /&gt;
* Alejandro Sánchez Medina IS-G1&lt;br /&gt;
* Francisco Javier Borrego Cejudo IC-G2&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_de_paginaci%C3%B3n_y_segmentaci%C3%B3n&amp;diff=2635</id>
		<title>Ejercicios de paginación y segmentación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_de_paginaci%C3%B3n_y_segmentaci%C3%B3n&amp;diff=2635"/>
				<updated>2012-12-27T13:20:43Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Ejercicio 1==&lt;br /&gt;
&lt;br /&gt;
El proceso ocupa: 1 KB de código, 4 KB de pila, 5KB ctes+globales&lt;br /&gt;
&lt;br /&gt;
*Paginación pura (4KB de páginas) = 4 páginas -&amp;gt; 16 KB&lt;br /&gt;
 El código requiere 1 página&lt;br /&gt;
 La pila otra al completo&lt;br /&gt;
 Las globales necesitan 2&lt;br /&gt;
&lt;br /&gt;
*Segmentación pura = 3 segmentos, ocupan 10KB&lt;br /&gt;
 El codigo ocupa un segmento de 1 KB&lt;br /&gt;
 La pila uno de 4 KB&lt;br /&gt;
 Para globales es otro de 5KB&lt;br /&gt;
&lt;br /&gt;
*Combinado = 1 segmento de 4 páginas -&amp;gt; 16 KB&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2==&lt;br /&gt;
''[Este ejercicio formó parte del tercer Control de Evaluación Continua del curso 2010/11, del 8 de junio de 2011]''&lt;br /&gt;
&lt;br /&gt;
Suponga un sistema operativo con un administrador de memoria paginada cuyo tamaño de página es de 8KB. Se conoce que el sistema operativo funciona sobre un procesador cuyo tamaño de palabra es de 64 bits.&lt;br /&gt;
&lt;br /&gt;
'''A)''' Calcule el tamaño máximo que puede llegar a alcanzar la tabla de página de un proceso, suponiendo que cada entrada de la tabla de páginas ocupa 128 bits.&lt;br /&gt;
&lt;br /&gt;
'''B)''' Calcule cuántas páginas puede llegar a ocupar como máximo la tabla de páginas.&lt;br /&gt;
&lt;br /&gt;
'''C)''' Dado un proceso en ejecución que requiere 7 Mbytes, calcule cuántas entradas de la tabla de páginas están siendo empleadas por dicho proceso en el sistema descrito anteriormente.&lt;br /&gt;
&lt;br /&gt;
(''[[Solución de los ejercicios de paginación y segmentación#Ejercicio 2|Ver solución]]'')&lt;br /&gt;
&lt;br /&gt;
PD: Podrían colocar todos los ejercicios del examen C3, y aquel que sepa las soluciones que las coloque si es tan amable.&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
¿Alguien recuerda los ejercicios que se pusieron en el tercer parcial? El ejercicio tipo test, y el de las 2 preguntas de pensar un poco.&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 3 ==&lt;br /&gt;
Tenemos 3 procesos (P1,P2 y P3): P1 ocupa 1KB, P2 ocupa 4 KB y P3 ocupa 2 KB.&lt;br /&gt;
El tamaño de las páginas es de 4 KB. &lt;br /&gt;
¿Cuál es el desperdicio interno?&lt;br /&gt;
&lt;br /&gt;
*Del proceso 1 desperdiciamos: 4 KB - 1 KB = 3 KB&lt;br /&gt;
*Del proceso 2 no desperciamos nada.&lt;br /&gt;
*Del proceso 3 desperdiciamos: 4 KB - 2 KB = 2 KB&lt;br /&gt;
*Desperdicio intero total: 3 KB + 2 KB = 5 KB&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 4==&lt;br /&gt;
''[Este ejercicio formó parte del tercer Control de Evaluación Continua del curso 2012/13, del 21 de Diciembre de 2012 ]''&lt;br /&gt;
&lt;br /&gt;
¿Que es el conjunto de trabajo de un proceso?&lt;br /&gt;
&lt;br /&gt;
Conjunto de paginas que un proceso necesita en memoria principal para que no se produzcan fallos de pagina.&lt;br /&gt;
Lo ideal es que un proceso activo tenga todo su conjunto de trabajo en la memoria principal.&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 5==&lt;br /&gt;
''[Este ejercicio formó parte del tercer Control de Evaluación Continua del curso 2012/13, del 21 de Diciembre de 2012 ]''&lt;br /&gt;
&lt;br /&gt;
Represente gráficamente la estructura del dispositivo de traducción de memoria de un sistema memoria combinado.&lt;br /&gt;
&lt;br /&gt;
[http://sistemasoperativos.angelfire.com/html/imagenes/3.3.3_clip_image001.jpg Sistemas Combinados(Resultado)]&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_de_paginaci%C3%B3n_y_segmentaci%C3%B3n&amp;diff=2634</id>
		<title>Ejercicios de paginación y segmentación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_de_paginaci%C3%B3n_y_segmentaci%C3%B3n&amp;diff=2634"/>
				<updated>2012-12-27T13:20:30Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Ejercicio 1==&lt;br /&gt;
&lt;br /&gt;
El proceso ocupa: 1 KB de código, 4 KB de pila, 5KB ctes+globales&lt;br /&gt;
&lt;br /&gt;
*Paginación pura (4KB de páginas) = 4 páginas -&amp;gt; 16 KB&lt;br /&gt;
 El código requiere 1 página&lt;br /&gt;
 La pila otra al completo&lt;br /&gt;
 Las globales necesitan 2&lt;br /&gt;
&lt;br /&gt;
*Segmentación pura = 3 segmentos, ocupan 10KB&lt;br /&gt;
 El codigo ocupa un segmento de 1 KB&lt;br /&gt;
 La pila uno de 4 KB&lt;br /&gt;
 Para globales es otro de 5KB&lt;br /&gt;
&lt;br /&gt;
*Combinado = 1 segmento de 4 páginas -&amp;gt; 16 KB&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2==&lt;br /&gt;
''[Este ejercicio formó parte del tercer Control de Evaluación Continua del curso 2010/11, del 8 de junio de 2011]''&lt;br /&gt;
&lt;br /&gt;
Suponga un sistema operativo con un administrador de memoria paginada cuyo tamaño de página es de 8KB. Se conoce que el sistema operativo funciona sobre un procesador cuyo tamaño de palabra es de 64 bits.&lt;br /&gt;
&lt;br /&gt;
'''A)''' Calcule el tamaño máximo que puede llegar a alcanzar la tabla de página de un proceso, suponiendo que cada entrada de la tabla de páginas ocupa 128 bits.&lt;br /&gt;
&lt;br /&gt;
'''B)''' Calcule cuántas páginas puede llegar a ocupar como máximo la tabla de páginas.&lt;br /&gt;
&lt;br /&gt;
'''C)''' Dado un proceso en ejecución que requiere 7 Mbytes, calcule cuántas entradas de la tabla de páginas están siendo empleadas por dicho proceso en el sistema descrito anteriormente.&lt;br /&gt;
&lt;br /&gt;
(''[[Solución de los ejercicios de paginación y segmentación#Ejercicio 2|Ver solución]]'')&lt;br /&gt;
&lt;br /&gt;
PD: Podrían colocar todos los ejercicios del examen C3, y aquel que sepa las soluciones que las coloque si es tan amable.&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
¿Alguien recuerda los ejercicios que se pusieron en el tercer parcial? El ejercicio tipo test, y el de las 2 preguntas de pensar un poco.&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 3 ==&lt;br /&gt;
Tenemos 3 procesos (P1,P2 y P3): P1 ocupa 1KB, P2 ocupa 4 KB y P3 ocupa 2 KB.&lt;br /&gt;
El tamaño de las páginas es de 4 KB. &lt;br /&gt;
¿Cuál es el desperdicio interno?&lt;br /&gt;
&lt;br /&gt;
*Del proceso 1 desperdiciamos: 4 KB - 1 KB = 3 KB&lt;br /&gt;
*Del proceso 2 no desperciamos nada.&lt;br /&gt;
*Del proceso 3 desperdiciamos: 4 KB - 2 KB = 2 KB&lt;br /&gt;
*Desperdicio intero total: 3 KB + 2 KB = 5 KB&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 4==&lt;br /&gt;
''[Este ejercicio formó parte del tercer Control de Evaluación Continua del curso 2012/13, del 21 de Diciembre de 2012 ]''&lt;br /&gt;
&lt;br /&gt;
¿Que es el conjunto de trabajo de un proceso?&lt;br /&gt;
&lt;br /&gt;
Conjunto de paginas que un proceso necesita en memoria principal para que no se produzcan fallos de pagina.&lt;br /&gt;
Lo ideal es que un proceso activo tenga todo su conjunto de trabajo en la memoria principal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 5==&lt;br /&gt;
''[Este ejercicio formó parte del tercer Control de Evaluación Continua del curso 2012/13, del 21 de Diciembre de 2012 ]''&lt;br /&gt;
&lt;br /&gt;
Represente gráficamente la estructura del dispositivo de traducción de memoria de un sistema memoria combinado.&lt;br /&gt;
&lt;br /&gt;
[http://sistemasoperativos.angelfire.com/html/imagenes/3.3.3_clip_image001.jpg Sistemas Combinados(Resultado)]&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=2609</id>
		<title>Monitores</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=2609"/>
				<updated>2012-11-28T22:26:21Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: /* Fuentes */&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;
Creo que una solución mas correcta es la siguiente:&lt;br /&gt;
                               Asignación del recurso procesador&lt;br /&gt;
 &lt;br /&gt;
        | 1 | 2 |2.1|2.2|   |   |   |2.3|2.4|2.5| 3 |   |   |   |   | 1 | 2 |2.1|2.2|   |   |2.3|2.4|2.5| 3 |&lt;br /&gt;
    h1  &amp;lt;---|---|---|---P   |   |   |---|---|---|---P   |   |   |   |---|---|---|---P   |   |---|---|---|---P&lt;br /&gt;
        |   |   |   |   | 1 | 2 |2.1|   |   |   |   |2.2|2.3| 3 | 1 |   |   |   |   | 2 |2.1|   |   |   |   |&lt;br /&gt;
    h2  |   |   |   |   &amp;lt;---|---|---B   |   P   |   |---|---|---|---P   |   |   |   |---|---B   |   P   |   |&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&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        |   |   |   |   | 1 |   &lt;br /&gt;
    h1  |   |   |   |   |---&amp;gt;   &lt;br /&gt;
        |2.2|2.3| 3 | 1 |   |&lt;br /&gt;
    h2  |---|---|---|---&amp;gt;   |&lt;br /&gt;
        |---|---|---|---|---|&lt;br /&gt;
       25  26  27  28  29   30   &lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Mangonvil1|Mangonvil1]] 17:20 14 dic 2011 (UTC)Creo que esta solución sería más correcta puesto que la línea 2 del código de cada hilo(en el hilo 1 el get() y en el hilo 2 el set(i)) hay que tratarla como una unidad de ejecución más. (Pendiente de que Pablo le de el visto bueno)&lt;br /&gt;
&lt;br /&gt;
Esta solución es incorrecta (creo que lo comentó también Pablo en clase) ya que las llamadas a las funciones son en realidad un puntero apuntando a una dirección de la memoria en la que se encuentra esa función (apuntará a la primera línea de ejecución de la función). Para verlo con un ejemplo más de &amp;quot;andar por casa&amp;quot;, digamos que sería el equivalente a sustituir en el código del hilo1 la linea #2 por todas las líneas de la función en si, #2.1 #2.2 #2.3 #2.4 y #2.5, la llamada a la función no cuenta como una ejecución más.--[[Usuario:Josazcrom|Josazcrom]] 10:39 14 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
Tema 4      &lt;br /&gt;
http://hpjpc.googlecode.com/files/HPJPC%20Christopher%20and%20Thiruvathukal.pdf&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=2608</id>
		<title>Monitores</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=2608"/>
				<updated>2012-11-28T22:26:09Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: /* Fuentes */&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;
Creo que una solución mas correcta es la siguiente:&lt;br /&gt;
                               Asignación del recurso procesador&lt;br /&gt;
 &lt;br /&gt;
        | 1 | 2 |2.1|2.2|   |   |   |2.3|2.4|2.5| 3 |   |   |   |   | 1 | 2 |2.1|2.2|   |   |2.3|2.4|2.5| 3 |&lt;br /&gt;
    h1  &amp;lt;---|---|---|---P   |   |   |---|---|---|---P   |   |   |   |---|---|---|---P   |   |---|---|---|---P&lt;br /&gt;
        |   |   |   |   | 1 | 2 |2.1|   |   |   |   |2.2|2.3| 3 | 1 |   |   |   |   | 2 |2.1|   |   |   |   |&lt;br /&gt;
    h2  |   |   |   |   &amp;lt;---|---|---B   |   P   |   |---|---|---|---P   |   |   |   |---|---B   |   P   |   |&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&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        |   |   |   |   | 1 |   &lt;br /&gt;
    h1  |   |   |   |   |---&amp;gt;   &lt;br /&gt;
        |2.2|2.3| 3 | 1 |   |&lt;br /&gt;
    h2  |---|---|---|---&amp;gt;   |&lt;br /&gt;
        |---|---|---|---|---|&lt;br /&gt;
       25  26  27  28  29   30   &lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Mangonvil1|Mangonvil1]] 17:20 14 dic 2011 (UTC)Creo que esta solución sería más correcta puesto que la línea 2 del código de cada hilo(en el hilo 1 el get() y en el hilo 2 el set(i)) hay que tratarla como una unidad de ejecución más. (Pendiente de que Pablo le de el visto bueno)&lt;br /&gt;
&lt;br /&gt;
Esta solución es incorrecta (creo que lo comentó también Pablo en clase) ya que las llamadas a las funciones son en realidad un puntero apuntando a una dirección de la memoria en la que se encuentra esa función (apuntará a la primera línea de ejecución de la función). Para verlo con un ejemplo más de &amp;quot;andar por casa&amp;quot;, digamos que sería el equivalente a sustituir en el código del hilo1 la linea #2 por todas las líneas de la función en si, #2.1 #2.2 #2.3 #2.4 y #2.5, la llamada a la función no cuenta como una ejecución más.--[[Usuario:Josazcrom|Josazcrom]] 10:39 14 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
Tema 4      &lt;br /&gt;
http://hpjpc.googlecode.com/files/HPJPC%20Christopher%20and%20Thiruvathukal.pdf&lt;br /&gt;
&amp;lt;ref/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=2607</id>
		<title>Monitores</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=2607"/>
				<updated>2012-11-28T22:25:55Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: /* Fuentes */&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;
Creo que una solución mas correcta es la siguiente:&lt;br /&gt;
                               Asignación del recurso procesador&lt;br /&gt;
 &lt;br /&gt;
        | 1 | 2 |2.1|2.2|   |   |   |2.3|2.4|2.5| 3 |   |   |   |   | 1 | 2 |2.1|2.2|   |   |2.3|2.4|2.5| 3 |&lt;br /&gt;
    h1  &amp;lt;---|---|---|---P   |   |   |---|---|---|---P   |   |   |   |---|---|---|---P   |   |---|---|---|---P&lt;br /&gt;
        |   |   |   |   | 1 | 2 |2.1|   |   |   |   |2.2|2.3| 3 | 1 |   |   |   |   | 2 |2.1|   |   |   |   |&lt;br /&gt;
    h2  |   |   |   |   &amp;lt;---|---|---B   |   P   |   |---|---|---|---P   |   |   |   |---|---B   |   P   |   |&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&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        |   |   |   |   | 1 |   &lt;br /&gt;
    h1  |   |   |   |   |---&amp;gt;   &lt;br /&gt;
        |2.2|2.3| 3 | 1 |   |&lt;br /&gt;
    h2  |---|---|---|---&amp;gt;   |&lt;br /&gt;
        |---|---|---|---|---|&lt;br /&gt;
       25  26  27  28  29   30   &lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Mangonvil1|Mangonvil1]] 17:20 14 dic 2011 (UTC)Creo que esta solución sería más correcta puesto que la línea 2 del código de cada hilo(en el hilo 1 el get() y en el hilo 2 el set(i)) hay que tratarla como una unidad de ejecución más. (Pendiente de que Pablo le de el visto bueno)&lt;br /&gt;
&lt;br /&gt;
Esta solución es incorrecta (creo que lo comentó también Pablo en clase) ya que las llamadas a las funciones son en realidad un puntero apuntando a una dirección de la memoria en la que se encuentra esa función (apuntará a la primera línea de ejecución de la función). Para verlo con un ejemplo más de &amp;quot;andar por casa&amp;quot;, digamos que sería el equivalente a sustituir en el código del hilo1 la linea #2 por todas las líneas de la función en si, #2.1 #2.2 #2.3 #2.4 y #2.5, la llamada a la función no cuenta como una ejecución más.--[[Usuario:Josazcrom|Josazcrom]] 10:39 14 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
Tema 4      &lt;br /&gt;
http://hpjpc.googlecode.com/files/HPJPC%20Christopher%20and%20Thiruvathukal.pdf&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=2606</id>
		<title>Monitores</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=2606"/>
				<updated>2012-11-28T22:25:34Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: /* Fuentes */ Cambiar link&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;
Creo que una solución mas correcta es la siguiente:&lt;br /&gt;
                               Asignación del recurso procesador&lt;br /&gt;
 &lt;br /&gt;
        | 1 | 2 |2.1|2.2|   |   |   |2.3|2.4|2.5| 3 |   |   |   |   | 1 | 2 |2.1|2.2|   |   |2.3|2.4|2.5| 3 |&lt;br /&gt;
    h1  &amp;lt;---|---|---|---P   |   |   |---|---|---|---P   |   |   |   |---|---|---|---P   |   |---|---|---|---P&lt;br /&gt;
        |   |   |   |   | 1 | 2 |2.1|   |   |   |   |2.2|2.3| 3 | 1 |   |   |   |   | 2 |2.1|   |   |   |   |&lt;br /&gt;
    h2  |   |   |   |   &amp;lt;---|---|---B   |   P   |   |---|---|---|---P   |   |   |   |---|---B   |   P   |   |&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&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        |   |   |   |   | 1 |   &lt;br /&gt;
    h1  |   |   |   |   |---&amp;gt;   &lt;br /&gt;
        |2.2|2.3| 3 | 1 |   |&lt;br /&gt;
    h2  |---|---|---|---&amp;gt;   |&lt;br /&gt;
        |---|---|---|---|---|&lt;br /&gt;
       25  26  27  28  29   30   &lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Mangonvil1|Mangonvil1]] 17:20 14 dic 2011 (UTC)Creo que esta solución sería más correcta puesto que la línea 2 del código de cada hilo(en el hilo 1 el get() y en el hilo 2 el set(i)) hay que tratarla como una unidad de ejecución más. (Pendiente de que Pablo le de el visto bueno)&lt;br /&gt;
&lt;br /&gt;
Esta solución es incorrecta (creo que lo comentó también Pablo en clase) ya que las llamadas a las funciones son en realidad un puntero apuntando a una dirección de la memoria en la que se encuentra esa función (apuntará a la primera línea de ejecución de la función). Para verlo con un ejemplo más de &amp;quot;andar por casa&amp;quot;, digamos que sería el equivalente a sustituir en el código del hilo1 la linea #2 por todas las líneas de la función en si, #2.1 #2.2 #2.3 #2.4 y #2.5, la llamada a la función no cuenta como una ejecución más.--[[Usuario:Josazcrom|Josazcrom]] 10:39 14 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
                                 &amp;quot;Tema 4&amp;quot;&lt;br /&gt;
http://hpjpc.googlecode.com/files/HPJPC%20Christopher%20and%20Thiruvathukal.pdf&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=2605</id>
		<title>Monitores</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=2605"/>
				<updated>2012-11-28T22:24:05Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: /* Fuentes */&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;
Creo que una solución mas correcta es la siguiente:&lt;br /&gt;
                               Asignación del recurso procesador&lt;br /&gt;
 &lt;br /&gt;
        | 1 | 2 |2.1|2.2|   |   |   |2.3|2.4|2.5| 3 |   |   |   |   | 1 | 2 |2.1|2.2|   |   |2.3|2.4|2.5| 3 |&lt;br /&gt;
    h1  &amp;lt;---|---|---|---P   |   |   |---|---|---|---P   |   |   |   |---|---|---|---P   |   |---|---|---|---P&lt;br /&gt;
        |   |   |   |   | 1 | 2 |2.1|   |   |   |   |2.2|2.3| 3 | 1 |   |   |   |   | 2 |2.1|   |   |   |   |&lt;br /&gt;
    h2  |   |   |   |   &amp;lt;---|---|---B   |   P   |   |---|---|---|---P   |   |   |   |---|---B   |   P   |   |&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&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        |   |   |   |   | 1 |   &lt;br /&gt;
    h1  |   |   |   |   |---&amp;gt;   &lt;br /&gt;
        |2.2|2.3| 3 | 1 |   |&lt;br /&gt;
    h2  |---|---|---|---&amp;gt;   |&lt;br /&gt;
        |---|---|---|---|---|&lt;br /&gt;
       25  26  27  28  29   30   &lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Mangonvil1|Mangonvil1]] 17:20 14 dic 2011 (UTC)Creo que esta solución sería más correcta puesto que la línea 2 del código de cada hilo(en el hilo 1 el get() y en el hilo 2 el set(i)) hay que tratarla como una unidad de ejecución más. (Pendiente de que Pablo le de el visto bueno)&lt;br /&gt;
&lt;br /&gt;
Esta solución es incorrecta (creo que lo comentó también Pablo en clase) ya que las llamadas a las funciones son en realidad un puntero apuntando a una dirección de la memoria en la que se encuentra esa función (apuntará a la primera línea de ejecución de la función). Para verlo con un ejemplo más de &amp;quot;andar por casa&amp;quot;, digamos que sería el equivalente a sustituir en el código del hilo1 la linea #2 por todas las líneas de la función en si, #2.1 #2.2 #2.3 #2.4 y #2.5, la llamada a la función no cuenta como una ejecución más.--[[Usuario:Josazcrom|Josazcrom]] 10:39 14 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
https://1984.lsi.us.es/wiki-ssoo/images/1/18/HPJPC_Christopher_and_Thiruvathukal_99_132&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=2604</id>
		<title>Monitores</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=2604"/>
				<updated>2012-11-28T22:23:39Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: /* Fuentes */&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;
Creo que una solución mas correcta es la siguiente:&lt;br /&gt;
                               Asignación del recurso procesador&lt;br /&gt;
 &lt;br /&gt;
        | 1 | 2 |2.1|2.2|   |   |   |2.3|2.4|2.5| 3 |   |   |   |   | 1 | 2 |2.1|2.2|   |   |2.3|2.4|2.5| 3 |&lt;br /&gt;
    h1  &amp;lt;---|---|---|---P   |   |   |---|---|---|---P   |   |   |   |---|---|---|---P   |   |---|---|---|---P&lt;br /&gt;
        |   |   |   |   | 1 | 2 |2.1|   |   |   |   |2.2|2.3| 3 | 1 |   |   |   |   | 2 |2.1|   |   |   |   |&lt;br /&gt;
    h2  |   |   |   |   &amp;lt;---|---|---B   |   P   |   |---|---|---|---P   |   |   |   |---|---B   |   P   |   |&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&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        |   |   |   |   | 1 |   &lt;br /&gt;
    h1  |   |   |   |   |---&amp;gt;   &lt;br /&gt;
        |2.2|2.3| 3 | 1 |   |&lt;br /&gt;
    h2  |---|---|---|---&amp;gt;   |&lt;br /&gt;
        |---|---|---|---|---|&lt;br /&gt;
       25  26  27  28  29   30   &lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Mangonvil1|Mangonvil1]] 17:20 14 dic 2011 (UTC)Creo que esta solución sería más correcta puesto que la línea 2 del código de cada hilo(en el hilo 1 el get() y en el hilo 2 el set(i)) hay que tratarla como una unidad de ejecución más. (Pendiente de que Pablo le de el visto bueno)&lt;br /&gt;
&lt;br /&gt;
Esta solución es incorrecta (creo que lo comentó también Pablo en clase) ya que las llamadas a las funciones son en realidad un puntero apuntando a una dirección de la memoria en la que se encuentra esa función (apuntará a la primera línea de ejecución de la función). Para verlo con un ejemplo más de &amp;quot;andar por casa&amp;quot;, digamos que sería el equivalente a sustituir en el código del hilo1 la linea #2 por todas las líneas de la función en si, #2.1 #2.2 #2.3 #2.4 y #2.5, la llamada a la función no cuenta como una ejecución más.--[[Usuario:Josazcrom|Josazcrom]] 10:39 14 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
https://1984.lsi.us.es/wiki-ssoo/images/1/18/HPJPC_Christopher_and_Thiruvathukal_99_132&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=2603</id>
		<title>Monitores</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Monitores&amp;diff=2603"/>
				<updated>2012-11-28T22:23:17Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: /* Fuentes */ Añadir link antiguo link estaba roto&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;
Creo que una solución mas correcta es la siguiente:&lt;br /&gt;
                               Asignación del recurso procesador&lt;br /&gt;
 &lt;br /&gt;
        | 1 | 2 |2.1|2.2|   |   |   |2.3|2.4|2.5| 3 |   |   |   |   | 1 | 2 |2.1|2.2|   |   |2.3|2.4|2.5| 3 |&lt;br /&gt;
    h1  &amp;lt;---|---|---|---P   |   |   |---|---|---|---P   |   |   |   |---|---|---|---P   |   |---|---|---|---P&lt;br /&gt;
        |   |   |   |   | 1 | 2 |2.1|   |   |   |   |2.2|2.3| 3 | 1 |   |   |   |   | 2 |2.1|   |   |   |   |&lt;br /&gt;
    h2  |   |   |   |   &amp;lt;---|---|---B   |   P   |   |---|---|---|---P   |   |   |   |---|---B   |   P   |   |&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&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        |   |   |   |   | 1 |   &lt;br /&gt;
    h1  |   |   |   |   |---&amp;gt;   &lt;br /&gt;
        |2.2|2.3| 3 | 1 |   |&lt;br /&gt;
    h2  |---|---|---|---&amp;gt;   |&lt;br /&gt;
        |---|---|---|---|---|&lt;br /&gt;
       25  26  27  28  29   30   &lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Mangonvil1|Mangonvil1]] 17:20 14 dic 2011 (UTC)Creo que esta solución sería más correcta puesto que la línea 2 del código de cada hilo(en el hilo 1 el get() y en el hilo 2 el set(i)) hay que tratarla como una unidad de ejecución más. (Pendiente de que Pablo le de el visto bueno)&lt;br /&gt;
&lt;br /&gt;
Esta solución es incorrecta (creo que lo comentó también Pablo en clase) ya que las llamadas a las funciones son en realidad un puntero apuntando a una dirección de la memoria en la que se encuentra esa función (apuntará a la primera línea de ejecución de la función). Para verlo con un ejemplo más de &amp;quot;andar por casa&amp;quot;, digamos que sería el equivalente a sustituir en el código del hilo1 la linea #2 por todas las líneas de la función en si, #2.1 #2.2 #2.3 #2.4 y #2.5, la llamada a la función no cuenta como una ejecución más.--[[Usuario:Josazcrom|Josazcrom]] 10:39 14 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
https://1984.lsi.us.es/wiki-ssoo/images/1/18/HPJPC_Christopher_and_Thiruvathukal_99_132&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:HPJPC_Christopher_and_Thiruvathukal_99_132.pdf&amp;diff=2602</id>
		<title>Archivo:HPJPC Christopher and Thiruvathukal 99 132.pdf</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:HPJPC_Christopher_and_Thiruvathukal_99_132.pdf&amp;diff=2602"/>
				<updated>2012-11-28T22:21:50Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: Explicacion monitores&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Explicacion monitores&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_ejercicio_8&amp;diff=2598</id>
		<title>Solución ejercicio 8</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_ejercicio_8&amp;diff=2598"/>
				<updated>2012-11-22T11:24:11Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;      X = El proceso pasa a estado bloqueado.&lt;br /&gt;
      / = El proceso pasa a estado preparado.&lt;br /&gt;
      &amp;gt; = Fin de su ejecución&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      | #1| #2| #3|   |   |   | #4| #1| #2|   |   |   | #3| #1| #4|   |   |   |   |   |&lt;br /&gt;
    P1|---|---|---|   |   |   |---|---|---|   |   |   |---|---|---&amp;gt;   |   |   |   |   |&lt;br /&gt;
      |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
      |   |   |   | #1| #2| #3|   |   |   | #4| #1| #2|   |   |   | #3| #4| #1|   |   |&lt;br /&gt;
    P2|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---&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&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
No hay sincronizacion, son semáforos diferentes operan cada uno sobre un proceso.&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_ejercicio_9&amp;diff=2597</id>
		<title>Solución ejercicio 9</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_ejercicio_9&amp;diff=2597"/>
				<updated>2012-11-22T11:23:54Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: Página creada con '      X = El proceso pasa a estado bloqueado.       / = El proceso pasa a estado preparado.       &amp;gt; = Fin de su ejecución           | #1| #2| #3|   |   | #4| #1| #2|   |   |   …'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;      X = El proceso pasa a estado bloqueado.&lt;br /&gt;
      / = El proceso pasa a estado preparado.&lt;br /&gt;
      &amp;gt; = Fin de su ejecución&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      | #1| #2| #3|   |   | #4| #1| #2|   |   |   | #3| #4| #1|   |   |   |   |   |   |&lt;br /&gt;
    P1|---|---|---|   |   |---|---|---X   |   /   |---|---|---&amp;gt;   |   |   |   |   |   |&lt;br /&gt;
      |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
      |   |   |   | #1| #2|   |   |   | #3| #4| #1|   |   |   | #2| #3| #4| #1|   |   |&lt;br /&gt;
    P2|   |   |   |---|---X   /   |   |---|---|---|   |   |   |---|---|-------&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&lt;br /&gt;
&lt;br /&gt;
Solo hay un semáforo. No se mezclan las zonas criticas, el contador siempre se comparte.&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_ejercicio_8&amp;diff=2596</id>
		<title>Solución ejercicio 8</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_ejercicio_8&amp;diff=2596"/>
				<updated>2012-11-22T11:18:21Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: /ejercicio 8/ Editar solución&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;      X = El proceso pasa a estado bloqueado.&lt;br /&gt;
      / = El proceso pasa a estado preparado.&lt;br /&gt;
      &amp;gt; = Fin de su ejecución&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
      | #1| #2| #3|   |   |   | #4| #1| #2|   |   |   | #3| #1| #4|   |   |   |   |   |&lt;br /&gt;
    P1|---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |   |   |&lt;br /&gt;
      |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
      |   |   |   | #1| #2| #3|   |   |   | #4| #1| #2|   |   |   | #3| #4| #1|   |   |&lt;br /&gt;
    P2|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---&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&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
No hay sincronizacion, son semáforos diferentes operan cada uno sobre un proceso.&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_de_los_ejercicios_de_fundamentos&amp;diff=2587</id>
		<title>Solución de los ejercicios de fundamentos</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_fundamentos&amp;diff=2587"/>
				<updated>2012-11-11T19:05:07Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: /*Añadir Ejercicio*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ejercicio 1 ==&lt;br /&gt;
&lt;br /&gt;
Se puede responder a esta pregunta con el contenido de [[Modelos_de_Diseño_de_Sistemas_Operativos|este artículo]]. --[[Usuario:Pneira|Pneira]] 17:05 1 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
*Monolíticos: son núcleos de '''gran tamaño''' (muchas líneas de código) con un '''alto número de funcionalidades'''.&lt;br /&gt;
&lt;br /&gt;
*Micronúcleos: son núcleos de '''pequeño tamañ'''o que fueron compilados sólo con las '''necesidades más básicas''' del sistema operativo&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2 ==&lt;br /&gt;
&lt;br /&gt;
Se puede responder a esta pregunta con el contenido de [[Componentes básicos de un sistema operativo|este artículo]]. --[[Usuario:Pneira|Pneira]] 17:05 1 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2.6.2 == &lt;br /&gt;
&lt;br /&gt;
No es conveniente que se haga un Sistema operativo sin ninguna llamada a sistema ya que el sistema no se podría comunicar con el hardware y no valdría para nada. No es útil.--[[Usuario:fraborcej|fraborcej]] 19:49 11 nov 2012 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 3.3.2 == &lt;br /&gt;
&lt;br /&gt;
La mayor parte de los sistemas operativos son monolíticos, porque tienen un rendimiento mas alto, puesto que las peticiones entre los diferentes componentes se reducen a invocaciones de funciones. Mientras que el sistema operativo micronúcleo necesita de mensajería cada vez que hace una petición, la razón por la que tienen un rendimiento mas bajo. --[[Usuario:fraborcej|fraborcej]] 19:58 11 nov 2012 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 3.3.3 == &lt;br /&gt;
&lt;br /&gt;
El código de un sistema operativo que corre sobre una maquina virtual se ejecuto en modo no_privilegiado ya que la maquina virtual es un proceso por tanto se esta ejecutando en modo no_privilegiado.  --[[Usuario:fraborcej|fraborcej]] 19:58 11 nov 2012 (UTC)&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_3&amp;diff=2586</id>
		<title>Ejercicios 3</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_3&amp;diff=2586"/>
				<updated>2012-11-11T19:00:57Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ejercicio 1 ==&lt;br /&gt;
''[Este ejercicio fue parte del Primer Control de Evaluación Contínua en el curso 2010/11, del 23 de marzo de 2011]''&lt;br /&gt;
&lt;br /&gt;
Indique la diferencia fundamental de diseño entre un sistema operativo monolítico y otro micronúcleo.&lt;br /&gt;
&lt;br /&gt;
(''[[Solución de los ejercicios de fundamentos#Ejercicio 1|Ver solución]]'')&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2 ==&lt;br /&gt;
''[Este ejercicio fue parte del Primer Control de Evaluación Contínua en el curso 2012/13, del 9 de noviembre de 2012]''&lt;br /&gt;
&lt;br /&gt;
Si los sistemas operativos micronúcleos se caracterizan por presumir de su fiabilidad, ¿Por que la mayor parte de los sistemas operativos de propósito general son híbridos (mas bien tendiendo a ser monolíticos)?&lt;br /&gt;
&lt;br /&gt;
(''[[Solución de los ejercicios de fundamentos#Ejercicio 1|Ver solución]]'')&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 3 ==&lt;br /&gt;
''[Este ejercicio fue parte del Primer Control de Evaluación Contínua en el curso 2012/13, del 9 de noviembre de 2012]''&lt;br /&gt;
&lt;br /&gt;
¿En que modo de la CPU se ejecuta el código de un sistema operativo que corre sobre una maquina virtual? Justifique brevemente su respuesta.&lt;br /&gt;
&lt;br /&gt;
(''[[Solución de los ejercicios de fundamentos#Ejercicio 1|Ver solución]]'')&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_de_los_ejercicios_de_fundamentos&amp;diff=2585</id>
		<title>Solución de los ejercicios de fundamentos</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_fundamentos&amp;diff=2585"/>
				<updated>2012-11-11T18:59:35Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: /*Añadir Solución Ejercicio*/ Primer Examen evaluación continua 2012/2013&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ejercicio 1 ==&lt;br /&gt;
&lt;br /&gt;
Se puede responder a esta pregunta con el contenido de [[Modelos_de_Diseño_de_Sistemas_Operativos|este artículo]]. --[[Usuario:Pneira|Pneira]] 17:05 1 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
*Monolíticos: son núcleos de '''gran tamaño''' (muchas líneas de código) con un '''alto número de funcionalidades'''.&lt;br /&gt;
&lt;br /&gt;
*Micronúcleos: son núcleos de '''pequeño tamañ'''o que fueron compilados sólo con las '''necesidades más básicas''' del sistema operativo&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2 ==&lt;br /&gt;
&lt;br /&gt;
Se puede responder a esta pregunta con el contenido de [[Componentes básicos de un sistema operativo|este artículo]]. --[[Usuario:Pneira|Pneira]] 17:05 1 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2.6.2 == &lt;br /&gt;
&lt;br /&gt;
No es conveniente que se haga un Sistema operativo sin ninguna llamada a sistema ya que el sistema no se podría comunicar con el hardware y no valdría para nada. No es útil.--[[Usuario:fraborcej|fraborcej]] 19:49 11 nov 2012 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 3.3.2 == &lt;br /&gt;
&lt;br /&gt;
La mayor parte de los sistemas operativos son monolíticos, porque tienen un rendimiento mas alto, puesto que las peticiones entre los diferentes componentes se reducen a invocaciones de funciones. Mientras que el sistema operativo micronúcleo necesita de mensajería cada vez que hace una petición, la razón por la que tienen un rendimiento mas bajo. --[[Usuario:fraborcej|fraborcej]] 19:58 11 nov 2012 (UTC)&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_3&amp;diff=2584</id>
		<title>Ejercicios 3</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_3&amp;diff=2584"/>
				<updated>2012-11-11T18:54:00Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ejercicio 1 ==&lt;br /&gt;
''[Este ejercicio fue parte del Primer Control de Evaluación Contínua en el curso 2010/11, del 23 de marzo de 2011]''&lt;br /&gt;
&lt;br /&gt;
Indique la diferencia fundamental de diseño entre un sistema operativo monolítico y otro micronúcleo.&lt;br /&gt;
&lt;br /&gt;
(''[[Solución de los ejercicios de fundamentos#Ejercicio 1|Ver solución]]'')&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2 ==&lt;br /&gt;
''[Este ejercicio fue parte del Primer Control de Evaluación Contínua en el curso 2012/13, del 9 de noviembre de 2012]''&lt;br /&gt;
&lt;br /&gt;
Si los sistemas operativos micronúcleos se caracterizan por presumir de su fiabilidad, ¿Por que la mayor parte de los sistemas operativos de propósito general son híbridos (mas bien tendiendo a ser monolíticos)?&lt;br /&gt;
&lt;br /&gt;
(''[[Solución de los ejercicios de fundamentos#Ejercicio 1|Ver solución]]'')&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_de_los_ejercicios_de_fundamentos&amp;diff=2583</id>
		<title>Solución de los ejercicios de fundamentos</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_fundamentos&amp;diff=2583"/>
				<updated>2012-11-11T18:51:39Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: /* Ejercicio 2.6.2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ejercicio 1 ==&lt;br /&gt;
&lt;br /&gt;
Se puede responder a esta pregunta con el contenido de [[Modelos_de_Diseño_de_Sistemas_Operativos|este artículo]]. --[[Usuario:Pneira|Pneira]] 17:05 1 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
*Monolíticos: son núcleos de '''gran tamaño''' (muchas líneas de código) con un '''alto número de funcionalidades'''.&lt;br /&gt;
&lt;br /&gt;
*Micronúcleos: son núcleos de '''pequeño tamañ'''o que fueron compilados sólo con las '''necesidades más básicas''' del sistema operativo&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2 ==&lt;br /&gt;
&lt;br /&gt;
Se puede responder a esta pregunta con el contenido de [[Componentes básicos de un sistema operativo|este artículo]]. --[[Usuario:Pneira|Pneira]] 17:05 1 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2.6.2 == &lt;br /&gt;
&lt;br /&gt;
No es conveniente que se haga un Sistema operativo sin ninguna llamada a sistema ya que el sistema no se podría comunicar con el hardware y no valdría para nada. No es útil.--[[Usuario:fraborcej|fraborcej]] 19:49 11 nov 2012 (UTC)&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_de_los_ejercicios_de_fundamentos&amp;diff=2582</id>
		<title>Solución de los ejercicios de fundamentos</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_fundamentos&amp;diff=2582"/>
				<updated>2012-11-11T18:51:18Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ejercicio 1 ==&lt;br /&gt;
&lt;br /&gt;
Se puede responder a esta pregunta con el contenido de [[Modelos_de_Diseño_de_Sistemas_Operativos|este artículo]]. --[[Usuario:Pneira|Pneira]] 17:05 1 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
*Monolíticos: son núcleos de '''gran tamaño''' (muchas líneas de código) con un '''alto número de funcionalidades'''.&lt;br /&gt;
&lt;br /&gt;
*Micronúcleos: son núcleos de '''pequeño tamañ'''o que fueron compilados sólo con las '''necesidades más básicas''' del sistema operativo&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2 ==&lt;br /&gt;
&lt;br /&gt;
Se puede responder a esta pregunta con el contenido de [[Componentes básicos de un sistema operativo|este artículo]]. --[[Usuario:Pneira|Pneira]] 17:05 1 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2.6.2 == &lt;br /&gt;
&lt;br /&gt;
No es conveniente que se haga un Sistema operativo sin ninguna llamada a sistema ya que el sistema no se podría comunicar con el hardware y no valdría para nada. No es para nada útil.--[[Usuario:fraborcej|fraborcej]] 19:49 11 nov 2012 (UTC)&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_de_los_ejercicios_de_fundamentos&amp;diff=2581</id>
		<title>Solución de los ejercicios de fundamentos</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_fundamentos&amp;diff=2581"/>
				<updated>2012-11-11T18:51:05Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ejercicio 1 ==&lt;br /&gt;
&lt;br /&gt;
Se puede responder a esta pregunta con el contenido de [[Modelos_de_Diseño_de_Sistemas_Operativos|este artículo]]. --[[Usuario:Pneira|Pneira]] 17:05 1 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
*Monolíticos: son núcleos de '''gran tamaño''' (muchas líneas de código) con un '''alto número de funcionalidades'''.&lt;br /&gt;
&lt;br /&gt;
*Micronúcleos: son núcleos de '''pequeño tamañ'''o que fueron compilados sólo con las '''necesidades más básicas''' del sistema operativo&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2 ==&lt;br /&gt;
&lt;br /&gt;
Se puede responder a esta pregunta con el contenido de [[Componentes básicos de un sistema operativo|este artículo]]. --[[Usuario:Pneira|Pneira]] 17:05 1 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2.6.2 == &lt;br /&gt;
&lt;br /&gt;
No es conveniente que se haga un Sistema operativo sin ninguna llamada a sistema ya que el sistema no se podría comunicar con el hardware y no valdría para nada. No es para nada útil.--[[Usuario:fraborcej|fraborcej]] 19:49 11 nov 2012 (UTC)&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_de_los_ejercicios_de_fundamentos&amp;diff=2580</id>
		<title>Solución de los ejercicios de fundamentos</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_fundamentos&amp;diff=2580"/>
				<updated>2012-11-11T18:50:12Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ejercicio 1 ==&lt;br /&gt;
&lt;br /&gt;
Se puede responder a esta pregunta con el contenido de [[Modelos_de_Diseño_de_Sistemas_Operativos|este artículo]]. --[[Usuario:Pneira|Pneira]] 17:05 1 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
*Monolíticos: son núcleos de '''gran tamaño''' (muchas líneas de código) con un '''alto número de funcionalidades'''.&lt;br /&gt;
&lt;br /&gt;
*Micronúcleos: son núcleos de '''pequeño tamañ'''o que fueron compilados sólo con las '''necesidades más básicas''' del sistema operativo&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2 ==&lt;br /&gt;
&lt;br /&gt;
Se puede responder a esta pregunta con el contenido de [[Componentes básicos de un sistema operativo|este artículo]]. --[[Usuario:Pneira|Pneira]] 17:05 1 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2.6.2 == --[[Usuario:fraborcej|fraborcej]] 19:49 11 nov 2012 (UTC)&lt;br /&gt;
&lt;br /&gt;
No es conveniente que se haga un Sistema operativo sin ninguna llamada a sistema ya que el sistema no se podría comunicar con el hardware y no valdría para nada. No es para nada útil.&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_de_los_ejercicios_de_fundamentos&amp;diff=2579</id>
		<title>Solución de los ejercicios de fundamentos</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_fundamentos&amp;diff=2579"/>
				<updated>2012-11-11T18:49:19Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ejercicio 1 ==&lt;br /&gt;
&lt;br /&gt;
Se puede responder a esta pregunta con el contenido de [[Modelos_de_Diseño_de_Sistemas_Operativos|este artículo]]. --[[Usuario:Pneira|Pneira]] 17:05 1 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
*Monolíticos: son núcleos de '''gran tamaño''' (muchas líneas de código) con un '''alto número de funcionalidades'''.&lt;br /&gt;
&lt;br /&gt;
*Micronúcleos: son núcleos de '''pequeño tamañ'''o que fueron compilados sólo con las '''necesidades más básicas''' del sistema operativo&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2 ==&lt;br /&gt;
&lt;br /&gt;
Se puede responder a esta pregunta con el contenido de [[Componentes básicos de un sistema operativo|este artículo]]. --[[Usuario:Pneira|Pneira]] 17:05 1 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2.6.2 ==&lt;br /&gt;
&lt;br /&gt;
No es conveniente que se haga un Sistema operativo sin ninguna llamada a sistema ya que el sistema no se podría comunicar con el hardware y no valdría para nada. No es para nada útil.&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_fundamentos_Sistemas_Operativos&amp;diff=2578</id>
		<title>Ejercicios fundamentos Sistemas Operativos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_fundamentos_Sistemas_Operativos&amp;diff=2578"/>
				<updated>2012-11-11T18:42:25Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: /* Ejercicios */ Añadiendo Ejercicio Examen 09/11/2012&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ejercicio 1 ==&lt;br /&gt;
''[Este ejercicio fue parte del Primer Control de Evaluación Contínua en el curso 2011/12, del 24 de Noviembre de 2011]''&lt;br /&gt;
&lt;br /&gt;
Enumere y detalle brevemente los cuatro componentes básicos de un Sistema Operativo, así como las interfaces que este ofrece para interactuar con él.&lt;br /&gt;
&lt;br /&gt;
(''[[Solución de los ejercicios de fundamentos#Ejercicio 1|Ver solución]]'')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2 ==&lt;br /&gt;
''[Este ejercicio fue parte del Primer Control de Evaluación Contínua en el curso 2012/13, del 9 de Noviembre de 2012]''&lt;br /&gt;
&lt;br /&gt;
Los ingenieros de ACME Sistemas Operativos han decidido implementar un sistema operativo de propósito general que no ofrece ninguna llamada al sistema.Justifique brevemente la conveniencia,o no, de dicha decisión de diseño.&lt;br /&gt;
&lt;br /&gt;
(''[[Solución de los ejercicios de fundamentos#Ejercicio 2|Ver solución]]'')&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_fundamentos_Sistemas_Operativos&amp;diff=2577</id>
		<title>Ejercicios fundamentos Sistemas Operativos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_fundamentos_Sistemas_Operativos&amp;diff=2577"/>
				<updated>2012-11-11T18:41:34Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: /* Ejercicio 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ejercicio 1 ==&lt;br /&gt;
''[Este ejercicio fue parte del Primer Control de Evaluación Contínua en el curso 2011/12, del 24 de Noviembre de 2011]''&lt;br /&gt;
&lt;br /&gt;
Enumere y detalle brevemente los cuatro componentes básicos de un Sistema Operativo, así como las interfaces que este ofrece para interactuar con él.&lt;br /&gt;
&lt;br /&gt;
(''[[Solución de los ejercicios de fundamentos#Ejercicio 2|Ver solución]]'')&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_fundamentos_Sistemas_Operativos&amp;diff=2576</id>
		<title>Ejercicios fundamentos Sistemas Operativos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_fundamentos_Sistemas_Operativos&amp;diff=2576"/>
				<updated>2012-11-11T18:40:30Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: /* Ejercicio 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ejercicio 1 ==&lt;br /&gt;
''[Este ejercicio fue parte del Primer Control de Evaluación Contínua en el curso 2011/12, del 24 de Noviembre de 2011]''&lt;br /&gt;
&lt;br /&gt;
Enumere y detalle brevemente los cuatro componentes básicos de un Sistema Operativo, así como las interfaces que este ofrece para interactuar con él.&lt;br /&gt;
&lt;br /&gt;
(''[[Solución de los ejercicios de fundamentos#Ejercicio 1|Ver solución]]'')&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol-ejer3-planif-procesos&amp;diff=2560</id>
		<title>Sol-ejer3-planif-procesos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol-ejer3-planif-procesos&amp;diff=2560"/>
				<updated>2012-11-03T20:55:19Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: /* Ejercicio 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ejercicio 2 =&lt;br /&gt;
&lt;br /&gt;
 Datos del problema:&lt;br /&gt;
                         | Pa | Pb | Pc  | Pd |&lt;br /&gt;
                     --------------------------&lt;br /&gt;
                      H0 | 0  | 1  |  2  | 3  |&lt;br /&gt;
                     --------------------------&lt;br /&gt;
                      t  | 4  | 4  |  12 | 12 |&lt;br /&gt;
                     --------------------------&lt;br /&gt;
 &lt;br /&gt;
                  Pa y Pb bloquean por operación de E/S tras 1 unidad de ejecución&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;
                       ↑ = promociona porque ha consumido el quantum.&lt;br /&gt;
                       B = Bloquea.&lt;br /&gt;
                      !!!= Indica que la cola sobre la que se itera ha cambiado&lt;br /&gt;
 &lt;br /&gt;
       | 1 |   |   |   |   |   |   |   | 2 |   |   |   |   |   |   |   |   |   | 1 |   |&lt;br /&gt;
 Pa    &amp;lt;---B...P---B...P   |   |   |   |---B...P   |   |   |   |   |   |   |   |---&amp;gt;   |&lt;br /&gt;
       |   | 1 |   |   |   | 1 |   |   |   |   |   |   |   |   |   |   |   | 1 |   | 2 |&lt;br /&gt;
 Pb    |   &amp;lt;---B...P   |   |---B...P   |   |   |   |   |   |   |   |   |   |---B...P---&amp;gt;&lt;br /&gt;
       |   |   |   | 1 | ↑ |   |   |   |   | 1 |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
 Pc    |   |   &amp;lt;   |---|---|   |   |   |   |---|---|---|---|   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   | 2 | ↑ |   |   |   |   |   | 1 |   |   |   |   |   |   |&lt;br /&gt;
 Pd    |   |   |   &amp;lt;   |   |   |---|---|   |   |   |   |   |---|---|---|---|   |   |   |&lt;br /&gt;
 Plnf  X   X   X   X   |   X   X   |   X   X   |   |   |   X   |   |   |   X   X   X   X&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;
 &lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
 Pa    |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
 Pb    |   |   | 1 |   |   |   |   |   | 1 |   |   |   |&lt;br /&gt;
 Pc    |---|---|---|---|   | 1 |   |   |---|---&amp;gt; 1 |   |&lt;br /&gt;
 Pd    |   |   |   |   |---|---|---|---|   |   |---|---&amp;gt;&lt;br /&gt;
 Plnf  X   |   |   |   X   |   |   |   X   |   X   |   |&lt;br /&gt;
       |___|___|___|___|___|___|___|__!!!__|___|___|___|&lt;br /&gt;
       20  21  22  23  24  25  26  27  28  29  30  31  32&lt;br /&gt;
 &lt;br /&gt;
 Cálculo de índices:&lt;br /&gt;
 &lt;br /&gt;
                         | Pa | Pb |  Pc | Pd |&lt;br /&gt;
                     --------------------------&lt;br /&gt;
                      t  | 4  | 4  |  12 | 12 |&lt;br /&gt;
                     --------------------------&lt;br /&gt;
                      T  | 19 | 20 |  30 | 32 |&lt;br /&gt;
                     --------------------------&lt;br /&gt;
                    T/t  |4.75| 5  | 2.5 |2.66|&lt;br /&gt;
                     --------------------------&lt;br /&gt;
&lt;br /&gt;
*He añadido sobre cada proceso el número de vez de iteración de la cola a la que pertenece. Así se puede ver que por cada dos iteraciones de una cola, se hace una iteración de la otra.&lt;br /&gt;
* Notese que en el instante 28, se itera sobre la cola 2 dos veces, pero al no contener elementos la iteración es nula, y se pasa a la siguiente cola prevista.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Explicación:&lt;br /&gt;
&lt;br /&gt;
Todos los procesos empiezan inicialmente en la segunda cola. Pa y Pb reciben una oportunidad de ejecución sin consumir su quantum debido a bloqueo, por tanto, permanecen en la segunda cola. Pc y Pd consumen todo su quantum, por tanto, promocionan a la primera cola. Los procesos Pa y Pb se ejecutan otra vez, pues los procesos que se encuentran en la segunda cola reciben dos oportunidades de ejecución. Tras esto, los procesos recién ascendidos a la primera cola, que son Pc y Pd, reciben su oportunidad de ejecución, en este caso con quantum de 4 unidades. De nuevo, se le da oportunidad de ejecución a los procesos de la segunda cola, que terminan su ejecución. Como no hay más procesos en la segunda cola, se le da una oportunidad de ejecución a los de la primera. --[[Usuario:Pneira|Pneira]] 18:36 22 mar 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
= Dudas =&lt;br /&gt;
&lt;br /&gt;
No entiendo por qué en la unidad de tiempo 18 no aparece el proceso c y d y posteriormente a b c y d.Esto es a lo que me refiero --[[Usuario:Jherrera|Jherrera]]:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
 Pa    |   |   |   |   |   |   |   |   |---&amp;gt;   |   |   |&lt;br /&gt;
 Pb    |   |   |   |   |   |   |   |   |   |---&amp;gt;   |   |&lt;br /&gt;
 Pc    |---|---|---|---|   |   |   |   |   |   |-------&amp;gt;&lt;br /&gt;
 Pd    |   |   |   |   |---|---|---|---|   |   |   |   |------&amp;gt;&lt;br /&gt;
 Plnf  |   |   |   |   X   |   |   |   X   |   X   |   X &lt;br /&gt;
       |___|___|___|___|___|___|___|___|___|___|___|___|&lt;br /&gt;
       18  19  20  21  22  23  24  25  26  27  28  29  30&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Solucion: Por que en la 2ª cola estan los procesos A y B, por que nunca consumen los quantums, y la 2ª cola siempre se itera 2 veces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
¿No se supone que la cola 1 posee mayor prioridad que la 2? siendo asi, mientras C y D esten en la 1ª cola no se le debería volver a dar oportunidad a la cola 2 no?¿--[[Usuario:DvS 013|DvS 013]]&lt;br /&gt;
&lt;br /&gt;
Creo que se lo que dices. Aunque C y D esten en la primera cola, se pasa a la segunda. Esto es porque la primera cola no tiene mas prioridad, sino solo un quantum más ancho. Entonces se mira la primera cola, luego 2 veces la segunda, y vuelta a empezar --[[Usuario:PCamino|PCamino]]&lt;br /&gt;
&lt;br /&gt;
El problema creo yo es que el enunciado ha sido modificado de esta mañana para acá, porque yo también hice el ejercicio para subirlo a la wiki, pero se me adelantaron, y esta mañana en el enunciado ponia que la cola 1 tenia más prioridad que la 2, y ademas no ponia el tiempo que estaban en estado bloqueado los procesos, ahora si lo pone, y no pone lo de la prioridad. Yo estoy de acuerdo con la solucion propuesta arriba. --[[Usuario:Josmorgav1|Josmorgav1]] 21:42 22 mar 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vaya caos! Podemos poner ambos ejercicios --[[Usuario:PCamino|PCamino]]&lt;br /&gt;
&lt;br /&gt;
Con respecto  a la prioridad de las colas multinivel realimentadas, creo que carecen de prioridad, simplemente basta con saber cuantas veces se ejecutan cada una y en cual de ellas se meten los procesos que van llegando.--[[Usuario:Jmf bsk|Jmf bsk]] 23:10 22 mar 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DUDA: Creo que este ejercicio está hecho para tiempos de bloqueo de 2 unidades, mientras que en el enunciado los tiempos de bloqueo es de 1 t. Si fuera para tiempos de bloqueo = 1 en el instante 2 Pa regresa a la cola 2 de preparados, luego pasaría a estado activo antes que Pd , por lo que en t=4 Pa pasaría a estado activo,después iría Pd y después la segunda ejecución de Pb. Lo escribo para aclararlo: &lt;br /&gt;
&lt;br /&gt;
Pa y Pb bloquean cada unidad de tiempo, durante una unidad de tiempo de bloqueo.&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;---|---|   |   |   |   |---|---|---|---|   |   |   |   |   |   |   |   |&lt;br /&gt;
 Pd    |   |   |   &amp;lt;   |   |---|---|   |   |   |   |   |---|---|---|---|   |   |   |   |&lt;br /&gt;
 Plnf  X   X   X   |   X   X   |   X   X   |   |   |   X   |   |   |   X   |   |   |   X&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;
¿es correcta la solución que planteo para una unidad de tiempo de bloqueo?&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Nueva Duda:'''===&lt;br /&gt;
&lt;br /&gt;
Si sobre la cola 2 se itera dos veces, porque no se vuelve al Pa y Pb en el instante de tiempo 8? Como sucede en el instante 18.&lt;br /&gt;
&lt;br /&gt;
R:&lt;br /&gt;
Fijate que en el instante de tiempo t=6 ya es la 2ª vez que se itera sobre Pa y Pb, la diferencia radica en que en la cola 2 inicialmente existian cuatro procesos que había que atenderlos en RR, añadiendo que Pa y Pb bloquean cada 1 UT, a diferencia del intante t=18 solo existen Pa y Pb y como dice el enunciado se les da dos oportunidades de ejecucion si no consumen su quantum.&lt;br /&gt;
--[[Usuario:Albsolnog|Albsolnog]] 11:53 13 nov 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
R1:&lt;br /&gt;
Añado para mayor comprensión del ejercicio que en el instante t=6 empieza la segunda iteración de la cola 2, lo que pasa es que en esta iteración nada más que entran Pa y Pb, ya que los procesos Pc y Pd han consumido su quantum entero y han promocionado a la cola 1. --[[Usuario:Josazcrom|Josazcrom]] 18:55 22 nov 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
P:No terminaría el proceso A y el B justo después de hacer el bloqueo? Porqué en el ejercicio termina justo antes de ser bloqueado incluso?&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol-ejer3-planif-procesos&amp;diff=2559</id>
		<title>Sol-ejer3-planif-procesos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol-ejer3-planif-procesos&amp;diff=2559"/>
				<updated>2012-11-03T20:54:09Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: /* Ejercicio 3 */ Correcion solución&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ejercicio 3 =&lt;br /&gt;
&lt;br /&gt;
 Datos del problema:&lt;br /&gt;
                         | Pa | Pb | Pc  | Pd |&lt;br /&gt;
                     --------------------------&lt;br /&gt;
                      H0 | 0  | 1  |  2  | 3  |&lt;br /&gt;
                     --------------------------&lt;br /&gt;
                      t  | 4  | 4  |  12 | 12 |&lt;br /&gt;
                     --------------------------&lt;br /&gt;
 &lt;br /&gt;
                  Pa y Pb bloquean por operación de E/S tras 1 unidad de ejecución&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;
                       ↑ = promociona porque ha consumido el quantum.&lt;br /&gt;
                       B = Bloquea.&lt;br /&gt;
                      !!!= Indica que la cola sobre la que se itera ha cambiado&lt;br /&gt;
 &lt;br /&gt;
       | 1 |   |   |   |   |   |   |   | 2 |   |   |   |   |   |   |   |   |   | 1 |   |&lt;br /&gt;
 Pa    &amp;lt;---B...P---B...P   |   |   |   |---B...P   |   |   |   |   |   |   |   |---&amp;gt;   |&lt;br /&gt;
       |   | 1 |   |   |   | 1 |   |   |   |   |   |   |   |   |   |   |   | 1 |   | 2 |&lt;br /&gt;
 Pb    |   &amp;lt;---B...P   |   |---B...P   |   |   |   |   |   |   |   |   |   |---B...P---&amp;gt;&lt;br /&gt;
       |   |   |   | 1 | ↑ |   |   |   |   | 1 |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
 Pc    |   |   &amp;lt;   |---|---|   |   |   |   |---|---|---|---|   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   | 2 | ↑ |   |   |   |   |   | 1 |   |   |   |   |   |   |&lt;br /&gt;
 Pd    |   |   |   &amp;lt;   |   |   |---|---|   |   |   |   |   |---|---|---|---|   |   |   |&lt;br /&gt;
 Plnf  X   X   X   X   |   X   X   |   X   X   |   |   |   X   |   |   |   X   X   X   X&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;
 &lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
 Pa    |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
 Pb    |   |   | 1 |   |   |   |   |   | 1 |   |   |   |&lt;br /&gt;
 Pc    |---|---|---|---|   | 1 |   |   |---|---&amp;gt; 1 |   |&lt;br /&gt;
 Pd    |   |   |   |   |---|---|---|---|   |   |---|---&amp;gt;&lt;br /&gt;
 Plnf  X   |   |   |   X   |   |   |   X   |   X   |   |&lt;br /&gt;
       |___|___|___|___|___|___|___|__!!!__|___|___|___|&lt;br /&gt;
       20  21  22  23  24  25  26  27  28  29  30  31  32&lt;br /&gt;
 &lt;br /&gt;
 Cálculo de índices:&lt;br /&gt;
 &lt;br /&gt;
                         | Pa | Pb |  Pc | Pd |&lt;br /&gt;
                     --------------------------&lt;br /&gt;
                      t  | 4  | 4  |  12 | 12 |&lt;br /&gt;
                     --------------------------&lt;br /&gt;
                      T  | 19 | 20 |  30 | 32 |&lt;br /&gt;
                     --------------------------&lt;br /&gt;
                    T/t  |4.75| 5  | 2.5 |2.66|&lt;br /&gt;
                     --------------------------&lt;br /&gt;
&lt;br /&gt;
*He añadido sobre cada proceso el número de vez de iteración de la cola a la que pertenece. Así se puede ver que por cada dos iteraciones de una cola, se hace una iteración de la otra.&lt;br /&gt;
* Notese que en el instante 28, se itera sobre la cola 2 dos veces, pero al no contener elementos la iteración es nula, y se pasa a la siguiente cola prevista.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Explicación:&lt;br /&gt;
&lt;br /&gt;
Todos los procesos empiezan inicialmente en la segunda cola. Pa y Pb reciben una oportunidad de ejecución sin consumir su quantum debido a bloqueo, por tanto, permanecen en la segunda cola. Pc y Pd consumen todo su quantum, por tanto, promocionan a la primera cola. Los procesos Pa y Pb se ejecutan otra vez, pues los procesos que se encuentran en la segunda cola reciben dos oportunidades de ejecución. Tras esto, los procesos recién ascendidos a la primera cola, que son Pc y Pd, reciben su oportunidad de ejecución, en este caso con quantum de 4 unidades. De nuevo, se le da oportunidad de ejecución a los procesos de la segunda cola, que terminan su ejecución. Como no hay más procesos en la segunda cola, se le da una oportunidad de ejecución a los de la primera. --[[Usuario:Pneira|Pneira]] 18:36 22 mar 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
= Dudas =&lt;br /&gt;
&lt;br /&gt;
No entiendo por qué en la unidad de tiempo 18 no aparece el proceso c y d y posteriormente a b c y d.Esto es a lo que me refiero --[[Usuario:Jherrera|Jherrera]]:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
 Pa    |   |   |   |   |   |   |   |   |---&amp;gt;   |   |   |&lt;br /&gt;
 Pb    |   |   |   |   |   |   |   |   |   |---&amp;gt;   |   |&lt;br /&gt;
 Pc    |---|---|---|---|   |   |   |   |   |   |-------&amp;gt;&lt;br /&gt;
 Pd    |   |   |   |   |---|---|---|---|   |   |   |   |------&amp;gt;&lt;br /&gt;
 Plnf  |   |   |   |   X   |   |   |   X   |   X   |   X &lt;br /&gt;
       |___|___|___|___|___|___|___|___|___|___|___|___|&lt;br /&gt;
       18  19  20  21  22  23  24  25  26  27  28  29  30&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Solucion: Por que en la 2ª cola estan los procesos A y B, por que nunca consumen los quantums, y la 2ª cola siempre se itera 2 veces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
¿No se supone que la cola 1 posee mayor prioridad que la 2? siendo asi, mientras C y D esten en la 1ª cola no se le debería volver a dar oportunidad a la cola 2 no?¿--[[Usuario:DvS 013|DvS 013]]&lt;br /&gt;
&lt;br /&gt;
Creo que se lo que dices. Aunque C y D esten en la primera cola, se pasa a la segunda. Esto es porque la primera cola no tiene mas prioridad, sino solo un quantum más ancho. Entonces se mira la primera cola, luego 2 veces la segunda, y vuelta a empezar --[[Usuario:PCamino|PCamino]]&lt;br /&gt;
&lt;br /&gt;
El problema creo yo es que el enunciado ha sido modificado de esta mañana para acá, porque yo también hice el ejercicio para subirlo a la wiki, pero se me adelantaron, y esta mañana en el enunciado ponia que la cola 1 tenia más prioridad que la 2, y ademas no ponia el tiempo que estaban en estado bloqueado los procesos, ahora si lo pone, y no pone lo de la prioridad. Yo estoy de acuerdo con la solucion propuesta arriba. --[[Usuario:Josmorgav1|Josmorgav1]] 21:42 22 mar 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vaya caos! Podemos poner ambos ejercicios --[[Usuario:PCamino|PCamino]]&lt;br /&gt;
&lt;br /&gt;
Con respecto  a la prioridad de las colas multinivel realimentadas, creo que carecen de prioridad, simplemente basta con saber cuantas veces se ejecutan cada una y en cual de ellas se meten los procesos que van llegando.--[[Usuario:Jmf bsk|Jmf bsk]] 23:10 22 mar 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DUDA: Creo que este ejercicio está hecho para tiempos de bloqueo de 2 unidades, mientras que en el enunciado los tiempos de bloqueo es de 1 t. Si fuera para tiempos de bloqueo = 1 en el instante 2 Pa regresa a la cola 2 de preparados, luego pasaría a estado activo antes que Pd , por lo que en t=4 Pa pasaría a estado activo,después iría Pd y después la segunda ejecución de Pb. Lo escribo para aclararlo: &lt;br /&gt;
&lt;br /&gt;
Pa y Pb bloquean cada unidad de tiempo, durante una unidad de tiempo de bloqueo.&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;---|---|   |   |   |   |---|---|---|---|   |   |   |   |   |   |   |   |&lt;br /&gt;
 Pd    |   |   |   &amp;lt;   |   |---|---|   |   |   |   |   |---|---|---|---|   |   |   |   |&lt;br /&gt;
 Plnf  X   X   X   |   X   X   |   X   X   |   |   |   X   |   |   |   X   |   |   |   X&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;
¿es correcta la solución que planteo para una unidad de tiempo de bloqueo?&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Nueva Duda:'''===&lt;br /&gt;
&lt;br /&gt;
Si sobre la cola 2 se itera dos veces, porque no se vuelve al Pa y Pb en el instante de tiempo 8? Como sucede en el instante 18.&lt;br /&gt;
&lt;br /&gt;
R:&lt;br /&gt;
Fijate que en el instante de tiempo t=6 ya es la 2ª vez que se itera sobre Pa y Pb, la diferencia radica en que en la cola 2 inicialmente existian cuatro procesos que había que atenderlos en RR, añadiendo que Pa y Pb bloquean cada 1 UT, a diferencia del intante t=18 solo existen Pa y Pb y como dice el enunciado se les da dos oportunidades de ejecucion si no consumen su quantum.&lt;br /&gt;
--[[Usuario:Albsolnog|Albsolnog]] 11:53 13 nov 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
R1:&lt;br /&gt;
Añado para mayor comprensión del ejercicio que en el instante t=6 empieza la segunda iteración de la cola 2, lo que pasa es que en esta iteración nada más que entran Pa y Pb, ya que los procesos Pc y Pd han consumido su quantum entero y han promocionado a la cola 1. --[[Usuario:Josazcrom|Josazcrom]] 18:55 22 nov 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
P:No terminaría el proceso A y el B justo después de hacer el bloqueo? Porqué en el ejercicio termina justo antes de ser bloqueado incluso?&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

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

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Llamadas_al_sistema&amp;diff=2527</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=2527"/>
				<updated>2012-10-11T11:22:01Z</updated>
		
		<summary type="html">&lt;p&gt;Fraborcej: /* Definición de llamada al sistema */ Llamada al sistema- open.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 2.4. Llamadas al sistema =&lt;br /&gt;
&lt;br /&gt;
== Definición de llamada al sistema ==&lt;br /&gt;
&lt;br /&gt;
Una llamada al sistema es un método o función que puede invocar un proceso para solicitar un cierto servicio al sistema operativo. Dado que el acceso a ciertos recursos del sistema requieren la ejecución de código en modo privilegiado, el sistema operativo ofrece un conjunto de métodos o funciones que el programa puede emplear para acceder a dichos recursos. En otras palabras, el sistemas operativo actúa como intermediario, ofreciendo una interfaz de programación (API) que el programa puede usar en cualquier momento para solicitar recursos gestionados por el sistema operativo.&lt;br /&gt;
&lt;br /&gt;
Algunos ejemplos de llamadas al sistema son las siguientes:&lt;br /&gt;
&lt;br /&gt;
* '''time''', que permite obtener la fecha y hora del sistema.&lt;br /&gt;
* '''write''', que se emplea para escribir un dato en un cierto dispositivo de salida, tales como una pantalla o un disco magnético.&lt;br /&gt;
* '''read''', que es usada para leer de un dispositivo de entrada, tales como un teclado o un disco magnético.&lt;br /&gt;
* '''open''', que es usada para obtener un descriptor de un fichero del sistema, ese fichero suele pasarse a write.&lt;br /&gt;
&lt;br /&gt;
Todo sistema operativo ofrece un conjunto de llamadas al sistema. En el caso de Linux 3.0, se ofrecen un total de 345 llamadas al sistema.&lt;br /&gt;
&lt;br /&gt;
Toda llamada al sistema se identifica de manera unívoca mediante un valor numérico que no ser modificado a lo largo de la vida del sistema operativo para evitar que se rompa la compatibilidad hacia atrás.&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo muestra en un ejemplo en C la invocación de las llamadas al sistema '''time''' y '''write'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;time.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
      uint64_t segundos;&lt;br /&gt;
&lt;br /&gt;
      segundos = time(NULL);&lt;br /&gt;
      write(stdout, &amp;quot;Segundos desde 1970: %d&amp;quot;, segundos);1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Familias de llamadas al sistemas operativo: POSIX y WIN32/64 ===&lt;br /&gt;
&lt;br /&gt;
Las dos familias de APIs estandarizas más importantes son:&lt;br /&gt;
&lt;br /&gt;
* [http://es.wikipedia.org/wiki/POSIX POSIX].&lt;br /&gt;
* WIN32/64, empleada en los sistemas operativos de tipo-Windows. Además, existen emuladores como '''Wine''' que también las implementan.&lt;br /&gt;
&lt;br /&gt;
== Implementación de llamadas al sistema ==&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo muestra el código en ensamblador de x86 para invocar a la llamada al sistema '''write''' que permite escribir un dato en cualquier dispositivo. En concreto, se va a escribir una cadena por el dispositivo de salida '''pantalla''', que se identifica mediante el descriptor de fichero número 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
section .text&lt;br /&gt;
    global _start&lt;br /&gt;
_start:&lt;br /&gt;
    mov eax, 4         ;cargamos el número de la llamada al sistema en el regitro eax&lt;br /&gt;
    mov ebx, 1         ;cargamos el descriptor de fichero sobre el que queremos escribir&lt;br /&gt;
    mov ecx, string    ;cargamos en ecx la dirección de la cadena a imprimir&lt;br /&gt;
    mov edx, lenght    ;cargamos en edx el tamaño de la cadena a imprimir&lt;br /&gt;
    int 80h            ;se invoca al de&lt;br /&gt;
&lt;br /&gt;
    mov eax, 1&lt;br /&gt;
    mov ebx, 0&lt;br /&gt;
    int 80h&lt;br /&gt;
&lt;br /&gt;
section .data&lt;br /&gt;
    string: db &amp;quot;Hola Mundo&amp;quot;, 0x0A&lt;br /&gt;
    lenght: equ 13&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La instrucción ''int'' forma parte del conjunto de instrucciones de procesadores x86. Esta instrucción emite una interrupción por software cuyo tratamiento es realizado por la rutina ''dispatcher''. Dicha rutina se encarga del tratamiento de la interrupción por software número 80.&lt;br /&gt;
&lt;br /&gt;
== El ''dispatcher'' ==&lt;br /&gt;
&lt;br /&gt;
El dispatcher, que forma parte del SO, se ejecuta cuando se invoca una llamada al sistema. &lt;br /&gt;
Cuando un proceso hace una llamada al sistema, el dispatcher, se encarga de invocar la llamada que el proceso ha solicitado. &lt;br /&gt;
&lt;br /&gt;
En el caso de x86, el dispatcher consulta el registro eax e invoca a la llamada al sistema identificada con dicha numeración.&lt;br /&gt;
&lt;br /&gt;
== El punto de entrada == &lt;br /&gt;
&lt;br /&gt;
Es la posición de memoria desde la cual es posible solicitarle servicios al sistema operativo. Normalmente hay un único punto de entrada.&lt;br /&gt;
En algunos SO se realiza mediante llamadas a subprogramas. La dirección de memoria del punto de entrada puede cambiar si se modifica el SO. En algunos SO éste problema lo solucionan usando una dirección fija, mientras en otros han preferido usar una referencia a dicha dirección&lt;/div&gt;</summary>
		<author><name>Fraborcej</name></author>	</entry>

	</feed>