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

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Gesti%C3%B3n_de_Entrada/Salida&amp;diff=3024</id>
		<title>Gestión de Entrada/Salida</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Gesti%C3%B3n_de_Entrada/Salida&amp;diff=3024"/>
				<updated>2014-12-26T16:57:30Z</updated>
		
		<summary type="html">&lt;p&gt;Davbotcab: Cambio en titulo de Gestion de E/S, en vez de por programas, por muestreo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El sistema operativo puede gobernar el dispositivo E/S a través del gestor de dispositivos de tres maneras posibles:&lt;br /&gt;
&lt;br /&gt;
* Gestión de E/S por muestreo.&lt;br /&gt;
* Gestión de E/S por interrupciones.&lt;br /&gt;
* Gestión híbrida de E/S.&lt;br /&gt;
&lt;br /&gt;
= Gestión de E/S por muestreo=&lt;br /&gt;
&lt;br /&gt;
El gestor de dispositivo periódicamente comprueba el estado del dispositivo. Para ello comprueba mediante los registros de estado del puerto de E/S si hay datos provenientes del dispositivo que deben ser tratados.&lt;br /&gt;
Un ejemplo de lectura de un único dispositivo sería:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
envia_orden_a_dispositivo(...);&lt;br /&gt;
while (!orden_terminada());&lt;br /&gt;
procesar_dato_resultado_de_orden();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La &amp;quot;lista de dispositivos&amp;quot; se puede recorrer en base a dos criterios distintos:&lt;br /&gt;
&lt;br /&gt;
-Con prioridad uniforme: Todos los dispositivos reciben las mismas oportunidades de ser atendidos: se pregunta al primer dispositivo si requiere atención, y se le atiende. Después se pasa al siguiente, y así sucesivamente hasta dar una vuelta completa.&lt;br /&gt;
&lt;br /&gt;
-Con prioridad escalonada: Tras atender a cualquier dispositivo, se vuelve a comenzar el sondeo por el primer dispositivo. El orden es determinante, pues se establece una relación de prioridad entre dispositivos determinada por ese orden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es ineficaz en sistemas interactivos, debido a que requiere espera ocupada y resulta engorrosa para atender a varios dispositivos simultáneamente, al implicar establecer prioridades entre estos.&lt;br /&gt;
&lt;br /&gt;
= Gestión de E/S por interrupciones =&lt;br /&gt;
&lt;br /&gt;
Una interrupción por hardware es una señal proveniente de un dispositivo de E/S para notificar al procesador de un cierto evento que debe ser tratado. Por ejemplo, un proceso hace uso de la llamada al sistema ''read'' para solicitar información que se encuentra en disco magnético. Una vez que la información está disponible, la interrupción es empleada para que se ejecute el gestor de dispositivos y obtenga los datos para dicho proceso, que ya están disponibles.&lt;br /&gt;
&lt;br /&gt;
Las interrupciones son un mecanismo que ofrece la arquitectura para conectar los dispositivos de E/S con el procesador. No obstante, los datos provenientes del dispositivo de E/S se obtienen a través del bus.&lt;br /&gt;
&lt;br /&gt;
El dispositivo de E/S emplea una de las líneas de interrupción que conectan al dispositivo con el procesador. Cada una de estas líneas corresponden con un cierto dispositivo o una familia de dispositivos de naturaleza similar. La signación de líneas y dispositivo es estática y sucede en tiempo de arranque, por tanto, no cambia a lo largo del tiempo. En caso de que haya datos a tratar en el dispositivo, se notifica al procesador mediante la línea de interrupción. Ante esto, el planificador debe apartar el proceso que esté en estado activo para conmutar al gestor de dispositivo, el cual realizará el tratamiento de la interrupción, obteniendo los datos del dispositivo de E/S que están pendientes de ser tratados.&lt;br /&gt;
&lt;br /&gt;
Por tanto, por cada interrupción se debe [[Conmutación_de_procesos|conmutar]] al gestor de dispositivos.&lt;br /&gt;
&lt;br /&gt;
Las interrupciones no son reentrantes, esto quiere decir que cuando se está realizando el tratamiento de una interrupción se desactiva temporalmente la notificación por interrupciones. Por tanto, una interrupción se ejecuta hasta fin de tratamiento, y en ningún caso es interrumpida por otra interrupción.&lt;br /&gt;
&lt;br /&gt;
= Gestión de E/S híbrida =&lt;br /&gt;
&lt;br /&gt;
Esta aproximación es la más usada en sistemas operativos modernos, y consiste en emplear una combinación de las soluciones anteriores. En principio, se realiza una gestión por interrupciones, pero ante situaciones de estrés en las que se ofrezca una carga de trabajo muy alta, que pueda llevar a una sobrecarga de conmutaciones, se limita en el tiempo la consulta de datos. Por ejemplo, si la tarjeta de red estuviera saturando el procesador con interrupciones, se puede optar por atenderlas todas juntas periódicamente (En lotes).&lt;/div&gt;</summary>
		<author><name>Davbotcab</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Gesti%C3%B3n_de_Entrada/Salida&amp;diff=3023</id>
		<title>Gestión de Entrada/Salida</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Gesti%C3%B3n_de_Entrada/Salida&amp;diff=3023"/>
				<updated>2014-12-26T16:57:02Z</updated>
		
		<summary type="html">&lt;p&gt;Davbotcab: Deshecha la revisión 3022 de Davbotcab (disc.)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El sistema operativo puede gobernar el dispositivo E/S a través del gestor de dispositivos de tres maneras posibles:&lt;br /&gt;
