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

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=P%C3%A1gina_con_listado_de_personas_que_han_contribuido&amp;diff=2477</id>
		<title>Página con listado de personas que han contribuido</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=P%C3%A1gina_con_listado_de_personas_que_han_contribuido&amp;diff=2477"/>
				<updated>2012-01-29T18:45:07Z</updated>
		
		<summary type="html">&lt;p&gt;Alfalclop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A continuación, la lista de usuarios/as de la Universidad de Sevilla que han contribuido a la wiki. Si ponéis tu usuario/a estás solicitando al profesor que evalúe tus contribuciones a la wiki para la subida de notas de hasta 2 puntos posible:&lt;br /&gt;
&lt;br /&gt;
* luigarhor&lt;br /&gt;
* rafperper&lt;br /&gt;
* sergaralo&lt;br /&gt;
* josalgrod1&lt;br /&gt;
* felgaroje&lt;br /&gt;
* luimunlei&lt;br /&gt;
* [https://1984.lsi.us.es/wiki-ssoo/index.php/Usuario:Lorruimor Lorruimor]&lt;br /&gt;
* albsolnog&lt;br /&gt;
* framorexp&lt;br /&gt;
* javgarang&lt;br /&gt;
* FerGuaTol&lt;br /&gt;
* jesgonbel&lt;br /&gt;
* fraperdom&lt;br /&gt;
* antdomflo&lt;br /&gt;
* antmorzam&lt;br /&gt;
* migoligon&lt;br /&gt;
* danplaseg&lt;br /&gt;
* peducemar&lt;br /&gt;
* danescsan&lt;br /&gt;
* sertrimur&lt;br /&gt;
* juamenmor&lt;br /&gt;
* tomvelber&lt;br /&gt;
* dandeben&lt;br /&gt;
* alfalclop&lt;/div&gt;</summary>
		<author><name>Alfalclop</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol-ejer2-1-otros-aspectos&amp;diff=2476</id>
		<title>Sol-ejer2-1-otros-aspectos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol-ejer2-1-otros-aspectos&amp;diff=2476"/>
				<updated>2012-01-29T18:14:33Z</updated>
		
		<summary type="html">&lt;p&gt;Alfalclop: /* SJF Apropiativo con  multiprocesamiento */ Fin Pa&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SJF Apropiativo con  multiprocesamiento ==&lt;br /&gt;
&lt;br /&gt;
Para este caso disponemos de 2 Procesadores, y supondremos que el planificador se ejecuta en uno de ellos&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;_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|&lt;br /&gt;
           problema  _t__|_3__|_5__|_6__|&lt;br /&gt;
 &lt;br /&gt;
 P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt; bloquea cada 1 u.t.&lt;br /&gt;
 P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt; bloquea cada 3 u.t.&lt;br /&gt;
 tiempos de bloqueo=2 u.t. (tanto para P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt; y P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;).&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;
                       B = el proceso pasa a estado bloqueado&lt;br /&gt;
                       P = el proceso pasa a estado preparado&lt;br /&gt;
                       +++ = procesador 1&lt;br /&gt;
                       --- = procesador 2&lt;br /&gt;
 &lt;br /&gt;
                   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
    Pa             &amp;lt;+++B   |   P---B   |   P---B   |   &amp;gt;   |   |   |&lt;br /&gt;
    Pb             |   &amp;lt;+++|+++|+++B   |   P+++|+++&amp;gt;   |   |   |   |&lt;br /&gt;
    Pc             |   |   &amp;lt;---P   |---|---P   |---|---|---&amp;gt;   |   |&lt;br /&gt;
    Planificador   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&lt;br /&gt;
 &lt;br /&gt;
                        _____|_PA_|_PB_|_PC_|&lt;br /&gt;
             Cálculos   __t__|_3__|_5__|_6__|&lt;br /&gt;
            de tiempos  __T__|_7__|_7__|_8__|&lt;br /&gt;
                        _T/t_|_2.3|_1.4|_1.3|&lt;br /&gt;
                          |&lt;br /&gt;
                          |_&amp;gt; Indice de penalización&lt;br /&gt;
&lt;br /&gt;
Explicación:&lt;br /&gt;
&lt;br /&gt;
* En el instante de tiempo 3, el proceso Pa pasa a estado preparado y su tiempo de ejecución es menor al del proceso Pc. Por tanto, se apropia del procesador 2. Recuerde que '''siempre que sea posible''' el proceso que pasa a estado activo debe hacerlo en el último procesador que empleó para evitar el coste asociado a la migración. En caso de no ser posible, '''se migra''' al procesador disponible. El proceso B se deja en el procesador 2 para evitar el coste asociado a la migración pues '''no''' se considera posible migrar un proceso en estado activo.&lt;br /&gt;
&lt;br /&gt;
* En el instante de tiempo 6, el proceso Pa y Pb, que son más cortos que el proceso Pc, se apropian de los procesadores. Puesto que en asignación dinámica, '''siempre que sea posible''' se mantiene al proceso en el procesador en el que se ejecutó anteriormente, nuestro proceso Pa pasa al procesador 2, y el proceso Pb pasa al procesador 1 (pues estos son los procesadores en los que se ejecutaron anteriormente).&lt;br /&gt;
&lt;br /&gt;
Revisado. --[[Usuario:Pneira|Pneira]] 18:27 23 nov 2011 (UTC)&lt;/div&gt;</summary>
		<author><name>Alfalclop</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol-ejer2-planif-procesos&amp;diff=2460</id>
		<title>Sol-ejer2-planif-procesos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sol-ejer2-planif-procesos&amp;diff=2460"/>
				<updated>2012-01-29T12:33:26Z</updated>
		
		<summary type="html">&lt;p&gt;Alfalclop: /* Turno rotatorio proporcional al número de procesos */  Fin proceso a&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Turno rotatorio estricto =&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;_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|&lt;br /&gt;
           problema  _t__|_3__|_5__|_6__|&lt;br /&gt;
 &lt;br /&gt;
    P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt; bloquea por E/S cada 1 unidad de tiempo&lt;br /&gt;
    P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt; bloquea por E/S cada 3 unidades de tiempo&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;
               Pa  &amp;lt;---|   |   |   |   |---|   |   |   |---|   |   &amp;gt;   |   |   |   |   |   |   |   &lt;br /&gt;
               Pb  |   &amp;lt;---|---|   |   |   |---|   |   |   |---|---&amp;gt;   |   |   |   |   |   |   |   &lt;br /&gt;
               Pc  |   |   &amp;lt;   |---|---|   |   |---|---|   |   |   |---|---&amp;gt;   |   |   |   |   |   &lt;br /&gt;
     Planificador  X   X   |   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  &lt;br /&gt;
 &lt;br /&gt;
                   _____|_Pa_|_Pb_|_Pc_|&lt;br /&gt;
        Cálculos   __t__|_3__|_5__|_6__|&lt;br /&gt;
       de tiempos  __T__|_10_|_11_|_12_|&lt;br /&gt;
                   _T/t_|3.3_|2.2_|_2__|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notése que el proceso A no llega a emplear el ''quantum'' que tiene asignado, en ese caso, como indica la [[Criterios_de_planificación|teoría]], se le retira el procesador y el planificador selecciona a otro proceso. Dejar el procesador sin proceso asignado, es decir, ocioso, va contra la lógica del máximo aprovechamiento del procesador. Por ello, he retirado una solución incorrecta que aparecía en esta sección. --[[Usuario:Pneira|Pneira]] 21:15 21 mar 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tengo una duda en este ejercicio, en la unidad de tiempo 6 cuando el planificador activa el proceso Pb, porque motivo solo le asigna una unidad de tiempo?, podria asignarle 2 no? teniendo en cuenta que el quantum = 2. Ademas el proceso B bloquea cada 3 unidades de tiempo, no entiendo porque solo le asigna una unidad y luego activa en la unidad de tiempo 7 el proceso C.  LFE (Luis Fernandez Esteban)&lt;br /&gt;
&lt;br /&gt;
Pues yo diría que es porque se bloquea cada 3, al igual que el A se bloquea a cada unidad. Ya llevaba 1, y con esa actividad, +2 --[[Usuario:PCamino|PCamino]]&lt;br /&gt;
&lt;br /&gt;
Gracias, tienes razon ya lo entendi. LFE (Luis Fernandez Esteban)&lt;br /&gt;
&lt;br /&gt;
DUDA &lt;br /&gt;
En t=3 llegaría el proceso Pa y el proceso Pb a la cola de estado preparado. Como dice en teroía, un proceso que se bloquea sin llegar a agotar su quantum, pasaría al final de  la cola de estados preparados. Por tanto, el siguiente en ejecutarse sería Pb, puesto que Pa viene de estar bloqueado sin agotar su quantum luego pasaría al final de la cola de preparados. ¿Estoy en lo cierto?&lt;br /&gt;
--[[Usuario:josvaldia|josvaldia]]&lt;br /&gt;
&lt;br /&gt;
-esto es estricto no por compensación por tanto no estas en lo cierto. --[[Usuario:juacordia|juacordia]]&lt;br /&gt;
&lt;br /&gt;
DUDA: ¿En t=10 el proceso A no bloquearia y terminaria de ejecutarse cuando vuelva del bloqueo?  --[[Usuario:jesgonbel|jesgonbel]]&lt;br /&gt;
&lt;br /&gt;
RESP: En t=10, el proceso A no entra en bloqueo, sino que directamente finaliza su ejecución.&lt;br /&gt;
--[[Usuario:framorexp|framorexp]]&lt;br /&gt;
&lt;br /&gt;
RESP2: jesgonbel, el proceso terminaría cuando vuelve del bloqueo, no finaliza en el 10, lo haría en el 12 lo dijo pablo en clase creo recordar --[[Usuario:fercarort|fercarort]]&lt;br /&gt;
&lt;br /&gt;
RESP3: Vale, puede ser, pero a efectos prácticos es como si finalizara en el 10, porque tras el bloqueo no necesita ningún tipo de procesamiento. No se si este caso merece algún trato especial, pero creo que no. --[[Usuario:framorexp|framorexp]]&lt;br /&gt;
&lt;br /&gt;
= Por prioridades =&lt;br /&gt;
&lt;br /&gt;
Suponiendo que la prioridad de los procesos es la siguiente: A&amp;lt;B&amp;lt;C&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;_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|&lt;br /&gt;
           problema  _t__|_3__|_5__|_6__|&lt;br /&gt;
 &lt;br /&gt;
    P&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt; bloquea por E/S cada 1 unidad de tiempo&lt;br /&gt;
    P&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt; bloquea por E/S cada 3 unidades de tiempo&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;
     Planificador  X   X   X   |   |   |   |   |   X   |   X   X   X   |   X   |   |   |   |   |      &lt;br /&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  &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;_|&lt;br /&gt;
        Cálculos   __t__|_3__|_5__|_6__|&lt;br /&gt;
       de tiempos  __T__|_15_|_13_|_6_|&lt;br /&gt;
                   _T/t_|__5_|_2.6|_1__|&lt;br /&gt;
&lt;br /&gt;
Nota: Del 11 al 12 no se procesa nada porque sólo quedan los procesos A y B, pero en esa unidad de tiempo ambos están bloqueados (los bloqueos de A y B duran 2 uds. de tiempo) --[[Usuario:Pneira|Pneira]] 19:23 8 nov 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
= Turno rotatorio proporcional al número de procesos =&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;_|&lt;br /&gt;
          Datos del  _H0_|_0__|_1__|_2__|&lt;br /&gt;
           problema  _t__|_3__|_5__|_6__|&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;
                       B = bloquea&lt;br /&gt;
                       P = preparado&lt;br /&gt;
 &lt;br /&gt;
                      q=2 q=2     q=1 q=1 q=1 q=2     q=1 q=1 q=1 q=1 q=2                &lt;br /&gt;
                       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |&lt;br /&gt;
               Pa      &amp;lt;---B   |   P   |---B   |   P   |---|   |   &amp;gt;   |   |   |   |   |   |   |   |   |&lt;br /&gt;
               Pb      |   &amp;lt;---|---P   |   |---B   |   P   |---P   |---&amp;gt;   |   |   |   |   |   |   |   |&lt;br /&gt;
               Pc      |   |   &amp;lt;   |---P   |   |---|---P   |   |---P   |---|---&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;
                   _____|_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;_|&lt;br /&gt;
        Cálculos   __t__|_3__|_5__|_6__|&lt;br /&gt;
       de tiempos  __T__|_12_|_15_|_17_|&lt;br /&gt;
                   _T/t_|_4__|2.80|_2.5|&lt;br /&gt;
&lt;br /&gt;
Nota: Fíjese en que el quantum se calcula en base al número de procesos que están en estado preparado cada vez que hay que tomar una decisión de planificación --[[Usuario:Pneira|Pneira]] 19:34 8 nov 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
Los índices de penalización de este ejercicio son erróneos, la solución correcta creo que sería la siguiente:&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;_|&lt;br /&gt;
        Cálculos   __t__|_3__|_5___|_6__|&lt;br /&gt;
       de tiempos  __T__|_9__|_11__|_12_|&lt;br /&gt;
                   _T/t_|_3__|_2.2_|__2_|--[[Usuario:Josazcrom|Josazcrom]] 17:28 22 nov 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Aparte de que los índices parecen estar mal, el proceso A no debería terminar donde termina, si no dos unidades de tiempo después, tras terminar el bloqueo.&lt;br /&gt;
&lt;br /&gt;
PREGUNTA:Pienso que en el instante 11 el proceso que se ejecuta es el C ya que en el 10 en la cola de preparado había 1 proceso en estado preparado, por tanto, el quantum vuelve a cambiar a 2 y el proceso C se ejecuta del 10 a 12. &lt;br /&gt;
¿Alguién puede confirmarme esta &amp;quot;pregunta&amp;quot;?.&lt;br /&gt;
--[[Usuario:Raflopseg|Raflopseg]] 18:20 23 nov 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probablemente no te sea de ayuda ahora pero por si le sirve a alguien:&lt;br /&gt;
En el instante 9 B usa solo uno porque C esta activo y por tanto el quantum es 1. &lt;br /&gt;
B no pasa a estar bloqueado(se bloquea en el 6 y no se vuelve a usar hasta el 9 por lo tanto esta activo por tres intervalos)&lt;br /&gt;
Al estar B activo C solo se puede ejecutar de 10 a 11&lt;/div&gt;</summary>
		<author><name>Alfalclop</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Dise%C3%B1o_modular_E/S&amp;diff=2289</id>
		<title>Diseño modular E/S</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Dise%C3%B1o_modular_E/S&amp;diff=2289"/>
				<updated>2012-01-13T10:54:08Z</updated>
		
		<summary type="html">&lt;p&gt;Alfalclop: SSI&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;                                              \&lt;br /&gt;
      Procesos de espacio de usuario          |&lt;br /&gt;
                                              |&lt;br /&gt;
      ----------------------------------      |&lt;br /&gt;
                                              |&lt;br /&gt;
         Llamadas al sistemas                 |&lt;br /&gt;
        ej. open, read, write, close...       |&lt;br /&gt;
       (Software independiente de E/S)        &amp;gt;  Software&lt;br /&gt;
                                              |&lt;br /&gt;
       --------------------------------       |&lt;br /&gt;
                                              |&lt;br /&gt;
          Gestor de dispositivo   _____       |&lt;br /&gt;
                                 |SSI         /&lt;br /&gt;
       --------------------------------      &lt;br /&gt;
                                              \&lt;br /&gt;
                 Puerto de E/S                |&lt;br /&gt;
                                              |&lt;br /&gt;
          ---------------------------         &amp;gt;   Hardware     &lt;br /&gt;
                                              |&lt;br /&gt;
               Dispositivo E/S                |&lt;br /&gt;
                                              |&lt;br /&gt;
        ----------------------------          /&lt;br /&gt;
&lt;br /&gt;
Los procesos de usuario no deben conocer los detalles del material, el SO se encarga de dar la API homogénea con la información de bajo nivel&lt;/div&gt;</summary>
		<author><name>Alfalclop</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Memoria_Virtual&amp;diff=2204</id>
		<title>Memoria Virtual</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Memoria_Virtual&amp;diff=2204"/>
				<updated>2011-12-19T16:30:44Z</updated>
		
		<summary type="html">&lt;p&gt;Alfalclop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La memoria virtual es una técnica que puede implementar el administrador de memoria con soporte de paginación para aumentar el grado de multiprogramación. Para ello se emplea una zona en disco conocida como ''zona de intercambio'' o ''swap'' para descargar en ella segmentos o páginas que se encuentran en memoria principal.&lt;br /&gt;
&lt;br /&gt;
La zona de intercambio se implementa siguiendo dos posibles estrategias:&lt;br /&gt;
&lt;br /&gt;
* Se destina una parte del disco reservada explícitamente para ello. En este caso, dicho espacio de memoria no puede ser empleado para almacenar información útil del usuario. Los sistemas operativos tipo-Unix implementan esta estrategia.&lt;br /&gt;
&lt;br /&gt;
* Se emplea un fichero oculto que puede tener un tamaño fijo(donde dicho espacio estará reservado y el usuario no podra hacer uso de el) o variable para almacenar las páginas descargadas. Los sistemas operativos de tipo-Microsoft implementan esta aproximación.&lt;br /&gt;
&lt;br /&gt;
La técnica de memoria virtual se manifiesta cuando toda la memoria principal está en uso y, por tanto, no existe espacio libre para cargar una cierta pagina que es requerida por un proceso. Ante esta situación, el mecanismo de memoria virtual permite seleccionar una página víctima que será descargada a la zona de intercambio. De esta manera se libera memoria principal para poder cargar la página que nuestro proceso en estado activo requiere. La selección de las páginas víctima se hace en base a diferentes criterios que veremos en esta unidad didáctica.&lt;br /&gt;
&lt;br /&gt;
Por tanto, en caso de que un proceso activo requiera una página o segmento que está descargado en la zona de intercambio, '''hay que seleccionar una página víctima''' de otro proceso, preferentemente en estado preparado o bloqueado, que será descargada en disco para hacer espacio a la página requerida.&lt;br /&gt;
&lt;br /&gt;
Los tiempos de descarga y recarga de páginas tienen una penalización considerable. Esto se debe a los tiempos de acceso al dispositivo disco magnético son mucho mayores que los de la memoria principal. En general, un buen criterio de reemplazo de páginas debe no descargar páginas que vayan a ser necesitadas en poco tiempo, reduciendo así la cantidad de accesos a disco asociados a la descarga y recarga de páginas.&lt;br /&gt;
&lt;br /&gt;
A continuación, nos centraremos en el estudio de los diferentes [[Criterios de reemplazo|criterios de reemplazo]] para páginas que permiten seleccionar la página víctima.&lt;/div&gt;</summary>
		<author><name>Alfalclop</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Segmentaci%C3%B3n&amp;diff=2203</id>
		<title>Segmentación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Segmentaci%C3%B3n&amp;diff=2203"/>
				<updated>2011-12-19T16:25:24Z</updated>
		
		<summary type="html">&lt;p&gt;Alfalclop: /* Carga de segmentos a petición */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Definición=&lt;br /&gt;
Un segmento es un espacio de memoria de tamaño variable, compuesto por:&lt;br /&gt;
*Descriptor: Identificador único del segmento (dentro del espacio de memoria del proceso).&lt;br /&gt;
*Tamaño del segmento&lt;br /&gt;
&lt;br /&gt;
=Funcionamiento=&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Segmentos.png|725px]]&lt;br /&gt;
&lt;br /&gt;
=Características=&lt;br /&gt;
*Cada proceso en ejecución (esté activo, bloqueado o preparado) tiene su tabla de segmentos.&lt;br /&gt;
&lt;br /&gt;
*Solapamiento: 2 segmentos pueden compartir zona de memoria. Ojo! problemas de concurrencia. Habría que usar algún método para su sincronización si se intenta.&lt;br /&gt;
&lt;br /&gt;
*Protección de memoria: añadir 3 bits a la tabla de descriptores de segmentos para los permisos ( r w x ).&lt;br /&gt;
&lt;br /&gt;
*Aspectos materiales : Hay 2 registros que funcionan como dispositivos de traducción segmentada; uno de dirección de comienzo de la tabla de segmentos, y otro para el número de entradas en ella.&lt;br /&gt;
&lt;br /&gt;
*Esto supone dos accesos a memoria física real. La tabla de segmentos ocupa memoria, siendo deseable que permanezcan en cache.&lt;br /&gt;
&lt;br /&gt;
*Cuando un proceso requiere más memoria se crea un nuevo segmento.&lt;br /&gt;
&lt;br /&gt;
*Dos instancias de un mismo proceso pueden compartir segmentos de memoria de instrucciones/código, pero no para datos ya que esto complicaría la gestión.&lt;br /&gt;
&lt;br /&gt;
*No se redimensionan.&lt;br /&gt;
&lt;br /&gt;
*Gestión compleja, sobretodo por su tamaño variable&lt;br /&gt;
&lt;br /&gt;
=Mecanismos=&lt;br /&gt;
Los diferentes mecanismos que nos ofrece la segmentación de memoria son los siguientes.&lt;br /&gt;
==Carga de segmentos a petición==&lt;br /&gt;
Es un mecanismo que permite a un proceso no disponer de todos sus segmentos en memoria principal, se pueden descargar a disco (en la zona de intercambio o swap) segmentos en base a un cierto criterio (ver [[Intro | Memoria virtual]]). &lt;br /&gt;
&lt;br /&gt;
Esta zona de intercambio puede ser:&lt;br /&gt;
&lt;br /&gt;
* Un lugar fijo en el disco (Linux, Unix). El administrador de memoria decide qué segmento se va a descargar&lt;br /&gt;
&lt;br /&gt;
* Un fichero oculto de tamaño fijo o variable dependiendo de la configuracion dada por el usuario (Windows).&lt;br /&gt;
&lt;br /&gt;
==Enlace dinámico==&lt;br /&gt;
Uso de llamadas a funciones que están en disco.&lt;br /&gt;
&lt;br /&gt;
Podemos tener referencias a funciones o bibliotecas que no estén en memoria principal (permite ir cargando bajo demanda los segmentos que contengan el código necesario).&lt;/div&gt;</summary>
		<author><name>Alfalclop</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Memoria_Virtual&amp;diff=2202</id>
		<title>Memoria Virtual</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Memoria_Virtual&amp;diff=2202"/>
				<updated>2011-12-19T12:25:35Z</updated>
		
		<summary type="html">&lt;p&gt;Alfalclop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La memoria virtual es una técnica que puede implementar el administrador de memoria con soporte de paginación para aumentar el grado de multiprogramación. Para ello se emplea una zona en disco conocida como ''zona de intercambio'' o ''swap'' para descargar en ella segmentos o páginas que se encuentran en memoria principal.&lt;br /&gt;
