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

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Concurrencia_de_procesos&amp;diff=3309</id>
		<title>Concurrencia de procesos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Concurrencia_de_procesos&amp;diff=3309"/>
				<updated>2016-01-26T07:54:48Z</updated>
		
		<summary type="html">&lt;p&gt;Migestgom: /* Tipos de mecanismos de sincronización */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La concurrencia de procesos se refiere a las situaciones en las que dos o más procesos puedan coincidir en el acceso a un recurso compartido o, dicho de otra forma, que requieran coordinarse en su ejecución. Para evitar dicha coincidencia, el sistema operativo ofrece mecanismos de arbitraje que permiten coordinar la ejecución de los procesos.&lt;br /&gt;
&lt;br /&gt;
= El problema del productor y consumidor =&lt;br /&gt;
&lt;br /&gt;
Un ejemplo de un problema de concurrencia sería el siguiente: Dados dos procesos A (productor) y B (consumidor), suponiendo que ambos se ejecutan indefinidamente en el tiempo, el proceso A debe recibir tiempo de ejecución antes que B, tras esto, el proceso B debe recibir su oportunidad de ejecución, dando paso de nuevo al proceso A y así sucesivamente, siguiendo un esquema de alternancia estricta.&lt;br /&gt;
&lt;br /&gt;
 proceso A |--  --  --&lt;br /&gt;
           |&lt;br /&gt;
 proceso B |  --  --  --&lt;br /&gt;
           |_____________&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recuerde que el planificador de procesos, al desconocer la naturaleza de los procesos y sus objetivos, no dispone de información suficiente para garantizar la secuencia de ejecución descrita en el ejemplo anterior. Por tanto, suponiendo que ambos procesos se encuentran en estado preparado, podría seleccionar al proceso B para pasar a estado activo antes de seleccionar al proceso A, situación que no es deseada.&lt;br /&gt;