&lt;br /&gt;
* Gestión de E/S por programas.&lt;br /&gt;
* Gestión de E/S por interrupciones.&lt;br /&gt;
* Gestión híbrida de E/S.&lt;br /&gt;
&lt;br /&gt;
= Gestión de E/S por muestreo=&lt;br /&gt;
&lt;br /&gt;
El gestor de dispositivo periódicamente comprueba el estado del dispositivo. Para ello comprueba mediante los registros de estado del puerto de E/S si hay datos provenientes del dispositivo que deben ser tratados.&lt;br /&gt;
Un ejemplo de lectura de un único dispositivo sería:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
envia_orden_a_dispositivo(...);&lt;br /&gt;
while (!orden_terminada());&lt;br /&gt;
procesar_dato_resultado_de_orden();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La &amp;quot;lista de dispositivos&amp;quot; se puede recorrer en base a dos criterios distintos:&lt;br /&gt;
&lt;br /&gt;
-Con prioridad uniforme: Todos los dispositivos reciben las mismas oportunidades de ser atendidos: se pregunta al primer dispositivo si requiere atención, y se le atiende. Después se pasa al siguiente, y así sucesivamente hasta dar una vuelta completa.&lt;br /&gt;
&lt;br /&gt;
-Con prioridad escalonada: Tras atender a cualquier dispositivo, se vuelve a comenzar el sondeo por el primer dispositivo. El orden es determinante, pues se establece una relación de prioridad entre dispositivos determinada por ese orden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es ineficaz en sistemas interactivos, debido a que requiere espera ocupada y resulta engorrosa para atender a varios dispositivos simultáneamente, al implicar establecer prioridades entre estos.&lt;br /&gt;
&lt;br /&gt;
= Gestión de E/S por interrupciones =&lt;br /&gt;
&lt;br /&gt;
Una interrupción por hardware es una señal proveniente de un dispositivo de E/S para notificar al procesador de un cierto evento que debe ser tratado. Por ejemplo, un proceso hace uso de la llamada al sistema ''read'' para solicitar información que se encuentra en disco magnético. Una vez que la información está disponible, la interrupción es empleada para que se ejecute el gestor de dispositivos y obtenga los datos para dicho proceso, que ya están disponibles.&lt;br /&gt;
&lt;br /&gt;
Las interrupciones son un mecanismo que ofrece la arquitectura para conectar los dispositivos de E/S con el procesador. No obstante, los datos provenientes del dispositivo de E/S se obtienen a través del bus.&lt;br /&gt;
&lt;br /&gt;
El dispositivo de E/S emplea una de las líneas de interrupción que conectan al dispositivo con el procesador. Cada una de estas líneas corresponden con un cierto dispositivo o una familia de dispositivos de naturaleza similar. La signación de líneas y dispositivo es estática y sucede en tiempo de arranque, por tanto, no cambia a lo largo del tiempo. En caso de que haya datos a tratar en el dispositivo, se notifica al procesador mediante la línea de interrupción. Ante esto, el planificador debe apartar el proceso que esté en estado activo para conmutar al gestor de dispositivo, el cual realizará el tratamiento de la interrupción, obteniendo los datos del dispositivo de E/S que están pendientes de ser tratados.&lt;br /&gt;
&lt;br /&gt;
Por tanto, por cada interrupción se debe [[Conmutación_de_procesos|conmutar]] al gestor de dispositivos.&lt;br /&gt;
&lt;br /&gt;
Las interrupciones no son reentrantes, esto quiere decir que cuando se está realizando el tratamiento de una interrupción se desactiva temporalmente la notificación por interrupciones. Por tanto, una interrupción se ejecuta hasta fin de tratamiento, y en ningún caso es interrumpida por otra interrupción.&lt;br /&gt;
&lt;br /&gt;
= Gestión de E/S híbrida =&lt;br /&gt;
&lt;br /&gt;
Esta aproximación es la más usada en sistemas operativos modernos, y consiste en emplear una combinación de las soluciones anteriores. En principio, se realiza una gestión por interrupciones, pero ante situaciones de estrés en las que se ofrezca una carga de trabajo muy alta, que pueda llevar a una sobrecarga de conmutaciones, se limita en el tiempo la consulta de datos. Por ejemplo, si la tarjeta de red estuviera saturando el procesador con interrupciones, se puede optar por atenderlas todas juntas periódicamente (En lotes).&lt;/div&gt;</summary>
		<author><name>Davbotcab</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Gesti%C3%B3n_de_Entrada/Salida&amp;diff=3022</id>
		<title>Gestión de Entrada/Salida</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Gesti%C3%B3n_de_Entrada/Salida&amp;diff=3022"/>
				<updated>2014-12-26T16:55:56Z</updated>
		
		<summary type="html">&lt;p&gt;Davbotcab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El sistema operativo puede gobernar el dispositivo E/S a través del gestor de dispositivos de tres maneras posibles:&lt;br /&gt;