&lt;br /&gt;
La zona de intercambio se implementa siguiendo dos posibles estrategias:&lt;br /&gt;
&lt;br /&gt;
* Se destina una parte del disco reservada explícitamente para ello. En este caso, dicho espacio de memoria no puede ser empleado para almacenar información útil del usuario. Los sistemas operativos tipo-Unix implementan esta estrategia.&lt;br /&gt;
&lt;br /&gt;
* Se emplea un fichero oculto que puede tener un tamaño fijo o variable para almacenar las páginas descargadas. Los sistemas operativos de tipo-Microsoft implementan esta aproximación.&lt;br /&gt;
&lt;br /&gt;
La técnica de memoria virtual se manifiesta cuando toda la memoria principal está en uso y, por tanto, no existe espacio libre para cargar una cierta pagina que es requerida por un proceso. Ante esta situación, el mecanismo de memoria virtual permite seleccionar una página víctima que será descargada a la zona de intercambio. De esta manera se libera memoria principal para poder cargar la página que nuestro proceso en estado activo requiere. La selección de las páginas víctima se hace en base a diferentes criterios que veremos en esta unidad didáctica.&lt;br /&gt;
&lt;br /&gt;
Por tanto, en caso de que un proceso activo requiera una página o segmento que está descargado en la zona de intercambio, '''hay que seleccionar una página víctima''' de otro proceso, preferentemente en estado preparado o bloqueado, que será descargada en disco para hacer espacio a la página requerida.&lt;br /&gt;
&lt;br /&gt;
Los tiempos de descarga y recarga de páginas tienen una penalización considerable. Esto se debe a los tiempos de acceso al dispositivo disco magnético son mucho mayores que los de la memoria principal. En general, un buen criterio de reemplazo de páginas debe no descargar páginas que vayan a ser necesitadas en poco tiempo, reduciendo así la cantidad de accesos a disco asociados a la descarga y recarga de páginas.&lt;br /&gt;
&lt;br /&gt;
A continuación, nos centraremos en el estudio de los diferentes [[Criterios de reemplazo|criterios de reemplazo]] para páginas que permiten seleccionar la página víctima.&lt;/div&gt;</summary>
		<author><name>Alfalclop</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Memoria_Virtual&amp;diff=2201</id>
		<title>Memoria Virtual</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Memoria_Virtual&amp;diff=2201"/>
				<updated>2011-12-19T12:24:50Z</updated>
		
		<summary type="html">&lt;p&gt;Alfalclop: fichero oculto tamaño fijo y variable&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La memoria virtual es una técnica que puede implementar el administrador de memoria con soporte de paginación para aumentar el grado de multiprogramación. Para ello se emplea una zona en disco conocida como ''zona de intercambio'' o ''swap'' para descargar en ella segmentos o páginas que se encuentran en memoria principal.&lt;br /&gt;
