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

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Llamadas_al_sistema&amp;diff=1267</id>
		<title>Llamadas al sistema</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Llamadas_al_sistema&amp;diff=1267"/>
				<updated>2011-06-12T10:44:15Z</updated>
		
		<summary type="html">&lt;p&gt;Luidela1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Una llamada al sistema es una petición que hace un proceso al sistema operativo para obtener cualquier tipo de servicio. La interfaz que el sistema operativo presenta a los programas se denomina API, donde constan todas las llamas al sistema de las que dispone.&lt;br /&gt;
Los programas se hacen independientes de la maquina, aunque dependientes del API. Por ello, existen Apis estandarizadas, como POSIX.&lt;br /&gt;
&lt;br /&gt;
=Compatibilidad hacia atrás y hacia delante=&lt;br /&gt;
&lt;br /&gt;
En un sistema operativo bien diseñado, la interfaz de las llamadas al sistema han de ser ser estables a lo largo del tiempo, de forma que la modificación de su funcionamiento interno no repercuta en el funcionamiento externo de éstas para asegurar la compatibilidad hacia atrás([http://en.wikipedia.org/wiki/Backward_compatibility Backward compatibility]). Además, aquellas llamadas que queden obsoletas o en desuso han de ser conservadas para, de la misma manera, asegurar el funcionamiento de programas antiguos ([http://en.wikipedia.org/wiki/Legacy_system?=Legacy_support Legacy Support]).&lt;br /&gt;
&lt;br /&gt;
En ocasiones los sistemas operativos pueden incluir en su diseño criterios de compatibilidad hacia adelante([http://en.wikipedia.org/wiki/Forward_compatibility Fordward compatibility]). Un ejemplo de este tipo de sistemas son aquellos capaces de mostrar información detallada al usuario de aquello que no pueden comprender o los sistemas ignorantes, que son aquellos que solo ejecutan lo que pueden comprender y obvian el resto.&lt;/div&gt;</summary>
		<author><name>Luidela1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n_hist%C3%B3rica&amp;diff=1266</id>
		<title>Introducción histórica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n_hist%C3%B3rica&amp;diff=1266"/>
				<updated>2011-06-12T10:35:01Z</updated>
		
		<summary type="html">&lt;p&gt;Luidela1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*En 1940, durante la 2º Guerra Mundial , se inicia la 1º Generacion de ordenadores , tales como el ENIAC(1943-1945) que se desarrollo en EEUU y el EDSAC (1949) que se desarrolla en RU.&lt;br /&gt;
&lt;br /&gt;
*Mas tarde , se desarrollan los 1º lenguajes de programacion , se desarrollan los 1º ordenadores comerciales como IBM 701, 702 y 650, en el que algunos de ellos se utilizaban para el calculo cientifico en aplicaciones de gestion, tambien se crean otro ordenadores como el UNIVAC I en EEUU y MARK I o Harvard Mark I en la RU&lt;br /&gt;
&lt;br /&gt;
-Maquinas relevantes:&lt;br /&gt;
&lt;br /&gt;
A) ENIAC:&lt;br /&gt;
*Maquina de cálculo completamente electrónica.&lt;br /&gt;
*Arquitectura no Von-Neumann.&lt;br /&gt;
*17468 lámparas.&lt;br /&gt;
*20 registros de 10 lámparas para representar el BCD.&lt;br /&gt;
B) EDSAC&lt;br /&gt;
*Primera máquina con arquitectura Von Neumann.&lt;br /&gt;
*Programada en lenguaje ensamblador.&lt;br /&gt;
C) Primeras maquinas comerciales (a partir de 1951):&lt;br /&gt;
*Univac I y Mark I&lt;br /&gt;
*IBM 701&lt;br /&gt;
*IBM 702 e IBM 650&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
*Durante la 2º Generacion de Ordenadores, una generacion en donde los equipos eran mas fiables, se crearia el primer germen de sistema operativos, que lo que queria conseguir era un programa para reservar memoria y automatizar ciertas tareas (como por ejemplo lecturas de cintas magneticas).&lt;br /&gt;
&lt;br /&gt;
-Maquinas relevantes&lt;br /&gt;
A) TRADIC:&lt;br /&gt;
* Ordenador completamente transistorizado.&lt;br /&gt;
* Suficientemente pequeño para montarse en un B-52.&lt;br /&gt;
* Primera unidad destinada a venta: 1958.&lt;br /&gt;
B) IBM 7094&lt;br /&gt;
* Memoria: 32K-palabras de 32 bits.&lt;br /&gt;
* Potencia de cálculo: 0,35MIPS.&lt;br /&gt;
C) PDP-1:&lt;br /&gt;
* Uno de los primeros micro-computadores&lt;br /&gt;
* 4K-palabras de 16 bits&lt;br /&gt;
* Precio: 5% de IBM 7094&lt;br /&gt;
-----------------&lt;br /&gt;
&lt;br /&gt;
*En la 3º Generacion de Ordenadores (años 1960-1970), se consigio una alta escala de integracion en circuitos, en los que se consigue mas capacidad de memoria, y mas rendimiento y velocidad en los equipos. Se crean los mainFrame , equipos centrales para procesar una gran cantidad de datos, como por ejemplo IBM 360 y los &amp;quot;mini&amp;quot;ordenadores, en la universidades (DIGITAL PDP - 7 , PDP - 11).&lt;br /&gt;
&lt;br /&gt;
-Maquinas relevantes&lt;br /&gt;
A) Aparece el concepto de familia de ordenadores.&lt;br /&gt;
* Poder elegir diferentes configuraciones.&lt;br /&gt;
* Catálogo de dispositivos y periféricos compatibles.&lt;br /&gt;
B) IBM 360&lt;br /&gt;
* Sistemas operativo: OS/360&lt;br /&gt;
* Lenguaje de control de trabajos: JCL&lt;br /&gt;
* Lenguaje de programación: PL/1&lt;br /&gt;
C) MULTICS&lt;br /&gt;
* Diferentes empresas ayudando en su desarrollo.&lt;br /&gt;
* Sistema operativo interactivo en tiempo compartido.&lt;br /&gt;
* Pensado para dar servicio de computo a toda una ciudad.&lt;br /&gt;
D) Hardware: &lt;br /&gt;
*GE-645, 2 procesadores con 256 K-palabras de 36 bits.&lt;br /&gt;
-------------------------------&lt;br /&gt;
*En 1973 , se crea el primer sistema operativo de tipo UNIX&lt;br /&gt;
&lt;br /&gt;
*En 1980, los fabricantes mas conocidos crean sistemas operativos basados en UNIX, como IBM crea AIX, SUN crea Solaris, Digital crea The64,HP crea HP-UX y Microsoft crea Xenix. Tambien paralelamente en la universidad de california crea un sistema operativo llamado BSD que se distribuye para usos didacticos.&lt;br /&gt;
&lt;br /&gt;
*En 1983, Richard Stallman inicia un proyecto llamado GNU en el que consiste desarrollar un sistema operativo , en el que se puede distribuir de manera gratuita y libre&lt;br /&gt;
&lt;br /&gt;
*En 1990, se crea el Intel 80386 y la universidad de California distrubuye el sistema BSD + un soporte real&lt;br /&gt;
&lt;br /&gt;
*En 1992, se lanza el 1º sistema operativo de tipo GNU / LINUX&lt;/div&gt;</summary>
		<author><name>Luidela1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n_hist%C3%B3rica&amp;diff=1265</id>
		<title>Introducción histórica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n_hist%C3%B3rica&amp;diff=1265"/>
				<updated>2011-06-12T10:32:00Z</updated>
		
		<summary type="html">&lt;p&gt;Luidela1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*En 1940, durante la 2º Guerra Mundial , se inicia la 1º Generacion de ordenadores , tales como el ENIAC(1943-1945) que se desarrollo en EEUU y el EDSAC (1949) que se desarrolla en RU.&lt;br /&gt;
