<?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=Rafgomgal1</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=Rafgomgal1"/>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php/Especial:Contribuciones/Rafgomgal1"/>
		<updated>2026-05-26T22:37:38Z</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=2758</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=2758"/>
				<updated>2013-01-21T17:25:16Z</updated>
		
		<summary type="html">&lt;p&gt;Rafgomgal1: &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 IC&lt;br /&gt;
* Alejandro Sánchez Medina IS-G1&lt;br /&gt;
* Francisco Javier Borrego Cejudo IC-G2&lt;br /&gt;
* Samuel Martin Arenas IC-G2&lt;br /&gt;
* Álvaro Fernández García IS-G1&lt;br /&gt;
* Rafael Gomez Galbarro GIC2&lt;br /&gt;
*María Pérez Reina&lt;/div&gt;</summary>
		<author><name>Rafgomgal1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Evaluame_mis_contribuciones_a_la_wiki&amp;diff=2729</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=2729"/>
				<updated>2013-01-19T16:33:22Z</updated>
		
		<summary type="html">&lt;p&gt;Rafgomgal1: &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;br /&gt;
* Samuel Martin Arenas IC-G2&lt;br /&gt;
* Álvaro Fernández García IS-G1&lt;br /&gt;
* Rafael Gomez Galbarro&lt;/div&gt;</summary>
		<author><name>Rafgomgal1</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=2632</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=2632"/>
				<updated>2012-12-21T00:37:58Z</updated>
		
		<summary type="html">&lt;p&gt;Rafgomgal1: /* Ejercicio 1 */&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;/div&gt;</summary>
		<author><name>Rafgomgal1</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=2631</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=2631"/>
				<updated>2012-12-21T00:35:40Z</updated>
		
		<summary type="html">&lt;p&gt;Rafgomgal1: /* Ejercicio 1 */&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;