&lt;br /&gt;
La zona de intercambio se implementa siguiendo dos posibles estrategias:&lt;br /&gt;
&lt;br /&gt;
* Se destina una parte del disco reservada explícitamente para ello. En este caso, dicho espacio de memoria no puede ser empleado para almacenar información útil del usuario. Los sistemas operativos tipo-Unix implementan esta estrategia.&lt;br /&gt;
&lt;br /&gt;
* Se emplea un fichero oculto que puede tener un tamaño fijo o un tamaño de manera variable para almacenar las páginas descargadas. Los sistemas operativos de tipo-Microsoft implementan esta aproximación.&lt;br /&gt;
&lt;br /&gt;
La técnica de memoria virtual se manifiesta cuando toda la memoria principal está en uso y, por tanto, no existe espacio libre para cargar una cierta pagina que es requerida por un proceso. Ante esta situación, el mecanismo de memoria virtual permite seleccionar una página víctima que será descargada a la zona de intercambio. De esta manera se libera memoria principal para poder cargar la página que nuestro proceso en estado activo requiere. La selección de las páginas víctima se hace en base a diferentes criterios que veremos en esta unidad didáctica.&lt;br /&gt;
&lt;br /&gt;
Por tanto, en caso de que un proceso activo requiera una página o segmento que está descargado en la zona de intercambio, '''hay que seleccionar una página víctima''' de otro proceso, preferentemente en estado preparado o bloqueado, que será descargada en disco para hacer espacio a la página requerida.&lt;br /&gt;
&lt;br /&gt;
Los tiempos de descarga y recarga de páginas tienen una penalización considerable. Esto se debe a los tiempos de acceso al dispositivo disco magnético son mucho mayores que los de la memoria principal. En general, un buen criterio de reemplazo de páginas debe no descargar páginas que vayan a ser necesitadas en poco tiempo, reduciendo así la cantidad de accesos a disco asociados a la descarga y recarga de páginas.&lt;br /&gt;
&lt;br /&gt;
A continuación, nos centraremos en el estudio de los diferentes [[Criterios de reemplazo|criterios de reemplazo]] para páginas que permiten seleccionar la página víctima.&lt;/div&gt;</summary>
		<author><name>Alfalclop</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Segmentaci%C3%B3n&amp;diff=2198</id>
		<title>Segmentación</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Segmentaci%C3%B3n&amp;diff=2198"/>
				<updated>2011-12-19T09:36:36Z</updated>
		
		<summary type="html">&lt;p&gt;Alfalclop: /* Carga de segmentos a petición */ windows tamaño variable&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Definición=&lt;br /&gt;