&lt;br /&gt;
*Mas tarde , se desarrollan los 1º lenguajes de programacion , se desarrollan los 1º ordenadores comerciales como IBM 701, 702 y 650, en el que algunos de ellos se utilizaban para el calculo cientifico en aplicaciones de gestion, tambien se crean otro ordenadores como el UNIVAC I en EEUU y MARK I o Harvard Mark I en la RU&lt;br /&gt;
&lt;br /&gt;
-Maquinas relevantes:&lt;br /&gt;
&lt;br /&gt;
A) ENIAC:&lt;br /&gt;
*Maquina de cálculo completamente electrónica.&lt;br /&gt;
*Arquitectura no Von-Neumann.&lt;br /&gt;
*17468 lámparas.&lt;br /&gt;
*20 registros de 10 lámparas para representar el BCD.&lt;br /&gt;
B) EDSAC&lt;br /&gt;
*Primera máquina con arquitectura Von Neumann.&lt;br /&gt;
*Programada en lenguaje ensamblador.&lt;br /&gt;
C) Primeras maquinas comerciales (a partir de 1951):&lt;br /&gt;
*Univac I y Mark I&lt;br /&gt;
*IBM 701&lt;br /&gt;
*IBM 702 e IBM 650&lt;br /&gt;
&lt;br /&gt;
*Durante la 2º Generacion de Ordenadores, una generacion en donde los equipos eran mas fiables, se crearia el primer germen de sistema operativos, que lo que queria conseguir era un programa para reservar memoria y automatizar ciertas tareas (como por ejemplo lecturas de cintas magneticas)&lt;br /&gt;
&lt;br /&gt;
*En la 3º Generacion de Ordenadores (años 1960-1970), se consigio una alta escala de integracion en circuitos, en los que se consigue mas capacidad de memoria, y mas rendimiento y velocidad en los equipos. Se crean los mainFrame , equipos centrales para procesar una gran cantidad de datos, como por ejemplo IBM 360 y los &amp;quot;mini&amp;quot;ordenadores, en la universidades (DIGITAL PDP - 7 , PDP - 11).&lt;br /&gt;
&lt;br /&gt;
*En 1973 , se crea el primer sistema operativo de tipo UNIX&lt;br /&gt;
&lt;br /&gt;
*En 1980, los fabricantes mas conocidos crean sistemas operativos basados en UNIX, como IBM crea AIX, SUN crea Solaris, Digital crea The64,HP crea HP-UX y Microsoft crea Xenix. Tambien paralelamente en la universidad de california crea un sistema operativo llamado BSD que se distribuye para usos didacticos.&lt;br /&gt;
&lt;br /&gt;
*En 1983, Richard Stallman inicia un proyecto llamado GNU en el que consiste desarrollar un sistema operativo , en el que se puede distribuir de manera gratuita y libre&lt;br /&gt;
&lt;br /&gt;
*En 1990, se crea el Intel 80386 y la universidad de California distrubuye el sistema BSD + un soporte real&lt;br /&gt;
&lt;br /&gt;
*En 1992, se lanza el 1º sistema operativo de tipo GNU / LINUX&lt;/div&gt;</summary>
		<author><name>Luidela1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n_hist%C3%B3rica&amp;diff=1264</id>
		<title>Introducción histórica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n_hist%C3%B3rica&amp;diff=1264"/>
				<updated>2011-06-12T10:27:02Z</updated>
		
		<summary type="html">&lt;p&gt;Luidela1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*En 1940, durante la 2º Guerra Mundial , se inicia la 1º Generacion de ordenadores , tales como el ENIAC(1943-1945) que se desarrollo en EEUU y el EDSAC (1949) que se desarrolla en RU.&lt;br /&gt;
&lt;br /&gt;
*Mas tarde , se desarrollan los 1º lenguajes de programacion , se desarrollan los 1º ordenadores comerciales como IBM 701, 702 y 650, en el que algunos de ellos se utilizaban para el calculo cientifico en aplicaciones de gestion, tambien se crean otro ordenadores como el UNIVAC I en EEUU y MARK I o Harvard Mark I en la RU&lt;br /&gt;
&lt;br /&gt;
*Durante la 2º Generacion de Ordenadores, una generacion en donde los equipos eran mas fiables, se crearia el primer germen de sistema operativos, que lo que queria conseguir era un programa para reservar memoria y automatizar ciertas tareas (como por ejemplo lecturas de cintas magneticas)&lt;br /&gt;
&lt;br /&gt;
*En la 3º Generacion de Ordenadores (años 1960-1970), se consigio una alta escala de integracion en circuitos, en los que se consigue mas capacidad de memoria, y mas rendimiento y velocidad en los equipos. Se crean los mainFrame , equipos centrales para procesar una gran cantidad de datos, como por ejemplo IBM 360 y los &amp;quot;mini&amp;quot;ordenadores, en la universidades (DIGITAL PDP - 7 , PDP - 11).&lt;br /&gt;
&lt;br /&gt;
*En 1973 , se crea el primer sistema operativo de tipo UNIX&lt;br /&gt;
&lt;br /&gt;
*En 1980, los fabricantes mas conocidos crean sistemas operativos basados en UNIX, como IBM crea AIX, SUN crea Solaris, Digital crea The64,HP crea HP-UX y Microsoft crea Xenix. Tambien paralelamente en la universidad de california crea un sistema operativo llamado BSD que se distribuye para usos didacticos.&lt;br /&gt;
&lt;br /&gt;
*En 1983, Richard Stallman inicia un proyecto llamado GNU en el que consiste desarrollar un sistema operativo , en el que se puede distribuir de manera gratuita y libre&lt;br /&gt;
&lt;br /&gt;
*En 1990, se crea el Intel 80386 y la universidad de California distrubuye el sistema BSD + un soporte real&lt;br /&gt;
&lt;br /&gt;
*En 1992, se lanza el 1º sistema operativo de tipo GNU / LINUX&lt;/div&gt;</summary>
		<author><name>Luidela1</name></author>	</entry>

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

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Discos_Magn%C3%A9ticos&amp;diff=1213</id>
		<title>Discos Magnéticos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Discos_Magn%C3%A9ticos&amp;diff=1213"/>
				<updated>2011-06-07T19:16:58Z</updated>
		
		<summary type="html">&lt;p&gt;Luidela1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Archivo:Sin_título.png]][[Archivo:Estructura_disco.png|Estructura de un disco óptico|right]]&lt;br /&gt;