&lt;br /&gt;
* Gestión de E/S por muestreo.&lt;br /&gt;
* Gestión de E/S por interrupciones.&lt;br /&gt;
* Gestión híbrida de E/S.&lt;br /&gt;
&lt;br /&gt;
= Gestión de E/S por muestreo=&lt;br /&gt;
&lt;br /&gt;
El gestor de dispositivo periódicamente comprueba el estado del dispositivo. Para ello comprueba mediante los registros de estado del puerto de E/S si hay datos provenientes del dispositivo que deben ser tratados.&lt;br /&gt;
Un ejemplo de lectura de un único dispositivo sería:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
envia_orden_a_dispositivo(...);&lt;br /&gt;
while (!orden_terminada());&lt;br /&gt;
procesar_dato_resultado_de_orden();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La &amp;quot;lista de dispositivos&amp;quot; se puede recorrer en base a dos criterios distintos:&lt;br /&gt;
&lt;br /&gt;
-Con prioridad uniforme: Todos los dispositivos reciben las mismas oportunidades de ser atendidos: se pregunta al primer dispositivo si requiere atención, y se le atiende. Después se pasa al siguiente, y así sucesivamente hasta dar una vuelta completa.&lt;br /&gt;
&lt;br /&gt;
-Con prioridad escalonada: Tras atender a cualquier dispositivo, se vuelve a comenzar el sondeo por el primer dispositivo. El orden es determinante, pues se establece una relación de prioridad entre dispositivos determinada por ese orden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es ineficaz en sistemas interactivos, debido a que requiere espera ocupada y resulta engorrosa para atender a varios dispositivos simultáneamente, al implicar establecer prioridades entre estos.&lt;br /&gt;
&lt;br /&gt;
= Gestión de E/S por interrupciones =&lt;br /&gt;
&lt;br /&gt;
Una interrupción por hardware es una señal proveniente de un dispositivo de E/S para notificar al procesador de un cierto evento que debe ser tratado. Por ejemplo, un proceso hace uso de la llamada al sistema ''read'' para solicitar información que se encuentra en disco magnético. Una vez que la información está disponible, la interrupción es empleada para que se ejecute el gestor de dispositivos y obtenga los datos para dicho proceso, que ya están disponibles.&lt;br /&gt;
&lt;br /&gt;
Las interrupciones son un mecanismo que ofrece la arquitectura para conectar los dispositivos de E/S con el procesador. No obstante, los datos provenientes del dispositivo de E/S se obtienen a través del bus.&lt;br /&gt;
&lt;br /&gt;
El dispositivo de E/S emplea una de las líneas de interrupción que conectan al dispositivo con el procesador. Cada una de estas líneas corresponden con un cierto dispositivo o una familia de dispositivos de naturaleza similar. La signación de líneas y dispositivo es estática y sucede en tiempo de arranque, por tanto, no cambia a lo largo del tiempo. En caso de que haya datos a tratar en el dispositivo, se notifica al procesador mediante la línea de interrupción. Ante esto, el planificador debe apartar el proceso que esté en estado activo para conmutar al gestor de dispositivo, el cual realizará el tratamiento de la interrupción, obteniendo los datos del dispositivo de E/S que están pendientes de ser tratados.&lt;br /&gt;
&lt;br /&gt;
Por tanto, por cada interrupción se debe [[Conmutación_de_procesos|conmutar]] al gestor de dispositivos.&lt;br /&gt;
&lt;br /&gt;
Las interrupciones no son reentrantes, esto quiere decir que cuando se está realizando el tratamiento de una interrupción se desactiva temporalmente la notificación por interrupciones. Por tanto, una interrupción se ejecuta hasta fin de tratamiento, y en ningún caso es interrumpida por otra interrupción.&lt;br /&gt;
&lt;br /&gt;
= Gestión de E/S híbrida =&lt;br /&gt;
&lt;br /&gt;
Esta aproximación es la más usada en sistemas operativos modernos, y consiste en emplear una combinación de las soluciones anteriores. En principio, se realiza una gestión por interrupciones, pero ante situaciones de estrés en las que se ofrezca una carga de trabajo muy alta, que pueda llevar a una sobrecarga de conmutaciones, se limita en el tiempo la consulta de datos. Por ejemplo, si la tarjeta de red estuviera saturando el procesador con interrupciones, se puede optar por atenderlas todas juntas periódicamente (En lotes).&lt;/div&gt;</summary>
		<author><name>Davbotcab</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Gesti%C3%B3n_de_Entrada/Salida&amp;diff=3021</id>
		<title>Gestión de Entrada/Salida</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Gesti%C3%B3n_de_Entrada/Salida&amp;diff=3021"/>
				<updated>2014-12-26T16:55:26Z</updated>
		
		<summary type="html">&lt;p&gt;Davbotcab: /* Gestión de E/S por programas */ Modificación del título, el profesor prefería que se cambiara&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El sistema operativo puede gobernar el dispositivo E/S a través del gestor de dispositivos de tres maneras posibles:&lt;br /&gt;