Un segmento es un espacio de memoria de tamaño variable, compuesto por:&lt;br /&gt;
*Descriptor: Identificador único del segmento (dentro del espacio de memoria del proceso).&lt;br /&gt;
*Tamaño del segmento&lt;br /&gt;
&lt;br /&gt;
=Funcionamiento=&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Segmentos.png|725px]]&lt;br /&gt;
&lt;br /&gt;
=Características=&lt;br /&gt;
*Cada proceso en ejecución (esté activo, bloqueado o preparado) tiene su tabla de segmentos.&lt;br /&gt;
&lt;br /&gt;
*Solapamiento: 2 segmentos pueden compartir zona de memoria. Ojo! problemas de concurrencia. Habría que usar algún método para su sincronización si se intenta.&lt;br /&gt;
&lt;br /&gt;
*Protección de memoria: añadir 3 bits a la tabla de descriptores de segmentos para los permisos ( r w x ).&lt;br /&gt;
&lt;br /&gt;
*Aspectos materiales : Hay 2 registros que funcionan como dispositivos de traducción segmentada; uno de dirección de comienzo de la tabla de segmentos, y otro para el número de entradas en ella.&lt;br /&gt;
&lt;br /&gt;
*Esto supone dos accesos a memoria física real. La tabla de segmentos ocupa memoria, siendo deseable que permanezcan en cache.&lt;br /&gt;
&lt;br /&gt;
*Cuando un proceso requiere más memoria se crea un nuevo segmento.&lt;br /&gt;
&lt;br /&gt;
*Dos instancias de un mismo proceso pueden compartir segmentos de memoria de instrucciones/código, pero no para datos ya que esto complicaría la gestión.&lt;br /&gt;
&lt;br /&gt;
*No se redimensionan.&lt;br /&gt;
&lt;br /&gt;
*Gestión compleja, sobretodo por su tamaño variable&lt;br /&gt;
&lt;br /&gt;
=Mecanismos=&lt;br /&gt;
Los diferentes mecanismos que nos ofrece la segmentación de memoria son los siguientes.&lt;br /&gt;
==Carga de segmentos a petición==&lt;br /&gt;
Es un mecanismo que permite a un proceso no disponer de todos sus segmentos en memoria principal, se pueden descargar a disco (en la zona de intercambio o swap) segmentos en base a un cierto criterio (ver [[Intro | Memoria virtual]]). &lt;br /&gt;
&lt;br /&gt;
Esta zona de intercambio puede ser:&lt;br /&gt;
&lt;br /&gt;
* Un lugar fijo en el disco (Linux, Unix). El administrador de memoria decide qué segmento se va a descargar&lt;br /&gt;
&lt;br /&gt;
* Un fichero oculto de tamaño fijo o variable dependiendo de la configuracion dada por el usuario, incluso se puede eliminar (Windows).&lt;br /&gt;
&lt;br /&gt;
==Enlace dinámico==&lt;br /&gt;
Uso de llamadas a funciones que están en disco.&lt;br /&gt;
&lt;br /&gt;
Podemos tener referencias a funciones o bibliotecas que no estén en memoria principal (permite ir cargando bajo demanda los segmentos que contengan el código necesario).&lt;/div&gt;</summary>
		<author><name>Alfalclop</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Mensajer%C3%ADa&amp;diff=2062</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=2062"/>
				<updated>2011-12-07T14:29:09Z</updated>
		
		<summary type="html">&lt;p&gt;Alfalclop: /* Transmisión por copia */ falta l&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un mensaje es un contenedor que se emplea para intercambiar información entre dos o más procesos. Los mensajes tienen un cierto formato generalmente compuesto por una cabecera, que contiene información sobre la fuente y el destinatario, y un cuerpo, que contiene información específica.&lt;br /&gt;
