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

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Algoritmo_para_averiguar_interbloqueo&amp;diff=685</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=685"/>
				<updated>2011-04-28T22:23:03Z</updated>
		
		<summary type="html">&lt;p&gt;Dorellana: /* Algoritmo en Java */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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>Dorellana</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Algoritmo_para_averiguar_interbloqueo&amp;diff=684</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=684"/>
				<updated>2011-04-28T15:35:11Z</updated>
		
		<summary type="html">&lt;p&gt;Dorellana: Añadida implementación en Java&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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(verificarInterbloqueo(asignados, necesarios, recursos)){&lt;br /&gt;
				System.out.println(&amp;quot;Hay un interbloqueo, no se pueden seguir ejecutando procesos...&amp;quot;);&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
			else{&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;
		return terminados;&lt;br /&gt;
	}&lt;br /&gt;
	public static Boolean verificarInterbloqueo(List&amp;lt;Proceso&amp;gt; asignados, List&amp;lt;Proceso&amp;gt; necesarios, Disponibles recursos){&lt;br /&gt;
		// Devuelve True si hay interbloqueo...&lt;br /&gt;
		Boolean ib = true;&lt;br /&gt;
		for(int i = 0; i &amp;lt; necesarios.size(); i++){&lt;br /&gt;
			if(ejecuta(asignados.get(i), necesarios.get(i), recursos)){&lt;br /&gt;
				ib = false;&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return ib;&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>Dorellana</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Bloque_de_control_de_procesos&amp;diff=520</id>
		<title>Bloque de control de procesos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Bloque_de_control_de_procesos&amp;diff=520"/>
				<updated>2011-03-23T08:26:59Z</updated>
		
		<summary type="html">&lt;p&gt;Dorellana: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para llevar a cabo la gestión de un proceso, es necesario que el sistema operativo guarde cierta información necesaria.  A ésta estructura se le conoce como '''el bloque de control del proceso o PCB (Process Control Block)'''.&lt;br /&gt;
&lt;br /&gt;
El bloque de control de procesos difiere mucho de un sistema a otros pero existen contenidos comunes:&lt;br /&gt;
&lt;br /&gt;
* Identificador del proceso: Identificar de forma unívoca al proceso en el sistema, generalmente se emplea un entero sin signo que se denomina PID (Process IDentifier).&lt;br /&gt;
&lt;br /&gt;
* Estado del proceso para el planificador de procesos (preparado, activo o bloqueado).&lt;br /&gt;
&lt;br /&gt;
* Contexto de la ejecución: valor de los registros del procesador, bits de estados, etc.&lt;br /&gt;
&lt;br /&gt;
* Aspectos relacionados con la administración de memoria, tales como el espacio de direcciones y la cantidad de memoria asignada a un proceso.&lt;br /&gt;
&lt;br /&gt;
* Aspectos relacionados con la administración de ficheros, tales como los ficheros con los que el proceso está actualmente operando.&lt;br /&gt;
&lt;br /&gt;
* En caso de soportar el sistema multiprocesador, los procesadores en los que el proceso puede ejecutarse.&lt;br /&gt;
&lt;br /&gt;
* En el caso de un sistema operativo tipo UNIX, el proceso padre de dicho proceso y la relación de procesos hijos.&lt;br /&gt;
&lt;br /&gt;
* Estadísticas temporales: Tiempo de lanzamiento del proceso, tiempo en estado activo, etc.&lt;br /&gt;
&lt;br /&gt;
En Linux, al PCB se le denomina ''Task Struct'', se puede consultar dicha estructura en:&lt;br /&gt;
&lt;br /&gt;
http://lxr.linux.no/#linux+v2.6.37.2/include/linux/sched.h#L1182&lt;br /&gt;
&lt;br /&gt;
En el núcleo de Minix, al PCB se le denomina ''Process table'', puede consultarse su implementación en el siguiente enlace:&lt;br /&gt;
&lt;br /&gt;
http://www.cise.ufl.edu/~cop4600/cgi-bin/lxr/http/source.cgi/kernel/proc.h&lt;/div&gt;</summary>
		<author><name>Dorellana</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Qu%C3%A9_es_un_Sistema_Operativo&amp;diff=281</id>
		<title>Qué es un Sistema Operativo</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Qu%C3%A9_es_un_Sistema_Operativo&amp;diff=281"/>
				<updated>2011-03-20T11:18:20Z</updated>
		
		<summary type="html">&lt;p&gt;Dorellana: /* ¿Que es un Sistema Operativo? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Que es un Sistema Operativo? ==&lt;br /&gt;
* El programa de programas.&lt;br /&gt;
&lt;br /&gt;
* Gestiona los recursos que ofrece el material (el ''hardware'' del equipo):&lt;br /&gt;
** La CPU.&lt;br /&gt;
** La Memoria principal&lt;br /&gt;
** Los dispositivos de Entrada/Salida, tales como la tarjeta de vídeo, la de red, los dispositivos de almacenamiento masivo (disco duro, memoria flash), los dispositivos USB, teclado, ratón...&lt;br /&gt;
&lt;br /&gt;
* Ofrece un lanzador de aplicaciones, que puede ser de dos tipos:&lt;br /&gt;
** Gestor de ventanas: las órdenes se dan con el ratón.&lt;br /&gt;
** Intérprete de órdenes/comandos (traducción defectuosa del original inglés ''command'', que significa orden), también llamado ''shell''. Las órdenes se escriben con el teclado.&lt;br /&gt;
&lt;br /&gt;
* Ofrece una interfaz (API) a las aplicaciones para solicitar recursos, el SO hace de intermediario, el programa no accede al hardware directamente  a obtener los recursos, sino que se los solicita al SO. Esta interfaz ha de ser estable (es decir, que no cambie con el tiempo) y homogénea.&lt;br /&gt;
&lt;br /&gt;
== Principios de diseño de un buen Sistema Operativo ==&lt;br /&gt;
&lt;br /&gt;
Los aspectos a tener en cuenta respecto a la gestión de recursos son:&lt;br /&gt;
&lt;br /&gt;
* Realizar una gestión eficiente de los recursos&lt;br /&gt;
* Coordinar la asignación de los mismos (como un &amp;quot;director de orquesta&amp;quot;)&lt;br /&gt;
* Hacer un reparto equitativo de ellos&lt;br /&gt;
* No permitir que las aplicaciones accedan directamente a los recursos sino que sea a través del sistema operativo.&lt;br /&gt;
&lt;br /&gt;
Respecto a la API, debe:&lt;br /&gt;
&lt;br /&gt;
* Ser estable, no debe cambiar con el tiempo.&lt;br /&gt;
* Ser homogénea.&lt;br /&gt;
* Ocultar los detalles de bajo nivel de los componentes, ofreciendo una capa de abstracción sobre el material.&lt;br /&gt;
&lt;br /&gt;
Además, otro criterio a tener en cuenta por un buen sistema operativo es la portabilidad, es decir, que soporte diferentes arquitecturas, como por ejemplo la ARM (teléfonos móviles), la x86 de Intel, la SPARC (desarrollada por Sun Microsystems, ahora adquirida por Oracle), la PowerPC (creada por la alianza AIM: Apple-IBM-Motorola)...&lt;/div&gt;</summary>
		<author><name>Dorellana</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol-ejer1-planif-procesos&amp;diff=280</id>
		<title>Sol-ejer1-planif-procesos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol-ejer1-planif-procesos&amp;diff=280"/>
				<updated>2011-03-20T11:13:57Z</updated>
		
		<summary type="html">&lt;p&gt;Dorellana: Añadido SJF apropiativo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FIFO (no apropiativo)&lt;br /&gt;
&lt;br /&gt;
                     ____|_P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;__|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|_4__|&lt;br /&gt;
           problema  _t__|_5__|_3__|_1__|_6__|_2__|&lt;br /&gt;
 &lt;br /&gt;
                       &amp;lt; = indica el instante de lanzamiento del proceso&lt;br /&gt;
                       &amp;gt; = indica el instante de finalización del proceso&lt;br /&gt;
                       X = se ejecuta el código del planificador&lt;br /&gt;
 &lt;br /&gt;
                   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;  &amp;lt;___|___|___|___|___&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;  |   &amp;lt;   |   |   |   |___|___|___&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;  |   |   &amp;lt;   |   |   |   |   |   |___&amp;gt;   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;  |   |   |   &amp;lt;   |   |   |   |   |   |___|___|___|___|___|___&amp;gt;   |   |   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;  |   |   |   |   &amp;lt;   |   |   |   |   |   |   |   |   |   |   |___|___|&amp;gt;  |   |   |&lt;br /&gt;
      Planificador X   |   |   |   |   X   |   |   X   X   |   |   |   |   |   X   |   |   |   |   |&lt;br /&gt;
              -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&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;
                         _____|_P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;__|&lt;br /&gt;
              Cálculos   __t__|_5__|_3__|_1__|_6__|_2__|&lt;br /&gt;
             de tiempos  __T__|_5__|_7__|_7__|_12_|_13_|&lt;br /&gt;
                         _T/t_|_1__|_7/3|_7__|__2_|13/2|&lt;br /&gt;
                        |&lt;br /&gt;
                        |_&amp;gt; Indice de penalización&lt;br /&gt;
&lt;br /&gt;
* SJF (no apropiativo)&lt;br /&gt;
&lt;br /&gt;
                     ____|_P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;__|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|_4__|&lt;br /&gt;
           problema  _t__|_5__|_3__|_1__|_6__|_2__|&lt;br /&gt;
 &lt;br /&gt;
                       &amp;lt; = indica el instante de lanzamiento del proceso&lt;br /&gt;
                       &amp;gt; = indica el instante de finalización del proceso&lt;br /&gt;
                       X = se ejecuta el código del planificador&lt;br /&gt;
                                                                 &lt;br /&gt;
                   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;  &amp;lt;___|___|___|___|___&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;  |   &amp;lt;   |   |   |   |   |   |   |___|___|___&amp;gt;   |   |   |   |   |   |   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;  |   |   &amp;lt;   |   |   |___&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;  |   |   |   &amp;lt;   |   |   |   |   |   |   |   |___|___|___|___|___|___&amp;gt;   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;  |   |   |   |   &amp;lt;   |   |___|___&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
      Planificador X   |   |   |   |   X   X   |   X   |   |   X   |   |   |   |   |   X   |   |   |   &lt;br /&gt;
              -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&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;
                   _____|_P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;_|&lt;br /&gt;
        Cálculos   __t__|_5__|_3__|_1__|_6__|_2__|&lt;br /&gt;
       de tiempos  __T__|_5__|_7__|_4__|_14_|_4__|&lt;br /&gt;
                   _T/t_|_1__|_7/3|_4__|_7/3|_2__|&lt;br /&gt;
                     |&lt;br /&gt;
                     |_&amp;gt; Indice de penalización&lt;br /&gt;
&lt;br /&gt;
* SJF (apropiativo)&lt;br /&gt;
&lt;br /&gt;
                     ____|_P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;__|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|_4__|&lt;br /&gt;
           problema  _t__|_5__|_3__|_1__|_6__|_2__|&lt;br /&gt;
 &lt;br /&gt;
                       &amp;lt; = indica el instante de lanzamiento del proceso&lt;br /&gt;
                       &amp;gt; = indica el instante de finalización del proceso&lt;br /&gt;
                       X = se ejecuta el código del planificador&lt;br /&gt;
                                                                 &lt;br /&gt;
                   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;  &amp;lt;___|   |   |   |   |   |   |___|___|___|___&amp;gt;   |   |   |   |   |   |   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;  |   &amp;lt;___|   |___|___&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;  |   |   &amp;lt;___&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;  |   |   |   &amp;lt;   |   |   |   |   |   |   |   |___|___|___|___|___|___&amp;gt;   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;  |   |   |   |   &amp;lt;   |___|___&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
      Planificador X   X   X   X   |   X   |   X   |   |   |   X   |   |   |   |   |   X   |   |   |   &lt;br /&gt;
              -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&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;
                   _____|_P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;_|&lt;br /&gt;
        Cálculos   __t__|_5__|_3__|_1__|_6__|_2__|&lt;br /&gt;
       de tiempos  __T__|_5__|_7__|_4__|_14_|_4__|&lt;br /&gt;
                   _T/t_|11/5|_4/3|_1__|_3/2|_2__|&lt;br /&gt;
                     |&lt;br /&gt;
                     |_&amp;gt; Indice de penalización&lt;br /&gt;
&lt;br /&gt;
* indice de penalizacion (no apropiativo)&lt;br /&gt;
&lt;br /&gt;
                     ____|_P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;__|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|_4__|&lt;br /&gt;
           problema  _t__|_5__|_3__|_1__|_6__|_2__|&lt;br /&gt;
 &lt;br /&gt;
                       &amp;lt; = indica el instante de lanzamiento del proceso&lt;br /&gt;
                       &amp;gt; = indica el instante de finalización del proceso&lt;br /&gt;
                       X = se ejecuta el código del planificador&lt;br /&gt;
 &lt;br /&gt;
                   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;  &amp;lt;___|___|___|___|___&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;  |   &amp;lt;   |   |   |   |___|___|___&amp;gt;   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;  |   |   &amp;lt;   |   |   |   |   |   |___&amp;gt;   |   |   |   |   |   |   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;  |   |   |   |   &amp;lt;   |   |   |   |   |___|___|___|___|___|___|   |   |   |   |   |&lt;br /&gt;
               P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;  |   |   |   &amp;lt;   |   |   |   |   |   |   |   |   |   |   |   |___|___|&amp;gt;  |   |&lt;br /&gt;
      Planificador X   |   |   |   |   X   |   |   X   X   |   |   |   |   |   X   |   X   |   |   |&lt;br /&gt;
              -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&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;
                   _____|_P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;C&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;D&amp;lt;/sub&amp;gt;_|_P&amp;lt;sub&amp;gt;E&amp;lt;/sub&amp;gt;_|&lt;br /&gt;
        Cálculos   __t__|_5__|_3__|_1__|_6__|_2__|&lt;br /&gt;
       de tiempos  __T__|_5__|_7__|_7__|_12_|_13_|&lt;br /&gt;
                   _T/t_|_1__|_7/3|_7__|_7/6|13/2|&lt;br /&gt;
                     |&lt;br /&gt;
                     |_&amp;gt; Indice de penalización&lt;/div&gt;</summary>
		<author><name>Dorellana</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_planificaci%C3%B3n&amp;diff=233</id>
		<title>Criterios de planificación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_planificaci%C3%B3n&amp;diff=233"/>
				<updated>2011-03-16T07:51:16Z</updated>
		
		<summary type="html">&lt;p&gt;Dorellana: Añadidos órdenes de complejidad&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Métodos no apropiativos =&lt;br /&gt;
&lt;br /&gt;
El procesador es asignado al proceso hasta fin de ejecución. Suele darse en sistemas operativos monoprogramables y sistemas de tiempo real.&lt;br /&gt;
&lt;br /&gt;
== Estocástico ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona aleatoriamente el proceso a ser asignado al procesador. No cumple varios [[Planificación de procesos#Aspectos para diseñar un buen planificador|aspectos de diseño de un buen planificador]], como repetitibilidad o predecibilidad. Es un criterio de planificación teórico que sirve de referencia, si se emplea un criterio de planificación que ofrece resultados peores que la planificación de procesos estocástica, entonces es que no se trata de un buen criterio de planificación.&lt;br /&gt;
&lt;br /&gt;
No se ofrece un ejemplo, puesto que para un conjunto de procesos existen tantas trazas de ejecución como posible combinaciones aleatorias.&lt;br /&gt;
&lt;br /&gt;
== Con conocimiento del futuro ==&lt;br /&gt;
&lt;br /&gt;
En base al conocimiento del futuro se asignan los procesos. Se trata también de un criterio de planificación teórico. Si un criterio de planificación se acerca al criterio de planificación con conocimiento de futuro, entonces es que se trata de un buen planificador.&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_3__|_6__|_7__|&lt;br /&gt;
            problema  _t__|_3__|_5__|_2__|_3__|_1__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = indica que el proceso se encuentra en modo preparado&lt;br /&gt;
                        &amp;gt; = indica la finalización del proceso                                                                       &lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                    |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
                Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
                Pb  |---&amp;lt;---|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
                Pc  |---|---|---&amp;lt;xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
                Pd  |---|---|---|---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|&lt;br /&gt;
                Pe  |---|---|---|---|---|---|---&amp;lt;---|---|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|&lt;br /&gt;
               -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_2__|_3__|_1__|&lt;br /&gt;
       de tiempos   _T__|_3__|_9__|_2__|_8__|_4__|      z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_9/5|_1__|_8/3|_4/1|&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, al conocer los tiempos en los que llegará cada proceso, y el tiempo de proceso, podemos buscar la forma de asignarlos de forma que, por ejemplo, consigamos la mínima penalización.&lt;br /&gt;
&lt;br /&gt;
== Por orden de llegada (First In, First Out: FIFO) ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso por orden de lanzamiento. Su principales ventajas son su facilidad de implementación, y su orden de complejidad, O(1). Su desventaja es que los procesos de corta duración presentarán un alto índice de penalización.&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_3__|_9__|_12_|&lt;br /&gt;
            problema  _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = indica que el proceso se encuentra en modo preparado&lt;br /&gt;
                        &amp;gt; = indica la finalización del proceso&lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento                                                                       &lt;br /&gt;
                    |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
                Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
                Pb  |---&amp;lt;---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
                Pc  |---|---|---&amp;lt;---|---|---|---|---|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
                Pd  |---|---|---|---|---|---|---|---|---&amp;lt;---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
                Pe  |---|---|---|---|---|---|---|---|---|---|---|---&amp;lt;---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;&lt;br /&gt;
               -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
       de tiempos   _T__|_3__|_7__|_7__|_6__|_8__|        z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_7/5|_7/2|_6/5|_8/5|&lt;br /&gt;
&lt;br /&gt;
== El siguiente, el más corto (Shortest Job First: SJF) ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso que requiera menos tiempo de ejecución. Para procesos largos puede presentar un índice de penalización elevado: Si se tienen muchos procesos cortos, el de mayor duración puede quedar en espera indefinidamente. Su orden de complejidad es O(n).&lt;br /&gt;
&lt;br /&gt;
    Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                     ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_3__|_9__|_12_|&lt;br /&gt;
           problema  _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
 &lt;br /&gt;
                       &amp;lt; = indica que el proceso se encuentra en modo preparado&lt;br /&gt;
                       &amp;gt; = indica la finalización del proceso&lt;br /&gt;
                       x = indica que el proceso está asignado al procesador en ese momento                        &lt;br /&gt;
                   |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
               Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
               Pb  |---&amp;lt;---|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
               Pc  |---|---|---&amp;lt;xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
               Pd  |---|---|---|---|---|---|---|---|---&amp;lt;---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
               Pe  |---|---|---|---|---|---|---|---|---|---|---|---&amp;lt;---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;&lt;br /&gt;
              -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_2__|_5__|_5__|&lt;br /&gt;
       de tiempos   _T__|_3__|_9__|_2__|_6__|_8__|      z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_9/5|_1__|_6/5|_8/5|&lt;br /&gt;
&lt;br /&gt;
== Basado en índice de penalización ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso que lleva más tiempo en estado preparado, sin estar en estado activo. Estima los índices de penalización y elige el de mayor valor. Su orden de complejidad es O(n).&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_2__|_7__|_6__|&lt;br /&gt;
            problema  _t__|_3__|_5__|_4__|_3__|_5__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = indica que el proceso se encuentra en modo preparado&lt;br /&gt;
                        &amp;gt; = indica la finalización del proceso&lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento                                                                       &lt;br /&gt;
                    |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
                Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
                Pb  |---&amp;lt;---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
                Pc  |---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|&lt;br /&gt;
                Pd  |---|---|---|---|---|---|---&amp;lt;---|---|---|---|---|---|---|---|---|---|xxx|xxx|xxx&amp;gt;&lt;br /&gt;
                Pe  |---|---|---|---|---|---&amp;lt;---|---|---|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|&lt;br /&gt;
               -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&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;
        Cálculos    _t__|_3__|_5__|_4__|_3__|_5__|&lt;br /&gt;
       de tiempos   _T__|_3__|_7__|_9__|_13_|_11_|&lt;br /&gt;
                    z(3)|_1__|_'''2/5'''|_0/4|____|____|&lt;br /&gt;
                    z(8)|_1__|_7/5|_'''5/4'''|_1/3|_2/5|&lt;br /&gt;
                   z(12)|_1__|_7/5|_9/4|_5/3|_'''6/5'''|      z = índice de penalización&lt;br /&gt;
                   z(17)|_1__|_7/5|_9/4|'''10/3'''|11/5|&lt;br /&gt;
                   z(20)|_1__|_7/5|_9/4|13/3|11/5|&lt;br /&gt;
&lt;br /&gt;
= Métodos apropiativos =&lt;br /&gt;
&lt;br /&gt;
El planificador puede retirar el procesador en cualquier momento al proceso activo. Suele darse en sistemas operativos [[Multiprogramación|multiprogramables]].&lt;br /&gt;
&lt;br /&gt;
== El siguiente, el más corto (Shortest Job First: SJF) ==&lt;br /&gt;
&lt;br /&gt;
Se selecciona el proceso que requiera menos tiempo de ejecución. Si hay un proceso en estado preparado que requiere menos tiempo de ejecución, se le asigna el procesador. Su orden de complejidad es O(n), pero, a diferencia del no apropiativo, cuando entra un proceso en la lista de procesos, se ejecuta código de planificador.&lt;br /&gt;
&lt;br /&gt;
     Ejemplo:&lt;br /&gt;
 &lt;br /&gt;
                      ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
           Datos del  _H0_|_0__|_1__|_4__|_6__|_12_|&lt;br /&gt;
            problema  _t__|_3__|_5__|_1__|_8__|_3__|&lt;br /&gt;
 &lt;br /&gt;
                        &amp;lt; = indica que el proceso se encuentra en modo preparado&lt;br /&gt;
                        &amp;gt; = indica la finalización del proceso&lt;br /&gt;
                        x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                        $ = indica la ejecución del planificador para retirar un&lt;br /&gt;
                            proceso y establecer otro según el criterio&lt;br /&gt;
                        &amp;amp; = se ejecuta el código del planificador&lt;br /&gt;
  &lt;br /&gt;
                    |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
                Pa  &amp;lt;xxx|xxx|xxx&amp;gt;---$---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
                Pb  |---&amp;lt;---|---|xxx|---|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
                Pc  |---|---|---|---&amp;lt;xxx&amp;gt;---|---|---|---|---|---|---$---|---|---|---|---|---|---|---|&lt;br /&gt;
                Pd  |---|---|---|---|---|---&amp;lt;---|---|---|xxx|xxx|xxx|---|---|---|xxx|xxx|xxx|xxx|xxx&amp;gt;&lt;br /&gt;
                Pe  |---|---|---|---|---|---|---|---|---|---|---|---&amp;lt;xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
       Planificador |---&amp;amp;---|---&amp;amp;---&amp;amp;---&amp;amp;---&amp;amp;---|---|---&amp;amp;---|---|---&amp;amp;---|---|---&amp;amp;---|---|---|---|---|&lt;br /&gt;
               -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&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;
                    ____|_Pa_|_Pb_|_Pc_|_Pd_|_Pe_|&lt;br /&gt;
        Cálculos    _t__|_3__|_5__|_1__|_8__|_3__|&lt;br /&gt;
       de tiempos   _T__|_3__|_8__|_1__|_14_|_3__|        z = índice de penalización&lt;br /&gt;
                    _z__|_1__|_8/5|_1__|14/8|_1__|&lt;br /&gt;
&lt;br /&gt;
== Por prioridades ==&lt;br /&gt;
&lt;br /&gt;
Se establecen índices de prioridad a cada proceso:&lt;br /&gt;
&lt;br /&gt;
* Índice estático: Establecido por el usuario. En el caso de sistemas operativos tipo Unix, se dispone de una índice denominado ''nice value'' cuyos valores están entre -20 (máxima prioridad) y 19 (mínima prioridad).&lt;br /&gt;
* Índice dinámico: Establecido por el planificador, inicialmente basado en el índice estático, después se va recalculando en base a las observaciones que realiza el planificador sobre el comportamiento de los procesos.&lt;br /&gt;
&lt;br /&gt;
El orden es siempre O(n).&lt;br /&gt;
&lt;br /&gt;
    Ejemplo:&lt;br /&gt;
                                                                                         &lt;br /&gt;
                     ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|&lt;br /&gt;
           problema  _t__|_2__|_4__|_2__|_7__|    p = prioridad estática&lt;br /&gt;
                     _p__|_0__|-20_|_4__|_10_|&lt;br /&gt;
                                                       &lt;br /&gt;
                       &amp;lt; = indica que el proceso se encuentra en modo preparado&lt;br /&gt;
                       &amp;gt; = indica la finalización del proceso&lt;br /&gt;
                       x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                       $ = indica la ejecución del planificador para retirar un&lt;br /&gt;
                           proceso y establecer otro según el criterio&lt;br /&gt;
                       &amp;amp; = se ejecuta el código del planificador&lt;br /&gt;
  &lt;br /&gt;
                   |---$---|---|---|---$---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
               Pa  &amp;lt;xxx|---|---|---|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
               Pb  |---&amp;lt;xxx|xxx|xxx|xxx&amp;gt;---$---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
               Pc  |---|---&amp;lt;---|---|---|---|xxx|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
               Pd  |---|---|---&amp;lt;---|---|---|---|---|xxx|xxx|xxx|xxx|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|&lt;br /&gt;
      Planificador |---&amp;amp;---&amp;amp;---&amp;amp;---|---&amp;amp;---&amp;amp;---|---&amp;amp;---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
              -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&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;
                   ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
       Cálculos    _t__|_2__|_4__|_2__|_7__|&lt;br /&gt;
      de tiempos   _T__|_6__|_4__|_6__|_12_|        z = índice de penalización&lt;br /&gt;
                   _z__|_3__|_1__|_3__|12/7|&lt;br /&gt;
&lt;br /&gt;
== Turno rotatorio estricto (Round Robin: RR) ==&lt;br /&gt;
&lt;br /&gt;
En este criterio, todo proceso es asignado al procesador durante un tiempo establecido denominado '''quantum''', tras el cual se le retira y se asigna a otro proceso rotatoriamente. De esta manera, los procesos acceden al procesador por turnos.&lt;br /&gt;
&lt;br /&gt;
El tamaño del '''quantum''' es fundamental para determinar el comportamiento de este criterio de planificación. &lt;br /&gt;
Si el '''quantum''' empleado es pequeño, por ejemplo de 10 ms, suponiendo que la conmutación de procesos requiere 10ms, el 50% del tiempo se empleará el procesador para ejecutar el código que permite conmutar entre procesos. Sin embargo, Si el '''quantuam''' empleado es grande, por ejemplo de 5 s, la latencia será mayor, degradando la experiencia del usuario que notará como sus procesos progresan ''a saltos'', puesto que, en el peor de los casos, hasta pasados 5 s no se le asignará el procesador a otro proceso .&lt;br /&gt;
&lt;br /&gt;
Si un proceso bloquea antes de consumir su '''quantum''', como sucede con proceso cuyo comportamiento está limitado por operaciones de entrada/salida, se añade al final de la cola. Esto beneficia a los procesos cuyo comportamiento está limitado por el procesador.&lt;br /&gt;
&lt;br /&gt;
Este criterio se puede implementar con una cola, de manera que la complejidad de la selección de un proceso es O(1). Nótese que a mayor número de procesos preparados, mayor tiempo tardará un proceso en volver a pasar a estado activo.&lt;br /&gt;
&lt;br /&gt;
    Ejemplo:&lt;br /&gt;
                                                                                         &lt;br /&gt;
                     ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|_3__|&lt;br /&gt;
           problema  _t__|_2__|_4__|_2__|_7__|    quantum = 1 unidad de tiempo&lt;br /&gt;
                                                       &lt;br /&gt;
                       &amp;lt; = indica que el proceso se encuentra en modo preparado&lt;br /&gt;
                       &amp;gt; = indica la finalización del proceso&lt;br /&gt;
                       x = indica que el proceso está asignado al procesador en ese momento&lt;br /&gt;
                       $ = indica la ejecución del planificador para retirar un&lt;br /&gt;
                           proceso y establecer otro según el criterio&lt;br /&gt;
                   |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
               Pa  &amp;lt;xxx|---|---|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
               Pb  |---&amp;lt;xxx|---|---|---|xxx|---|---|xxx|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|&lt;br /&gt;
               Pc  |---|---&amp;lt;xxx|---|---|---|xxx&amp;gt;---|---|---|---|---|---|---|---|---|---|---|---|---|&lt;br /&gt;
               Pd  |---|---|---&amp;lt;xxx|---|---|---|xxx|---|xxx|---|xxx|xxx|xxx|xxx&amp;gt;---|---|---|---|---|&lt;br /&gt;
                $  $---$---$---$---$---$---$---$---$---$---$---$---|---|---|---|---|---|---|---|---|&lt;br /&gt;
              -----|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---&amp;gt; t&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;
                   ____|_Pa_|_Pb_|_Pc_|_Pd_|&lt;br /&gt;
       Cálculos    _t__|_2__|_4__|_2__|_7__|&lt;br /&gt;
      de tiempos   _T__|_5__|_10_|_5__|_12_|        z = índice de penalización&lt;br /&gt;
                   _z__|_5/2|10/4|_5/2|12/7|&lt;br /&gt;
&lt;br /&gt;
== Turno rotatorio con compensación ==&lt;br /&gt;
&lt;br /&gt;
Es una variante del anterior. Para no perjudicar a los procesos cuyo comportamiento está limitado por operaciones de entrada/salida, se reinsertan en la cola en proporción al tiempo consumido. Es decir, que si un cierto proceso ha consumido el 25% de su '''quantum''', se reinserta en el 25% de la cola, contando desde el principio.&lt;br /&gt;
&lt;br /&gt;
== Turno rotatorio con quantum dependiente del número de procesos ==&lt;br /&gt;
&lt;br /&gt;
Otra variante se trata de emplear un '''quantum''' proporcional al número de procesos que haya en estado preparado. De esta forma se obtiene una progresión más uniforme, y por tanto una mejor experiencia para el usuario. Sin embargo, esto aumenta el número de conmutaciones entre procesos. Para evitar la degradación del rendimiento por un exceso de conmutaciones, se establece un mínimo de manera que el quantum no puede ser menor a éste.&lt;br /&gt;
&lt;br /&gt;
== Colas multinivel ==&lt;/div&gt;</summary>
		<author><name>Dorellana</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_planificaci%C3%B3n&amp;diff=110</id>
		<title>Criterios de planificación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Criterios_de_planificaci%C3%B3n&amp;diff=110"/>
				<updated>2011-03-02T17:15:47Z</updated>
		
		<summary type="html">&lt;p&gt;Dorellana: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Repetitibilidad''': para cargas de trabajo similares debe haber comportamientos similares&lt;br /&gt;
* '''Predecibilidad''': el tiempo de terminación de un proceso para una cierta carga de trabajo debe ser similar&lt;br /&gt;
* '''Eficiencia''': una rápida toma de decisiones aumenta el rendimiento&lt;br /&gt;
* '''Reducir''' el número de '''conmutaciones''': aumentaría el rendimiento, decrementando la penalización asociada&lt;br /&gt;
* Atender '''prioridades'''&lt;br /&gt;
* Los tiempos de espera tienen que ser '''aceptables''' (menores a 100 ms), para que el usuario no note &amp;quot;saltos&amp;quot; en la ejecución del programa&lt;/div&gt;</summary>
		<author><name>Dorellana</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Hilos&amp;diff=109</id>
		<title>Hilos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Hilos&amp;diff=109"/>
				<updated>2011-03-02T17:01:44Z</updated>
		
		<summary type="html">&lt;p&gt;Dorellana: El planificador tiene que trabajar entre dos procesos si sólo es un procesador&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En un sistema basado en '''hilos''', los procesos poseen internamente varias líneas (hilos) de ejecución, en contraposición de la visión clásica de la ejecución lineal.&lt;br /&gt;
&lt;br /&gt;
Dentro de los programas, con frecuencia, aparecen ciertos sectores independientes entre sí. En un sistema con multiprogramación, podemos tomar cada sección como procesos independientes ya que la permutación en el orden de ejecución no altera el resultado final. Si alguna de estas secciones presentase algún estado de bloqueo, se sumaría al tiempo global de todo el proceso. Éste tiempo se vería reducido al encontrarnos en un sistema multiprogramado.&lt;br /&gt;
&lt;br /&gt;
Ésta división en múltiples procesos provoca que en memoria se deba reservar un espacio para cada uno y que tras la consecución de cada uno, haya que reunirse todos los resultados en un único espacio de memoria. Otra opción para evitar este problema es el uso de un espacio de memoria común, pero traería consigo problemas de permisos y protección de memoria.&lt;br /&gt;
&lt;br /&gt;
El concepto de '''hilo''' aparece para arreglar estos problemas:&lt;br /&gt;
&lt;br /&gt;
Las líneas internas del proceso se desarrollan sobre el mismo espacio de memoria (la asignada al proceso original). Al ser líneas de ejecución diferentes, poseen su puntero de instrucción, sus valores para los registros de trabajo y su propia pila. No existe la protección entre las diferentes líneas de ejecución,  por lo que una sola línea podría destruir el trabajo de las demás. El buen resultado de las líneas depende del programador.&lt;br /&gt;
&lt;br /&gt;
Al usar un espacio de memoria común, la comunicación entre los hilos es más directa que entre procesos independientes con su propio espacio reservado.&lt;br /&gt;
&lt;br /&gt;
La implantación del concepto de hilo provoca que en el sistema operativo sea necesaria la creación de llamadas al sistema referentes a él, tales como: creación de hilos, destrucción de hilos, suspensión, esperas, etc.&lt;br /&gt;
&lt;br /&gt;
El mismo sistema operativo usa el sistema de hilos para la programación de sus actividades.&lt;br /&gt;
&lt;br /&gt;
Veamos un ejemplo diseñado para un solo procesador:&lt;br /&gt;
&lt;br /&gt;
 PA1 |  .---   .  .   .  &lt;br /&gt;
 PA2 |  .   ---.  .   .&lt;br /&gt;
     |  .      .  .   .     &lt;br /&gt;
 PB  |  .      .  .---.     &lt;br /&gt;
     |  .      .  .   . &lt;br /&gt;
 Pla |--.      .--.   . &lt;br /&gt;
     |__.______.__.___.&amp;gt;t&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
Con multiprocesamiento puedo ejecutar diferentes procesos a la vez. Si tengo uno solo pues lo desdoblo en hilos, usando técnicas de programacion apoyadas en APIS (como POSIX threads).&lt;/div&gt;</summary>
		<author><name>Dorellana</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Llamadas_al_sistema&amp;diff=86</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=86"/>
				<updated>2011-02-27T11:09:57Z</updated>
		
		<summary type="html">&lt;p&gt;Dorellana: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Las llamadas al sistema tienen que ser estables a lo largo del tiempo para garantizar la compatibilidad hacia atras.&lt;br /&gt;
&lt;br /&gt;
= Definiciones =&lt;br /&gt;
&lt;br /&gt;
* Compatibilidad hacia atras (Backward compatibility): El nuevo &amp;quot;comprende&amp;quot; el viejo.&lt;br /&gt;
&lt;br /&gt;
* Compatibilidad hacia delante (Fordward compatibility): El viejo &amp;quot;comprende&amp;quot; el nuevo. Esta compatibilidad no está tan trabajada como su opuesta, ya que no la suelen considerar tan importante.&lt;/div&gt;</summary>
		<author><name>Dorellana</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Usuario:Dorellana&amp;diff=38</id>
		<title>Usuario:Dorellana</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Usuario:Dorellana&amp;diff=38"/>
				<updated>2011-02-21T16:39:30Z</updated>
		
		<summary type="html">&lt;p&gt;Dorellana: Página nueva: David Orellana Martín&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;David Orellana Martín&lt;/div&gt;</summary>
		<author><name>Dorellana</name></author>	</entry>

	</feed>