&lt;br /&gt;
* Gestión de E/S por programas.&lt;br /&gt;
* Gestión de E/S por interrupciones.&lt;br /&gt;
* Gestión híbrida de E/S.&lt;br /&gt;
&lt;br /&gt;
= Gestión de E/S por muestreo=&lt;br /&gt;
&lt;br /&gt;
El gestor de dispositivo periódicamente comprueba el estado del dispositivo. Para ello comprueba mediante los registros de estado del puerto de E/S si hay datos provenientes del dispositivo que deben ser tratados.&lt;br /&gt;
Un ejemplo de lectura de un único dispositivo sería:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
envia_orden_a_dispositivo(...);&lt;br /&gt;
while (!orden_terminada());&lt;br /&gt;
procesar_dato_resultado_de_orden();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La &amp;quot;lista de dispositivos&amp;quot; se puede recorrer en base a dos criterios distintos:&lt;br /&gt;
&lt;br /&gt;
-Con prioridad uniforme: Todos los dispositivos reciben las mismas oportunidades de ser atendidos: se pregunta al primer dispositivo si requiere atención, y se le atiende. Después se pasa al siguiente, y así sucesivamente hasta dar una vuelta completa.&lt;br /&gt;
&lt;br /&gt;
-Con prioridad escalonada: Tras atender a cualquier dispositivo, se vuelve a comenzar el sondeo por el primer dispositivo. El orden es determinante, pues se establece una relación de prioridad entre dispositivos determinada por ese orden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es ineficaz en sistemas interactivos, debido a que requiere espera ocupada y resulta engorrosa para atender a varios dispositivos simultáneamente, al implicar establecer prioridades entre estos.&lt;br /&gt;
&lt;br /&gt;
= Gestión de E/S por interrupciones =&lt;br /&gt;
&lt;br /&gt;
Una interrupción por hardware es una señal proveniente de un dispositivo de E/S para notificar al procesador de un cierto evento que debe ser tratado. Por ejemplo, un proceso hace uso de la llamada al sistema ''read'' para solicitar información que se encuentra en disco magnético. Una vez que la información está disponible, la interrupción es empleada para que se ejecute el gestor de dispositivos y obtenga los datos para dicho proceso, que ya están disponibles.&lt;br /&gt;
&lt;br /&gt;
Las interrupciones son un mecanismo que ofrece la arquitectura para conectar los dispositivos de E/S con el procesador. No obstante, los datos provenientes del dispositivo de E/S se obtienen a través del bus.&lt;br /&gt;
&lt;br /&gt;
El dispositivo de E/S emplea una de las líneas de interrupción que conectan al dispositivo con el procesador. Cada una de estas líneas corresponden con un cierto dispositivo o una familia de dispositivos de naturaleza similar. La signación de líneas y dispositivo es estática y sucede en tiempo de arranque, por tanto, no cambia a lo largo del tiempo. En caso de que haya datos a tratar en el dispositivo, se notifica al procesador mediante la línea de interrupción. Ante esto, el planificador debe apartar el proceso que esté en estado activo para conmutar al gestor de dispositivo, el cual realizará el tratamiento de la interrupción, obteniendo los datos del dispositivo de E/S que están pendientes de ser tratados.&lt;br /&gt;
&lt;br /&gt;
Por tanto, por cada interrupción se debe [[Conmutación_de_procesos|conmutar]] al gestor de dispositivos.&lt;br /&gt;
&lt;br /&gt;
Las interrupciones no son reentrantes, esto quiere decir que cuando se está realizando el tratamiento de una interrupción se desactiva temporalmente la notificación por interrupciones. Por tanto, una interrupción se ejecuta hasta fin de tratamiento, y en ningún caso es interrumpida por otra interrupción.&lt;br /&gt;
&lt;br /&gt;
= Gestión de E/S híbrida =&lt;br /&gt;
&lt;br /&gt;
Esta aproximación es la más usada en sistemas operativos modernos, y consiste en emplear una combinación de las soluciones anteriores. En principio, se realiza una gestión por interrupciones, pero ante situaciones de estrés en las que se ofrezca una carga de trabajo muy alta, que pueda llevar a una sobrecarga de conmutaciones, se limita en el tiempo la consulta de datos. Por ejemplo, si la tarjeta de red estuviera saturando el procesador con interrupciones, se puede optar por atenderlas todas juntas periódicamente (En lotes).&lt;/div&gt;</summary>
		<author><name>Davbotcab</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sistema_combinado&amp;diff=3001</id>
		<title>Sistema combinado</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Sistema_combinado&amp;diff=3001"/>
				<updated>2014-12-11T12:07:05Z</updated>
		
		<summary type="html">&lt;p&gt;Davbotcab: Fallo gramatical en &amp;quot;facilita de gestión de la memoria disponible&amp;quot;, cambio &amp;quot;de&amp;quot;, por &amp;quot;la&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Consiste en combinar la segmentación y la paginación. La idea fundamental consiste en definir segmentos que están compuestos por N páginas. De ahí que reciba el nombre de '''segmentación paginada'''. Por tanto, cualquier segmento ocupa, como mínimo una página de memoria.&lt;br /&gt;
&lt;br /&gt;
Por una parte, la segmentación proporciona ventajas hacia los procesos: Organización de datos y código, mecanismos de protección, compartición de datos y código, y optimización en el espacio ocupado. Por otra parte, la paginación facilita la gestión de la memoria disponible.&lt;br /&gt;
&lt;br /&gt;
Los procesos emplean direcciones lógicas de memoria segmentada, que son traducidas a direcciones lógicas páginadas (dirección intermedia), que a su vez deben de ser traducidas a direcciones físicas. Por tanto, cualquier acceso a memoria supone un total de tres accesos a memoria. Uno para acceder a la tabla de segmentos, otro para acceder a la tabla de páginas y, por último, otro más para acceder a la dirección física. Aquí hay un ejemplo de la arquitectura IA32:&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Arquitecturaia32_2.jpg]] &amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>Davbotcab</name></author>	</entry>

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

	</feed>