&lt;br /&gt;
Los mecanismos de mensajería se refiere al conjunto de funcionalidades que permiten al sistema operativo realizar la entrega de un mensaje a uno o varios procesos. Mediante dicho mecanismo también es posible resolver problemas de concurrencia.&lt;br /&gt;
&lt;br /&gt;
Los sistemas operativos generalmente ofrecen dos llamadas al sistema para que un proceso pueda enviar y recibir mensajes:&lt;br /&gt;
&lt;br /&gt;
* '''send(mensaje, destino)''': Para enviar un mensaje&lt;br /&gt;
* '''recv(mensaje)'''': Para recibir un mensaje&lt;br /&gt;
&lt;br /&gt;
Cualquier proceso que necesita comprobar si tiene mensajes para ser procesados por él debe invocar la llamada al sistema '''recv'''.&lt;br /&gt;
&lt;br /&gt;
== Formas de identificación ==&lt;br /&gt;
&lt;br /&gt;
Para identificar la fuente y el destino de nuestro mensaje se pueden emplear dos estrategias.&lt;br /&gt;
&lt;br /&gt;
=== Denominación Directa ===&lt;br /&gt;
&lt;br /&gt;
En este caso se emplea un ID que permite identificar a la fuente y al destinatario de manera unívoca en el sistema, por ejemplo, el PID de un proceso. La denominación directa permite tres configuraciones:&lt;br /&gt;
&lt;br /&gt;
* ''Unicast'', de manera que la comunicación sucede entre una fuente y un destinatario.&lt;br /&gt;
* ''Broadcast'', el emisor envía un mensaje a '''todos''' los procesos existentes en el sistema.&lt;br /&gt;
* ''Multicast'', el emisor envía un mensaje a un grupo de procesos, siendo un grupo un subconjunto de procesos existentes en el sistema. El sistema operativo debe ofrecer llamadas al sistema que permitan a los procesos crear grupos y suscribirse a ellos. Un proceso puede suscribirse a tantos grupos como le sea necesario.&lt;br /&gt;
&lt;br /&gt;
El principal inconveniente de la denominación directa es que se pierde el mensaje si el destino no se encuentra.&lt;br /&gt;
&lt;br /&gt;
=== Denominación Indirecta ===&lt;br /&gt;
&lt;br /&gt;
Se emplea un elemento intermediario denominado ''buzón''. El sistema operativo ofrece llamadas al sistema que permiten la creación y destrucción de buzones, por ejemplo, '''CreateMailbox''' y '''DestroyMailbox'''. Una vez creado el buzón, se emplea éste para realizar la comunicación entre procesos.&lt;br /&gt;
&lt;br /&gt;
El sistema operativo debe de comprobar que la identidad de la fuente de un mensaje es correcta, de lo contrario un proceso podría suplantar la identidad de otro.&lt;br /&gt;
&lt;br /&gt;
== Formas de transmisión ==&lt;br /&gt;
&lt;br /&gt;
Distinguimos tres formas de transmisión: Transmisión por copia, transmisión por referencia y transmisión por copia en caso de escritura.&lt;br /&gt;
&lt;br /&gt;
=== Transmisión por copia ===&lt;br /&gt;
&lt;br /&gt;
Si se emplea ''denominación directa'', al invocar el receptor la llamada ''recv'', el mensaje se copia del espacio de memoria del emisor al espacio de receptor. Esta forma de implementar la transmisión tiene un coste de orden lineal &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Si se emplea ''denominación indirecta'', al invocar ''send'' el emisor, el mensaje se copia del espacio de emisor al espacio del buzón, que se encuentra en el espacio de memoria del sistema operativo. Una vez que el receptor invoca ''receive'', se copia el mensaje al espacio de memoria que el receptor ha habilitado para almacenar el mensaje.&lt;br /&gt;
&lt;br /&gt;
=== Transmisión por referencia ===&lt;br /&gt;
&lt;br /&gt;
Es una mejora frente al mecanismo de transmisión por copia. Básicamente, en lugar de copiar el mensaje, lo que supone un coste de &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, se le devuelve al receptor una dirección de memoria en la que se encuentra el mensaje, lo que supone únicamente 4 u 8 bytes dependiendo del tamaño de palabra del procesador (si es de 32-bits o 64-bits).&lt;br /&gt;
&lt;br /&gt;
Si se emplea junto a la '''denominación directa''', el sistema operativo le devuelve al receptor un puntero a la dirección en la que se encuentra el mensaje. Si el mensaje está en el espacio del emisor, son necesarios mecanismos explícitos de compartición de memoria entre procesos, ya que dos procesos cualquiera no comparten memoria. Si el mensaje está en el espacio del sistema operativo, éste debe ofrecer a los procesos mecanismos para acceder a su espacio de memoria-&lt;br /&gt;
&lt;br /&gt;
Si se emplea junto a la '''denominación indirecta''', el emisor crea un mensaje en el espacio del sistema operativo y se le ofrece un puntero al receptor.&lt;br /&gt;
&lt;br /&gt;
=== Transmisión por copia de escritura ===&lt;br /&gt;
&lt;br /&gt;
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() y el proceso bloqueado pasa a estado preparado.&lt;br /&gt;
** ''Asíncrona'': suponemos una estructura de datos con capacidad de almacenamiento limitada, dependiente del proceso destinatario o en el buzón del SO. Al ser enviados, los mensajes irán encolándose para que el proceso receptor pueda gestionarlos cuando pueda. De esta manera se aumenta el rendimiento pero se requiere de políticas adicionales de tratamiento de los mensajes si la capacidad de almacenamiento de la estructura de datos se ve sobrepasada(PE, eliminación de mensajes, realocalización de memoria, etc..)&lt;br /&gt;
&lt;br /&gt;
* Comportamiento del receptor, '''recv()'''&lt;br /&gt;
** ''Bloqueante'': una llamada a recv() sin mensajes a procesar pasa el proceso llamante a estado bloqueado. Un send() de otro proceso que añada un mensaje a la cola del proceso bloqueado hace que éste pase a estado preparado.&lt;br /&gt;
** ''No bloqueante'': una llamada a recv() sin mensajes a procesar devuelve un mensaje de error, pero la ejecución del proceso llamante continúa.&lt;br /&gt;
&lt;br /&gt;
Entendemos por proceso llamante a aquel que hace uso de las llamadas send() y recv().&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.&amp;lt;ref&amp;gt; Véase http://tools.ietf.org/html/rfc4330, sección 4, Message Format.&amp;lt;/ref&amp;gt;&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.&amp;lt;ref&amp;gt;Ver Communicating between the kernel and user-space in Linux using Netlink Sockets (http://1984.lsi.us.es/~pablo/docs/spae.pdf)&amp;lt;/ref&amp;gt;&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;center&amp;quot; style=&amp;quot;background:DarkSlateBlue; color:white&amp;quot;|'''Type-Length-Value'''&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 0&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 1&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 2&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 3&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 4&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 5&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 6&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 7&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 8&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 9&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 10&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 11&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 12&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 13&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 14&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 15&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 16&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 17&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 18&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 19&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 20&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 21&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 22&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 23&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 24&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 25&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 26&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 27&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 28&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 29&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 30&lt;br /&gt;
! width=&amp;quot;15 px&amp;quot; style=&amp;quot;background:#efefef;&amp;quot; | 31&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=16, align=&amp;quot;center&amp;quot;| Length &lt;br /&gt;
| colspan=16, align=&amp;quot;center&amp;quot;| Type&lt;br /&gt;
|-&lt;br /&gt;
| colspan=32, align=&amp;quot;center&amp;quot;| Value &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).&amp;lt;ref&amp;gt;Ver http://www.ietf.org/rfc/rfc791.txt, sección 3.1.&amp;lt;/ref&amp;gt;&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;
* Unicidad 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;br /&gt;
&lt;br /&gt;
==Referencias==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alfalclop</name></author>	</entry>

	</feed>