&lt;br /&gt;
Recuerde que el planificador de procesos, como hemos visto en capítulos anteriores, emplea [[Criterios de planificación|criterios de planificación]] que no tienen en consideración el objetivo de los procesos. Podemos decir que el planificador de procesos '''desconoce''' cuál es el propósito de los procesos, únicamente puede observar su comportamiento, es decir, si presentan un comportamiento más o menos interactivo.&lt;br /&gt;
&lt;br /&gt;
Por tanto, el programador, a la hora de modelar los procesos, debe emplear mecanismos de arbitraje que ofrece el sistema operativo y que permiten resolver el problema de concurrencia que se plantee.&lt;br /&gt;
&lt;br /&gt;
= Mecanismos de arbitraje =&lt;br /&gt;
&lt;br /&gt;
Los mecanismos de arbitraje que ofrece el sistema operativo son básicamente dos:&lt;br /&gt;
&lt;br /&gt;
* Mecanismos de '''sincronización''': el sistema operativo ofrece mecanismos que permiten a los procesos coordinar su ejecución para conseguir el objetivo sin que sucedan situaciones no deseadas, como por ejemplo que dos o más procesos coincidan simultáneamente en el acceso a un cierto recurso que no se puede compartir.&lt;br /&gt;
&lt;br /&gt;
* Mecanismos de '''mensajería''': el sistema operativo ofrece mecanismos de comunicación entre procesos mediante mensajes. El intercambio de mensajes entre procesos permite coordinarlos.&lt;br /&gt;
&lt;br /&gt;
= Programación concurrente = &lt;br /&gt;
&lt;br /&gt;
El término programación concurrente se emplea con frecuencia para referirse a un conjunto de programas que funcionan en cooperación.&lt;br /&gt;
&lt;br /&gt;
Hay tres formas de interacción entre procesos cooperativos:&lt;br /&gt;
&lt;br /&gt;
*Concurrencia: Hay un recurso común, si varios procesos modificaran  la misma información a la vez , cada uno podría destruir parte del trabajo de los demás. Si lo hacen uno tras otro, en serie, se obtendrá el resultado correcto.&lt;br /&gt;
&lt;br /&gt;
*Sincronización: El Sistema Operativo se encarga de enviarle señales a los procesos para coordinar su evolución y conseguir que progrese armónicamente.&lt;br /&gt;
&lt;br /&gt;
*Comunicación:  El S.O. transmite mensajes entre los procesos, que se usan para intercambiar, enviar o recibir información.&lt;br /&gt;
&lt;br /&gt;
Se le llama programación concurrente ya que la concurrencia fue la primera forma de iterar recursos entre procesos cooperativos.&lt;br /&gt;
&lt;br /&gt;
= Sección crítica =&lt;br /&gt;
&lt;br /&gt;
Una ''sección crítica'' se trata de una sección del código que puede ser ejecutada por un único proceso o hilo simultáneamente. Un ejemplo de ''sección crítica'' es la sección de código en la que se accede a un recurso compartido. Para evitar el acceso simultaneo a la sección crítica se emplean mecanismos que garantizan la ''exclusión mutua''.&lt;br /&gt;
&lt;br /&gt;
La exclusión mutua se debe realizar de forma coordinada y eficiente, para ello se requiere:&lt;br /&gt;
&lt;br /&gt;
*No más de un proceso por sección crítica y recurso compartido.&lt;br /&gt;
&lt;br /&gt;
*El mismo proceso no puede usar el mismo recurso compartido indefinidamente.&lt;br /&gt;
&lt;br /&gt;
*Todo proceso debe entrar antes o después a usar el recurso.&lt;br /&gt;
&lt;br /&gt;
*Si el recurso está sin uso, cualquiera que lo requiera dispondrá de él inmediatamente.&lt;br /&gt;
&lt;br /&gt;
*Si hay varios esperando usar el recurso y éste se libera, uno de los que estaba esperando lo usará durante un tiempo determinado.&lt;br /&gt;
&lt;br /&gt;
Para llevar ésto a cabo se necesita un protocolo que indique cuando el recurso está libre y cuando está siendo ocupado.&lt;br /&gt;
&lt;br /&gt;
= Tipos de mecanismos de sincronización =&lt;br /&gt;
&lt;br /&gt;
Los mecanismos de sincronización los podemos catalogar en dos categorías:&lt;br /&gt;
&lt;br /&gt;
*[[Mecanismos de sincronización#Optimista|Optimistas]]: Este mecanismo considera que la frecuencia de acceso a un cierto recurso compartido es ''baja''. Este tipo tiene mas consumo de memoria, ya que tiene que copiar el recurso compartido y en caso de interferencia en el hilo tiene que volver a ejecutarlo y consume mas recursos.&lt;br /&gt;
&lt;br /&gt;
*[[Mecanismos de sincronización#Pesimista|Pesimistas]]: Este mecanismo permite coordinar la ejecución de dos o más procesos que acceden al recurso compartido con una frecuencia ''alta''.&lt;br /&gt;
&lt;br /&gt;
Dependerá del criterio del programador el tipo de mecanismo que utilice ya que puede que no elija el tipo correcto. Por ejemplo, puede que la frecuencia de acceso a un cierto recurso sea alta y el programador le asigna un mecanismo optimista, esto provocaría no obtener el resultado esperado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ¿Cómo provocar errores de concurrencia en Java? ==&lt;br /&gt;
Pequeño experimento, por si queremos observar como se producen errores de concurrencia en operaciones tan simples como la actualización de una lista.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		List&amp;lt;Integer&amp;gt; list = new ArrayList&amp;lt;Integer&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
		/*&lt;br /&gt;
		 * EXPLICACIÓN:&lt;br /&gt;
		 * &lt;br /&gt;
		 * Tenemos creada una lista global, &amp;quot;list&amp;quot; , que será accedida al mismo&lt;br /&gt;
		 * tiempo por varios hilos. En este código se observa como a veces se&lt;br /&gt;
		 * producen errores de concurrencia al realizar modificaciones sobre la&lt;br /&gt;
		 * lista al mismo tiempo. Este es el motivo por el que debemos usar&lt;br /&gt;
		 * mecanismos como los semáforos u otras técnicas para prevenir este&lt;br /&gt;
		 * tipo de errores.&lt;br /&gt;
		 * &lt;br /&gt;
		 * Los errores de concurrencia en java se muestran como:&lt;br /&gt;
		 * ConcurrentModificationError&lt;br /&gt;
		 *&lt;br /&gt;
		 * También es curioso notar que los errores se dan sobretodo al principio, en&lt;br /&gt;
		 * los 30 primeros segundos, luego hay hilos que no se vuelven a&lt;br /&gt;
		 * ejecutar mientras que un par de ellos de forma aleatoria, se ejecutan&lt;br /&gt;
		 * cíclicamente, uno tras el otro.&lt;br /&gt;
		 * &lt;br /&gt;
		 */&lt;br /&gt;
		// -----------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
		// Los hilos con esta tarea añaden un número aleatorio de 0 a 100 en la&lt;br /&gt;
		// lista cada seg.&lt;br /&gt;
		Runnable tarea = () -&amp;gt; {&lt;br /&gt;
			while (true) {&lt;br /&gt;
				String nombreHilo = Thread.currentThread().getName();&lt;br /&gt;
				System.out.println(&amp;quot;Hola soy el hilo &amp;quot; + nombreHilo);&lt;br /&gt;
				list.add(new Random().nextInt(100));&lt;br /&gt;
				System.out.println(list);&lt;br /&gt;
				try {&lt;br /&gt;
					Thread.sleep(1000);&lt;br /&gt;
				} catch (InterruptedException e) {&lt;br /&gt;
&lt;br /&gt;
					e.printStackTrace();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Los hilos con esta tarea añaden también otro número aleatorio de 0 a&lt;br /&gt;
		// 100 en la lista cada seg.&lt;br /&gt;
&lt;br /&gt;
		Runnable tarea2 = () -&amp;gt; {&lt;br /&gt;
			while (true) {&lt;br /&gt;
				String nombreHilo = Thread.currentThread().getName();&lt;br /&gt;
				System.out.println(&amp;quot;Hola soy el hilo &amp;quot; + nombreHilo);&lt;br /&gt;
				list.add(new Random().nextInt(100));&lt;br /&gt;
				System.out.println(list);&lt;br /&gt;
				try {&lt;br /&gt;
					Thread.sleep(1000);&lt;br /&gt;
				} catch (InterruptedException e) {&lt;br /&gt;
&lt;br /&gt;
					e.printStackTrace();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Los hilos con esta tarea eliminan un número de una posición aleatoria&lt;br /&gt;
		// cada seg.&lt;br /&gt;
		Runnable tarea3 = () -&amp;gt; {&lt;br /&gt;
			while (true) {&lt;br /&gt;
				String nombreHilo = Thread.currentThread().getName();&lt;br /&gt;
				System.out.println(&amp;quot;Hola soy el hilo &amp;quot; + nombreHilo);&lt;br /&gt;
				Random r = new Random(list.size());&lt;br /&gt;
				if (list.contains(r))&lt;br /&gt;
					list.remove(r);&lt;br /&gt;
				System.out.println(list);&lt;br /&gt;
				try {&lt;br /&gt;
					Thread.sleep(1000);&lt;br /&gt;
				} catch (InterruptedException e) {&lt;br /&gt;
&lt;br /&gt;
					e.printStackTrace();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		//Creación de Hilos.&lt;br /&gt;
		Thread hilo = new Thread(tarea);&lt;br /&gt;
		Thread hilo2 = new Thread(tarea2);&lt;br /&gt;
		Thread hilo3 = new Thread(tarea3);&lt;br /&gt;
		Thread hilo4 = new Thread(tarea3);&lt;br /&gt;
		Thread hilo5 = new Thread(tarea);&lt;br /&gt;
		Thread hilo6 = new Thread(tarea3);&lt;br /&gt;
&lt;br /&gt;
		//Ejecución.&lt;br /&gt;
		hilo.start();&lt;br /&gt;
		hilo2.start();&lt;br /&gt;
		hilo3.start();&lt;br /&gt;
		hilo4.start();&lt;br /&gt;
		hilo5.start();&lt;br /&gt;
		hilo6.start();&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Migestgom</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Concurrencia_de_procesos&amp;diff=3308</id>
		<title>Concurrencia de procesos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Concurrencia_de_procesos&amp;diff=3308"/>
				<updated>2016-01-26T07:49:00Z</updated>
		
		<summary type="html">&lt;p&gt;Migestgom: /* ¿Cómo provocar errores de concurrencia en Java? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La concurrencia de procesos se refiere a las situaciones en las que dos o más procesos puedan coincidir en el acceso a un recurso compartido o, dicho de otra forma, que requieran coordinarse en su ejecución. Para evitar dicha coincidencia, el sistema operativo ofrece mecanismos de arbitraje que permiten coordinar la ejecución de los procesos.&lt;br /&gt;
&lt;br /&gt;
= El problema del productor y consumidor =&lt;br /&gt;
&lt;br /&gt;
Un ejemplo de un problema de concurrencia sería el siguiente: Dados dos procesos A (productor) y B (consumidor), suponiendo que ambos se ejecutan indefinidamente en el tiempo, el proceso A debe recibir tiempo de ejecución antes que B, tras esto, el proceso B debe recibir su oportunidad de ejecución, dando paso de nuevo al proceso A y así sucesivamente, siguiendo un esquema de alternancia estricta.&lt;br /&gt;
&lt;br /&gt;
 proceso A |--  --  --&lt;br /&gt;
           |&lt;br /&gt;
 proceso B |  --  --  --&lt;br /&gt;
           |_____________&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recuerde que el planificador de procesos, al desconocer la naturaleza de los procesos y sus objetivos, no dispone de información suficiente para garantizar la secuencia de ejecución descrita en el ejemplo anterior. Por tanto, suponiendo que ambos procesos se encuentran en estado preparado, podría seleccionar al proceso B para pasar a estado activo antes de seleccionar al proceso A, situación que no es deseada.&lt;br /&gt;
&lt;br /&gt;
Recuerde que el planificador de procesos, como hemos visto en capítulos anteriores, emplea [[Criterios de planificación|criterios de planificación]] que no tienen en consideración el objetivo de los procesos. Podemos decir que el planificador de procesos '''desconoce''' cuál es el propósito de los procesos, únicamente puede observar su comportamiento, es decir, si presentan un comportamiento más o menos interactivo.&lt;br /&gt;
&lt;br /&gt;
Por tanto, el programador, a la hora de modelar los procesos, debe emplear mecanismos de arbitraje que ofrece el sistema operativo y que permiten resolver el problema de concurrencia que se plantee.&lt;br /&gt;
&lt;br /&gt;
= Mecanismos de arbitraje =&lt;br /&gt;
&lt;br /&gt;
Los mecanismos de arbitraje que ofrece el sistema operativo son básicamente dos:&lt;br /&gt;
&lt;br /&gt;
* Mecanismos de '''sincronización''': el sistema operativo ofrece mecanismos que permiten a los procesos coordinar su ejecución para conseguir el objetivo sin que sucedan situaciones no deseadas, como por ejemplo que dos o más procesos coincidan simultáneamente en el acceso a un cierto recurso que no se puede compartir.&lt;br /&gt;
&lt;br /&gt;
* Mecanismos de '''mensajería''': el sistema operativo ofrece mecanismos de comunicación entre procesos mediante mensajes. El intercambio de mensajes entre procesos permite coordinarlos.&lt;br /&gt;
&lt;br /&gt;
= Programación concurrente = &lt;br /&gt;
&lt;br /&gt;
El término programación concurrente se emplea con frecuencia para referirse a un conjunto de programas que funcionan en cooperación.&lt;br /&gt;
&lt;br /&gt;
Hay tres formas de interacción entre procesos cooperativos:&lt;br /&gt;
&lt;br /&gt;
*Concurrencia: Hay un recurso común, si varios procesos modificaran  la misma información a la vez , cada uno podría destruir parte del trabajo de los demás. Si lo hacen uno tras otro, en serie, se obtendrá el resultado correcto.&lt;br /&gt;
&lt;br /&gt;
*Sincronización: El Sistema Operativo se encarga de enviarle señales a los procesos para coordinar su evolución y conseguir que progrese armónicamente.&lt;br /&gt;
&lt;br /&gt;
*Comunicación:  El S.O. transmite mensajes entre los procesos, que se usan para intercambiar, enviar o recibir información.&lt;br /&gt;
&lt;br /&gt;
Se le llama programación concurrente ya que la concurrencia fue la primera forma de iterar recursos entre procesos cooperativos.&lt;br /&gt;
&lt;br /&gt;
= Sección crítica =&lt;br /&gt;
&lt;br /&gt;
Una ''sección crítica'' se trata de una sección del código que puede ser ejecutada por un único proceso o hilo simultáneamente. Un ejemplo de ''sección crítica'' es la sección de código en la que se accede a un recurso compartido. Para evitar el acceso simultaneo a la sección crítica se emplean mecanismos que garantizan la ''exclusión mutua''.&lt;br /&gt;
&lt;br /&gt;
La exclusión mutua se debe realizar de forma coordinada y eficiente, para ello se requiere:&lt;br /&gt;
&lt;br /&gt;
*No más de un proceso por sección crítica y recurso compartido.&lt;br /&gt;
&lt;br /&gt;
*El mismo proceso no puede usar el mismo recurso compartido indefinidamente.&lt;br /&gt;
&lt;br /&gt;
*Todo proceso debe entrar antes o después a usar el recurso.&lt;br /&gt;
&lt;br /&gt;
*Si el recurso está sin uso, cualquiera que lo requiera dispondrá de él inmediatamente.&lt;br /&gt;
&lt;br /&gt;
*Si hay varios esperando usar el recurso y éste se libera, uno de los que estaba esperando lo usará durante un tiempo determinado.&lt;br /&gt;
&lt;br /&gt;
Para llevar ésto a cabo se necesita un protocolo que indique cuando el recurso está libre y cuando está siendo ocupado.&lt;br /&gt;
&lt;br /&gt;
= Tipos de mecanismos de sincronización =&lt;br /&gt;
&lt;br /&gt;
Los mecanismos de sincronización los podemos catalogar en dos categorías:&lt;br /&gt;
&lt;br /&gt;
*[[Mecanismos de sincronización#Optimista|Optimistas]]: Este mecanismo considera que la frecuencia de acceso a un cierto recurso compartido es ''baja''. Este tipo tiene mas consumo de memoria, ya que tiene que copiar el recurso compartido y en caso de interferencia en el hilo tiene que volver a ejecutarlo y consume mas recursos.&lt;br /&gt;
&lt;br /&gt;
*[[Mecanismos de sincronización#Pesimista|Pesimistas]]: Este mecanismo permite coordinar la ejecución de dos o más procesos que acceden al recurso compartido con una frecuencia ''alta''.&lt;br /&gt;
&lt;br /&gt;
Dependerá del criterio del programador el tipo de mecanismo que utilice ya que puede que no elija el tipo correcto. Por ejemplo, puede que la frecuencia de acceso a un cierto recurso sea alta y el programador le asigna un mecanismo optimista, esto provocaría no obtener el resultado esperado.&lt;/div&gt;</summary>
		<author><name>Migestgom</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Concurrencia_de_procesos&amp;diff=3307</id>
		<title>Concurrencia de procesos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Concurrencia_de_procesos&amp;diff=3307"/>
				<updated>2016-01-26T07:46:43Z</updated>
		
		<summary type="html">&lt;p&gt;Migestgom: /* Tipos de mecanismos de sincronización */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La concurrencia de procesos se refiere a las situaciones en las que dos o más procesos puedan coincidir en el acceso a un recurso compartido o, dicho de otra forma, que requieran coordinarse en su ejecución. Para evitar dicha coincidencia, el sistema operativo ofrece mecanismos de arbitraje que permiten coordinar la ejecución de los procesos.&lt;br /&gt;
&lt;br /&gt;
= El problema del productor y consumidor =&lt;br /&gt;
&lt;br /&gt;
Un ejemplo de un problema de concurrencia sería el siguiente: Dados dos procesos A (productor) y B (consumidor), suponiendo que ambos se ejecutan indefinidamente en el tiempo, el proceso A debe recibir tiempo de ejecución antes que B, tras esto, el proceso B debe recibir su oportunidad de ejecución, dando paso de nuevo al proceso A y así sucesivamente, siguiendo un esquema de alternancia estricta.&lt;br /&gt;
&lt;br /&gt;
 proceso A |--  --  --&lt;br /&gt;
           |&lt;br /&gt;
 proceso B |  --  --  --&lt;br /&gt;
           |_____________&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recuerde que el planificador de procesos, al desconocer la naturaleza de los procesos y sus objetivos, no dispone de información suficiente para garantizar la secuencia de ejecución descrita en el ejemplo anterior. Por tanto, suponiendo que ambos procesos se encuentran en estado preparado, podría seleccionar al proceso B para pasar a estado activo antes de seleccionar al proceso A, situación que no es deseada.&lt;br /&gt;
&lt;br /&gt;
Recuerde que el planificador de procesos, como hemos visto en capítulos anteriores, emplea [[Criterios de planificación|criterios de planificación]] que no tienen en consideración el objetivo de los procesos. Podemos decir que el planificador de procesos '''desconoce''' cuál es el propósito de los procesos, únicamente puede observar su comportamiento, es decir, si presentan un comportamiento más o menos interactivo.&lt;br /&gt;
&lt;br /&gt;
Por tanto, el programador, a la hora de modelar los procesos, debe emplear mecanismos de arbitraje que ofrece el sistema operativo y que permiten resolver el problema de concurrencia que se plantee.&lt;br /&gt;
&lt;br /&gt;
= Mecanismos de arbitraje =&lt;br /&gt;
&lt;br /&gt;
Los mecanismos de arbitraje que ofrece el sistema operativo son básicamente dos:&lt;br /&gt;
&lt;br /&gt;
* Mecanismos de '''sincronización''': el sistema operativo ofrece mecanismos que permiten a los procesos coordinar su ejecución para conseguir el objetivo sin que sucedan situaciones no deseadas, como por ejemplo que dos o más procesos coincidan simultáneamente en el acceso a un cierto recurso que no se puede compartir.&lt;br /&gt;
&lt;br /&gt;
* Mecanismos de '''mensajería''': el sistema operativo ofrece mecanismos de comunicación entre procesos mediante mensajes. El intercambio de mensajes entre procesos permite coordinarlos.&lt;br /&gt;
&lt;br /&gt;
= Programación concurrente = &lt;br /&gt;
&lt;br /&gt;
El término programación concurrente se emplea con frecuencia para referirse a un conjunto de programas que funcionan en cooperación.&lt;br /&gt;
&lt;br /&gt;
Hay tres formas de interacción entre procesos cooperativos:&lt;br /&gt;
&lt;br /&gt;
*Concurrencia: Hay un recurso común, si varios procesos modificaran  la misma información a la vez , cada uno podría destruir parte del trabajo de los demás. Si lo hacen uno tras otro, en serie, se obtendrá el resultado correcto.&lt;br /&gt;
&lt;br /&gt;
*Sincronización: El Sistema Operativo se encarga de enviarle señales a los procesos para coordinar su evolución y conseguir que progrese armónicamente.&lt;br /&gt;
&lt;br /&gt;
*Comunicación:  El S.O. transmite mensajes entre los procesos, que se usan para intercambiar, enviar o recibir información.&lt;br /&gt;
&lt;br /&gt;
Se le llama programación concurrente ya que la concurrencia fue la primera forma de iterar recursos entre procesos cooperativos.&lt;br /&gt;
&lt;br /&gt;
= Sección crítica =&lt;br /&gt;
&lt;br /&gt;
Una ''sección crítica'' se trata de una sección del código que puede ser ejecutada por un único proceso o hilo simultáneamente. Un ejemplo de ''sección crítica'' es la sección de código en la que se accede a un recurso compartido. Para evitar el acceso simultaneo a la sección crítica se emplean mecanismos que garantizan la ''exclusión mutua''.&lt;br /&gt;
&lt;br /&gt;
La exclusión mutua se debe realizar de forma coordinada y eficiente, para ello se requiere:&lt;br /&gt;
&lt;br /&gt;
*No más de un proceso por sección crítica y recurso compartido.&lt;br /&gt;
&lt;br /&gt;
*El mismo proceso no puede usar el mismo recurso compartido indefinidamente.&lt;br /&gt;
&lt;br /&gt;
*Todo proceso debe entrar antes o después a usar el recurso.&lt;br /&gt;
&lt;br /&gt;
*Si el recurso está sin uso, cualquiera que lo requiera dispondrá de él inmediatamente.&lt;br /&gt;
&lt;br /&gt;
*Si hay varios esperando usar el recurso y éste se libera, uno de los que estaba esperando lo usará durante un tiempo determinado.&lt;br /&gt;
&lt;br /&gt;
Para llevar ésto a cabo se necesita un protocolo que indique cuando el recurso está libre y cuando está siendo ocupado.&lt;br /&gt;
&lt;br /&gt;
= Tipos de mecanismos de sincronización =&lt;br /&gt;
&lt;br /&gt;
Los mecanismos de sincronización los podemos catalogar en dos categorías:&lt;br /&gt;
&lt;br /&gt;
*[[Mecanismos de sincronización#Optimista|Optimistas]]: Este mecanismo considera que la frecuencia de acceso a un cierto recurso compartido es ''baja''. Este tipo tiene mas consumo de memoria, ya que tiene que copiar el recurso compartido y en caso de interferencia en el hilo tiene que volver a ejecutarlo y consume mas recursos.&lt;br /&gt;
&lt;br /&gt;
*[[Mecanismos de sincronización#Pesimista|Pesimistas]]: Este mecanismo permite coordinar la ejecución de dos o más procesos que acceden al recurso compartido con una frecuencia ''alta''.&lt;br /&gt;
&lt;br /&gt;
Dependerá del criterio del programador el tipo de mecanismo que utilice ya que puede que no elija el tipo correcto. Por ejemplo, puede que la frecuencia de acceso a un cierto recurso sea alta y el programador le asigna un mecanismo optimista, esto provocaría no obtener el resultado esperado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ¿Cómo provocar errores de concurrencia en Java? ==&lt;br /&gt;
&lt;br /&gt;
Try it yourself :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		List&amp;lt;Integer&amp;gt; list = new ArrayList&amp;lt;Integer&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
		/*&lt;br /&gt;
		 * EXPLICACIÓN:&lt;br /&gt;
		 * &lt;br /&gt;
		 * Tenemos creada una lista global, &amp;quot;list&amp;quot; , que será accedida al mismo&lt;br /&gt;
		 * tiempo por varios hilos. En este código se observa como a veces se&lt;br /&gt;
		 * producen errores de concurrencia al realizar modificaciones sobre la&lt;br /&gt;
		 * lista al mismo tiempo. Este es el motivo por el que debemos usar&lt;br /&gt;
		 * mecanismos como los semáforos u otras técnicas para prevenir este&lt;br /&gt;
		 * tipo de errores.&lt;br /&gt;
		 * &lt;br /&gt;
		 * Los errores de concurrencia en java se muestran como:&lt;br /&gt;
		 * ConcurrentModificationError&lt;br /&gt;
		 *&lt;br /&gt;
		 * También es curioso notar que los errores se dan sobretodo al principio, en&lt;br /&gt;
		 * los 30 primeros segundos, luego hay hilos que no se vuelven a&lt;br /&gt;
		 * ejecutar mientras que un par de ellos de forma aleatoria, se ejecutan&lt;br /&gt;
		 * cíclicamente, uno tras el otro.&lt;br /&gt;
		 * &lt;br /&gt;
		 */&lt;br /&gt;
		// -----------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
		// Los hilos con esta tarea añaden un número aleatorio de 0 a 100 en la&lt;br /&gt;
		// lista cada seg.&lt;br /&gt;
		Runnable tarea = () -&amp;gt; {&lt;br /&gt;
			while (true) {&lt;br /&gt;
				String nombreHilo = Thread.currentThread().getName();&lt;br /&gt;
				System.out.println(&amp;quot;Hola soy el hilo &amp;quot; + nombreHilo);&lt;br /&gt;
				list.add(new Random().nextInt(100));&lt;br /&gt;
				System.out.println(list);&lt;br /&gt;
				try {&lt;br /&gt;
					Thread.sleep(1000);&lt;br /&gt;
				} catch (InterruptedException e) {&lt;br /&gt;
&lt;br /&gt;
					e.printStackTrace();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Los hilos con esta tarea añaden también otro número aleatorio de 0 a&lt;br /&gt;
		// 100 en la lista cada seg.&lt;br /&gt;
&lt;br /&gt;
		Runnable tarea2 = () -&amp;gt; {&lt;br /&gt;
			while (true) {&lt;br /&gt;
				String nombreHilo = Thread.currentThread().getName();&lt;br /&gt;
				System.out.println(&amp;quot;Hola soy el hilo &amp;quot; + nombreHilo);&lt;br /&gt;
				list.add(new Random().nextInt(100));&lt;br /&gt;
				System.out.println(list);&lt;br /&gt;
				try {&lt;br /&gt;
					Thread.sleep(1000);&lt;br /&gt;
				} catch (InterruptedException e) {&lt;br /&gt;
&lt;br /&gt;
					e.printStackTrace();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Los hilos con esta tarea eliminan un número de una posición aleatoria&lt;br /&gt;
		// cada seg.&lt;br /&gt;
		Runnable tarea3 = () -&amp;gt; {&lt;br /&gt;
			while (true) {&lt;br /&gt;
				String nombreHilo = Thread.currentThread().getName();&lt;br /&gt;
				System.out.println(&amp;quot;Hola soy el hilo &amp;quot; + nombreHilo);&lt;br /&gt;
				Random r = new Random(list.size());&lt;br /&gt;
				if (list.contains(r))&lt;br /&gt;
					list.remove(r);&lt;br /&gt;
				System.out.println(list);&lt;br /&gt;
				try {&lt;br /&gt;
					Thread.sleep(1000);&lt;br /&gt;
				} catch (InterruptedException e) {&lt;br /&gt;
&lt;br /&gt;
					e.printStackTrace();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		//Creación de Hilos.&lt;br /&gt;
		Thread hilo = new Thread(tarea);&lt;br /&gt;
		Thread hilo2 = new Thread(tarea2);&lt;br /&gt;
		Thread hilo3 = new Thread(tarea3);&lt;br /&gt;
		Thread hilo4 = new Thread(tarea3);&lt;br /&gt;
		Thread hilo5 = new Thread(tarea);&lt;br /&gt;
		Thread hilo6 = new Thread(tarea3);&lt;br /&gt;
&lt;br /&gt;
		//Ejecución.&lt;br /&gt;
		hilo.start();&lt;br /&gt;
		hilo2.start();&lt;br /&gt;
		hilo3.start();&lt;br /&gt;
		hilo4.start();&lt;br /&gt;
		hilo5.start();&lt;br /&gt;
		hilo6.start();&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Migestgom</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=P%C3%A1gina_Principal&amp;diff=3306</id>
		<title>Página Principal</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=P%C3%A1gina_Principal&amp;diff=3306"/>
				<updated>2016-01-26T07:20:29Z</updated>
		
		<summary type="html">&lt;p&gt;Migestgom: /* Novedades y noticias */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bienvenido al wiki de la asignatura de Sistemas Operativos del departamento de Lenguajes y Sistemas Informáticos de la Universidad de Sevilla. ¡Contribuye!&lt;br /&gt;
&lt;br /&gt;
= Novedades y noticias =&lt;br /&gt;
&lt;br /&gt;
* Los siguientes estudiantes han solicitado que se les revise sus contribuciones a la asignatura:&lt;br /&gt;
&lt;br /&gt;
 Sánchez Muñoz, Luis Manuel (luisanmun)&lt;br /&gt;
 Utrilla Martín, Juan Carlos (juautrmar)&lt;br /&gt;
 Ramos Castro, Eva (evaramcas1)&lt;br /&gt;
 Martin Martin, Alejandro (alemarmar5)&lt;br /&gt;
 Hidalgo Sanchez-Noriega, Daniel  (danhidsan)&lt;br /&gt;
 García Calero, Roberto (robgarcal)&lt;br /&gt;
 López Muñoz, Juan Carlos (jualopmun2)&lt;br /&gt;
 Miguel Esteban Gómez (migestgom)&lt;br /&gt;
&lt;br /&gt;
Si no apareces en esta lista y enviáste el email antes del pasado viernes 22 de enero (fecha límite), contacta al profesor. --[[Usuario:Pneira|Pneira]] ([[Usuario discusión:Pneira|discusión]]) 17:43 23 ene 2016 (CET)&lt;br /&gt;
&lt;br /&gt;
* [http://1984.lsi.us.es/~pablo/notas-ssoo-2015-2016.pdf Notas del primer, segundo, tercer y cuarto control de evaluación continua, incluida media] --[[Usuario:Pneira|Pneira]] ([[Usuario discusión:Pneira|discusión]]) 15:22 14 ene 2016 (CET)&lt;br /&gt;
* [http://1984.lsi.us.es/~pablo/ssoo-c3.pdf Notas del primer, segundo y tercer control de evaluación continua] --[[Usuario:Pneira|Pneira]] ([[Usuario discusión:Pneira|discusión]]) 08:42 7 ene 2016 (CET)&lt;br /&gt;
* [http://1984.lsi.us.es/~pablo/ssoo-c2.pdf Notas del primer y segundo control de evaluación continua] --[[Usuario:Pneira|Pneira]] ([[Usuario discusión:Pneira|discusión]]) 00:26 17 dic 2015 (CET)&lt;br /&gt;
&lt;br /&gt;
= Unidades didácticas =&lt;br /&gt;
&lt;br /&gt;
A continuación encontrarás las unidades didácticas que forman parte de la asignatura.&lt;br /&gt;
&lt;br /&gt;
== Introducción a los Sistemas Operativos ==&lt;br /&gt;
&lt;br /&gt;
* 1.1. [[Qué es un  Sistema operativo|Qué es un Sistema Operativo]]&lt;br /&gt;
* 1.2. [[Introducción histórica|Breve introducción histórica a los Sistemas Operativos]]&lt;br /&gt;
* 1.3. [[Tipos de Sistemas Operativos|Tipos de Sistemas Operativos]]&lt;br /&gt;
&lt;br /&gt;
== Fundamentos de Sistemas Operativos ==&lt;br /&gt;
&lt;br /&gt;
* 2.1. [[Organización básica de un ordenador]]&lt;br /&gt;
* 2.2. [[Modos de operación de la CPU|Modos de operación de la CPU]]&lt;br /&gt;
* 2.3. [[Interrupciones y excepciones|Interrupciones y excepciones]]&lt;br /&gt;
* 2.4. [[Arranque del sistema|Arranque del sistema]]&lt;br /&gt;
* 2.5. [[Componentes básicos de un sistema operativo|Componentes básicos de un sistema operativo]]&lt;br /&gt;
* 2.6. [[Conceptos básicos|Conceptos básicos]]&lt;br /&gt;
* 2.7. [[Llamadas al sistema|Llamadas al sistema]]&lt;br /&gt;
* 2.8. [[Ejercicios fundamentos Sistemas Operativos|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Modelos de diseño de Sistemas Operativos ==&lt;br /&gt;
&lt;br /&gt;
* 3.1. [[Modelos de Diseño de Sistemas Operativos|Modelos de diseño de sistemas operativos]]&lt;br /&gt;
* 3.2. [[Virtualización]]&lt;br /&gt;
* 3.3. [[Ejercicios 3|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Procesos ==&lt;br /&gt;
* 4.1. [[Multiprogramación|La multiprogramación]]&lt;br /&gt;
* 4.2. [[Estados de los procesos|Estados de los procesos]]&lt;br /&gt;
* 4.3. [[Planificador de procesos|El planificador de procesos]]&lt;br /&gt;
* 4.4. [[Comportamiento de los procesos|El comportamiento de los procesos según el planificador]]&lt;br /&gt;
* 4.5. [[Bloque de control de procesos|El bloque de control del proceso]]&lt;br /&gt;
* 4.6. [[Conmutación de procesos|La conmutación de procesos]]&lt;br /&gt;
* 4.7. [[Hilos|Hilos]]&lt;br /&gt;
* 4.8. [[Ejercicios Procesos|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Planificación de Procesos ==&lt;br /&gt;
* 5.1 [[Planificación de procesos|La planificación de procesos]]&lt;br /&gt;
* 5.2 [[Índices de evaluación|Índices de evaluación de la planificación de procesos]]&lt;br /&gt;
* 5.3 [[Criterios de planificación|Criterios de planificación]]&lt;br /&gt;
* 5.4 [[Planificadores de sistemas operativos existentes|Planificadores de sistemas operativos existentes]]&lt;br /&gt;
* 5.5 [[Planificación de procesos de tiempo real|La planificación de procesos de tiempo real]]&lt;br /&gt;
* 5.6 [[Planificación en sistemas multiprocesadores|La planificación de procesos en sistemas multiprocesadores]]&lt;br /&gt;
* 5.7 [[Ejercicios otros aspectos de la planificación|Ejercicios]]&lt;br /&gt;
* 5.8 [[Ejercicios planificación de procesos|Ejercicios]]&lt;br /&gt;
* 5.9 [[Ejercicios_simples_de_planificación_de_procesos|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Concurrencia de procesos ==&lt;br /&gt;
&lt;br /&gt;
* 6.1 [[Concurrencia de procesos|Concurrencia de procesos]]&lt;br /&gt;
* 6.2 [[Mecanismos de sincronización|Control optimista y pesimista de la concurrencia]]&lt;br /&gt;
* 6.3 [[Cerrojos|Cerrojos]]&lt;br /&gt;
* 6.4 [[Ejercicio de concurrencia de procesos|Ejercicios]]&lt;br /&gt;
* 6.5 [[Semáforos|Semáforos]]&lt;br /&gt;
* 6.6 [[Monitores|Monitores]]&lt;br /&gt;
* 6.7 [[Mensajería|Mensajería]]&lt;br /&gt;
* 6.8 [[Ejercicios sincronización y comunicación|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Interbloqueo ==&lt;br /&gt;
&lt;br /&gt;
* 7.1 [[Definición de interbloqueo|Definición]]&lt;br /&gt;
* 7.2 [[Condiciones para el interbloqueo y estrategias de resolución|Modelado y Estrategias]]&lt;br /&gt;
* 7.3 [[Algoritmo para averiguar interbloqueo|Algoritmo del banquero]]&lt;br /&gt;
* 7.4 [[Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Administración de memoria ==&lt;br /&gt;
&lt;br /&gt;
* 8.1 [[Introducción|Introducción]]&lt;br /&gt;
* 8.2 [[SO multiprogramables con particiones variables|SO multiprogramables con particiones variables]]&lt;br /&gt;
* 8.3 [[Segmentación|Segmentación]]&lt;br /&gt;
* 8.4 [[Paginación|Paginación]]&lt;br /&gt;
* 8.5 [[Sistema combinado|Sistema combinado]]&lt;br /&gt;
* 8.6 [[Ejercicios administración de memoria contigua|Ejercicios (Administración de memoria contigua)]]&lt;br /&gt;
* 8.7 [[Ejemplo de segmentación, paginación y combinado|Ejercicios (Segmentación, paginación y sistemas combinados)]]&lt;br /&gt;
&lt;br /&gt;
== Memoria virtual ==&lt;br /&gt;
&lt;br /&gt;
* 9.1 [[Memoria Virtual|Introducción]]&lt;br /&gt;
* 9.2 [[Criterios de reemplazo|Criterios de reemplazo]]&lt;br /&gt;
* 9.3 [[Memoria virtual con multiprogramacion|Otros aspectos relacionados con la memoria virtual]]&lt;br /&gt;
* 9.4 [[Ejercicios memoria virtual|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Entrada/Salida ==&lt;br /&gt;
&lt;br /&gt;
* 10.1 [[EstructuraES|Estructura dispositivo E/S]]&lt;br /&gt;
* 10.2 [[GestionES|Modos de gestionar dispositivos E/S]]&lt;br /&gt;
* 10.3 [[Diseño modular E/S|Diseño modular E/S]]&lt;br /&gt;
* 10.4 [[Ejercicios de Entrada/Salida|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Gestión L/E ==&lt;br /&gt;
&lt;br /&gt;
* 11.1 [[Discos Magnéticos|Discos Magnéticos]]&lt;br /&gt;
* 11.2 [[Mejoras de tiempos de desplazamiento|Mejoras de tiempos de desplazamiento]]&lt;br /&gt;
* 11.3 [[Mejoras en la demora de rotación|Mejoras en la demora de rotación]]&lt;br /&gt;
* 11.4 [[Tipos de errores en discos magnéticos|Tipos de errores en discos magnéticos]]&lt;br /&gt;
* 11.5 [[Ejercicios Gestión L/E|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Administración de archivos ==&lt;br /&gt;
&lt;br /&gt;
* 12.1 [[Introducción en la administración de archivos|Introducción en la administración de archivos]]&lt;br /&gt;
* 12.2 [[FAT|FAT]]&lt;br /&gt;
* 12.3 [[EXT2 |EXT2]]&lt;br /&gt;
* 12.4 [[Ejercicios Administración Ficheros|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Anexo ==&lt;br /&gt;
&lt;br /&gt;
Esta sección contiene información interesante pero que no pertenece al temario de la asignatura.&lt;br /&gt;
&lt;br /&gt;
* Todo lo que siempre has querido saber sobre el protocolo SSH está [[SSH|aquí]].&lt;br /&gt;
* Instrucciones para emular BATHOS usando QEMU [[bathos_QEMU|aquí]].&lt;br /&gt;
* Instrucciones para emular XV6 usando QEMU [[xv6|aquí]].&lt;/div&gt;</summary>
		<author><name>Migestgom</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Xv6&amp;diff=3305</id>
		<title>Xv6</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Xv6&amp;diff=3305"/>
				<updated>2016-01-26T07:17:44Z</updated>
		
		<summary type="html">&lt;p&gt;Migestgom: /* Enlaces de interés */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introducción a XV6 =&lt;br /&gt;
&lt;br /&gt;
XV6 es un sistema operativo creado por el [http://web.mit.edu/ MIT] (Massachusetts Institute of Technology) con motivos educacionales y desarrollado en el 2006.  &lt;br /&gt;
Este sistema operativo está basado en la versión 6 de UNIX y es una reimplementación de éste para la arquitectura de procesadores intel x86. Se trata de un sistema operativo monolítico escrito en el lenguaje de programación C. Además su interfaz de usuario por defecto es una interfaz de lineas de comando. &lt;br /&gt;
&lt;br /&gt;
En los siguientes pasos aprenderemos a descargarlo e instalarlo y diferenciaremos las partes mas básicas de un SO estudiadas en teoría en el código de xv6.&lt;br /&gt;
&lt;br /&gt;
= Instalación de QEMU en Linux Ubuntu =&lt;br /&gt;
&lt;br /&gt;
Para instalar xv6 primero necesitaremos instalar [http://wiki.qemu.org/Main_Page QEMU], un emulador de código abierto capaz de emular nuestro sistema operativo. Podemos instalar QEMU de diferentes formas: &lt;br /&gt;
&lt;br /&gt;
-Por terminal&lt;br /&gt;
&lt;br /&gt;
-Por un gestor de paquetes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Instalacion de QEMU por terminal:'''&lt;br /&gt;
&lt;br /&gt;
En primer lugar abre un terminal y ejecuta el comando:&lt;br /&gt;
&lt;br /&gt;
'''''sudo apt-get install qemu qemu-kvm libvirt-bin'''''&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Captura_instalacion_qemu.png]]&lt;br /&gt;
&lt;br /&gt;
Introduce tu contraseña y el terminal te preguntará si deseas continuar con la&lt;br /&gt;
instalación, podrás ver los paquetes que se instalarán y el espacio necesario para la&lt;br /&gt;
instalación. Tras estos pasos ya habrás instalado QEMU en tu equipo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Por paquetes:'''&lt;br /&gt;
&lt;br /&gt;
Para empezar tienes que tener el gestor de paquetes Synaptic instalado (también sirven otros, pero este es muy bueno)&lt;br /&gt;
Una vez instalado Synaptic ábrelo y el buscar introduce &amp;quot;QEMU&amp;quot;. Cuando el programa termine de buscar tienes que encontrar el paquete que se llama qemu-kvm, hacer doble click y posteriormente pulsar en &amp;quot;aplicar&amp;quot; que se encuentra en el menú de la parte superior. Una vez termine la instalación ya tendrás QEMU instalado.  &lt;br /&gt;
&lt;br /&gt;
[[Archivo:Qemu_synaptic.png]]&lt;br /&gt;
&lt;br /&gt;
= Descarga e instalacion de XV6 =&lt;br /&gt;
Ahora que ya tenemos QEMU instalado podemos empezar a descargar xv6. &lt;br /&gt;
&lt;br /&gt;
Para descargarlo es necesario tener '''''git''''' instalado.&lt;br /&gt;
Para ello introduce esto en el terminal:&lt;br /&gt;
&lt;br /&gt;
'''''sudo apt-get install git'''''&lt;br /&gt;
&lt;br /&gt;
Una vez instalado GIT descargaremos el sistema operativo del repositorio público. Ejecuntando el siguiente comando en terminal, descargaremos los archivos necesarios para la instalación de xv6: &lt;br /&gt;
&lt;br /&gt;
'''''git clone https://michaelee@bitbucket.ort/michaelee/xv6.git'''''&lt;br /&gt;
&lt;br /&gt;
[[Archivo:captura_clonacion_xv6.png]]&lt;br /&gt;
&lt;br /&gt;
Aparecerá en tu carpeta personal una nueva carpeta con el código de xv6.&lt;br /&gt;
Ya tenemos el código de xv6, ahora toca emularlo. &lt;br /&gt;
&lt;br /&gt;
Navegamos con el terminal hasta la carpeta recientemente creada.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:captura_compilacion_xv6.png]]&lt;br /&gt;
&lt;br /&gt;
Una vez dentro escribimos '''''make''''', con este comando compilaremos el codigo clonado anteriormente. Una vez que haya terminado la compilación ejecutaremos el comando '''''make qemu-nox'''''. Se abrirá una nueva pantalla, lo que significa que ya tenemos xv6 emulado.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:captura_inicializacion_xv6.png]]&lt;br /&gt;
&lt;br /&gt;
= Analizando XV6 =&lt;br /&gt;
&lt;br /&gt;
A continuación veremos la sección del código de xv6 de cada una de las partes básicas de un sistema operativo vistas en teoría.&lt;br /&gt;
&lt;br /&gt;
1- [[scheduler_xv6|Planificador de procesos]]&lt;br /&gt;
&lt;br /&gt;
2- [[memoria_virtual|Administracion de memoria]]&lt;br /&gt;
&lt;br /&gt;
3- [[driver_xv6|Gestor de E/S]]&lt;br /&gt;
&lt;br /&gt;
= Enlaces de interés =&lt;br /&gt;
* '''Página oficial de QEMU'''&lt;br /&gt;
http://wiki.qemu.org/Main_Page&lt;br /&gt;
* '''Wiki de QEMU'''&lt;br /&gt;
https://en.wikibooks.org/wiki/QEMU&lt;br /&gt;
* '''Video Explicativo de la Instalación'''&lt;br /&gt;
https://vimeo.com/69135539&lt;br /&gt;
* '''Libro Usado en el MIT para explicar el funcionamiento del Xv6 (inglés)'''&lt;br /&gt;
https://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf&lt;/div&gt;</summary>
		<author><name>Migestgom</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Interrupciones_y_excepciones&amp;diff=3055</id>
		<title>Interrupciones y excepciones</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Interrupciones_y_excepciones&amp;diff=3055"/>
				<updated>2015-09-28T18:04:52Z</updated>
		
		<summary type="html">&lt;p&gt;Migestgom: /* Tipos de interrupciones y excepciones */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Tipos de interrupciones y excepciones==&lt;br /&gt;
&lt;br /&gt;
* Una interrupción por hardware es un mecanismo de comunicación entre el procesador y los dispositivos de E/S. Sirve para indicar que un dispositivo de E/S tiene datos pendientes de ser tratados. Las interrupciones por hardware evitan que el sistema operativo tenga que muestrear periódicamente el estado de los dispositivos de E/S, de manera que son ellos mismos los que indican que hay datos a ser tratados.&lt;br /&gt;
&lt;br /&gt;
* Una interrupción por software, también conocida como excepción, es un mecanismo de comunicación entre un proceso (que se ejecuta en modo usuario) y el sistema operativo (que se ejecuta en modo supervisor). El proceso emplea las excepciones para notificar al sistema operativo que requiere de su intervención. Para lanzar una excepción, un proceso ejecuta la instrucción '''int''' seguida de un número de 16 bits que indica el tipo de interrupción por software. Por ejemplo, las llamadas al sistema en x86  se implementan mediante excepciones, por medio de la instrucción '''int 0x80'''.&lt;br /&gt;
&lt;br /&gt;
El tratamiento de interrupciones es prioritario, por tanto, en caso de interrupción se deja de ejecutar el proceso para dar paso al manejador de la interrupciones.&lt;br /&gt;
&lt;br /&gt;
==Tratamiento de interrupciones y excepciones==&lt;br /&gt;
&lt;br /&gt;
Cuando se produce una interrupción:&lt;br /&gt;
&lt;br /&gt;
1. Almacena el estado de la ejecución del proceso en el Bloque de Control de procesos (PCB).&lt;br /&gt;
&lt;br /&gt;
2. Se pasa la CPU a modo supervisor.&lt;br /&gt;
&lt;br /&gt;
3. Se ejecuta el código del sistema operativo que realiza el tratamiento de la interrupción. Este decide la acción correspondiente dependiendo del tipo de interrupción.&lt;br /&gt;
&lt;br /&gt;
4. Se devuelve el control de la ejecución al planificador del sistema operativo.&lt;br /&gt;
[[Arranque del sistema|2.4 Arranque del sistema]]&lt;/div&gt;</summary>
		<author><name>Migestgom</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Tipos_de_Sistemas_Operativos&amp;diff=3054</id>
		<title>Tipos de Sistemas Operativos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Tipos_de_Sistemas_Operativos&amp;diff=3054"/>
				<updated>2015-09-28T16:34:23Z</updated>
		
		<summary type="html">&lt;p&gt;Migestgom: /* Características que pueden presentar: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 1.3. Tipos de Sistemas Operativos =&lt;br /&gt;
== 1.3.1. Según cuántas aplicaciones pueda ejecutar a la vez ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Monoprogramables'''===&lt;br /&gt;
*En un determinado instante de tiempo, '''sólo hay un único proceso en ejecución que monopoliza todos los recursos''' del sistema.&lt;br /&gt;
*Principal ventaja: su sencillez.&lt;br /&gt;
*Dos subtipos:&lt;br /&gt;
**Ofrece intérprete de órdenes.&lt;br /&gt;
**Ofrece entrada a través de cinta/switches (SSOO históricos).&lt;br /&gt;
*Ejemplo: DOS.&lt;br /&gt;
&lt;br /&gt;
=== '''Multiprogramables''' ===&lt;br /&gt;
&lt;br /&gt;
*Permiten ejecutar '''múltiples procesos en un único procesador'''. Se tienen varios programas cargados simultáneamente en la memoria, así que el SO debe controlar los accesos y los espacios de la misma.&lt;br /&gt;
*Tienen mecanismos de protección del espacio de memoria (el SO impide que una aplicación acceda al espacio de memoria de otra).&lt;br /&gt;
&lt;br /&gt;
====Características que pueden presentar:====&lt;br /&gt;
&lt;br /&gt;
*Multiprogramación: se ejecutan varios procesos simultáneamente de manera que se reparte el uso del procesador. A esta característica también se le llama (de forma imprecisa) &amp;quot;Multitarea&amp;quot;.&lt;br /&gt;
**Multiusuario: admite múltiples usuarios trabajando simultáneamente.&lt;br /&gt;
**Multiacceso: el sistema ofrece varios terminales (mecanismos) para acceso concurrente a él.&lt;br /&gt;
**Multiprocesamiento o multiprocesadores: soporta más de un procesador y hace uso de todos ellos.&lt;br /&gt;
***Tipos de sistemas multiprocesadores: Podemos diferencias 3 tipos: especializados, con acoplamiento débil y con acoplamiento fuerte:&lt;br /&gt;
****Sistemas multiprocesadores con procesadores especializados: Son sistemas que cuentan con un procesador de propósito general y varios procesadores especializados (como por ejemplo coprocesadores aritméticos o el procesador de una tarjeta gráfica). Dichos procesadores especializados solo son capaces de ejecutar un conjunto de operaciones especificas y funcionan únicamente cuando el procesador general se lo solicita, en ese momento colaboran con el procesador general.&lt;br /&gt;
****Sistemas multiprocesadores con acoplamiento débil: Son sistemas con procesadores relativamente independientes, cada uno tiene su propia memoria y sus propios canales de E/S.&lt;br /&gt;
****Sistemas multiprocesadores con acoplamiento fuerte: Son sistemas con varios procesadores de propósito general independientes entre sí pero que comparten la memoria y trabajan bajo un sistema operativo común. &lt;br /&gt;
**Tiempo real: intenta garantizar que determinadas tareas se ejecuten en un plazo de tiempo específico. Atendiendo al nivel de exigencia, se subdividirían en dos: '''soft''' (suave) o '''flexible''' y hard(duro) o '''estricto'''.Un ejemplo puede ser el sistema operativo de tiempo real instalado en el procesador de un teléfono móvil; si llega una llamada tiene que pasarla en ese momento, sino ese proceso deja de ser importante.&lt;br /&gt;
**Distribuido: permite la ejecución de múltiples procesos en diferentes máquinas comunicadas por un enlace de red. El primer SO en soportar esta característica fue [http://es.wikipedia.org/wiki/Plan_9_from_Bell_Labs Plan 9] de ''Bell Labs''.&lt;br /&gt;
&lt;br /&gt;
== 1.3.2. Según cómo se presta el servicio ==&lt;br /&gt;
&lt;br /&gt;
Clasificación no excluyente:&lt;br /&gt;
&lt;br /&gt;
* Sistemas operativos de servidor&lt;br /&gt;
* Sistemas operativos de ordenador personal&lt;br /&gt;
* Sistemas operativos en tiempo real&lt;br /&gt;
* Sistemas operativos embarcados / integrados / &amp;quot;embebidos&amp;quot;, ejemplos, dispositivos móviles o smartcard.&lt;br /&gt;
* Sistemas operativos web&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.1 [[Organización básica de un ordenador]]&lt;/div&gt;</summary>
		<author><name>Migestgom</name></author>	</entry>

	</feed>