Partes importantes de los discos magnéticos:&lt;br /&gt;
&lt;br /&gt;
*Cabezal: sección que se mueve por un plato para leer la información.&lt;br /&gt;
*Pista (track): zona accesible por el cabezal.&lt;br /&gt;
*Sector: los que se divide una pista.&lt;br /&gt;
*Cilindro: Conjunto accesible por todos los cabezales.&lt;br /&gt;
&lt;br /&gt;
Prestaciones a tener en cuenta de los discos duros magnéticos:&lt;br /&gt;
&lt;br /&gt;
*Capacidad&lt;br /&gt;
*rpm (revoluciones por minuto)&lt;br /&gt;
*Tiempo de arranque del motor&lt;br /&gt;
*Tiempo de accesos (lectura/escritura):&lt;br /&gt;
**Tiempo de búsqueda: tiempo en desplazarse de una pista a otra.&lt;br /&gt;
**Demora de rotación: tiempo en desplazarse de un sector a otro.&lt;br /&gt;
**Tiempo de transmisión: tiempo desde la lectura de los datos hasta que pasa la información al gestor de dispositivo correspondiente.&lt;/div&gt;</summary>
		<author><name>Luidela1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Sin_t%C3%ADtulo.png&amp;diff=1212</id>
		<title>Archivo:Sin título.png</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Sin_t%C3%ADtulo.png&amp;diff=1212"/>
				<updated>2011-06-07T19:16:20Z</updated>
		
		<summary type="html">&lt;p&gt;Luidela1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Luidela1</name></author>	</entry>

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

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol_9.2&amp;diff=1209</id>
		<title>Sol 9.2</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol_9.2&amp;diff=1209"/>
				<updated>2011-06-07T18:48:12Z</updated>
		
		<summary type="html">&lt;p&gt;Luidela1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La lista de paginas a la que se acceden son las siguientes : '''2--2--3--1--1--3--4--5--1--1--2--3--4''' &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    _________________accesos a página____________________&lt;br /&gt;
     |_2_|_2_|_3_|_1_||_1_|_3_|_4_|_5_||_1_|_1_|_2_|_3_||_4_|           ||=Fin periodo, puesta R=0&lt;br /&gt;
  ===========================================================&lt;br /&gt;
   1 | 2 | = | = | = || 2 | = | = | = || 2 | = | 2 | = || 2 |            Periodo = 4&lt;br /&gt;
     |R=1| = | = | = ||R=0| = | = | = ||R=0| = |R=1| = ||R=0|&lt;br /&gt;
 m---|---|---|---|---||---|---|---|---||---|---|---|---||---|&lt;br /&gt;
 a 2 |   |   | 3 | = || 3 | 3 | = | = || 3 | = | = | 3 || 3 |           Contadores:&lt;br /&gt;
 r   |   |   |R=1| = ||R=0|R=1| = | = ||R=0| = | = |R=1||R=0|               P0: 2=1 3=1 1=1 4=0 5=0&lt;br /&gt;
 c---|---|---|---|---||---|---|---|---||---|---|---|---||---|               P1: 2=1 3=2 1=2 4=0 5=1&lt;br /&gt;
 o 3 |   |   |   | 1 || 1 | = | = | = || 1 | = | = | = || 1 |               P2: 2=2 3=3 1=3 4=0 5=1&lt;br /&gt;
 s   |   |   |   |R=1||R=1| = | = | = ||R=1| = | = | = ||R=0|&lt;br /&gt;
  ---|---|---|---|---||---|---|---|---||---|---|---|---||---|&lt;br /&gt;
   4 |   |   |   |   ||   |   | 4 | 5 || 5 | = | = | = || 4 |&lt;br /&gt;
     |   |   |   |   ||   |   |R=1|R=1||R=0| = | = | = ||R=0|&lt;br /&gt;
  ------------------------------------------------------------&amp;gt; t&lt;br /&gt;
 fp  | x |   | x | x ||   |   | x | x ||   |   |   |   || x |&lt;br /&gt;
  |_&amp;gt; Fallos de Página     &lt;br /&gt;
                     P0(2++, 3++,1++) P1(3++,1++,5++)   P2(2++,3++,1++)&lt;br /&gt;
&lt;br /&gt;
                     6&lt;br /&gt;
  tasa fallos pág = ---- = 0,4615&lt;br /&gt;
                     13&lt;/div&gt;</summary>
		<author><name>Luidela1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol_9.2&amp;diff=1208</id>
		<title>Sol 9.2</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol_9.2&amp;diff=1208"/>
				<updated>2011-06-07T18:47:40Z</updated>
		
		<summary type="html">&lt;p&gt;Luidela1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La lista de paginas a la que se acceden son las siguientes : '''2--2--3--1--1--3--4--5--1--1--2--3--4''' &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    _________________accesos a página____________________&lt;br /&gt;
     |_2_|_2_|_3_|_1_||_1_|_3_|_4_|_5_||_1_|_1_|_2_|_3_||_4_|           ||=Fin periodo, puesta R=0&lt;br /&gt;
  ===========================================================&lt;br /&gt;
   1 | 2 | = | = | = || 2 | = | = | = || 2 | = | 2 | = || 2 |            Periodo = 4&lt;br /&gt;
     |R=1| = | = | = ||R=0| = | = | = ||R=0| = |R=1| = ||R=0|&lt;br /&gt;
 m---|---|---|---|---||---|---|---|---||---|---|---|---||---|&lt;br /&gt;
 a 2 |   |   | 3 | = || 3 | 3 | = | = || 3 | = | = | 3 || 3 |           Contadores:&lt;br /&gt;
 r   |   |   |R=1| = ||R=0|R=1| = | = ||R=0| = | = |R=1||R=0|               P0: 2=1 3=1 1=1 4=0 5=0&lt;br /&gt;
 c---|---|---|---|---||---|---|---|---||---|---|---|---||---|               P1: 2=1 3=2 1=2 4=0 5=1&lt;br /&gt;
 o 3 |   |   |   | 1 || 1 | = | = | = || 1 | = | = | = || 1 |               P2: 2=2 3=3 1=3 4=0 5=1&lt;br /&gt;
 s   |   |   |   |R=1||R=1| = | = | = ||R=1| = | = | = ||R=0|&lt;br /&gt;
  ---|---|---|---|---||---|---|---|---||---|---|---|---||---|&lt;br /&gt;
   4 |   |   |   |   ||   |   | 4 | 5 || 5 | = | = | = || 4 |&lt;br /&gt;
     |   |   |   |   ||   |   |R=1|R=1||R=0| = | = | = ||R=0|&lt;br /&gt;
  ------------------------------------------------------------&amp;gt; t&lt;br /&gt;
 fp  | x |   | x | x ||   |   | x | x ||   |   |   |   || x |&lt;br /&gt;
  |_&amp;gt; Fallos de Página     &lt;br /&gt;
                     P0(2++, 3++,1++) P1(3++,1++,5++)   P2(2++,3++,1++)&lt;br /&gt;