El tamaño de página sería 4KB. ¿Cierto?&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;/div&gt;</summary>
		<author><name>Rafgomgal1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_administraci%C3%B3n_de_memoria_contigua&amp;diff=2630</id>
		<title>Ejercicios administración de memoria contigua</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_administraci%C3%B3n_de_memoria_contigua&amp;diff=2630"/>
				<updated>2012-12-21T00:23:43Z</updated>
		
		<summary type="html">&lt;p&gt;Rafgomgal1: /* Ejercicio 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Ejercicios Clase=&lt;br /&gt;
&lt;br /&gt;
==Ejercicio 1==&lt;br /&gt;
Ejercicio visto el martes 29 de Noviembre de 2011 en clase.&lt;br /&gt;
&lt;br /&gt;
 Dada la siguiente configuración de procesos:&lt;br /&gt;
 &lt;br /&gt;
    | H0 |  t  |  M  |&lt;br /&gt;
 ---------------------&lt;br /&gt;
 P1 |  0 |  4  |  3  |  &lt;br /&gt;
 P2 |  1 |  4  |  1  |&lt;br /&gt;
 P3 |  2 |  5  |  2  |&lt;br /&gt;
 P4 |  3 |  2  |  9  |&lt;br /&gt;
 P5 |  4 |  1  |  15 |&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 Y la siguiente configuración de memoria:&lt;br /&gt;
  _____&lt;br /&gt;
 |_____| A = 4kB&lt;br /&gt;
 |_____| B = 4kB&lt;br /&gt;
 |     |&lt;br /&gt;
 |_____| C = 8kB&lt;br /&gt;
 |     |&lt;br /&gt;
 |     |&lt;br /&gt;
 |     | D = 16kB&lt;br /&gt;
 |_____|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a) Determina el cronograma del Mejor Ajuste Estático [[solución Ejercicio clase Mejor Ajuste Estático|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
b) Determina el cronograma Primer ajuste      [[Solución Ejercicio clase Primer Ajuste|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
c) Determina el cronograma del Mejor Ajuste Dinámico [[solución Ejercicio clase Mejor Ajuste Dinámico|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
El mejor ajuste estático y el mejor ajuste dinámico no se estudian en el presente curso (12/13)&lt;br /&gt;
&lt;br /&gt;
==Ejercicio 2==&lt;br /&gt;
Segundo ejercicio visto el martes 29 de Noviembre de 2011 en clase. &lt;br /&gt;
&lt;br /&gt;
 Dada la siguiente configuración de procesos:&lt;br /&gt;
 &lt;br /&gt;
    | H0 |  t  |  M  |&lt;br /&gt;
 ---------------------&lt;br /&gt;
 P1 |  0 |  4  |  2  |  &lt;br /&gt;
 P2 |  0 |  4  |  1  |&lt;br /&gt;
 P3 |  0 |  5  |  3  |&lt;br /&gt;
 P4 |  0 |  2  |  8  |&lt;br /&gt;
 P5 |  0 |  1  |  7  |&lt;br /&gt;
 &lt;br /&gt;
 Aunque todos llegan en el mismo instante de tiempo, suponga el siguiente orden de llegada: 1º P1, 2º P2, 3º P3, 4º P4 y 5º P5.&lt;br /&gt;
 &lt;br /&gt;
 Y la siguiente configuración de memoria:&lt;br /&gt;
 _______&lt;br /&gt;
 |_____| A = 4kB&lt;br /&gt;
 |_____| B = 4kB&lt;br /&gt;
 |     |&lt;br /&gt;
 |_____| C = 8kB&lt;br /&gt;
 |     |&lt;br /&gt;
 |     |&lt;br /&gt;
 |     | D = 16kB&lt;br /&gt;
 |_____|&lt;br /&gt;
&lt;br /&gt;
Calcula los cronogramas tal y como se hizo en el ejercicio anterior. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a) Determina el cronograma del Mejor Ajuste Estático [[solución ejercicio2 Mejor Ajuste Estático|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
b) Determina el cronograma Primer ajuste      [[solución ejercicio2 Primer Ajuste|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
c) Determina el cronograma del Mejor Ajuste Dinámico [[solución ejercicio2Mejor Ajuste Dinámico|Ver solución]]&lt;br /&gt;
&lt;br /&gt;
Corregido --[[Usuario:Pneira|Pneira]] 15:55 22 dic 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
Los apartados a y c de los ejercicios no se imparte en el temario del año 2012-2013 --[[Usuario:jescordia|jescordia]] 11:16 17 dic 2012&lt;/div&gt;</summary>
		<author><name>Rafgomgal1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_sincronizaci%C3%B3n_y_comunicaci%C3%B3n&amp;diff=2624</id>
		<title>Ejercicios sincronización y comunicación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ejercicios_sincronizaci%C3%B3n_y_comunicaci%C3%B3n&amp;diff=2624"/>
				<updated>2012-12-13T11:11:36Z</updated>
		
		<summary type="html">&lt;p&gt;Rafgomgal1: /* Ejercicio 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ejercicio 1 =&lt;br /&gt;
&lt;br /&gt;
Realice el cronograma temporal que represente la ejecución de dos procesos P1 y P2. El proceso P1 ejecuta el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i=0; i&amp;lt;2; i++) {  /* #1 */&lt;br /&gt;
    down(s1);              /* #2 */&lt;br /&gt;
    f1();                  /* #3 */&lt;br /&gt;
    if (get(s1) == 0)      /* #4 */&lt;br /&gt;
        up(s2);            /* #5 */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el proceso P2 ejecuta el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i=0; i&amp;lt;2; i++) {  /* #1 */&lt;br /&gt;
    down(s2);              /* #2 */&lt;br /&gt;
    f2();                  /* #3 */&lt;br /&gt;
    up(s1);                /* #4 */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para el semáforo s1 el contador vale 1, mientras que para el semáforo s2 el contador vale 0.&lt;br /&gt;
&lt;br /&gt;
Suponga que:&lt;br /&gt;
&lt;br /&gt;
* El planificador emplea turno rotatorio estricto con quantum de 3 unidades de ejecución.&lt;br /&gt;
* Se sabe que el proceso P2 es seleccionado en primer lugar por el planificador para ejecutarse.&lt;br /&gt;
* La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las líneas de código toman el mismo tiempo de ejecución.&lt;br /&gt;
* La función get(semáforo s) devuelve el valor del contador del semáforo.&lt;br /&gt;
&lt;br /&gt;
El cronograma deberá incluir qué línea de código se ejecuta en cada unidad de ejecución.&lt;br /&gt;
&lt;br /&gt;
[[solución ejercicio 1|Ver solución del ejercicio 1]]&lt;br /&gt;
&lt;br /&gt;
= Ejercicio 2 =&lt;br /&gt;
&lt;br /&gt;
Realice el cronograma temporal que represente la ejecución de dos procesos P1 y P2. El proceso P1 ejecuta el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i=0; i&amp;lt;2; i++) { /* #1 */&lt;br /&gt;
    down(s1);             /* #2 */&lt;br /&gt;
    f1();                 /* #3 */&lt;br /&gt;
    up(s2);               /* #4 */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el proceso P2 ejecuta el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i=0; i&amp;lt;2; i++) { /* #1 */&lt;br /&gt;
    down(s2);             /* #2 */&lt;br /&gt;
    f2();                 /* #3 */&lt;br /&gt;
    up(s1);               /* #4 */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para el semáforo s1 el contador vale 1, mientras que para el semáforo s2 el contador vale 0.&lt;br /&gt;
&lt;br /&gt;
Suponga que:&lt;br /&gt;
&lt;br /&gt;
* El planificador emplea turno rotatorio estricto con quantum de 3 unidades de ejecución.&lt;br /&gt;
* Se sabe que el proceso P1 es seleccionado en primer lugar por el planificador para ejecutarse.&lt;br /&gt;
* La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución.&lt;br /&gt;
&lt;br /&gt;
El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución.&lt;br /&gt;
&lt;br /&gt;
[[solución ejercicio 2|Ver solución del ejercicio 2]]&lt;br /&gt;
&lt;br /&gt;
= Ejercicio 3 =&lt;br /&gt;
&lt;br /&gt;
En un exámen de sistemas operativos, un estudiante plantea la siguiente solución basada en dos procesos, un proceso P1 productor y un proceso P2 consumidor, en el que el contador de los semáforos s1 y s2 valen inicialmente 0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
while(1) {&lt;br /&gt;
    down(s1);&lt;br /&gt;
    produce();&lt;br /&gt;
    up(s2);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el proceso P2 ejecuta el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
while(1) {&lt;br /&gt;
    down(s2);&lt;br /&gt;
    consume();&lt;br /&gt;
    up(s1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responda brevemente si la solución que propone es idónea justificando su respuesta. &lt;br /&gt;
&lt;br /&gt;
[[solución ejercicio 3|Ver solución del ejercicio 3]]&lt;br /&gt;
&lt;br /&gt;
= Ejercicio 4 =&lt;br /&gt;
&lt;br /&gt;
Realice el cronograma temporal que represente la ejecución de dos procesos P1 y P2. El proceso P1 ejecuta el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i=0; i&amp;lt;2; i++) {  /* #1 */&lt;br /&gt;
    send(msg, P2);         /* #2 */&lt;br /&gt;
    recv(msg, P2);         /* #3 */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el proceso P2 ejecuta el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i=0; i&amp;lt;2; i++) {  /* #1 */&lt;br /&gt;
    recv(msg, P1);         /* #2 */&lt;br /&gt;
    send(msg, P1);         /* #3 */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Suponga que:&lt;br /&gt;
&lt;br /&gt;
* El planificador emplea turno rotatorio estricto con quantum de 3 unidades de ejecución.&lt;br /&gt;
* Se sabe que el proceso P1 es seleccionado en primer lugar por el planificador para ejecutarse.&lt;br /&gt;
* La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución.&lt;br /&gt;
* El comportamiento de la primitiva send() es síncrono y el la primitiva recv() es bloqueante.&lt;br /&gt;
* Suponga que msg contiene un mensaje que se emplea como testigo y cuyo contenido no tiene relevancia.&lt;br /&gt;
&lt;br /&gt;
El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución.&lt;br /&gt;
&lt;br /&gt;
[[solución ejercicio 4|Ver solución del ejercicio 4]]&lt;br /&gt;
&lt;br /&gt;
= Ejercicio 5 =&lt;br /&gt;
&lt;br /&gt;
Realice el cronograma temporal que represente la ejecución de dos procesos P1 y P2. El proceso P1 ejecuta el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i=0; i&amp;lt;2; i++) { /* #1 */&lt;br /&gt;
    down(s1);             /* #2 */&lt;br /&gt;
    f1();                 /* #3 */&lt;br /&gt;
    up(s2);               /* #4 */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el proceso P2 ejecuta el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i=0; i&amp;lt;2; i++) { /* #1 */&lt;br /&gt;
    down(s2);             /* #2 */&lt;br /&gt;
    f2();                 /* #3 */&lt;br /&gt;
    up(s1);               /* #4 */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para el semáforo s1 el contador vale 1, mientras que para el semáforo s2 el contador vale 0.&lt;br /&gt;
&lt;br /&gt;
Suponga que:&lt;br /&gt;
&lt;br /&gt;
* El planificador emplea turno rotatorio estricto, con quantum ilimitado, por tanto, un proceso se mantiene en estado activo hasta que realice una operación bloqueante.&lt;br /&gt;
* Se sabe que el proceso P2 es seleccionado en primer lugar por el planificador para ejecutarse.&lt;br /&gt;
* La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución. &lt;br /&gt;
&lt;br /&gt;
El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución. &lt;br /&gt;
&lt;br /&gt;
[[solución ejercicio 5|Ver solución del ejercicio 5]]&lt;br /&gt;
&lt;br /&gt;
= Ejercicio 6 =&lt;br /&gt;
&lt;br /&gt;
Dado dos procesos P1 y P2 cuyos códigos son los siguientes:&lt;br /&gt;
&lt;br /&gt;
Código del Proceso 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i=0; i&amp;lt;2; i++) {   /* #1 */&lt;br /&gt;
    send(msg);              /* #2 */&lt;br /&gt;
    f(msg);                 /* #3 */&lt;br /&gt;
    recv(msg);              /* #4 */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Código del Proceso 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i=0; i&amp;lt;2; i++) {   /* #1 */&lt;br /&gt;
    recv(msg);              /* #2 */&lt;br /&gt;
    f(msg);                 /* #3 */&lt;br /&gt;
    send(msg);              /* #4 */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Suponga que:&lt;br /&gt;
&lt;br /&gt;
* El planificador emplea turno rotatorio estricto con quantum de 3 unidades de ejecución.&lt;br /&gt;
* Se sabe que el proceso P1 es seleccionado en primer lugar por el planificador para ejecutarse.&lt;br /&gt;
* La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución.&lt;br /&gt;
* El comportamiento de la primitiva send() es asíncrono y el de la primitiva recv() es bloqueante.&lt;br /&gt;
* Suponga que msg contiene un mensaje inicialmente bien formado cuyo contenido no tiene relevancia&lt;br /&gt;
&lt;br /&gt;
El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución.&lt;br /&gt;
&lt;br /&gt;
[[solución ejercicio 6|Ver solución del ejercicio 6]]&lt;br /&gt;
&lt;br /&gt;
= Ejercicio 7 =&lt;br /&gt;
&lt;br /&gt;
En base a dos hilos h1 y h2 de un mismo proceso P cuyos codigos son los siguientes:&lt;br /&gt;
&lt;br /&gt;
En el hilo h1 se ejecuta el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i = 0; i&amp;lt;2; i++){ //#1&lt;br /&gt;
   while(cerrojo_p2);      //#2&lt;br /&gt;
      cerrojo_p1 = 1;      //#3&lt;br /&gt;
      f();                 //#4&lt;br /&gt;
      cerrojo_p1 = 0;      //#5&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i = 0; i&amp;lt;2; i++){ //#1&lt;br /&gt;
   while(cerrojo_p1);      //#2&lt;br /&gt;
      cerrojo_p2 = 1;      //#3&lt;br /&gt;
      f();                 //#4&lt;br /&gt;
      cerrojo_p2 = 0;      //#5&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Proponga una solución en la que se reemplacen los cerrojos por semáforos. Realice el cronograma temporal de ejecución de la solución que propone.&lt;br /&gt;
&lt;br /&gt;
Siendo cerrojo_p1 y cerrojo_p2 variables globales inicialmente a cero.&lt;br /&gt;
Inicialmente, el semáforo s1 es 1 y el semáforo s2 es 0.&lt;br /&gt;
&lt;br /&gt;
[[Usuario:Migoligon|Migoligon]] 17:57 4 dic 2011 (UTC)Creí que en el ejercicio 3 quedó claro que no debian iniciarse ambas a 0 porque era un error garrafal. Y ahora me encuentro esto y en las soluciones no diferencia s1 de s2, además de que la solución está preparada para que sea s1 = 1 y s2 = 0 no se de donde han sacado los datos para hacer la solución pero no creo que desde aqui.&lt;br /&gt;
&lt;br /&gt;
Supongamos que: &lt;br /&gt;
*El planificador emplea turno rotatorio estricto con quantum de 3 unidades de ejecución.&lt;br /&gt;
*Se sabe que el hilo h1 es seleccionado en primer lugar por el planificador para ejecutarse.&lt;br /&gt;
*La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución.&lt;br /&gt;
el planificador&lt;br /&gt;
&lt;br /&gt;
[[Usuario:Juacordia|Juacordia]] 16:33 5 dic 2011&lt;br /&gt;
&lt;br /&gt;
Hola [[Usuario:Migoligon|Migoligon]] creo que estas confundiendo cerrojos por semaforos, una cosa es que los semaforos no puedan estar inicializados a cero y otra son los cerrojos. Espero haberte ayudado. PD: Los semaforos puedes ponerlos de otra manera.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[solución ejercicio 7|Ver solución del ejercicio 7]]&lt;br /&gt;
&lt;br /&gt;
= Ejercicio 8 =&lt;br /&gt;
&lt;br /&gt;
Realice el cronograma temporal que represente la ejecución de dos procesos P1 y P2. El proceso P1 ejecuta el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i=0; i&amp;lt;2; i++) { /* #1 */&lt;br /&gt;
    down(s1);             /* #2 */&lt;br /&gt;
    f1();                 /* #3 */&lt;br /&gt;
    up(s1);               /* #4 */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el proceso P2 ejecuta el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i=0; i&amp;lt;2; i++) { /* #1 */&lt;br /&gt;
    down(s2);             /* #2 */&lt;br /&gt;
    f2();                 /* #3 */&lt;br /&gt;
    up(s2);               /* #4 */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Suponiendo que los contadores de los semáforos s1 y s2 valen 1.&lt;br /&gt;
&lt;br /&gt;
Suponga que:&lt;br /&gt;
&lt;br /&gt;
* El planificador emplea turno rotatorio estricto con quantum de 3 unidades de ejecución.&lt;br /&gt;
* Se sabe que el proceso P1 es seleccionado en primer lugar por el planificador para ejecutarse.&lt;br /&gt;
* La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución.&lt;br /&gt;
&lt;br /&gt;
El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución.&lt;br /&gt;
&lt;br /&gt;
[[solución ejercicio 8|Ver solución del ejercicio 8]]&lt;br /&gt;
&lt;br /&gt;
= Ejercicio 9 =&lt;br /&gt;
&lt;br /&gt;
Realice el cronograma temporal que represente la ejecución de dos procesos P1 y P2. El proceso P1 ejecuta el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i=0; i&amp;lt;2; i++) { /* #1 */&lt;br /&gt;
    down(s);             /* #2 */&lt;br /&gt;
    f1();                 /* #3 */&lt;br /&gt;
    up(s);               /* #4 */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y el proceso P2 ejecuta el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (int i=0; i&amp;lt;2; i++) { /* #1 */&lt;br /&gt;
    down(s);             /* #2 */&lt;br /&gt;
    f2();                 /* #3 */&lt;br /&gt;
    up(s);               /* #4 */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Suponiendo que el contador del semáforos s vale 1.&lt;br /&gt;
&lt;br /&gt;
Suponga que:&lt;br /&gt;
&lt;br /&gt;
* El planificador emplea turno rotatorio estricto con quantum de 3 unidades de ejecución.&lt;br /&gt;
* Se sabe que el proceso P1 es seleccionado en primer lugar por el planificador para ejecutarse.&lt;br /&gt;
* La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución.&lt;br /&gt;
&lt;br /&gt;
El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución.&lt;br /&gt;
&lt;br /&gt;
[[solución ejercicio 9|Ver solución del ejercicio 9]]&lt;/div&gt;</summary>
		<author><name>Rafgomgal1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=P%C3%A1gina_Principal&amp;diff=2623</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=2623"/>
				<updated>2012-12-13T10:59:16Z</updated>
		
		<summary type="html">&lt;p&gt;Rafgomgal1: &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;
* Comienza el curso 2012/2013 --[[Usuario:Pneira|Pneira]] 15:01 28 sep 2012 (UTC)&lt;br /&gt;
* Primer control de evaluación continua del grupo GC2 el viernes 9 de noviembre --[[Usuario:Pneira|Pneira]] 16:47 26 oct 2012 (UTC)&lt;br /&gt;
* Segundo control de evaluación continua del grupo GC2 el viernes 14 de diciembre --[[Usuario:Pneira|Pneira]] 16:13 28 nov 2012 (UTC)&lt;br /&gt;
* Tercer control de evaluación continua del grupo GC2 el viernes 21 de diciembre --[[Usuario:Pneira|Pneira]] 15:10 12 dic 2012 (UTC)&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. [[Componentes básicos de un sistema operativo|Componentes básicos de un sistema operativo]]&lt;br /&gt;
* 2.4. [[Conceptos básicos|Conceptos básicos]]&lt;br /&gt;
* 2.5. [[Llamadas al sistema|Llamadas al sistema]]&lt;br /&gt;
* 2.6. [[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;
&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;
&lt;br /&gt;
== Semáforos y comunicación ==&lt;br /&gt;
&lt;br /&gt;
* 7.1 [[Semáforos|Semáforos]]&lt;br /&gt;
* 7.2 [[Monitores|Monitores]]&lt;br /&gt;
* 7.3 [[Mensajería|Mensajería]]&lt;br /&gt;
* 7.4 [[Ejercicios sincronización y comunicación|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Interbloqueo ==&lt;br /&gt;
&lt;br /&gt;
* 8.1 [[Definición de interbloqueo|Definición]]&lt;br /&gt;
* 8.2 [[Condiciones para el interbloqueo y estrategias de resolución|Modelado y Estrategias]]&lt;br /&gt;
* 8.3 [[Algoritmo para averiguar interbloqueo|Algoritmo del banquero]]&lt;br /&gt;
* 8.4 [[Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Segmentación y paginación ==&lt;br /&gt;
&lt;br /&gt;
* 9.1 [[Introducción|Introducción]]&lt;br /&gt;
* 9.2 [[SO multiprogramables con particiones variables|SO multiprogramables con particiones variables]]&lt;br /&gt;
* 9.3 [[Segmentacion|Segmentación]]&lt;br /&gt;
* 9.4 [[Paginación|Paginación]]&lt;br /&gt;
* 9.5 [[Sistema combinado|Sistema combinado]]&lt;br /&gt;
* 9.6 [[Ejercicios administración de memoria contigua|Ejercicios]]&lt;br /&gt;
* 9.7 [[Ejemplo de segmentación, paginación y combinado|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Memoria virtual ==&lt;br /&gt;
&lt;br /&gt;
* 10.1 [[Memoria Virtual|Introducción]]&lt;br /&gt;
* 10.2 [[Criterios de reemplazo|Criterios de reemplazo]]&lt;br /&gt;
* 10.3 [[Ejercicios memoria virtual|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Entrada/Salida ==&lt;br /&gt;
&lt;br /&gt;
* 11.1 [[EstructuraES|Estructura dispositivo E/S]]&lt;br /&gt;
* 11.2 [[GestionES|Modos de gestionar dispositivos E/S]]&lt;br /&gt;
* 11.3 [[Diseño modular E/S|Diseño modular E/S]]&lt;br /&gt;
* 11.4 [[Ejercicios de Entrada/Salida|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Gestión L/E ==&lt;br /&gt;
&lt;br /&gt;
* 12.1 [[Discos Magnéticos|Discos Magnéticos]]&lt;br /&gt;
* 12.2 [[MejorasTiempoBusqueda|Mejoras en el tiempo de búsqueda]]&lt;br /&gt;
* 12.3 [[Mejoras en la demora de rotación|Mejoras en la demora de rotación]]&lt;br /&gt;
* 12.4 [[Tipos de errores en discos magnéticos|Tipos de errores en discos magnéticos]]&lt;br /&gt;
* 12.5 [[Ejercicios Gestión L/E|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Administración de archivos ==&lt;br /&gt;
&lt;br /&gt;
* 13.1 [[Introducción en la administración de archivos|Introducción en la administración de archivos]]&lt;br /&gt;
* 13.2 [[FAT|FAT]]&lt;br /&gt;
* 13.3 [[EXT2 |EXT2]]&lt;br /&gt;
* 13.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;/div&gt;</summary>
		<author><name>Rafgomgal1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=P%C3%A1gina_Principal&amp;diff=2622</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=2622"/>
				<updated>2012-12-13T10:57:36Z</updated>
		
		<summary type="html">&lt;p&gt;Rafgomgal1: /* Memoria virtual */&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;
* Comienza el curso 2012/2013 --[[Usuario:Pneira|Pneira]] 15:01 28 sep 2012 (UTC)&lt;br /&gt;
* Primer control de evaluación continua del grupo GC2 el viernes 9 de noviembre --[[Usuario:Pneira|Pneira]] 16:47 26 oct 2012 (UTC)&lt;br /&gt;
* Segundo control de evaluación continua del grupo GC2 el viernes 14 de diciembre --[[Usuario:Pneira|Pneira]] 16:13 28 nov 2012 (UTC)&lt;br /&gt;
* Tercer control de evaluación continua del grupo GC2 el viernes 21 de diciembre --[[Usuario:Pneira|Pneira]] 15:10 12 dic 2012 (UTC)&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. [[Componentes básicos de un sistema operativo|Componentes básicos de un sistema operativo]]&lt;br /&gt;
* 2.4. [[Conceptos básicos|Conceptos básicos]]&lt;br /&gt;
* 2.5. [[Llamadas al sistema|Llamadas al sistema]]&lt;br /&gt;
* 2.6. [[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;
&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;
&lt;br /&gt;
== Semáforos y comunicación ==&lt;br /&gt;
&lt;br /&gt;
* 7.1 [[Semáforos|Semáforos]]&lt;br /&gt;
* 7.2 [[Monitores|Monitores]]&lt;br /&gt;
* 7.3 [[Mensajería|Mensajería]]&lt;br /&gt;
* 7.4 [[Ejercicios sincronización y comunicación|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Interbloqueo ==&lt;br /&gt;
&lt;br /&gt;
* 8.1 [[Definición de interbloqueo|Definición]]&lt;br /&gt;
* 8.2 [[Condiciones para el interbloqueo y estrategias de resolución|Modelado y Estrategias]]&lt;br /&gt;
* 8.3 [[Algoritmo para averiguar interbloqueo|Algoritmo del banquero]]&lt;br /&gt;
* 8.4 [[Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Segmentación y paginación ==&lt;br /&gt;
&lt;br /&gt;
* 9.1 [[Introducción|Introducción]]&lt;br /&gt;
* 9.2 [[SO multiprogramables con particiones variables|SO multiprogramables con particiones variables]]&lt;br /&gt;
* 9.3 [[Segmentacion|Segmentación]]&lt;br /&gt;
* 9.4 [[Paginación|Paginación]]&lt;br /&gt;
* 9.5 [[Sistema combinado|Sistema combinado]]&lt;br /&gt;
* 9.6 [[Ejercicios administración de memoria contigua|Ejercicios]]&lt;br /&gt;
* 9.7 [[Ejemplo de segmentación, paginación y combinado|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Memoria virtual ==&lt;br /&gt;
&lt;br /&gt;
* 10.1 [[Memoria Virtual|Introducción]]&lt;br /&gt;
* 10.2 [[Criterios de reemplazo|Criterios de reemplazo]]&lt;br /&gt;
* 10.3 [[Ejercicios memoria virtual|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Entrada/Salida ==&lt;br /&gt;
&lt;br /&gt;
* 12.1 [[EstructuraES|Estructura dispositivo E/S]]&lt;br /&gt;
* 12.2 [[GestionES|Modos de gestionar dispositivos E/S]]&lt;br /&gt;
* 12.3 [[Diseño modular E/S|Diseño modular E/S]]&lt;br /&gt;
* 12.4 [[Ejercicios de Entrada/Salida|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Gestión L/E ==&lt;br /&gt;
&lt;br /&gt;
* 13.1 [[Discos Magnéticos|Discos Magnéticos]]&lt;br /&gt;
* 13.2 [[MejorasTiempoBusqueda|Mejoras en el tiempo de búsqueda]]&lt;br /&gt;
* 13.3 [[Mejoras en la demora de rotación|Mejoras en la demora de rotación]]&lt;br /&gt;
* 13.4 [[Tipos de errores en discos magnéticos|Tipos de errores en discos magnéticos]]&lt;br /&gt;
* 13.5 [[Ejercicios Gestión L/E|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Administración de archivos ==&lt;br /&gt;
&lt;br /&gt;
* 14.1 [[Introducción en la administración de archivos|Introducción en la administración de archivos]]&lt;br /&gt;
* 14.2 [[FAT|FAT]]&lt;br /&gt;
* 14.3 [[EXT2 |EXT2]]&lt;br /&gt;
* 14.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;/div&gt;</summary>
		<author><name>Rafgomgal1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Concurrencia_de_procesos&amp;diff=2613</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=2613"/>
				<updated>2012-12-07T18:13:56Z</updated>
		
		<summary type="html">&lt;p&gt;Rafgomgal1: /* Sección crítica */&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;
Un ejemplo de un problema de concurrencia sería el siguiente: Dados dos procesos A y B, 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.&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 como 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;
= Formas de interacción entre procesos =&lt;br /&gt;
&lt;br /&gt;
Hay dos formas básicas de interacción entre los procesos:&lt;br /&gt;
&lt;br /&gt;
* '''Relaciones de competencia''': Dados dos procesos A y B, ambos procesos tienen objetivos diferentes y compiten por los recursos para conseguirlos. Por ejemplo, dos procesos desean modificar el contenido de un mismo fichero, pero no deben hacerlo de manera simultánea o quedará en un estado incoherente.&lt;br /&gt;
&lt;br /&gt;
* '''Relaciones de cooperación''': Dados dos procesos A y B, ambos con un mismo objetivo, ''se ponen de acuerdo'' a la hora de emplear los recursos existentes para alcanzarlos. Por ejemplo, si el proceso A produce un objeto que es consumido por el proceso B, hasta que el proceso A no produzca, el proceso B no debe consumir y viceversa.&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>Rafgomgal1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sem%C3%A1foros&amp;diff=2589</id>
		<title>Semáforos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sem%C3%A1foros&amp;diff=2589"/>
				<updated>2012-11-16T19:28:26Z</updated>
		
		<summary type="html">&lt;p&gt;Rafgomgal1: /* Semáforos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Planificador de procesos: Diagrama de estados simplicado =&lt;br /&gt;
&lt;br /&gt;
Para comprender apropiadamente cómo funcionan los semáforos es importante recordar cómo funciona el [[Estados de los procesos|diagrama de estados de los procesos]]&lt;br /&gt;
&lt;br /&gt;
= Semáforos =&lt;br /&gt;
&lt;br /&gt;
Los semáforos son un mecanismo de sincronización de procesos inventados por [http://es.wikipedia.org/wiki/Edsger_Dijkstra Edsger Dijkstra] en 1965. Los semáforos permiten al programador '''asistir al planificador del sistema operativo en su toma de decisiones''' de manera que permiten sincronizar la ejecución de dos o más procesos. A diferencia de los [[cerrojos]], los semáforos nos ofrecen un mecanismo de espera no ocupada.&lt;br /&gt;
&lt;br /&gt;
Los semáforos son un tipo de datos que están compuestos por dos atributos:&lt;br /&gt;
&lt;br /&gt;
* Un contador, que siempre vale &amp;gt;= 0.&lt;br /&gt;
* Una lista de procesos(lista formada por el PCB de cada proceso), inicialmente vacía.&lt;br /&gt;
&lt;br /&gt;
Y disponen de dos operaciones básicas que pasamos a describir en pseudocódigo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
down(semáforo s)&lt;br /&gt;
{&lt;br /&gt;
       si s.contador == 0:&lt;br /&gt;
              añade proceso a s.lista&lt;br /&gt;
              proceso a estado bloqueado&lt;br /&gt;
       sino:&lt;br /&gt;
              s.contador--&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el pseudocódigo anterior, se puede añadir a la lista un proceso o un hilo.&lt;br /&gt;
&lt;br /&gt;
Nótese que siempre que queramos forzar una transición de un proceso a estado bloqueado, tenemos que hacer que dicho proceso realice una operación ''down'' sobre un semáforo cuyo contador vale cero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
up(semáforo s)&lt;br /&gt;
{&lt;br /&gt;
       si hay procesos en s.lista&lt;br /&gt;
              retira proceso de s.lista&lt;br /&gt;
              proceso a estado preparado&lt;br /&gt;
       sino:&lt;br /&gt;
              s.contador++&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nótese que una operación ''up'' sobre un semáforo en el que hay procesos en su lista resulta en que se retire uno de los procesos (el que más tiempo lleva en la lista), realizando éste la transición a estado preparado. Es un error frecuente pensar que una operación ''up'' resulte en que el proceso retirado de la lista pase a estado activo. Recuerde que las transiciones de estado activo a preparado y viceversa son siempre controladas por el planificador del sistema operativo.&lt;br /&gt;
&lt;br /&gt;
Además, se disponen de un constructor y un destructor que permiten la creación y la liberación de un semáforo.&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo de uso de semáforos ===&lt;br /&gt;
&lt;br /&gt;
Suponga el siguiente ejemplo en el que se quieren sincronizar dos hilos de un proceso, de manera que se dé la siguiente secuencia de ejecución: A, B, A, B, ... y así sucesivamente. El siguiente código resolvería el problema:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
semaforo a = semaforo.create(1);&lt;br /&gt;
semaforo b = semaforo.create(0);&lt;br /&gt;
&lt;br /&gt;
/* código del hilo A */&lt;br /&gt;
while (1) {&lt;br /&gt;
       a.down();&lt;br /&gt;
       printf(&amp;quot;hilo A\n&amp;quot;);&lt;br /&gt;
       b.up();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* código del hilo B */&lt;br /&gt;
while (1) {&lt;br /&gt;
       b.down();&lt;br /&gt;
       printf(&amp;quot;hilo B\n&amp;quot;);&lt;br /&gt;
       a.up();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tipos de semáforos ===&lt;br /&gt;
&lt;br /&gt;
Dependiendo de la función que cumple el semáforo, vamos a diferenciar los siguientes tipos:&lt;br /&gt;
&lt;br /&gt;
* Semáforo de exclusión mutua, inicialmente su contador vale 1 y permite que haya un único proceso simultáneamente dentro de la sección crítica.&lt;br /&gt;
* Semáforo contador, permiten llevar la cuenta del número de unidades de recurso compartido disponible, que va desde 0 hasta N.&lt;br /&gt;
* Semáforo de espera, generalmente se emplea para forzar que un proceso pase a estado bloqueado hasta que se cumpla la condición que le permite ejecutarse. Por lo general, el contador vale 0 inicialmente, no obstante, podría tener un valor distinto de cero.&lt;br /&gt;
&lt;br /&gt;
=== Ventajas e inconvenientes ===&lt;br /&gt;
&lt;br /&gt;
La principal ventaja de los semáforos frente a los [[cerrojos]] es que permiten sincronizar dos o más procesos de manera que no se desperdician recursos de CPU realizando comprobaciones continuadas de la condición que permite progresar al proceso.&lt;br /&gt;
&lt;br /&gt;
Los inconvenientes asociados al uso de semáforos son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Los programadores tienden a usarlos incorrectamente, de manera que no resuelven de manera adecuada el problema de concurrencia o dan lugar a interbloqueos.&lt;br /&gt;
* No hay nada que obligue a los programadores a usarlos.&lt;br /&gt;
* Los compiladores no ofrecen ningún mecanismo de comprobación sobre el correcto uso de los semáforos.&lt;br /&gt;
* Son independientes del recurso compartido al que se asocian.&lt;br /&gt;
&lt;br /&gt;
Debido a estos inconvenientes, se desarrollaron los [[Monitores|monitores]].&lt;/div&gt;</summary>
		<author><name>Rafgomgal1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sem%C3%A1foros&amp;diff=2588</id>
		<title>Semáforos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sem%C3%A1foros&amp;diff=2588"/>
				<updated>2012-11-16T19:25:20Z</updated>
		
		<summary type="html">&lt;p&gt;Rafgomgal1: /* Semáforos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Planificador de procesos: Diagrama de estados simplicado =&lt;br /&gt;
&lt;br /&gt;
Para comprender apropiadamente cómo funcionan los semáforos es importante recordar cómo funciona el [[Estados de los procesos|diagrama de estados de los procesos]]&lt;br /&gt;
&lt;br /&gt;
= Semáforos =&lt;br /&gt;
&lt;br /&gt;
Los semáforos son un mecanismo de sincronización de procesos inventados por [http://es.wikipedia.org/wiki/Edsger_Dijkstra Edsger Dijkstra] en 1965. Los semáforos permiten al programador '''asistir al planificador del sistema operativo en su toma de decisiones''' de manera que permiten sincronizar la ejecución de dos o más procesos. A diferencia de los [[cerrojos]], los semáforos nos ofrecen un mecanismo de espera no ocupada.&lt;br /&gt;
&lt;br /&gt;
Los semáforos son un tipo de datos que están compuestos por dos atributos:&lt;br /&gt;
&lt;br /&gt;
* Un contador, que siempre vale &amp;gt;= 0.&lt;br /&gt;
* Una lista de procesos(lista formada por el PCB de cada proceso), inicialmente vacía.&lt;br /&gt;
&lt;br /&gt;
Y disponen de dos operaciones básicas que pasamos a describir en pseudocódigo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
down(semáforo s)&lt;br /&gt;
{&lt;br /&gt;
       si s.contador == 0:&lt;br /&gt;
              añade proceso a s.lista&lt;br /&gt;
              proceso a estado bloqueado&lt;br /&gt;
       sino:&lt;br /&gt;
              s.contador--&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el pseudocódigo anterior, se puede añadir un proceso o un hilo.&lt;br /&gt;
&lt;br /&gt;
Nótese que siempre que queramos forzar una transición de un proceso a estado bloqueado, tenemos que hacer que dicho proceso realice una operación ''down'' sobre un semáforo cuyo contador vale cero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
up(semáforo s)&lt;br /&gt;
{&lt;br /&gt;
       si hay procesos en s.lista&lt;br /&gt;
              retira proceso de s.lista&lt;br /&gt;
              proceso a estado preparado&lt;br /&gt;
       sino:&lt;br /&gt;
              s.contador++&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nótese que una operación ''up'' sobre un semáforo en el que hay procesos en su lista resulta en que se retire uno de los procesos (el que más tiempo lleva en la lista), realizando éste la transición a estado preparado. Es un error frecuente pensar que una operación ''up'' resulte en que el proceso retirado de la lista pase a estado activo. Recuerde que las transiciones de estado activo a preparado y viceversa son siempre controladas por el planificador del sistema operativo.&lt;br /&gt;
&lt;br /&gt;
Además, se disponen de un constructor y un destructor que permiten la creación y la liberación de un semáforo.&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo de uso de semáforos ===&lt;br /&gt;
&lt;br /&gt;
Suponga el siguiente ejemplo en el que se quieren sincronizar dos hilos de un proceso, de manera que se dé la siguiente secuencia de ejecución: A, B, A, B, ... y así sucesivamente. El siguiente código resolvería el problema:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
semaforo a = semaforo.create(1);&lt;br /&gt;
semaforo b = semaforo.create(0);&lt;br /&gt;
&lt;br /&gt;
/* código del hilo A */&lt;br /&gt;
while (1) {&lt;br /&gt;
       a.down();&lt;br /&gt;
       printf(&amp;quot;hilo A\n&amp;quot;);&lt;br /&gt;
       b.up();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* código del hilo B */&lt;br /&gt;
while (1) {&lt;br /&gt;
       b.down();&lt;br /&gt;
       printf(&amp;quot;hilo B\n&amp;quot;);&lt;br /&gt;
       a.up();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tipos de semáforos ===&lt;br /&gt;
&lt;br /&gt;
Dependiendo de la función que cumple el semáforo, vamos a diferenciar los siguientes tipos:&lt;br /&gt;
&lt;br /&gt;
* Semáforo de exclusión mutua, inicialmente su contador vale 1 y permite que haya un único proceso simultáneamente dentro de la sección crítica.&lt;br /&gt;
* Semáforo contador, permiten llevar la cuenta del número de unidades de recurso compartido disponible, que va desde 0 hasta N.&lt;br /&gt;
* Semáforo de espera, generalmente se emplea para forzar que un proceso pase a estado bloqueado hasta que se cumpla la condición que le permite ejecutarse. Por lo general, el contador vale 0 inicialmente, no obstante, podría tener un valor distinto de cero.&lt;br /&gt;
&lt;br /&gt;
=== Ventajas e inconvenientes ===&lt;br /&gt;
&lt;br /&gt;
La principal ventaja de los semáforos frente a los [[cerrojos]] es que permiten sincronizar dos o más procesos de manera que no se desperdician recursos de CPU realizando comprobaciones continuadas de la condición que permite progresar al proceso.&lt;br /&gt;
&lt;br /&gt;
Los inconvenientes asociados al uso de semáforos son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Los programadores tienden a usarlos incorrectamente, de manera que no resuelven de manera adecuada el problema de concurrencia o dan lugar a interbloqueos.&lt;br /&gt;
* No hay nada que obligue a los programadores a usarlos.&lt;br /&gt;
* Los compiladores no ofrecen ningún mecanismo de comprobación sobre el correcto uso de los semáforos.&lt;br /&gt;
* Son independientes del recurso compartido al que se asocian.&lt;br /&gt;
&lt;br /&gt;
Debido a estos inconvenientes, se desarrollaron los [[Monitores|monitores]].&lt;/div&gt;</summary>
		<author><name>Rafgomgal1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Conmutaci%C3%B3n_de_procesos&amp;diff=2561</id>
		<title>Conmutación de procesos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Conmutaci%C3%B3n_de_procesos&amp;diff=2561"/>
				<updated>2012-11-07T16:08:23Z</updated>
		
		<summary type="html">&lt;p&gt;Rafgomgal1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La conmutación de procesos es la operación que consiste en retirar el procesador a un proceso para asignárselo a otro. La conmutación se produce por cuatro razones:&lt;br /&gt;
&lt;br /&gt;
#Un proceso agota el tiempo máximo asignado al procesador, por tanto, se debe dar paso a otro proceso para garantizar que la multiprogramación es llevada a cabo apropiadamente.&lt;br /&gt;
#Un proceso está pendiente de un evento externo, por tanto, pasa a estado bloqueado haciendo uso de la llamada al sistema bloqueante. El planificador debe asignar el procesador a otro nuevo proceso de entre los que están en estado preparado.&lt;br /&gt;
#Que termine la ejecución del proceso en cuestión.&lt;br /&gt;
#Que haya una [[Gestión_de_Entrada/Salida|interrupción]] en la ejecución.&lt;br /&gt;
&lt;br /&gt;
Los pasos que se siguen son los siguientes:&lt;br /&gt;
&lt;br /&gt;
# Pasar a modo privilegiado.&lt;br /&gt;
# Guardar el contenido de los registros del hardware en el PCB (el llamado ''contexto de la ejecución'').&lt;br /&gt;
# Actualizar el estado del proceso en el PCB (el estado ha pasado de activo a bloqueado o preparado).&lt;br /&gt;
# Si se produjo una interrupción, atenderla.&lt;br /&gt;
# Seleccionar un nuevo proceso.&lt;br /&gt;
# Restaurar el contexto de ejecución del nuevo proceso seleccionado. En el caso de que el nuevo proceso no hubiese estado en el contexto de la ejecución deberá inicializarse.&lt;br /&gt;
# Pasar a modo no privilegiado.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Asig2.png]]&lt;br /&gt;
&lt;br /&gt;
El tiempo de conmutación se considera una penalizanción, ya que si realizamos muchas conmutaciones el rendimiento decrece y esto da al usuario la sensación de que sus actividades van a saltos. Para optimizar esto hay que evitar conmutaciones innecesarias, empleando para ello criterios de selección lo más eficientes posibles.&lt;/div&gt;</summary>
		<author><name>Rafgomgal1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Qu%C3%A9_es_un_Sistema_Operativo&amp;diff=2545</id>
		<title>Qué es un Sistema Operativo</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Qu%C3%A9_es_un_Sistema_Operativo&amp;diff=2545"/>
				<updated>2012-10-27T09:09:21Z</updated>
		
		<summary type="html">&lt;p&gt;Rafgomgal1: /* 1.1.1. ¿Qué es un Sistema Operativo? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 1.1. ¿Qué es un Sistema Operativo? =&lt;br /&gt;
&lt;br /&gt;
== 1.1.1. ¿Qué es un Sistema Operativo? ==&lt;br /&gt;
&lt;br /&gt;
El sistema operativo es el conjunto de programas que:&lt;br /&gt;
&lt;br /&gt;
* Gestionan y reparten de manera equitativa los recursos que ofrece el ''hardware'' entre los programas en ejecución. Concretamente, los recursos a gestionar son tres:&lt;br /&gt;
&lt;br /&gt;
** La [http://es.wikipedia.org/wiki/Unidad_central_de_procesamiento CPU], también conocida como procesador o unidad central de procesamiento. Todo procesador ofrece un conjunto de instrucciones de bajo nivel (lenguaje ensamblador) con operaciones básicas que ejecuta de manera secuencial.&lt;br /&gt;
** La [http://es.wikipedia.org/wiki/Memoria_principal Memoria principal], memoria empleada para almacenar el estado de la ejecución del programa.&lt;br /&gt;
** Los [http://es.wikipedia.org/wiki/Entrada/salida#Dispositivos_de_entrada_y_salida dispositivos de Entrada/Salida], tales como la tarjeta de vídeo, la tarjeta de red, los dispositivos de almacenamiento masivo (disco duro del tipo que sea), teclado, ratón, pantalla, entre muchos otros.&lt;br /&gt;
&lt;br /&gt;
* Ofrece un '''lanzador de aplicaciones''', que pueden estar basados en:&lt;br /&gt;
&lt;br /&gt;
** Intérprete de órdenes/comandos (traducción incorrecta del original inglés ''command'', que significa órden), también llamado ''shell''. El dispositivo de entrada empleado es el teclado. Es generalmente complejo pero ofrece funcionalidades avanzadas. Algunos ejemplos son la shell de ''bash'' disponible en Linux o el PowerShell disponible en la recientes versiones de MS-Windows. Para ejecutar un programa se escribe su nombre, seguido de opciones (en caso de que las tenga y se pulsa la tecla de ''Intro'').&lt;br /&gt;
** Gestor de ventanas: Son los más populares por su sencillez, aunque ofrecen menor funcionalidad que los basados en intérpretes de órdenes. Los programas se ejecutan mediante un clic sencillo o doble de ratón. En dispositivos portátiles en lugar del ratón se emplea una pantalla táctil.&lt;br /&gt;
&lt;br /&gt;
* Ofrece una interfaz estable y homogénea a los programas de usuario para solicitar servicios. Esta interfaz se conoce como '''API''' (del inglés, ''Application Programming Interface'') del sistema operativo.&lt;br /&gt;
&lt;br /&gt;
El sistema operativo se sitúa entre los programas de usuario en ejecución y el hardware, de manera que los programas '''siempre''' deben emplear la ''API'' del sistema operativo para acceder a los recursos que ofrece el hardware.&lt;br /&gt;
&lt;br /&gt;
== 1.1.2. Principios de diseño de un buen Sistema Operativo ==&lt;br /&gt;
&lt;br /&gt;
Los aspectos a tener en cuenta respecto a la gestión de recursos son:&lt;br /&gt;
&lt;br /&gt;
* Realizar una gestión eficiente de los recursos.&lt;br /&gt;
* Coordinar la asignación de los mismos entre los programas de ejecución (como se si tratase de un moderador en un debate, asignando el turno de palabra a cada uno de los asistentes).&lt;br /&gt;
* Hacer un reparto equitativo (del diccionario de la RAE, ''equidad'' significa &amp;quot;dar a cada uno lo que merece&amp;quot;). Esto no significa hacer una división exacta de los recursos, si no que se tendrán en cuenta la naturaleza de cada programa en ejecución a la hora de hacer el reparto.&lt;br /&gt;
* No ofrecer ninguna interfaz que permita a las aplicaciones acceder directamente los recursos hardware.&lt;br /&gt;
&lt;br /&gt;
Respecto a la API, debe:&lt;br /&gt;
&lt;br /&gt;
* Ser estable, no debe cambiar con el tiempo.&lt;br /&gt;
* Ser homogénea.&lt;br /&gt;
* Debe abstraer y ocultar los detalles de bajo nivel de los componentes, de manera que los programas lleguen a ser complemente independientes del hardware.&lt;br /&gt;
&lt;br /&gt;
Además de todo esto, un buen sistema operativo es ''portable'', es decir, que soporte diferentes arquitecturas ''hardware'', como por ejemplo la ARM (típicamente empleada en dispositivos móviles con limitaciones importantes en materia de energía), la PC x86 y x86_64 de Intel, las variantes del PC que ofrece AMD, la arquitectura PowerPC (empleada antaño por Apple y desarrollada por IBM) y SPARC (desarrollada por Sun Microsystems, adquirida por Oracle).&lt;/div&gt;</summary>
		<author><name>Rafgomgal1</name></author>	</entry>

	</feed>