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

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Usuario:Apeiron&amp;diff=1257</id>
		<title>Usuario:Apeiron</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Usuario:Apeiron&amp;diff=1257"/>
				<updated>2011-06-09T13:55:25Z</updated>
		
		<summary type="html">&lt;p&gt;Apeiron: Página creada con 'José Manuel Rodríguez Guerreiro'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;José Manuel Rodríguez Guerreiro&lt;/div&gt;</summary>
		<author><name>Apeiron</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_de_los_ejercicios_de_Entrada/Salida&amp;diff=1254</id>
		<title>Solución de los ejercicios de Entrada/Salida</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_Entrada/Salida&amp;diff=1254"/>
				<updated>2011-06-09T08:08:05Z</updated>
		
		<summary type="html">&lt;p&gt;Apeiron: solucion ejercicio Diseño Modular&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ejercicio 1. Opción B&lt;br /&gt;
&lt;br /&gt;
Ejercicio 2. ver [http://1984.lsi.us.es/wiki-ssoo/index.php/Dise%C3%B1o_modular_E/S]&lt;/div&gt;</summary>
		<author><name>Apeiron</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_de_los_ejercicios_de_Entrada/Salida&amp;diff=1251</id>
		<title>Solución de los ejercicios de Entrada/Salida</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_Entrada/Salida&amp;diff=1251"/>
				<updated>2011-06-09T08:04:48Z</updated>
		
		<summary type="html">&lt;p&gt;Apeiron: Solución ejercicio Interrupciones&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ejercicio 1. Opción B&lt;/div&gt;</summary>
		<author><name>Apeiron</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_de_los_ejercicios_de_administraci%C3%B3n_de_ficheros&amp;diff=1249</id>
		<title>Solución de los ejercicios de administración de ficheros</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_administraci%C3%B3n_de_ficheros&amp;diff=1249"/>
				<updated>2011-06-09T07:50:32Z</updated>
		
		<summary type="html">&lt;p&gt;Apeiron: retoque Solución ejercicio&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A. Los archivos Fichero2.txt e Imagen2.jpg están corruptos, ya que ambos tienen (o envían) a una etiqueta 'BAD'.&lt;br /&gt;
&lt;br /&gt;
B. &lt;br /&gt;
   Entrada a directorio raíz E: 1 acceso&lt;br /&gt;
   Entrada a Imagen.jpg: 1 acceso&lt;br /&gt;
   Llegada a etiqueta EOF: 3 accesos&lt;br /&gt;
   Total: 5 accesos&lt;/div&gt;</summary>
		<author><name>Apeiron</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Soluci%C3%B3n_de_los_ejercicios_de_administraci%C3%B3n_de_ficheros&amp;diff=1248</id>
		<title>Solución de los ejercicios de administración de ficheros</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_administraci%C3%B3n_de_ficheros&amp;diff=1248"/>
				<updated>2011-06-09T07:49:59Z</updated>
		
		<summary type="html">&lt;p&gt;Apeiron: Solución ejercicio examen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A. Los archivos Fichero2.txt e Imagen2.jpg están corruptos, ya que ambos tienen (o envían) a una etiqueta 'BAD'.&lt;br /&gt;
&lt;br /&gt;
B. Entrada a directorio raíz E: 1 acceso&lt;br /&gt;
   Entrada a Imagen.jpg: 1 acceso&lt;br /&gt;
   Llegada a etiqueta EOF: 3 accesos&lt;br /&gt;
   Total: 5 accesos&lt;/div&gt;</summary>
		<author><name>Apeiron</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Discusi%C3%B3n:Soluci%C3%B3n_de_los_ejercicios_de_concurrencia&amp;diff=734</id>
		<title>Discusión: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=Discusi%C3%B3n:Soluci%C3%B3n_de_los_ejercicios_de_concurrencia&amp;diff=734"/>
				<updated>2011-05-09T12:07:15Z</updated>
		
		<summary type="html">&lt;p&gt;Apeiron: Página blanqueada&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Apeiron</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Discusi%C3%B3n:Soluci%C3%B3n_de_los_ejercicios_de_concurrencia&amp;diff=733</id>
		<title>Discusión: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=Discusi%C3%B3n:Soluci%C3%B3n_de_los_ejercicios_de_concurrencia&amp;diff=733"/>
				<updated>2011-05-09T12:06:00Z</updated>
		
		<summary type="html">&lt;p&gt;Apeiron: Página nueva: ¿Las operaciones de lock_down se ejecutan constantemente hasta comprobar que se le permite el paso? De ser así, haría falta modificar los apuntes y poner un &amp;quot;while&amp;quot;.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;¿Las operaciones de lock_down se ejecutan constantemente hasta comprobar que se le permite el paso? De ser así, haría falta modificar los apuntes y poner un &amp;quot;while&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Apeiron</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=730</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=730"/>
				<updated>2011-05-09T11:30:45Z</updated>
		
		<summary type="html">&lt;p&gt;Apeiron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &lt;br /&gt;
       | #1| #2| #3|   |   |   | #4| #2| #3|   |   |   | #4| El programa ya termina|&lt;br /&gt;
 H1    |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   | #1| #2| #2|   |   |   | #2| #2| #2|   |   |   |   |   |   |   |   |&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;/div&gt;</summary>
		<author><name>Apeiron</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=729</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=729"/>
				<updated>2011-05-09T11:26:15Z</updated>
		
		<summary type="html">&lt;p&gt;Apeiron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &lt;br /&gt;
       | #1| #2| #3|   |   |   | #4| #2| #3|   |   |   | #4| El programa ya termina|&lt;br /&gt;
 H1    |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   | #1| #2| #2|   |   |   | #2| #2| #2|   |   |   |   |   |   |   |   |&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;
H1 |i1-i2-i3*          *i4-i1-i2*          *i3-i4&amp;gt;__*&lt;br /&gt;
   |&lt;br /&gt;
H2 |         *i1-__-__*          *__-__-__*          *i2-i3-i4-i1-i2-i3-i4&lt;br /&gt;
   |&lt;br /&gt;
____________________________________________________________________________&lt;br /&gt;
    1  2  3   4  5  6   7  8  9   10 11 12  13 14 15  16 17 18 19 20 21 22&lt;/div&gt;</summary>
		<author><name>Apeiron</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=728</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=728"/>
				<updated>2011-05-09T11:25:38Z</updated>
		
		<summary type="html">&lt;p&gt;Apeiron: Solución Cerrojos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &lt;br /&gt;
       | #1| #2| #3|   |   |   | #4| #2| #3|   |   |   | #4| El programa ya termina|&lt;br /&gt;
 H1    |---|---|---|   |   |   |---|---|---|   |   |   |---|---|---|   |   |   |   |   |&lt;br /&gt;
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
       |   |   |   | #1| #2| #2|   |   |   | #2| #2| #2|   |   |   |   |   |   |   |   |&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;
H1 |i1-i2-i3*          *i4-i1-i2*          *i3-i4&amp;gt;__*&lt;br /&gt;
   |&lt;br /&gt;
H2 |         *i1-__-__*          *__-__-__*          *i2-i3-i4-i1-i2-i3-i4&lt;br /&gt;
   |&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
    1  2  3   4  5  6   7  8  9   10 11 12  13 14 15  16 17 18 19 20 21 22&lt;/div&gt;</summary>
		<author><name>Apeiron</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Algoritmo_para_averiguar_interbloqueo&amp;diff=696</id>
		<title>Algoritmo para averiguar interbloqueo</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Algoritmo_para_averiguar_interbloqueo&amp;diff=696"/>
				<updated>2011-05-03T17:43:40Z</updated>
		
		<summary type="html">&lt;p&gt;Apeiron: Algoritmo del Banquero&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Algoritmo del Banquero ==&lt;br /&gt;
La idea genérica del algoritmo es:&lt;br /&gt;
&lt;br /&gt;
     1. Buscar un proceso cuya suma recAsig+recDisp &amp;gt;= recMax&lt;br /&gt;
     2. Suponemos que se asignan dichos recursos y el proceso termina su ejecución. &lt;br /&gt;
        Sumamos sus recursos al vector recDisp y añadimos el proceso a la lista de finalizados.&lt;br /&gt;
     3. Repetir primer paso hasta terminar todos los procesos (siendo un estado estable)&lt;br /&gt;
        o bien hasta el punto en el que no sea posible ninguna asignación de recursos,&lt;br /&gt;
        existiendo pues interbloqueo.&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&lt;br /&gt;
     Proceso  |  Asignados  |  Maximos  |  Disponibles&lt;br /&gt;
              |  A B C D E  | A B C D E |   A B C D E   &lt;br /&gt;
    __________|_____________|___________|___0 0 2 1 1___ //Recursos Disponibles Iniciales &lt;br /&gt;
    P0        |  1 0 2 1 1  | 1 2 2 1 2 |   1 1 3 2 1    //P3 finalizado&lt;br /&gt;
    P1        |  2 0 1 1 0  | 2 2 2 1 0 |   2 2 3 3 1    //P2 finalizado&lt;br /&gt;
    P2        |  1 1 0 1 0  | 2 1 3 1 0 |   3 2 5 4 2    //P0 finalizado&lt;br /&gt;
    P3        |  1 1 1 1 0  | 1 1 2 2 1 |                //P1 finalizado&lt;br /&gt;
&lt;br /&gt;
Pasos:&lt;br /&gt;
  1. El primer proceso que cumple el paso 1 del algoritmo en esta tabla es P3: &lt;br /&gt;
     [1 1 1 1 0]+[0 0 2 1 1] &amp;gt;= [1 1 2 2 1]&lt;br /&gt;
     Lo consideramos terminado y añadimos sus recursos a los disponibles&lt;br /&gt;
  2. Volvemos a iterar desde P0. El siguiente proceso que puede adquirir los recursos necesarios&lt;br /&gt;
     es P2. Añadimos sus recursos a la lista de disponibles&lt;br /&gt;
  3. Ahora nos es posible terminar P0 y por último P1.&lt;br /&gt;
  4. Hemos logrado terminar todos los procesos sin problemas.&lt;br /&gt;
&lt;br /&gt;
== Algoritmo en C# ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;            &lt;br /&gt;
            int nRecursos;&lt;br /&gt;
            int nProcesos;&lt;br /&gt;
            List&amp;lt;List&amp;lt;int&amp;gt;&amp;gt; asignados = new List&amp;lt;List&amp;lt;int&amp;gt;&amp;gt;();&lt;br /&gt;
            List&amp;lt;List&amp;lt;int&amp;gt;&amp;gt; maximos = new List&amp;lt;List&amp;lt;int&amp;gt;&amp;gt;();&lt;br /&gt;
            List&amp;lt;int&amp;gt; disponibles = new List&amp;lt;int&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
            Random r = new Random();&lt;br /&gt;
&lt;br /&gt;
            //Generamos las matrices aleatoriamente&lt;br /&gt;
            for (int j1 = 0; j1 &amp;lt; nRecursos;j1++)&lt;br /&gt;
            {&lt;br /&gt;
                disponibles.Add(r.Next(0, nRecursos));                &lt;br /&gt;
            }&lt;br /&gt;
            for (int i = 0; i &amp;lt; nProcesos; i++)&lt;br /&gt;
            {&lt;br /&gt;
                asignados.Add(new List&amp;lt;int&amp;gt;());&lt;br /&gt;
                maximos.Add(new List&amp;lt;int&amp;gt;());&lt;br /&gt;
                for (int j = 0; j &amp;lt; nRecursos; j++)&lt;br /&gt;
                {&lt;br /&gt;
                    asignados[i].Add(r.Next(0, nRecursos));&lt;br /&gt;
                    maximos[i].Add(r.Next(0, nRecursos));&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
          &lt;br /&gt;
            bool aux = true;&lt;br /&gt;
            for (int proc = 0; proc &amp;lt; nProcesos; proc++)&lt;br /&gt;
            {&lt;br /&gt;
                aux = true;&lt;br /&gt;
                for (int recur = 0; recur &amp;lt; nRecursos; recur++)&lt;br /&gt;
                {&lt;br /&gt;
                    // comprobamos que haya recursos suficientes&lt;br /&gt;
                    aux = (maximos[proc][recur] - asignados[proc][recur] - disponibles[recur]) &amp;lt;= 0;&lt;br /&gt;
                    if (!aux)&lt;br /&gt;
                    {&lt;br /&gt;
                        break;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if (aux)&lt;br /&gt;
                {&lt;br /&gt;
                    añadirYeliminar(ref disponibles, ref asignados, proc);&lt;br /&gt;
                    maximos.RemoveAt(proc);&lt;br /&gt;
                    nProcesos--;&lt;br /&gt;
                    proc = -1;&lt;br /&gt;
                    if (nProcesos == 0)&lt;br /&gt;
                    {&lt;br /&gt;
                        Console.WriteLine(&amp;quot;Es estado seguro&amp;quot;);&lt;br /&gt;
                        Console.ReadLine();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            Console.WriteLine(&amp;quot;Es interbloqueo&amp;quot;);&lt;br /&gt;
            Console.ReadLine();&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private static void añadirYeliminar(ref List&amp;lt;int&amp;gt; disponibles, ref List&amp;lt;List&amp;lt;int&amp;gt;&amp;gt; asignados, int proc)&lt;br /&gt;
        {&lt;br /&gt;
            for (int k = 0; k &amp;lt; asignados[proc].Count; k++)&lt;br /&gt;
            {&lt;br /&gt;
                disponibles[k] += asignados[proc][k];&lt;br /&gt;
            }&lt;br /&gt;
            asignados.RemoveAt(proc);&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Faltaria solamente leer por consola el numero de procesos y de recursos que queremos testear, o introduccirlos manualmente&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Algoritmo en Python ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def comprueba_configuracion(asignados, maximos, disponibles):&lt;br /&gt;
    finalizados = []&lt;br /&gt;
    i = 0&lt;br /&gt;
    while(i &amp;lt; len(asignados)):&lt;br /&gt;
        if not i in finalizados and puede_progresar(asignados[i], disponibles, maximos[i]):&lt;br /&gt;
            print('Finaliza P%s\nDisponibles: %s' % (i,disponibles))&lt;br /&gt;
            libera_recursos(asignados[i], disponibles)&lt;br /&gt;
            finalizados.append(i)   # Marca el proceso Pi como finalizado&lt;br /&gt;
            i = 0&lt;br /&gt;
        else:&lt;br /&gt;
            i += 1&lt;br /&gt;
&lt;br /&gt;
    if(len(asignados) == len(finalizados)):     # Si todos los procesos finalizan&lt;br /&gt;
        print('\nEstado seguro para la configuracion de procesos-recursos dada')&lt;br /&gt;
    else:&lt;br /&gt;
        print('\nSe produce un interbloqueo')&lt;br /&gt;
&lt;br /&gt;
# Incrementamos la lista de disponibles con los que tenia asignados&lt;br /&gt;
def libera_recursos(asignados, disponibles):&lt;br /&gt;
    for i in range(len(disponibles)):&lt;br /&gt;
        disponibles[i] += asignados[i]&lt;br /&gt;
&lt;br /&gt;
# Devuelve True si el nº de elementos asignados mas los disponibles son mayores o iguales a los requeridos para continuar&lt;br /&gt;
def puede_progresar(asignados, disponibles, maximos):&lt;br /&gt;
    resultado = True&lt;br /&gt;
    for i in range(len(maximos)):&lt;br /&gt;
        if(asignados[i] + disponibles[i] &amp;lt; maximos[i]):&lt;br /&gt;
            resultado = False&lt;br /&gt;
            break&lt;br /&gt;
    return resultado&lt;br /&gt;
&lt;br /&gt;
asignados = [&lt;br /&gt;
    [1,0,2,1,1],&lt;br /&gt;
    [2,0,1,1,0],&lt;br /&gt;
    [1,1,0,1,0],&lt;br /&gt;
    [1,1,1,1,0]&lt;br /&gt;
    ]&lt;br /&gt;
maximos = [&lt;br /&gt;
    [1,2,2,1,2],&lt;br /&gt;
    [2,2,2,1,0],&lt;br /&gt;
    [2,1,3,1,0],&lt;br /&gt;
    [1,1,2,2,1]&lt;br /&gt;
    ]&lt;br /&gt;
disponibles = [0,0,2,1,1]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para este ejemplo (visto en clase) la salida sería:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; comprueba_configuracion(asignados, maximos, disponibles)&lt;br /&gt;
Finaliza P3&lt;br /&gt;
Disponibles: [0, 0, 2, 1, 1]&lt;br /&gt;
Finaliza P2&lt;br /&gt;
Disponibles: [1, 1, 3, 2, 1]&lt;br /&gt;
Finaliza P0&lt;br /&gt;
Disponibles: [2, 2, 3, 3, 1]&lt;br /&gt;
Finaliza P1&lt;br /&gt;
Disponibles: [3, 2, 5, 4, 2]&lt;br /&gt;
&lt;br /&gt;
Estado seguro para la configuracion de procesos-recursos dada&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Algoritmo en Java ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Comprobaciones {&lt;br /&gt;
&lt;br /&gt;
	public static List&amp;lt;Proceso&amp;gt; devuelveLista(List&amp;lt;Proceso&amp;gt; asignados, List&amp;lt;Proceso&amp;gt; necesarios, Disponibles recursos){&lt;br /&gt;
		List&amp;lt;Proceso&amp;gt; terminados = new ArrayList&amp;lt;Proceso&amp;gt;();&lt;br /&gt;
		for(int i = 0; i &amp;lt; necesarios.size(); i++){&lt;br /&gt;
			if(!(terminados.contains(asignados.get(i))) &amp;amp;&amp;amp; ejecuta(asignados.get(i), necesarios.get(i), recursos)){&lt;br /&gt;
					terminados.add(asignados.get(i));&lt;br /&gt;
				System.out.println(&amp;quot;Proceso &amp;quot; + asignados.get(i).getNombre() + &amp;quot; terminado&amp;quot;);&lt;br /&gt;
				for(int j = 0; j &amp;lt; recursos.getDisponibles().size(); j++){&lt;br /&gt;
					recursos.setDisponible(recursos.getDisponibles().get(j) + asignados.get(i).getRecursosNecesarios().get(j), j);&lt;br /&gt;
				}&lt;br /&gt;
				System.out.println(&amp;quot;Recursos disponibles: &amp;quot; + recursos.getDisponibles());&lt;br /&gt;
				i = -1;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
		if(terminados.size() == asignados.size()){&lt;br /&gt;
			System.out.println(&amp;quot;Todos los procesos han sido ejecutados sin problemas.&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		else{&lt;br /&gt;
			System.out.println(&amp;quot;Hay un interbloqueo, no se pueden seguir ejecutando procesos...&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return terminados;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static Boolean ejecuta(Proceso asignados, Proceso necesarios, Disponibles disponibles){&lt;br /&gt;
		// Devuelve True si tiene recursos suficientes...&lt;br /&gt;
		Boolean ej = true;&lt;br /&gt;
		for(int i = 0; i &amp;lt; necesarios.getRecursosNecesarios().size(); i++){&lt;br /&gt;
			if((asignados.getRecursosNecesarios().get(i) + disponibles.getDisponibles().get(i)) &amp;lt; necesarios.getRecursosNecesarios().get(i)){&lt;br /&gt;
				ej = false;&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return ej;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public static void main(String[] args) {&lt;br /&gt;
		&lt;br /&gt;
		List&amp;lt;Proceso&amp;gt; asignados = creaAsignados();&lt;br /&gt;
		List&amp;lt;Proceso&amp;gt; necesarios = creaNecesarios();&lt;br /&gt;
		Disponibles disponibles = creaDisponibles();&lt;br /&gt;
		Comprobaciones.devuelveLista(asignados, necesarios, disponibles);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Resultado:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Proceso P4 terminado&lt;br /&gt;
Recursos disponibles: [1, 1, 3, 2, 1]&lt;br /&gt;
Proceso P3 terminado&lt;br /&gt;
Recursos disponibles: [2, 2, 3, 3, 1]&lt;br /&gt;
Proceso P1 terminado&lt;br /&gt;
Recursos disponibles: [3, 2, 5, 4, 2]&lt;br /&gt;
Proceso P2 terminado&lt;br /&gt;
Recursos disponibles: [5, 2, 6, 5, 2]&lt;br /&gt;
Todos los procesos han sido ejecutados sin problemas.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nota: Las clases lo único que contienen son listas de enteros, y los procesos contienen además los nombres de los mismos.&lt;/div&gt;</summary>
		<author><name>Apeiron</name></author>	</entry>

	</feed>