&lt;br /&gt;
                     6&lt;br /&gt;
  tasa fallos pág = ---- = 0,4615&lt;br /&gt;
                     13&lt;br /&gt;
&lt;br /&gt;
En la iteraccion 8 no se sustituiria el 2? ya que es el que hace mas tiempo que no se ha utilizado--[[Usuario:Luidela1|Luidela1]] 18:47 7 jun 2011 (UTC)&lt;/div&gt;</summary>
		<author><name>Luidela1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sistema_combinado&amp;diff=1186</id>
		<title>Sistema combinado</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sistema_combinado&amp;diff=1186"/>
				<updated>2011-06-07T15:18:51Z</updated>
		
		<summary type="html">&lt;p&gt;Luidela1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Emplea paginación y segmentación.&lt;br /&gt;
&lt;br /&gt;
Idea: Cada segmento ocupa n páginas.&lt;br /&gt;
&lt;br /&gt;
Tiene las ventajas de tener la protección de memoria de segmentos y su compartición, la carga a petición de las páginas y su fácil gestión.&lt;br /&gt;
&lt;br /&gt;
En estos sistemas, cada segmento ocupa una página como mínimo. También se podría decir que un segmento ocupa siempre N páginas.&lt;br /&gt;
Tamaño Segmento = N * Tamaño de Página&lt;/div&gt;</summary>
		<author><name>Luidela1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sistema_combinado&amp;diff=1185</id>
		<title>Sistema combinado</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sistema_combinado&amp;diff=1185"/>
				<updated>2011-06-07T15:18:27Z</updated>
		
		<summary type="html">&lt;p&gt;Luidela1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Emplea paginación y segmentación.&lt;br /&gt;
&lt;br /&gt;
Idea: Cada segmento ocupa n páginas.&lt;br /&gt;
&lt;br /&gt;
Tiene las ventajas de tener la protección de memoria de segmentos y su compartición, la carga a petición de las páginas y su fácil gestión.&lt;br /&gt;
&lt;br /&gt;
En estos sistemas, cada segmento ocupa una página como mínimo. También se podría decir que un segmento ocupa siempre N páginas.&lt;br /&gt;
Tamaño Segmento = N * Tamaño de Página �Tamaño&lt;/div&gt;</summary>
		<author><name>Luidela1</name></author>	</entry>

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

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

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

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Otro_ejemplo&amp;diff=1173</id>
		<title>Otro ejemplo</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Otro_ejemplo&amp;diff=1173"/>
				<updated>2011-06-07T14:26:50Z</updated>
		
		<summary type="html">&lt;p&gt;Luidela1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Ej: tenemos los siguientes procesos: m(P1)=6KB,m(P2)=1KB,m(P3)=3KB,m(P4)=31KB,m(P5)=30KB,m(P6)=2KB,m(P7)=4KB,m(P8)=1KB;&lt;br /&gt;
     y una memoria de 64 KB divididos en 4 huecos como sigue:&lt;br /&gt;
  _____&lt;br /&gt;
 |_____| H1 = 8KB     | m(P1)=6KB  | H&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;(P1)=0 | t(P1)=8&lt;br /&gt;
 |_____| H2 = 8KB     | m(P2)=1KB  | H&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;(P2)=0 | t(P2)=8&lt;br /&gt;
 |     |              | m(P3)=3KB  | H&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;(P3)=1 | t(P3)=2&lt;br /&gt;
 |_____| H3 = 16KB    | m(P4)=31KB | H&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;(P4)=0 | t(P4)=2&lt;br /&gt;
 |     |              | m(P5)=30KB | H&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;(P5)=0 | t(P5)=2&lt;br /&gt;
 |     |              | m(P6)=2KB  | H&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;(P6)=0 | t(P6)=2&lt;br /&gt;
 |     | H4 = 32KB    | m(P7)=4KB  | H&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;(P7)=2 | t(P7)=2&lt;br /&gt;
 |_____|              | m(P8)=1KB  | H&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;(P8)=0 | t(P8)=2&lt;br /&gt;
&lt;br /&gt;
 solución:&lt;br /&gt;
  &amp;gt;: fin del proceso.&lt;br /&gt;
 &lt;br /&gt;
     | P1| P1| P1| P1| P1| P1| P1| P1|   |&lt;br /&gt;
   H1|---|---|---|---|---|---|---|---&amp;gt;   |&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     | P6| P6| P7| P7| P3| P3|   |   |   |&lt;br /&gt;
   H2|---|---&amp;gt;---|---&amp;gt;---|---&amp;gt;   |   |   |&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     | P2| P2| P2| P2| P2| P2| P2| P2|   |&lt;br /&gt;
   H3|---|---|---|---|---|---|---|---&amp;gt;   |&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     | P4| P4| P5| P5| P8| P8|   |   |   |&lt;br /&gt;
   H4|---|---&amp;gt;---|---&amp;gt;---|---&amp;gt;   |   |   |&lt;br /&gt;
     |___|___|___|___|___|___|___|___|___|__&amp;gt;&lt;br /&gt;
     0   1   2   3   4   5   6   7   8   9  t&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
¿A qué criterio pertenece esta solución?&lt;br /&gt;
--[[Usuario:Jorcalmar|Jorcalmar]] 16:42 31 may 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soluciones:&lt;br /&gt;
&lt;br /&gt;
'''a) Mejor ajuste estático''': Asociamos a cada proceso la partición menor en la que cabe. En nuestro caso:&lt;br /&gt;
P1: H1&lt;br /&gt;
P2: H2&lt;br /&gt;
P3: H1/H2 el que acabe primero.&lt;br /&gt;
P4: H4&lt;br /&gt;
P5: H4&lt;br /&gt;
P6: H1/H2 el que acabe primero.&lt;br /&gt;
P7: H1/H2 el que acabe primero.&lt;br /&gt;
P8: H1/H2 el que acabe primero.&lt;br /&gt;
&lt;br /&gt;
Como vemos, usando este criterio, la partición H3 se queda siempre libre. Éste es uno de los inconvenientes del mejor ajuste estático, no aprovechamos todas las particiones.&lt;br /&gt;
&lt;br /&gt;
     | P1| P1| P1| P1| P1| P1| P1| P1| P3| P3| P7| P7&lt;br /&gt;
   H1|---|---|---|---|---|---|---|---&amp;gt;---|---&amp;gt;---|---&amp;gt;&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     | P2| P2| P2| P2| P2| P2| P2| P2| P6| P6| P8| P8&lt;br /&gt;
   H2|---|---|---|---|---|---|---|---&amp;gt;---|--&amp;gt;|---|---&amp;gt;&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
   H3|   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     | P4| P4| P5| P5|   |   |   |   |   |   |   |   |&lt;br /&gt;
   H4|---|---&amp;gt;---|---&amp;gt;   |   |   |   |   |   |   |   |&lt;br /&gt;
     |___|___|___|___|___|___|___|___|___|__ |___|___|&lt;br /&gt;
     0   1   2   3   4   5   6   7   8   9  10   11  12&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''b) Primer ajuste:''' En este criterio, elegimos el primer proceso que quepa en la partición que tengamos en la cola de procesos en espera.&lt;br /&gt;
Para este criterio, es conveniente verificar en cada instante de tiempo qué procesos tengo en espera (y en qué orden) y qué particiones se me van quedando libres en cada instante.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     | P1| P1| P1| P1| P1| P1| P1| P1|   |   |   |   |&lt;br /&gt;
   H1|---|---|---|---|---|---|---|---&amp;gt;   |   |   |   |&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     | P2| P2| P2| P2| P2| P2| P2| P2|   |   |   |   |&lt;br /&gt;
   H2|---|---|---|---|---|---|---|---&amp;gt;   |   |   |   |&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     | P6| P6| P8| P8| P3| P3|   |   |   |   |   |   |&lt;br /&gt;
   H3|---|---&amp;gt;---|---&amp;gt;---|---&amp;gt;   |   |   |   |   |   |&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     | P4| P4| P5| P5| P7| P7|   |   |   |   |   |   |&lt;br /&gt;
   H4|---|---&amp;gt;---|---&amp;gt;---|---&amp;gt;   |   |   |   |   |   |&lt;br /&gt;
     |___|___|___|___|___|___|___|___|___|__ |___|___|&lt;br /&gt;
     0   1   2   3   4   5   6   7   8   9  10   11  12&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''c) Mejor ajuste dinámico:'''En este criterio, hemos de seleccionar el mayor proceso que quepa en nuestra partición. Para esto debemos recorrer toda la cola de procesos en espera. Como inconveniente nos encontramos con que los procesos menores quedarán aplazados en favor de los procesos de mayor tamaño. Una vez más debemos tener cuidado verificando el estado de la cola de espera en cada instante de tiempo para la elección de los procesos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     | P1| P1| P1| P1| P1| P1| P1| P1|   |   |   |   |&lt;br /&gt;
   H1|---|---|---|---|---|---|---|---&amp;gt;   |   |   |   |&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     | P6| P6| P7| P7| P3| P3|   |   |   |   |   |   |&lt;br /&gt;
   H2|---|---&amp;gt;---|---&amp;gt;---|---&amp;gt;   |   |   |   |   |   |&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     | P2| P2| P2| P2| P2| P2| P2| P2|   |   |   |   |&lt;br /&gt;
   H3|---|---|---|---|---|---|---|---&amp;gt;   |   |   |   |&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     | P4| P4| P5| P5| P8| P8|   |   |   |   |   |   |&lt;br /&gt;
   H4|---|---&amp;gt;---|---&amp;gt;---|---&amp;gt;   |   |   |   |   |   |&lt;br /&gt;
     |___|___|___|___|___|___|___|___|___|__ |___|___|&lt;br /&gt;
     0   1   2   3   4   5   6   7   8   9  10   11  12&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos observar, el proceso 8, queda aplazado hasta que el resto de procesos mayores han terminado. Para solucionar este problema tenemos el siguiente criterio, mayor que quepa con aplazamiento, en el cual hacemos uso de una variable 'umbral' que selecciona aquellos procesos que han sido aplazados un número dado de veces.--[[Usuario:Jorcalmar|Jorcalmar]] 17:43 31 may 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--El c en realidad,¿no seria?:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     | P1| P1| P1| P1| P1| P1| P1| P1|   |   |   |   |&lt;br /&gt;
   H1|---|---|---|---|---|---|---|---&amp;gt;   |   |   |   |&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     | P7| P7| P6| P6| P8| P8|   |   |   |   |   |   |&lt;br /&gt;
   H2|---|---&amp;gt;---|---&amp;gt;---|---&amp;gt;   |   |   |   |   |   |&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     | P3| P3| P2| P2| P2| P2| P2| P2| P2| P2|   |   |&lt;br /&gt;
   H3|---|---&amp;gt;---|---|---|---|---|---|---|---&amp;gt;   |   |&lt;br /&gt;
     |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
     | P4| P4| P5| P5|   |   |   |   |   |   |   |   |&lt;br /&gt;
   H4|---|---&amp;gt;---|---&amp;gt;   |   |   |   |   |   |   |   |&lt;br /&gt;
     |___|___|___|___|___|___|___|___|___|__ |___|___|&lt;br /&gt;
     0   1   2   3   4   5   6   7   8   9  10   11  12&lt;br /&gt;
&lt;br /&gt;
Cambia las asignaciones de H2 ya que P7&amp;gt;P3&amp;gt;P6 y por ese mismo criterio, en H3 primero entraria P3 y P8 entraria en H2.--[[Usuario:Luidela1|Luidela1]] 14:26 7 jun 2011 (UTC)&lt;/div&gt;</summary>
		<author><name>Luidela1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_de_los_ejercicios_de_concurrencia&amp;diff=752</id>
		<title>Solución de los ejercicios de concurrencia</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_de_los_ejercicios_de_concurrencia&amp;diff=752"/>
				<updated>2011-05-09T15:35:34Z</updated>
		
		<summary type="html">&lt;p&gt;Luidela1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &lt;br /&gt;
       | #1| #2| #3|   |   |   | #4| #1| #2|   |   |   | #3| #4|#1-El programa ya termina &lt;br /&gt;
 H1    |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   | #1| #2| #2|   |   |   | #2| #2| #2|   |   |   | #2| #3| #4| #1| #2| #3| #4| El programa termina.&lt;br /&gt;
 H2    |   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|---|   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|&lt;br /&gt;
       0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En este ejercicio, el hilo 2 se queda esperando continuamente a que el hilo 1 libere el cerrojo para poder acceder a la función.&lt;br /&gt;
El programa finaliza en el hilo 1 cuando llega dos veces a la instrucción 4 (bucle for).&lt;br /&gt;
&lt;br /&gt;
Modificación:&lt;br /&gt;
&lt;br /&gt;
Solución:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
       | #1| #2| #3|   |   |   | #4| #1| #2|   |   |   | #3| #4| &amp;gt; |   |   |   |   |   |   |   |&lt;br /&gt;
 H1    |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   | #1| __| __|   |   |   | __| __| __|   |   |   | #2| #3| #4| #1| #2| #3| #4|&lt;br /&gt;
 H2    |   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|---|---|---|---|&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|&lt;br /&gt;
       0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20 21  22&lt;br /&gt;
&lt;br /&gt;
Posible solución:&lt;br /&gt;
&lt;br /&gt;
Los hilos comparten variables por lo que la variable i está siendo compartida por ambos hilos. Además, al ser los cerrojos un control de concurrencia de espera activa, tiene que comprobar continuamente la condición que me permite acceder a la sección crítica. En un bucle for, el incremento se hace una vez realizada la iteración, por lo que tendrá que comprobar en la instrucción 1 si el contador cumple la condición o no. Dicho esto y si no me equivoco la solución sería la siguiente:&lt;br /&gt;
&lt;br /&gt;
       | #1| #2| #3|   |   |   | #4| #1| #2|   |   |   | #3| #4| #1|   |   |   |   |   |&lt;br /&gt;
 H1    |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   | #1| #2| #2|   |   |   | #2| #2| #2|   |   |   | #2| #3| #4| #1|   |&lt;br /&gt;
 H2    |   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|---|   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|&lt;br /&gt;
       0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Posible solución2: Lo que explicas esta muy bien, pero creo que la condición que expones en tu apartado es i=&amp;lt;2, cuando el ejercicio pide i&amp;lt;2. Por lo que habria que cortar un trozo, ¿no?&lt;br /&gt;
&lt;br /&gt;
       | #1| #2| #3|   |   |   | #4| #1| #1|   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
 H1    |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   | #1| #2| #2|   |   |   | #2| #3| #4|   |   |   |   |   |   |   |   |&lt;br /&gt;
 H2    |   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|---|   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|&lt;br /&gt;
       0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20&lt;br /&gt;
&lt;br /&gt;
Yo creo que esta bien ya que es i&amp;lt;2 y empieza con i = 0  --[[Usuario:Luidela1|Luidela1]] 15:35 9 may 2011 (UTC)&lt;/div&gt;</summary>
		<author><name>Luidela1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Mensajer%C3%ADa&amp;diff=700</id>
		<title>Mensajería</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Mensajer%C3%ADa&amp;diff=700"/>
				<updated>2011-05-04T09:07:55Z</updated>
		
		<summary type="html">&lt;p&gt;Luidela1: erratas&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Es una unidad de información que se intercambia entre dos o más procesos. &lt;br /&gt;
&lt;br /&gt;
Mediante los mensajes podemos transmitir información y sincronizar procesos (mediante la espera de un cierto mensaje).&lt;br /&gt;
&lt;br /&gt;
Los sistemas operativos generalmente ofrecen dos llamadas al sistema (o primitivas básicas) para que los procesos enviar y recibir mensajes:&lt;br /&gt;
&lt;br /&gt;
* send(mensaje): Para enviar un mensaje&lt;br /&gt;
* receive(mensaje): Para recibir un mensaje&lt;br /&gt;
&lt;br /&gt;
== Destino y fuente ==&lt;br /&gt;
&lt;br /&gt;
* '''Denominación Directa'''&lt;br /&gt;
** Se emplea ID para identificar al destinatario. &lt;br /&gt;
** Valores especiales: BROADCAST (a todos), MULTICAST (a un grupo).&lt;br /&gt;
&lt;br /&gt;
* '''Denominación Indirecta'''&lt;br /&gt;
** Se emplea un elemento intermediario. &lt;br /&gt;
** Recurso compartido especial en el sistema: BUZÓN.&lt;br /&gt;
** Habiendo intermediarios, hay que comprobar las identidades pues pueden ser falsas/erróneas&lt;br /&gt;
&lt;br /&gt;
== Formas de transmisión ==&lt;br /&gt;
&lt;br /&gt;
* '''Transmisión por copia''' &lt;br /&gt;
** ''Directa'': el mensaje se copia de espacio de emisor a espacio de receptor.&lt;br /&gt;
** ''Indirecta'': el mensaje se copia de espacio de emisor a espacio (buzón) de SO, y de ahí a espacio de receptor.&lt;br /&gt;
&lt;br /&gt;
* '''Transmisión por referencia'''&lt;br /&gt;
** ''Directa'': lo que se copia es un puntero al mensaje&lt;br /&gt;
** ''Global'': el emisor crea mensaje en espacio de SO, y se copia a espacio de receptor un puntero al mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Transmisión por copia de escritura''': el mensaje sólo se copia si se modifica por emisor o receptor.&lt;br /&gt;
&lt;br /&gt;
== Formas de comunicación ==&lt;br /&gt;
&lt;br /&gt;
* Comportamiento del emisor, '''send()'''&lt;br /&gt;
**Síncrona: el proceso emisor que realiza el send() queda bloqueado hasta que el receptor llama a recv()&lt;br /&gt;
**Asíncrona: suponemos capacidad de almacenamiento en el destinatario o en el buzón. Allí acumulamos los mensajes entrantes y el receptor irá leyendo cuando pueda. Es más ágil pero el destinatario/buzón necesita capacidad de almacenamiento, la cual será limitada y los mensajes posteriores pueden caer en saco roto&lt;br /&gt;
&lt;br /&gt;
* Comportamiento del receptor, '''recv()'''&lt;br /&gt;
** Bloqueante: un recv() sin mensajes a procesar pasa a estado bloqueado. Si se hace un send() vuelve a estado preparado&lt;br /&gt;
** No bloqueante: recv() sin mensajes a procesar devuelve un &amp;quot;prueba más tarde&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Formato de los mensajes ==&lt;br /&gt;
&lt;br /&gt;
=== Fijo ===&lt;br /&gt;
&lt;br /&gt;
Los procesos acuerdan emplear un formato fijo para sus mensajes.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Simple Network Time Protocol. Ver http://tools.ietf.org/html/rfc4330, sección 4, Message Format.&lt;br /&gt;
&lt;br /&gt;
                           1                   2                   3&lt;br /&gt;
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9  0  1&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |LI | VN  |Mode |    Stratum    |     Poll      |   Precision    |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |                          Root  Delay                           |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |                       Root  Dispersion                         |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |                     Reference Identifier                       |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      |                    Reference Timestamp (64)                    |&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      |                    Originate Timestamp (64)                    |&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      |                     Receive Timestamp (64)                     |&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      |                     Transmit Timestamp (64)                    |&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |                 Key Identifier (optional) (32)                 |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      |                 Message Digest (optional) (128)                |&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
&lt;br /&gt;
=== Variable ===&lt;br /&gt;
&lt;br /&gt;
* Type-Length-Value.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Usado en Netlink para la codificación de atributos de un mensaje. Ver Communicating between the kernel and user-space in Linux using Netlink Sockets (1984.lsi.us.es/~pablo/docs/spae.pdf).&lt;br /&gt;
&lt;br /&gt;
    0                   1                   2                   3   &lt;br /&gt;
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 &lt;br /&gt;
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
   |                Length         |            Type               |&lt;br /&gt;
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
   /                                                               /&lt;br /&gt;
   /                             Value                             /&lt;br /&gt;
   /                                                               /&lt;br /&gt;
   /////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
* Text-based human-readable.&lt;br /&gt;
&lt;br /&gt;
** Comma-Separated Value (CSV): http://en.wikipedia.org/wiki/Comma-separated_values&lt;br /&gt;
** Extensible Markup Language (XML): http://en.wikipedia.org/wiki/XML&lt;br /&gt;
** JavaScript Object Notation (JSON): http://en.wikipedia.org/wiki/JSON&lt;br /&gt;
&lt;br /&gt;
=== Mixto ===&lt;br /&gt;
&lt;br /&gt;
Los procesos acuerdan emplear mensaje con partes cuyo formato es fijo, como por ejemplo una cabecera inicial, seguido de partes de tamaño variable.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Internet Protocol (IPv4). Ver http://www.ietf.org/rfc/rfc791.txt, sección 3.1.&lt;br /&gt;
                                    &lt;br /&gt;
    0                   1                   2                   3   &lt;br /&gt;
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 &lt;br /&gt;
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
   |Version|  IHL  |Type of Service|          Total Length         |&lt;br /&gt;
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
   |         Identification        |Flags|      Fragment Offset    |&lt;br /&gt;
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
   |  Time to Live |    Protocol   |         Header Checksum       |&lt;br /&gt;
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
   |                       Source Address                          |&lt;br /&gt;
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
   |                    Destination Address                        |&lt;br /&gt;
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
   |                    Options                    |    Padding    |&lt;br /&gt;
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
   /                                                               /&lt;br /&gt;
   /                         Payload                               /&lt;br /&gt;
   /                                                               /&lt;br /&gt;
   /////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
== Mensajería a través de la red ==&lt;br /&gt;
&lt;br /&gt;
* Unidad del destinatario&lt;br /&gt;
* Fiabilidad en la transmisión&lt;br /&gt;
* Formato de los datos (http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html): Enviar un entero a través de la red puede ser un problema debido a la forma en el que se representan los datos en la memoria dependiente de la arquitectura. Por ejemplo, un PC con arquitectura Intel x86 emplea formato little-endian, mientras que un SPARC de Sun Microsystems (ahora Oracle) emplea big-endian.&lt;br /&gt;
&lt;br /&gt;
** Little Endian: Bytes menos significativo al principio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
        int a = 10, i;&lt;br /&gt;
        char *p = &amp;amp;a;&lt;br /&gt;
&lt;br /&gt;
        for (i=0; i&amp;lt;sizeof(a); i++) {&lt;br /&gt;
                printf(&amp;quot;posición %d: %.2x\n&amp;quot;, i, p[i]);&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Muestra el siguiente resultado en un PC:&lt;br /&gt;
&lt;br /&gt;
 posición 0: 0a (n+3)&lt;br /&gt;
 posición 1: 00 (n+2)&lt;br /&gt;
 posición 2: 00 (n+1)&lt;br /&gt;
 posición 3: 00 (n)&lt;br /&gt;
&lt;br /&gt;
** Big Endian: Bytes menos significativo al final.&lt;br /&gt;
&lt;br /&gt;
 posición 0: 00 (n)&lt;br /&gt;
 posición 1: 00 (n+1)&lt;br /&gt;
 posición 2: 00 (n+2)&lt;br /&gt;
 posición 3: 0a (n+3)&lt;br /&gt;
&lt;br /&gt;
En Internet se sigue la convención de expresar datos en Big Endian, habría que hacer la conversión. Habría que usar '''ntohl''' (network to host long).&lt;br /&gt;
&lt;br /&gt;
En little-endian, la implementación de ntohl es la siguiente:&lt;br /&gt;
&lt;br /&gt;
#define __constant_ntohl(x) ___constant_swab32((__be32)(x)&lt;br /&gt;
&lt;br /&gt;
Ver /usr/include/linux/byteorder/little_endian.h &lt;br /&gt;
&lt;br /&gt;
mientras que en big-endian es:&lt;br /&gt;
&lt;br /&gt;
#define __constant_ntohl(x) ((__u32)(__be32)(x))&lt;br /&gt;
&lt;br /&gt;
Si empleamos formato textuales, como CSV, XML o JSON, que codifican la información en bytes, no tenemos este problema.&lt;/div&gt;</summary>
		<author><name>Luidela1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Mensajer%C3%ADa&amp;diff=699</id>
		<title>Mensajería</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Mensajer%C3%ADa&amp;diff=699"/>
				<updated>2011-05-04T08:54:35Z</updated>
		
		<summary type="html">&lt;p&gt;Luidela1: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Es una unidad de información que se intercambia entre dos o más procesos. &lt;br /&gt;
&lt;br /&gt;
Mediante los mensajes podemos transmitir información y sincronizar procesos (mediante la espera de un cierto mensaje).&lt;br /&gt;
&lt;br /&gt;
Los sistemas operativos generalmente ofrecen dos llamadas al sistema (o primitivas básicas) para que los procesos enviar y recibir mensajes:&lt;br /&gt;
&lt;br /&gt;
* send(mensaje): Para enviar un mensaje&lt;br /&gt;
* receive(mensaje): Para recibir un mensaje&lt;br /&gt;
&lt;br /&gt;
== Destino y fuente ==&lt;br /&gt;
&lt;br /&gt;
* '''Denominación Directa'''&lt;br /&gt;
** Se emplea ID para identificar al destinatario. &lt;br /&gt;
** Valores especiales: BROADCAST (a todos), MULTICAST (a un grupo).&lt;br /&gt;
&lt;br /&gt;
* '''Denominación Indirecta'''&lt;br /&gt;
** Se emplea un elemento intermediario. &lt;br /&gt;
** Recurso compartido especial en el sistema: BUZÓN.&lt;br /&gt;
** Habiendo intermediarios, hay que comprobar las identidades pues pueden ser falsas/erróneas&lt;br /&gt;
&lt;br /&gt;
== Formas de transmisión ==&lt;br /&gt;
&lt;br /&gt;
* '''Transmisión por copia''' &lt;br /&gt;
** ''Directa'': el mensaje se copia de espacio de emisor a espacio de receptor.&lt;br /&gt;
** ''Indirecta'': el mensaje se copia de espacio de emisor a espacio (buzón) de SO, y de ahí a espacio de receptor.&lt;br /&gt;
&lt;br /&gt;
* '''Transmisión por referencia'''&lt;br /&gt;
** ''Directa'': lo que se copia es un puntero al mensaje&lt;br /&gt;
** ''Global'': el emisor crea mensaje en espacio de SO, y se copia a espacio de receptor un puntero al mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Transmisión por copia de escritura''': el mensaje sólo se copia si se modifica por emisor o receptor.&lt;br /&gt;
&lt;br /&gt;
== Formas de comunicación ==&lt;br /&gt;
&lt;br /&gt;
* Comportamiento del emisor, '''send()'''&lt;br /&gt;
**Síncrona: el proceso emisor que realiza el send() queda bloqueado hasta que el receptor llama a recv()&lt;br /&gt;
**Asíncrona: suponemos capacidad de almacenamiento en el destinatario o en el buzón. Allí acumulamos los mensajes entrantes y el receptor irá leyendo cuando pueda. Es más ágil pero el destinatario/buzón necesita capacidad de almacenamiento, la cual será limitada y los mensajes posteriores pueden caer en saco roto&lt;br /&gt;
&lt;br /&gt;
* Comportamiento del receptor, '''recv()'''&lt;br /&gt;
** Bloqueante: un recv() sin mensajes a procesar pasa a estado bloqueado. Si se hace un send() vuelve a estado preparado&lt;br /&gt;
** No bloqueante: recv() sin mensajes a procesar devuelve un &amp;quot;prueba más tarde&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Formato de los mensajes ==&lt;br /&gt;
&lt;br /&gt;
=== Fijo ===&lt;br /&gt;
&lt;br /&gt;
Los procesos acuerdan emplear un formato fijo para sus mensajes.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Simple Network Time Protocol. Ver http://tools.ietf.org/html/rfc4330, sección 4, Message Format.&lt;br /&gt;
&lt;br /&gt;
                           1                   2                   3&lt;br /&gt;
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9  0  1&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |LI | VN  |Mode |    Stratum    |     Poll      |   Precision    |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |                          Root  Delay                           |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |                       Root  Dispersion                         |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |                     Reference Identifier                       |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      |                    Reference Timestamp (64)                    |&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      |                    Originate Timestamp (64)                    |&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      |                     Receive Timestamp (64)                     |&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      |                     Transmit Timestamp (64)                    |&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |                 Key Identifier (optional) (32)                 |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      |                 Message Digest (optional) (128)                |&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      |                                                                |&lt;br /&gt;
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
&lt;br /&gt;
=== Variable ===&lt;br /&gt;
&lt;br /&gt;
* Type-Length-Value.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Usado en Netlink para la codificación de atributos de un mensaje. Ver Communicating between the kernel and user-space in Linux using Netlink Sockets (1984.lsi.us.es/~pablo/docs/spae.pdf).&lt;br /&gt;
&lt;br /&gt;
    0                   1                   2                   3   &lt;br /&gt;
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 &lt;br /&gt;
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
   |                Length         |            Type               |&lt;br /&gt;
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
   /                                                               /&lt;br /&gt;
   /                             Value                             /&lt;br /&gt;
   /                                                               /&lt;br /&gt;
   /////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
* Text-based human-readable.&lt;br /&gt;
&lt;br /&gt;
** Comma-Separated Value (CSV): http://en.wikipedia.org/wiki/Comma-separated_values&lt;br /&gt;
** Extensible Markup Language (XML): http://en.wikipedia.org/wiki/XML&lt;br /&gt;
** JavaScript Object Notation (JSON): http://en.wikipedia.org/wiki/JSON&lt;br /&gt;
&lt;br /&gt;
=== Mixto ===&lt;br /&gt;
&lt;br /&gt;
Los procesos acuerdan emplear mensaje con partes cuyo formato es fijo, como por ejemplo una cabecera inicial, seguido de partes de tamaño variable.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: Internet Protocol (IPv4). Ver http://www.ietf.org/rfc/rfc791.txt, sección 3.1.&lt;br /&gt;
                                    &lt;br /&gt;
    0                   1                   2                   3   &lt;br /&gt;
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 &lt;br /&gt;
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
   |Version|  IHL  |Type of Service|          Total Length         |&lt;br /&gt;
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
   |         Identification        |Flags|      Fragment Offset    |&lt;br /&gt;
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
   |  Time to Live |    Protocol   |         Header Checksum       |&lt;br /&gt;
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
   |                       Source Address                          |&lt;br /&gt;
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
   |                    Destination Address                        |&lt;br /&gt;
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
   |                    Options                    |    Padding    |&lt;br /&gt;
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
   /                                                               /&lt;br /&gt;
   /                         Payload                               /&lt;br /&gt;
   /                                                               /&lt;br /&gt;
   /////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
== Mensajería a través de la red ==&lt;br /&gt;
&lt;br /&gt;
* Unidad del destinatario&lt;br /&gt;
* Fiabilidad en la transmisión&lt;br /&gt;
* Formato de los datos (http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html): Enviar un entero a través de la red puede ser un problema debido a la forma en el que se representan los datos en la memoria dependiente de la arquitectura. Por ejemplo, un PC con arquitectura Intel x86 emplea formato little-endian, mientras que un SPARC de Sun Microsystems (ahora Oracle) empla big-endian.&lt;br /&gt;
&lt;br /&gt;
** Little Endian: Bytes menos significativo al principio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
        int a = 10, i;&lt;br /&gt;
        char *p = &amp;amp;a;&lt;br /&gt;
&lt;br /&gt;
        for (i=0; i&amp;lt;sizeof(a); i++) {&lt;br /&gt;
                printf(&amp;quot;posición %d: %.2x\n&amp;quot;, i, p[i]);&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Muestra el siguiente resultado en un PC:&lt;br /&gt;
&lt;br /&gt;
 posición 0: 0a (n+3)&lt;br /&gt;
 posición 1: 00 (n+2)&lt;br /&gt;
 posición 2: 00 (n+1)&lt;br /&gt;
 posición 3: 00 (n)&lt;br /&gt;
&lt;br /&gt;
** Big Endian: Bytes menos significativo al final.&lt;br /&gt;
&lt;br /&gt;
 posición 0: 00 (n)&lt;br /&gt;
 posición 1: 00 (n+1)&lt;br /&gt;
 posición 2: 00 (n+2)&lt;br /&gt;
 posición 3: 0a (n+3)&lt;br /&gt;
&lt;br /&gt;
En Internet se sigue la convención de expresar datos en Big Endian, habría que hacer la conversión. Habría que usar '''ntohl''' (network to host long).&lt;br /&gt;
&lt;br /&gt;
En little-endian, la implementación de ntohl es la siguiente:&lt;br /&gt;
&lt;br /&gt;
#define __constant_ntohl(x) ___constant_swab32((__be32)(x)&lt;br /&gt;
&lt;br /&gt;
Ver /usr/include/linux/byteorder/little_endian.h &lt;br /&gt;
&lt;br /&gt;
mientras que en big-endian es:&lt;br /&gt;
&lt;br /&gt;
#define __constant_ntohl(x) ((__u32)(__be32)(x))&lt;br /&gt;
&lt;br /&gt;
Si empleamos formato textuales, como CSV, XML o JSON, que codifican la información en bytes, no tenemos este problema.&lt;/div&gt;</summary>
		<author><name>Luidela1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Concurrencia_de_procesos&amp;diff=686</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=686"/>
				<updated>2011-05-02T11:36:08Z</updated>
		
		<summary type="html">&lt;p&gt;Luidela1: &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, 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;
La programación concurrente se trata del conjunto de técnicas que nos permiten elaborar programas que resuelven situaciones de concurrencia. En programación concurrente, el programador emplea alguno de los mecanismos de arbitraje que ofrece el sistema operativo, ya sean los de sincronización o mensajería, para resolver el problema de concurrencia.&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''.&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>Luidela1</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Usuario:Luidela1&amp;diff=644</id>
		<title>Usuario:Luidela1</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Usuario:Luidela1&amp;diff=644"/>
				<updated>2011-04-22T10:41:20Z</updated>
		
		<summary type="html">&lt;p&gt;Luidela1: Página nueva: Luis Francisco De La Llave Gómez&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Luis Francisco De La Llave Gómez&lt;/div&gt;</summary>
		<author><name>Luidela1</name></author>	</entry>

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

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

	</feed>