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

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Unidades_SSD&amp;diff=4388</id>
		<title>Unidades SSD</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Unidades_SSD&amp;diff=4388"/>
				<updated>2019-06-06T04:04:26Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* SSD vs Disco Magnético: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Unidad de estado sólido (Solid State Drive, SSD)''' es un dispositivo de almacenamiento de datos hecho con componentes electrónicos. No tienen partes móviles y utilizan memoria Flash, que es similar a la tecnología que se emplea en dispositivos de almacenamiento portátiles USB (coloquialmente conocidos como ''pendrive''). Esta misma tecnología se puede emplear en unidades híbridas (SSHD) compuestas por SSD y disco duro mágnetico, que intentan compensar las limitaciones de capacidad de las SSD a la vez que se mejoran los tiempos de acceso a un precio inferior al SSD. Se tratan, por tanto, de memoria de almacenamiento no volátil.&lt;br /&gt;
&lt;br /&gt;
== Estructura hardware ==&lt;br /&gt;
&lt;br /&gt;
Su arquitectura emplea memoria no volátil Flash (tipo NAND). Además de una memoria DRAM volátil que se emplea como caché para amortiguar las escrituras directas sobre la memoria Flash, pues la vida de la memoria Flash está limitada por el número de escrituras que se realice, mientras que la DRAM no tiene este inconveniente, además de ser más lentas en las lecturas. Por tanto, la memoria DRAM se usa como zona intermedia en la que se mantienen los datos accedidos recientemente (ya se en lectura o escritura).&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ssdgrafico.jpg|320px|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
Los componentes clave de una SSD son el [[Estructura_típica_de_dispositivo_E/S|controlador]] y la memoria para almacenar los datos. &lt;br /&gt;
El controlador gestiona las operaciones de L/E al dispositivo y ofrece una interfaz (SATA) compatible con la de discos magnéticos.&lt;br /&gt;
El buffer es una memoria DRAM que actúa como almacenamiento intermedio entre el controlador y el array de memorias Flash, ya que las operaciones de escritura son lentas.&lt;br /&gt;
&lt;br /&gt;
Se transfieren bloques de datos que se almacenan en varias celdas flash.&lt;br /&gt;
&lt;br /&gt;
El dispositivo utiliza un condensador para retener energía suficiente como para volcar el buffer en el array de memorias en caso de pérdida repentina de la alimentación manteniendo así la integridad de los datos.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Ssdnand.jpg|350px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
==Técnica de Escritura y Lectura: ==&lt;br /&gt;
&lt;br /&gt;
La interfaz de cada celda flash es serie (8/16 bits). Un sector se escribe en paralelo disperso en varias celdas. Para escribir, la celda debe estar vacía, de lo contrario, habrá que borrarla previamente.&lt;br /&gt;
Para conseguir un mejor rendimiento, se escriben o se leen varias celdas simultáneamente, dividiendo los tiempos de transferencia por el número de celdas que se paralelizan.&lt;br /&gt;
&lt;br /&gt;
'''Particularidades unidades SSD:'''&lt;br /&gt;
&lt;br /&gt;
* El tamaño típico del “sector” es de 4 KB.&lt;br /&gt;
&lt;br /&gt;
* Para poder escribir, hay que borrar previamente.&lt;br /&gt;
&lt;br /&gt;
* Las celdas no se pueden borrar individualmente, por lo que son agrupadas en unidades de borrado. Estas unidades de borrado tienen un tamaño típico de 128KB-256KB.&lt;br /&gt;
&lt;br /&gt;
* Debemos tener en cuenta que el borrado de un sector, puede afectar a otros sectores y, si ya hay otros sectores en la misma unidad de borrado, hay que preservarlos:&lt;br /&gt;
&lt;br /&gt;
       Escritura = Lectura + Borrado + Modificación + Escritura&lt;br /&gt;
&lt;br /&gt;
* Soportan un número finito de borrados. Un número típico de ciclos de borrado/programación: 100.000.&lt;br /&gt;
&lt;br /&gt;
Las SSD tienen la misma interfaz SATA que los discos magnéticos, luego son compatibles con cualquier sistema de archivos válido para discos magnéticos. Pero, debido a la Amplificación de la escritura y a que cada celda flash admite un número finito de borrados, hay que intentar evitar usar repetidamente una misma celda.&lt;br /&gt;
&lt;br /&gt;
== SSD vs Disco Magnético: ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold; text-decoration:underline;&amp;quot; | Características&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold; text-decoration:underline;&amp;quot; | Solid-State Drive&lt;br /&gt;
(SSD)&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold; text-decoration:underline;&amp;quot; | Hard Disk Drive&lt;br /&gt;
(HDD)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Capacidad de almacenamiento&lt;br /&gt;
| Los SSD´s son más caros que los HDD´s y parece que seguirá así hasta la siguiente década. &lt;br /&gt;
&lt;br /&gt;
A mayo de 2019 el giga está a 15 céntimos de euro.  Basado en modelos de 4 TB. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Su precio sigue bajando conforme se extiende su uso y &lt;br /&gt;
se abaratan costes de producción y seguirá así para los &lt;br /&gt;
tamaños de almacenamiento cotidianos.&lt;br /&gt;
| El precio de los HDD´s está en Mayo de 2019 entre 2 y 3 céntimos dependiendo si es de 2.5” o de 3.5” y de la marca.&lt;br /&gt;
Se siguen abaratando costes de producción y se espera que su precio siga bajando.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Fiabilidad de la información almacenada y esperanza de vida&lt;br /&gt;
| Si se queda sin energía, los SSD que ya llevan un tiempo en uso suelencomenzar a perder datos después de aproximadamente uno o dos años&lt;br /&gt;
de almacenamiento, dependiendo de la temperatura. &lt;br /&gt;
&lt;br /&gt;
Se supone los nuevos modelos retienen datos durante unos diez años&lt;br /&gt;
dependiendo de la tecnología. &lt;br /&gt;
&lt;br /&gt;
Los SSD no son aptos para guardar archivos a largo plazo tales como&lt;br /&gt;
copias de seguridad.&lt;br /&gt;
| En un ambiente seco a baja temperatura, los HDD pueden conservar sus&lt;br /&gt;
datos durante un período de tiempo muy largo, incluso sin&lt;br /&gt;
alimentación. &lt;br /&gt;
&lt;br /&gt;
En contra, las piezas mecánicas tienden a obstruirse con el tiempo lo&lt;br /&gt;
cual a la larga acaba impidiendo el giro del disco, impidiendo el&lt;br /&gt;
funcionamiento del dispositivo.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Tiempo de inicio&lt;br /&gt;
| Casi instantáneo; No hay componentes mecánicos que preparar. Puedenecesitar algunos milisegundos para salir de un modo automático de&lt;br /&gt;
ahorro de energía. Pero insignificante comparado con el de un HDD&lt;br /&gt;
| Pasan unos segundos hasta que el disco comienza a girar. &lt;br /&gt;
&lt;br /&gt;
Es posible que un sistema con muchas unidades deba escalonar la rotación para limitar&lt;br /&gt;
el consumo máximo de energía, ya que hay un pico de consumo cuando&lt;br /&gt;
se inicia por primera vez la unidad.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Rendimiento de acceso secuencial&lt;br /&gt;
| Para el uso personal, la tasa de transferencia máxima suele oscilar entre unos 500 MB / s y 3500 MB / s, dependiendo de la unidad.&lt;br /&gt;
&lt;br /&gt;
Para el uso empresarial se ofrece dispositivos con rendimiento de variosgigabytes por segundo.&lt;br /&gt;
| Una vez el cabezal está preparado, al leer o escribir una pista&lt;br /&gt;
continua, un disco duro moderno puede transferir datos a&lt;br /&gt;
aproximadamente 250 MB / s.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La velocidad de transferencia de datos depende también de la velocidad&lt;br /&gt;
de rotación, que puede variar de 3.600 a 15.000 rpm y también de la&lt;br /&gt;
pista (la lectura de las pistas externas es más rápida).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Rendimiento&lt;br /&gt;
de acceso aleatorio&lt;br /&gt;
| En este apartado es donde más sobresalen los SSD, ya que la memoria flash es de acceso aleatorio, los datos sepueden recuperar directamente de varias, evitando grandes cuellos de botella en el rendimiento.&lt;br /&gt;
&lt;br /&gt;
El tiempo de acceso aleatorio ronda generalmente los 0.1 ms.&lt;br /&gt;
&lt;br /&gt;
Mientras que los HDD´s tienen un factor limitante en la búsqueda deinformación, los SSD´s emplean el mismo tiempo en acceder acualquier dirección de memoria. Esto se traduce en tiempos de iniciode aplicaciones y arranque más rápidos&lt;br /&gt;
&lt;br /&gt;
La tecnología SSD puede ofrecer una velocidad de lectura / escriturabastante constante, pero cuando se accede a muchos bloquesindividuales más pequeños, se reduce el rendimiento. &lt;br /&gt;
&lt;br /&gt;
Los SSD sufren un fenómeno de degradación del rendimiento de escriturallamado amplificación de escritura, donde las células NAND muestranuna caída en el rendimiento y continuarán degradándosea lo largo de la vida útil del SSD.&lt;br /&gt;
&lt;br /&gt;
Se implementa una técnica llamada nivelación de desgaste para mitigareste efecto, pero debido a la naturaleza de los chips NAND, la unidadinevitablemente se degradará a un ritmo notable. Por lo tanto losSSD´s tienen un número limitado de lecturas y escrituras.&lt;br /&gt;
| El tiempo de latencia en la lectura es mucho mayor que los SSD. &lt;br /&gt;
&lt;br /&gt;
El tiempo de acceso aleatorio varía de 2.9 ms (unidad de servidor de gama alta) a 12 ms (disco duro portátil) debido a la necesidad de mover los cabezales y esperar a que los datos giren bajo el cabezal magnético. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El tiempo de lectura es diferente para cada búsqueda diferente, ya que la ubicación de los datos y la ubicación de la cabeza son probablemente diferentes. &lt;br /&gt;
Si se debe acceder a los datos de diferentes áreas de la fuente, como ocurre con los archivos fragmentados, los tiempos de respuesta aumentarán por la necesidad de buscar cada fragmento. &lt;br /&gt;
Por eso la utilización de herramientas de desfragmentación son muy útilespara mantener &lt;br /&gt;
el rendimiento de este tipo de dispositivos durante su periodo de vida.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Impacto de la fragmentación &lt;br /&gt;
en los sistemas de archivos&lt;br /&gt;
| La lectura de datos secuencialmente tiene un beneficio limitado (más allá de los tamaños de bloque FS típicos, digamos 4 KB), lo quehace que la fragmentación sea insignificante para los SSD. &lt;br /&gt;
&lt;br /&gt;
La desfragmentación causaría desgaste al realizar escrituras adicionales de las celdas flash NAND, que tienen un ciclo de vida limitado.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, incluso en los SSD, existe un límite práctico sobre lacantidad de fragmentación que pueden mantener ciertos sistemas dearchivos; una vez que se alcanza ese límite, fallan las asignacionesde archivos subsiguientes. En consecuencia, la desfragmentaciónpuede ser necesaria, aunque en menor grado.&lt;br /&gt;
| Algunos sistemas de archivos, como NTFS, se fragmentan con el tiempo si se&lt;br /&gt;
escriben con frecuencia; se requiere una desfragmentación periódica&lt;br /&gt;
para mantener un rendimiento óptimo.&lt;br /&gt;
&lt;br /&gt;
Esto generalmente no es un problema en los sistemas de archivos modernos.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Consumo&lt;br /&gt;
de energía&lt;br /&gt;
| Los SSD basados en flash de alto rendimiento generalmente requieren&lt;br /&gt;
de la mitad a un tercio de la potencia de los HDD. &lt;br /&gt;
&lt;br /&gt;
Las SSD DRAM de alto rendimiento generalmente requieren tanta energía&lt;br /&gt;
como las HDD, y deben conectarse a la alimentación, incluso cuando&lt;br /&gt;
el resto del sistema está apagado. &lt;br /&gt;
&lt;br /&gt;
Las tecnologías emergentes como DevSlp pueden minimizar los requisitos&lt;br /&gt;
de energía de las unidades inactivas.&lt;br /&gt;
| Los discos duros de menor potencia (tamaño de 1,8 pulgadas) pueden usar tan solo 0,35 vatios cuando están inactivos. &lt;br /&gt;
&lt;br /&gt;
Las unidades de 2,5 pulgadas suelen utilizar de 2 a 5 vatios. &lt;br /&gt;
Las unidades de 3,5 pulgadas de mayor rendimiento pueden utilizar hasta unos 20 vatios.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Susceptibilidad a factores ambientales&lt;br /&gt;
| Al no tener partes móviles son bastantes resistentes a golpes, movimientos bruscos &lt;br /&gt;
y vibraciones.&lt;br /&gt;
| Las cabezas flotantes que se desplazan sobre los platos, que giran a gran velocidad, son muy susceptibles al movimiento, vibraciones y golpes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pudiendo provocar fallos o incluso roturas que dejen inservible el dispositivo.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Ruido(acústico)&lt;br /&gt;
| Al no tener piezas móviles ni motores son bastantes silenciosos, normalmente no emiten ningún ruido perceptible. &lt;br /&gt;
&lt;br /&gt;
En algunos casos podemos escuchar una especie de zumbido &lt;br /&gt;
o pitido agudo, provocado por el generador de alto voltaje &lt;br /&gt;
que se utiliza en el borrado de bloques&lt;br /&gt;
| Las unidades de disco duro tienen partes móviles (cabezas, brazo actuador y el motor encargado de girar los platos). &lt;br /&gt;
&lt;br /&gt;
Producen sonidos característicos de zumbidos y chasquidos. Los niveles de ruido varían entrelos modelos, pero pueden ser significativos (aunque a menudo sonmucho más bajos que el sonido de losventiladores de refrigeración). &lt;br /&gt;
&lt;br /&gt;
Los discos duros de los portátiles son relativamente silenciosos.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Limitaciones de Escritura Segura&lt;br /&gt;
| La memoria flash NAND no se puede sobrescribir, pero se deben reescribir en bloques previamente borrados. Si un programa de cifrado cifra los datos que ya se encuentran en el SSD, los datos sobrescritos aún no están protegidos, no están encriptados y son accesibles (el cifrado de hardware basado en unidad no tiene este problema). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Además, los datos no se pueden borrar de forma segura sobrescribiendo el archivo original sin procedimientos especiales de &amp;quot;Borrado seguro&amp;quot; integrados en la unidad.&lt;br /&gt;
| Las unidades de disco duro pueden sobrescribir los datos de la unidad directamenteen cualquier sector en particular. &lt;br /&gt;
&lt;br /&gt;
Sin embargo, el firmware de la unidad  puede intercambiar bloques dañados con áreas de repuesto, por lo que es posible que aún existan partes y fragmentos de información que debería de estar sobreescrita e inaccesible.&lt;br /&gt;
&lt;br /&gt;
Los discos duros de algunos fabricantes llenan la unidad completa con ceros, incluidos los sectores reubicados, con el comando ATA Secure Erase, esto es conocido como formateo a bajo nivel.&lt;br /&gt;
|}&lt;br /&gt;
Fuente: Wikipedia en ingles, artículo [https://en.wikipedia.org/wiki/Solid-state_drive SSD].&lt;br /&gt;
&lt;br /&gt;
== Más información ==&lt;br /&gt;
&lt;br /&gt;
Enlace de Interés:&lt;br /&gt;
&lt;br /&gt;
https://www.cactus-tech.com/resources/blog/details/solid-state-drives-101&lt;br /&gt;
&lt;br /&gt;
11.3. [[Mejoras de tiempos de desplazamiento|Mejoras de tiempos de desplazamiento]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Unidades_SSD&amp;diff=4387</id>
		<title>Unidades SSD</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Unidades_SSD&amp;diff=4387"/>
				<updated>2019-06-06T03:47:47Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* SSD vs Disco Magnético: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Unidad de estado sólido (Solid State Drive, SSD)''' es un dispositivo de almacenamiento de datos hecho con componentes electrónicos. No tienen partes móviles y utilizan memoria Flash, que es similar a la tecnología que se emplea en dispositivos de almacenamiento portátiles USB (coloquialmente conocidos como ''pendrive''). Esta misma tecnología se puede emplear en unidades híbridas (SSHD) compuestas por SSD y disco duro mágnetico, que intentan compensar las limitaciones de capacidad de las SSD a la vez que se mejoran los tiempos de acceso a un precio inferior al SSD. Se tratan, por tanto, de memoria de almacenamiento no volátil.&lt;br /&gt;
&lt;br /&gt;
== Estructura hardware ==&lt;br /&gt;
&lt;br /&gt;
Su arquitectura emplea memoria no volátil Flash (tipo NAND). Además de una memoria DRAM volátil que se emplea como caché para amortiguar las escrituras directas sobre la memoria Flash, pues la vida de la memoria Flash está limitada por el número de escrituras que se realice, mientras que la DRAM no tiene este inconveniente, además de ser más lentas en las lecturas. Por tanto, la memoria DRAM se usa como zona intermedia en la que se mantienen los datos accedidos recientemente (ya se en lectura o escritura).&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ssdgrafico.jpg|320px|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
Los componentes clave de una SSD son el [[Estructura_típica_de_dispositivo_E/S|controlador]] y la memoria para almacenar los datos. &lt;br /&gt;
El controlador gestiona las operaciones de L/E al dispositivo y ofrece una interfaz (SATA) compatible con la de discos magnéticos.&lt;br /&gt;
El buffer es una memoria DRAM que actúa como almacenamiento intermedio entre el controlador y el array de memorias Flash, ya que las operaciones de escritura son lentas.&lt;br /&gt;
&lt;br /&gt;
Se transfieren bloques de datos que se almacenan en varias celdas flash.&lt;br /&gt;
&lt;br /&gt;
El dispositivo utiliza un condensador para retener energía suficiente como para volcar el buffer en el array de memorias en caso de pérdida repentina de la alimentación manteniendo así la integridad de los datos.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Ssdnand.jpg|350px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
==Técnica de Escritura y Lectura: ==&lt;br /&gt;
&lt;br /&gt;
La interfaz de cada celda flash es serie (8/16 bits). Un sector se escribe en paralelo disperso en varias celdas. Para escribir, la celda debe estar vacía, de lo contrario, habrá que borrarla previamente.&lt;br /&gt;
Para conseguir un mejor rendimiento, se escriben o se leen varias celdas simultáneamente, dividiendo los tiempos de transferencia por el número de celdas que se paralelizan.&lt;br /&gt;
&lt;br /&gt;
'''Particularidades unidades SSD:'''&lt;br /&gt;
&lt;br /&gt;
* El tamaño típico del “sector” es de 4 KB.&lt;br /&gt;
&lt;br /&gt;
* Para poder escribir, hay que borrar previamente.&lt;br /&gt;
&lt;br /&gt;
* Las celdas no se pueden borrar individualmente, por lo que son agrupadas en unidades de borrado. Estas unidades de borrado tienen un tamaño típico de 128KB-256KB.&lt;br /&gt;
&lt;br /&gt;
* Debemos tener en cuenta que el borrado de un sector, puede afectar a otros sectores y, si ya hay otros sectores en la misma unidad de borrado, hay que preservarlos:&lt;br /&gt;
&lt;br /&gt;
       Escritura = Lectura + Borrado + Modificación + Escritura&lt;br /&gt;
&lt;br /&gt;
* Soportan un número finito de borrados. Un número típico de ciclos de borrado/programación: 100.000.&lt;br /&gt;
&lt;br /&gt;
Las SSD tienen la misma interfaz SATA que los discos magnéticos, luego son compatibles con cualquier sistema de archivos válido para discos magnéticos. Pero, debido a la Amplificación de la escritura y a que cada celda flash admite un número finito de borrados, hay que intentar evitar usar repetidamente una misma celda.&lt;br /&gt;
&lt;br /&gt;
== SSD vs Disco Magnético: ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold; text-decoration:underline;&amp;quot; | Características&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold; text-decoration:underline;&amp;quot; | Solid-State Drive&lt;br /&gt;
(SSD)&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold; text-decoration:underline;&amp;quot; | Hard Disk Drive&lt;br /&gt;
(HDD)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Capacidad de almacenamiento&lt;br /&gt;
| Los SSD´s son más caros que los HDD´s y parece que seguirá así hasta la siguiente década. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A mayo de 2019 el giga está a 15 céntimos de euro.  Basado en modelos de 4 TB. &lt;br /&gt;
&lt;br /&gt;
Su precio sigue bajando conforme se extiende su uso y se abaratan &lt;br /&gt;
&lt;br /&gt;
costes de producción y seguirá así para los tamaños de almacenamiento cotidianos.&lt;br /&gt;
| El precio de los HDD´s está en Mayo de 2019 entre 2 y 3 céntimos dependiendo si es de 2.5” o de 3.5” y de la marca.&lt;br /&gt;
Se siguen abaratando costes de producción y se espera que su precio siga bajando.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Fiabilidad de la información almacenada y esperanza de vida&lt;br /&gt;
| Si se queda sin energía, los SSD que ya llevan un tiempo en uso suelen&lt;br /&gt;
comenzar a perder datos después de aproximadamente uno o dos años&lt;br /&gt;
de almacenamiento, dependiendo de la temperatura. &lt;br /&gt;
&lt;br /&gt;
Se supone los nuevos modelos retienen datos durante unos diez años&lt;br /&gt;
dependiendo de la tecnología. &lt;br /&gt;
&lt;br /&gt;
Los SSD no son aptos para guardar archivos a largo plazo tales como&lt;br /&gt;
copias de seguridad.&lt;br /&gt;
| En un ambiente seco a baja temperatura, los HDD pueden conservar sus&lt;br /&gt;
datos durante un período de tiempo muy largo, incluso sin&lt;br /&gt;
alimentación. &lt;br /&gt;
&lt;br /&gt;
En contra, las piezas mecánicas tienden a obstruirse con el tiempo lo&lt;br /&gt;
cual a la larga acaba impidiendo el giro del disco, impidiendo el&lt;br /&gt;
funcionamiento del dispositivo.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Tiempo de inicio&lt;br /&gt;
| Casi instantáneo; No hay componentes mecánicos que preparar. Puede&lt;br /&gt;
necesitar algunos milisegundos para salir de un modo automático de&lt;br /&gt;
ahorro de energía. Pero insignificante comparado con el de un HDD&lt;br /&gt;
| Pasan unos segundos hasta que el disco comienza a girar. &lt;br /&gt;
&lt;br /&gt;
Es posible que un sistema con muchas unidades deba escalonar la rotación para limitar&lt;br /&gt;
el consumo máximo de energía, ya que hay un pico de consumo cuando&lt;br /&gt;
se inicia por primera vez la unidad.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Rendimiento de acceso secuencial&lt;br /&gt;
| Para el uso personal, la tasa de transferencia máxima suele &lt;br /&gt;
oscilar entre unos 500 MB / s y 3500 MB / s, dependiendo de la unidad.&lt;br /&gt;
Para el uso empresarial se ofrece dispositivos con rendimiento de varios&lt;br /&gt;
gigabytes por segundo.&lt;br /&gt;
| Una vez el cabezal está preparado, al leer o escribir una pista&lt;br /&gt;
continua, un disco duro moderno puede transferir datos a&lt;br /&gt;
aproximadamente 250 MB / s.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La velocidad de transferencia de datos depende también de la velocidad&lt;br /&gt;
de rotación, que puede variar de 3.600 a 15.000 rpm y también de la&lt;br /&gt;
pista (la lectura de las pistas externas es más rápida).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Rendimiento&lt;br /&gt;
de acceso aleatorio&lt;br /&gt;
| En este apartado es donde más sobresalen los SSD, ya que la memoria flash es de acceso aleatorio, los datos se&lt;br /&gt;
pueden recuperar directamente de varias, evitando grandes cuellos de botella en el rendimiento.&lt;br /&gt;
&lt;br /&gt;
El tiempo de acceso aleatorio ronda generalmente los 0.1 ms.&lt;br /&gt;
&lt;br /&gt;
Mientras que los HDD´s tienen un factor limitante en la búsqueda de&lt;br /&gt;
información, los SSD´s emplean el mismo tiempo en acceder a&lt;br /&gt;
cualquier dirección de memoria. Esto se traduce en tiempos de inicio&lt;br /&gt;
de aplicaciones y arranque más rápidos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La tecnología SSD puede ofrecer una velocidad de lectura / escritura&lt;br /&gt;
bastante constante, pero cuando se accede a muchos bloques&lt;br /&gt;
individuales más pequeños, se reduce el rendimiento. &lt;br /&gt;
&lt;br /&gt;
Los SSD sufren un fenómeno de degradación del rendimiento de escritura&lt;br /&gt;
llamado amplificación de escritura, donde las células NAND muestran&lt;br /&gt;
&lt;br /&gt;
una caída en el rendimiento y continuarán degradándose&lt;br /&gt;
a lo largo de la vida útil del SSD.&lt;br /&gt;
&lt;br /&gt;
Se implementa una técnica llamada nivelación de desgaste para mitigar&lt;br /&gt;
este efecto, pero debido a la naturaleza de los chips NAND, la unidad&lt;br /&gt;
inevitablemente se degradará a un ritmo notable. Por lo tanto los&lt;br /&gt;
SSD´s tienen un número limitado de lecturas y escrituras.&lt;br /&gt;
| El tiempo de latencia en la lectura es mucho mayor que los SSD. &lt;br /&gt;
&lt;br /&gt;
El tiempo de acceso aleatorio varía de 2.9 ms (unidad de servidor de gama alta) &lt;br /&gt;
a 12 ms (disco duro portátil) debido a la necesidad de mover los cabezales &lt;br /&gt;
y esperar a que los datos giren bajo el cabezal magnético. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El tiempo de lectura es diferente para cada búsqueda diferente, ya que la ubicación de los datos &lt;br /&gt;
y la ubicación de la cabeza son probablemente diferentes. &lt;br /&gt;
Si se debe acceder a los datos de diferentes áreas de la fuente, como ocurre con los archivos &lt;br /&gt;
fragmentados, los tiempos de respuesta aumentarán por la necesidad de buscar cada fragmento. &lt;br /&gt;
Por eso la utilización de herramientas de desfragmentación son muy útilespara mantener &lt;br /&gt;
el rendimiento de este tipo de dispositivos durante su periodo de vida.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Impacto de la fragmentación &lt;br /&gt;
en los sistemas de archivos&lt;br /&gt;
| La lectura de datos secuencialmente tiene un beneficio limitado (más&lt;br /&gt;
allá de los tamaños de bloque FS típicos, digamos 4 KB), lo que&lt;br /&gt;
hace que la fragmentación sea insignificante para los SSD. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La desfragmentación causaría desgaste al realizar escrituras adicionales &lt;br /&gt;
de las celdas flash NAND, que tienen un ciclo de vida limitado.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, incluso en los SSD, existe un límite práctico sobre la&lt;br /&gt;
cantidad de fragmentación que pueden mantener ciertos sistemas de&lt;br /&gt;
archivos; una vez que se alcanza ese límite, fallan las asignaciones&lt;br /&gt;
de archivos subsiguientes. En consecuencia, la desfragmentación&lt;br /&gt;
puede ser necesaria, aunque en menor grado.&lt;br /&gt;
| Algunos sistemas de archivos, como NTFS, se fragmentan con el tiempo si se&lt;br /&gt;
escriben con frecuencia; se requiere una desfragmentación periódica&lt;br /&gt;
para mantener un rendimiento óptimo.&lt;br /&gt;
&lt;br /&gt;
Esto generalmente no es un problema en los sistemas de archivos modernos.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Consumo&lt;br /&gt;
de energía&lt;br /&gt;
| Los SSD basados en flash de alto rendimiento generalmente requieren&lt;br /&gt;
de la mitad a un tercio de la potencia de los HDD. &lt;br /&gt;
&lt;br /&gt;
Las SSD DRAM de alto rendimiento generalmente requieren tanta energía&lt;br /&gt;
como las HDD, y deben conectarse a la alimentación, incluso cuando&lt;br /&gt;
el resto del sistema está apagado. &lt;br /&gt;
&lt;br /&gt;
Las tecnologías emergentes como DevSlp pueden minimizar los requisitos&lt;br /&gt;
de energía de las unidades inactivas.&lt;br /&gt;
| Los discos duros de menor potencia (tamaño de 1,8 pulgadas) &lt;br /&gt;
pueden usar tan solo 0,35 vatios cuando están inactivos. &lt;br /&gt;
&lt;br /&gt;
Las unidades de 2,5 pulgadas suelen utilizar de 2 a 5 vatios. &lt;br /&gt;
Las unidades de 3,5 pulgadas de mayor rendimiento &lt;br /&gt;
pueden utilizar hasta unos 20 vatios.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Susceptibilidad a factores ambientales&lt;br /&gt;
| Al no tener partes móviles son bastantes resistentes a golpes, movimientos bruscos &lt;br /&gt;
y vibraciones.&lt;br /&gt;
| Las cabezan flotantes que se desplazan sobre los platos, que giran a gran &lt;br /&gt;
&lt;br /&gt;
velocidad, son muy susceptibles al movimiento, vibraciones y golpes.&lt;br /&gt;
Pudiendo provocar fallos o incluso roturas que dejen inservible el dispositivo&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Ruido(acústico)&lt;br /&gt;
| Al no tener piezas móviles ni motores son bastantes silenciosos, normalmente &lt;br /&gt;
no emiten ningún ruido perceptible. &lt;br /&gt;
&lt;br /&gt;
En algunos casos podemos escuchar una especie de zumbido &lt;br /&gt;
o pitido agudo, provocado por el generador de alto voltaje &lt;br /&gt;
que se utiliza en el borrado de bloques&lt;br /&gt;
| Las unidades de disco duro tienen partes móviles &lt;br /&gt;
(cabezas, brazo actuador y el motor encargado &lt;br /&gt;
de girar los platos). &lt;br /&gt;
&lt;br /&gt;
Producen sonidos característicos de zumbidos &lt;br /&gt;
y chasquidos. Los niveles de ruido varían entre&lt;br /&gt;
 los modelos, pero pueden ser &lt;br /&gt;
significativos (aunque a menudo son&lt;br /&gt;
 mucho más bajos que el sonido de los&lt;br /&gt;
ventiladores de refrigeración). &lt;br /&gt;
&lt;br /&gt;
Los discos duros de los portátiles son relativamente silenciosos.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Limitaciones de Escritura Segura&lt;br /&gt;
| La memoria flash NAND no se puede sobrescribir, pero se deben reescribir &lt;br /&gt;
en bloques previamente borrados. Si un programa de cifrado &lt;br /&gt;
cifra los datos que ya se encuentran en el SSD, los datos sobrescritos &lt;br /&gt;
aún no están protegidos, no están encriptados y son accesibles (el cifrado de hardware &lt;br /&gt;
basado en unidad no tiene este problema). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Además, los datos no se pueden borrar de forma segura sobrescribiendo &lt;br /&gt;
el archivo original sin procedimientos especiales &lt;br /&gt;
de &amp;quot;Borrado seguro&amp;quot; integrados en la unidad.&lt;br /&gt;
| Las unidades de disco duro pueden sobrescribir los datos de la unidad directamente&lt;br /&gt;
en cualquier sector en particular. &lt;br /&gt;
&lt;br /&gt;
Sin embargo, el firmware de la unidad  puede intercambiar bloques dañados &lt;br /&gt;
con áreas de repuesto, por lo que es posible que aún existan partes y fragmentos &lt;br /&gt;
de información que debería de estar sobreescrita e inaccesible.&lt;br /&gt;
&lt;br /&gt;
Los discos duros de algunos fabricantes llenan la unidad completa &lt;br /&gt;
&lt;br /&gt;
con ceros, incluidos los sectores reubicados, con el comando &lt;br /&gt;
&lt;br /&gt;
ATA Secure Erase, esto es conocido como formateo a bajo nivel.&lt;br /&gt;
|}&lt;br /&gt;
Fuente: Wikipedia en ingles, artículo [https://en.wikipedia.org/wiki/Solid-state_drive SSD].&lt;br /&gt;
&lt;br /&gt;
== Más información ==&lt;br /&gt;
&lt;br /&gt;
Enlace de Interés:&lt;br /&gt;
&lt;br /&gt;
https://www.cactus-tech.com/resources/blog/details/solid-state-drives-101&lt;br /&gt;
&lt;br /&gt;
11.3. [[Mejoras de tiempos de desplazamiento|Mejoras de tiempos de desplazamiento]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Unidades_SSD&amp;diff=4386</id>
		<title>Unidades SSD</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Unidades_SSD&amp;diff=4386"/>
				<updated>2019-06-06T03:42:18Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* SSD vs Disco Magnético: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Unidad de estado sólido (Solid State Drive, SSD)''' es un dispositivo de almacenamiento de datos hecho con componentes electrónicos. No tienen partes móviles y utilizan memoria Flash, que es similar a la tecnología que se emplea en dispositivos de almacenamiento portátiles USB (coloquialmente conocidos como ''pendrive''). Esta misma tecnología se puede emplear en unidades híbridas (SSHD) compuestas por SSD y disco duro mágnetico, que intentan compensar las limitaciones de capacidad de las SSD a la vez que se mejoran los tiempos de acceso a un precio inferior al SSD. Se tratan, por tanto, de memoria de almacenamiento no volátil.&lt;br /&gt;
&lt;br /&gt;
== Estructura hardware ==&lt;br /&gt;
&lt;br /&gt;
Su arquitectura emplea memoria no volátil Flash (tipo NAND). Además de una memoria DRAM volátil que se emplea como caché para amortiguar las escrituras directas sobre la memoria Flash, pues la vida de la memoria Flash está limitada por el número de escrituras que se realice, mientras que la DRAM no tiene este inconveniente, además de ser más lentas en las lecturas. Por tanto, la memoria DRAM se usa como zona intermedia en la que se mantienen los datos accedidos recientemente (ya se en lectura o escritura).&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ssdgrafico.jpg|320px|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
Los componentes clave de una SSD son el [[Estructura_típica_de_dispositivo_E/S|controlador]] y la memoria para almacenar los datos. &lt;br /&gt;
El controlador gestiona las operaciones de L/E al dispositivo y ofrece una interfaz (SATA) compatible con la de discos magnéticos.&lt;br /&gt;
El buffer es una memoria DRAM que actúa como almacenamiento intermedio entre el controlador y el array de memorias Flash, ya que las operaciones de escritura son lentas.&lt;br /&gt;
&lt;br /&gt;
Se transfieren bloques de datos que se almacenan en varias celdas flash.&lt;br /&gt;
&lt;br /&gt;
El dispositivo utiliza un condensador para retener energía suficiente como para volcar el buffer en el array de memorias en caso de pérdida repentina de la alimentación manteniendo así la integridad de los datos.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Ssdnand.jpg|350px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
==Técnica de Escritura y Lectura: ==&lt;br /&gt;
&lt;br /&gt;
La interfaz de cada celda flash es serie (8/16 bits). Un sector se escribe en paralelo disperso en varias celdas. Para escribir, la celda debe estar vacía, de lo contrario, habrá que borrarla previamente.&lt;br /&gt;
Para conseguir un mejor rendimiento, se escriben o se leen varias celdas simultáneamente, dividiendo los tiempos de transferencia por el número de celdas que se paralelizan.&lt;br /&gt;
&lt;br /&gt;
'''Particularidades unidades SSD:'''&lt;br /&gt;
&lt;br /&gt;
* El tamaño típico del “sector” es de 4 KB.&lt;br /&gt;
&lt;br /&gt;
* Para poder escribir, hay que borrar previamente.&lt;br /&gt;
&lt;br /&gt;
* Las celdas no se pueden borrar individualmente, por lo que son agrupadas en unidades de borrado. Estas unidades de borrado tienen un tamaño típico de 128KB-256KB.&lt;br /&gt;
&lt;br /&gt;
* Debemos tener en cuenta que el borrado de un sector, puede afectar a otros sectores y, si ya hay otros sectores en la misma unidad de borrado, hay que preservarlos:&lt;br /&gt;
&lt;br /&gt;
       Escritura = Lectura + Borrado + Modificación + Escritura&lt;br /&gt;
&lt;br /&gt;
* Soportan un número finito de borrados. Un número típico de ciclos de borrado/programación: 100.000.&lt;br /&gt;
&lt;br /&gt;
Las SSD tienen la misma interfaz SATA que los discos magnéticos, luego son compatibles con cualquier sistema de archivos válido para discos magnéticos. Pero, debido a la Amplificación de la escritura y a que cada celda flash admite un número finito de borrados, hay que intentar evitar usar repetidamente una misma celda.&lt;br /&gt;
&lt;br /&gt;
== SSD vs Disco Magnético: ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold; text-decoration:underline;&amp;quot; | Características&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold; text-decoration:underline;&amp;quot; | Solid-State Drive&lt;br /&gt;
(SSD)&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold; text-decoration:underline;&amp;quot; | Hard Disk Drive&lt;br /&gt;
(HDD)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Capacidad de almacenamiento&lt;br /&gt;
| Los SSD´s son más caros que los HDD´s y parece que seguirá así hasta la siguiente década. &lt;br /&gt;
&lt;br /&gt;
A mayo de 2019 el giga está a 15 céntimos de euro.  Basado en modelos de 4 TB. &lt;br /&gt;
&lt;br /&gt;
Su precio sigue bajando conforme se extiende su uso y se abaratan costesde producción&lt;br /&gt;
 y seguirá así para los tamaños de almacenamiento cotidianos.&lt;br /&gt;
| El precio de los HDD´s está en Mayo de 2019 entre 2 y 3 céntimos dependiendo si es de 2.5” o de 3.5” y de la marca.&lt;br /&gt;
Se siguen abaratando costes de producción y se espera que su precio siga bajando.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Fiabilidad de la información almacenada y esperanza de vida&lt;br /&gt;
| Si se queda sin energía, los SSD que ya llevan un tiempo en uso suelen&lt;br /&gt;
comenzar a perder datos después de aproximadamente uno o dos años&lt;br /&gt;
de almacenamiento, dependiendo de la temperatura. &lt;br /&gt;
&lt;br /&gt;
Se supone los nuevos modelos retienen datos durante unos diez años&lt;br /&gt;
dependiendo de la tecnología. &lt;br /&gt;
&lt;br /&gt;
Los SSD no son aptos para guardar archivos a largo plazo tales como&lt;br /&gt;
copias de seguridad.&lt;br /&gt;
| En un ambiente seco a baja temperatura, los HDD pueden conservar sus&lt;br /&gt;
datos durante un período de tiempo muy largo, incluso sin&lt;br /&gt;
alimentación. &lt;br /&gt;
&lt;br /&gt;
En contra, las piezas mecánicas tienden a obstruirse con el tiempo lo&lt;br /&gt;
cual a la larga acaba impidiendo el giro del disco, impidiendo el&lt;br /&gt;
funcionamiento del dispositivo.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Tiempo de inicio&lt;br /&gt;
| Casi instantáneo; No hay componentes mecánicos que preparar. Puede&lt;br /&gt;
necesitar algunos milisegundos para salir de un modo automático de&lt;br /&gt;
ahorro de energía. Pero insignificante comparado con el de un HDD&lt;br /&gt;
| Pasan unos segundos hasta que el disco comienza a girar. &lt;br /&gt;
&lt;br /&gt;
Es posible que un sistema con muchas unidades deba escalonar la rotación para limitar&lt;br /&gt;
el consumo máximo de energía, ya que hay un pico de consumo cuando&lt;br /&gt;
se inicia por primera vez la unidad.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Rendimiento de acceso secuencial&lt;br /&gt;
| Para el uso personal, la tasa de transferencia máxima suele oscilar entre&lt;br /&gt;
&lt;br /&gt;
unos 500 MB / s y 3500 MB / s, dependiendo de la unidad.&lt;br /&gt;
 Para el uso empresarial se ofrece dispositivos con rendimiento de varios&lt;br /&gt;
gigabytes por segundo.&lt;br /&gt;
| Una vez el cabezal está preparado, al leer o escribir una pista&lt;br /&gt;
continua, un disco duro moderno puede transferir datos a&lt;br /&gt;
aproximadamente 250 MB / s.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La velocidad de transferencia de datos depende también de la velocidad&lt;br /&gt;
de rotación, que puede variar de 3.600 a 15.000 rpm y también de la&lt;br /&gt;
pista (la lectura de las pistas externas es más rápida).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Rendimiento&lt;br /&gt;
de acceso aleatorio&lt;br /&gt;
| En este apartado es donde más sobresalen los SSD, ya que la memoria flash es de acceso aleatorio, los datos se&lt;br /&gt;
pueden recuperar directamente de varias, evitando grandes cuellos de botella en el rendimiento.&lt;br /&gt;
&lt;br /&gt;
El tiempo de acceso aleatorio ronda generalmente los 0.1 ms.&lt;br /&gt;
&lt;br /&gt;
Mientras que los HDD´s tienen un factor limitante en la búsqueda de&lt;br /&gt;
información, los SSD´s emplean el mismo tiempo en acceder a&lt;br /&gt;
cualquier dirección de memoria. Esto se traduce en tiempos de inicio&lt;br /&gt;
de aplicaciones y arranque más rápidos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La tecnología SSD puede ofrecer una velocidad de lectura / escritura&lt;br /&gt;
bastante constante, pero cuando se accede a muchos bloques&lt;br /&gt;
individuales más pequeños, se reduce el rendimiento. &lt;br /&gt;
&lt;br /&gt;
Los SSD sufren un fenómeno de degradación del rendimiento de escritura&lt;br /&gt;
llamado amplificación de escritura, donde las células NAND muestran&lt;br /&gt;
una caída en el rendimiento y continuarán degradándose a lo largo&lt;br /&gt;
&lt;br /&gt;
de la vida útil del SSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se implementa una técnica llamada nivelación de desgaste para mitigar&lt;br /&gt;
este efecto, pero debido a la naturaleza de los chips NAND, la unidad&lt;br /&gt;
inevitablemente se degradará a un ritmo notable. Por lo tanto los&lt;br /&gt;
SSD´s tienen un número limitado de lecturas y escrituras.&lt;br /&gt;
| El tiempo de latencia en la lectura es mucho mayor que los SSD. &lt;br /&gt;
&lt;br /&gt;
El tiempo de acceso aleatorio varía de 2.9 ms (unidad de servidor de gama alta) &lt;br /&gt;
a 12 ms (disco duro portátil) debido a la necesidad de mover los cabezales &lt;br /&gt;
y esperar a que los datos giren bajo el cabezal magnético. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El tiempo de lectura es diferente para cada búsqueda diferente, ya que la ubicación de los datos &lt;br /&gt;
y la ubicación de la cabeza son probablemente diferentes. &lt;br /&gt;
Si se debe acceder a los datos de diferentes áreas de la fuente, como ocurre con los archivos &lt;br /&gt;
fragmentados, los tiempos de respuesta aumentarán por la necesidad de buscar cada fragmento. &lt;br /&gt;
Por eso la utilización de herramientas de desfragmentación son muy útilespara mantener &lt;br /&gt;
el rendimiento de este tipo de dispositivos durante su periodo de vida.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Impacto de la fragmentación &lt;br /&gt;
en los sistemas de archivos&lt;br /&gt;
| La lectura de datos secuencialmente tiene un beneficio limitado (más&lt;br /&gt;
allá de los tamaños de bloque FS típicos, digamos 4 KB), lo que&lt;br /&gt;
hace que la fragmentación sea insignificante para los SSD. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La desfragmentación causaría desgaste al realizar escrituras adicionales &lt;br /&gt;
de las celdas flash NAND, que tienen un ciclo de vida limitado.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, incluso en los SSD, existe un límite práctico sobre la&lt;br /&gt;
cantidad de fragmentación que pueden mantener ciertos sistemas de&lt;br /&gt;
archivos; una vez que se alcanza ese límite, fallan las asignaciones&lt;br /&gt;
de archivos subsiguientes. En consecuencia, la desfragmentación&lt;br /&gt;
puede ser necesaria, aunque en menor grado.&lt;br /&gt;
| Algunos sistemas de archivos, como NTFS, se fragmentan con el tiempo si se&lt;br /&gt;
escriben con frecuencia; se requiere una desfragmentación periódica&lt;br /&gt;
para mantener un rendimiento óptimo.&lt;br /&gt;
&lt;br /&gt;
Esto generalmente no es un problema en los sistemas de archivos modernos.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Consumo&lt;br /&gt;
de energía&lt;br /&gt;
| Los SSD basados en flash de alto rendimiento generalmente requieren&lt;br /&gt;
de la mitad a un tercio de la potencia de los HDD. &lt;br /&gt;
&lt;br /&gt;
Las SSD DRAM de alto rendimiento generalmente requieren tanta energía&lt;br /&gt;
como las HDD, y deben conectarse a la alimentación, incluso cuando&lt;br /&gt;
el resto del sistema está apagado. &lt;br /&gt;
&lt;br /&gt;
Las tecnologías emergentes como DevSlp pueden minimizar los requisitos&lt;br /&gt;
de energía de las unidades inactivas.&lt;br /&gt;
| Los discos duros de menor potencia (tamaño de 1,8 pulgadas) &lt;br /&gt;
pueden usar tan solo 0,35 vatios cuando están inactivos. &lt;br /&gt;
&lt;br /&gt;
Las unidades de 2,5 pulgadas suelen utilizar de 2 a 5 vatios. &lt;br /&gt;
Las unidades de 3,5 pulgadas de mayor rendimiento &lt;br /&gt;
pueden utilizar hasta unos 20 vatios.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Susceptibilidad a factores ambientales&lt;br /&gt;
| Al no tener partes móviles son bastantes resistentes a golpes, movimientos bruscos &lt;br /&gt;
y vibraciones.&lt;br /&gt;
| Las cabezan flotantes que se desplazan sobre los platos, que giran a gran &lt;br /&gt;
&lt;br /&gt;
velocidad, son muy susceptibles al movimiento, vibraciones y golpes.&lt;br /&gt;
Pudiendo provocar fallos o incluso roturas que dejen inservible el dispositivo&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Ruido(acústico)&lt;br /&gt;
| Al no tener piezas móviles ni motores son bastantes silenciosos, normalmente &lt;br /&gt;
no emiten ningún ruido perceptible. &lt;br /&gt;
&lt;br /&gt;
En algunos casos podemos escuchar una especie de zumbido &lt;br /&gt;
o pitido agudo, provocado por el generador de alto voltaje &lt;br /&gt;
que se utiliza en el borrado de bloques&lt;br /&gt;
| Las unidades de disco duro tienen partes móviles &lt;br /&gt;
(cabezas, brazo actuador y el motor encargado &lt;br /&gt;
de girar los platos). &lt;br /&gt;
&lt;br /&gt;
Producen sonidos característicos de zumbidos &lt;br /&gt;
y chasquidos. Los niveles de ruido varían entre&lt;br /&gt;
 los modelos, pero pueden ser &lt;br /&gt;
significativos (aunque a menudo son&lt;br /&gt;
 mucho más bajos que el sonido de los&lt;br /&gt;
ventiladores de refrigeración). &lt;br /&gt;
&lt;br /&gt;
Los discos duros de los portátiles son relativamente silenciosos.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Limitaciones de Escritura Segura&lt;br /&gt;
| La memoria flash NAND no se puede sobrescribir, pero se deben reescribir &lt;br /&gt;
en bloques previamente borrados. Si un programa de cifrado &lt;br /&gt;
cifra los datos que ya se encuentran en el SSD, los datos sobrescritos &lt;br /&gt;
aún no están protegidos, no están encriptados y son accesibles (el cifrado de hardware &lt;br /&gt;
basado en unidad no tiene este problema). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Además, los datos no se pueden borrar de forma segura sobrescribiendo &lt;br /&gt;
el archivo original sin procedimientos especiales &lt;br /&gt;
de &amp;quot;Borrado seguro&amp;quot; integrados en la unidad.&lt;br /&gt;
| Las unidades de disco duro pueden sobrescribir los datos de la unidad directamente&lt;br /&gt;
en cualquier sector en particular. &lt;br /&gt;
&lt;br /&gt;
Sin embargo, el firmware de la unidad  puede intercambiar bloques dañados &lt;br /&gt;
con áreas de repuesto, por lo que es posible que aún existan partes y fragmentos &lt;br /&gt;
de información que debería de estar sobreescrita e inaccesible.&lt;br /&gt;
&lt;br /&gt;
Los discos duros de algunos fabricantes llenan la unidad completa &lt;br /&gt;
&lt;br /&gt;
con ceros, incluidos los sectores reubicados, con el comando &lt;br /&gt;
&lt;br /&gt;
ATA Secure Erase, esto es conocido como formateo a bajo nivel.&lt;br /&gt;
|}&lt;br /&gt;
Fuente: Wikipedia en ingles, artículo [https://en.wikipedia.org/wiki/Solid-state_drive SSD].&lt;br /&gt;
&lt;br /&gt;
== Más información ==&lt;br /&gt;
&lt;br /&gt;
Enlace de Interés:&lt;br /&gt;
&lt;br /&gt;
https://www.cactus-tech.com/resources/blog/details/solid-state-drives-101&lt;br /&gt;
&lt;br /&gt;
11.3. [[Mejoras de tiempos de desplazamiento|Mejoras de tiempos de desplazamiento]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Unidades_SSD&amp;diff=4385</id>
		<title>Unidades SSD</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Unidades_SSD&amp;diff=4385"/>
				<updated>2019-06-06T03:40:29Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* SSD vs Disco Magnético: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Unidad de estado sólido (Solid State Drive, SSD)''' es un dispositivo de almacenamiento de datos hecho con componentes electrónicos. No tienen partes móviles y utilizan memoria Flash, que es similar a la tecnología que se emplea en dispositivos de almacenamiento portátiles USB (coloquialmente conocidos como ''pendrive''). Esta misma tecnología se puede emplear en unidades híbridas (SSHD) compuestas por SSD y disco duro mágnetico, que intentan compensar las limitaciones de capacidad de las SSD a la vez que se mejoran los tiempos de acceso a un precio inferior al SSD. Se tratan, por tanto, de memoria de almacenamiento no volátil.&lt;br /&gt;
&lt;br /&gt;
== Estructura hardware ==&lt;br /&gt;
&lt;br /&gt;
Su arquitectura emplea memoria no volátil Flash (tipo NAND). Además de una memoria DRAM volátil que se emplea como caché para amortiguar las escrituras directas sobre la memoria Flash, pues la vida de la memoria Flash está limitada por el número de escrituras que se realice, mientras que la DRAM no tiene este inconveniente, además de ser más lentas en las lecturas. Por tanto, la memoria DRAM se usa como zona intermedia en la que se mantienen los datos accedidos recientemente (ya se en lectura o escritura).&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ssdgrafico.jpg|320px|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
Los componentes clave de una SSD son el [[Estructura_típica_de_dispositivo_E/S|controlador]] y la memoria para almacenar los datos. &lt;br /&gt;
El controlador gestiona las operaciones de L/E al dispositivo y ofrece una interfaz (SATA) compatible con la de discos magnéticos.&lt;br /&gt;
El buffer es una memoria DRAM que actúa como almacenamiento intermedio entre el controlador y el array de memorias Flash, ya que las operaciones de escritura son lentas.&lt;br /&gt;
&lt;br /&gt;
Se transfieren bloques de datos que se almacenan en varias celdas flash.&lt;br /&gt;
&lt;br /&gt;
El dispositivo utiliza un condensador para retener energía suficiente como para volcar el buffer en el array de memorias en caso de pérdida repentina de la alimentación manteniendo así la integridad de los datos.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Ssdnand.jpg|350px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
==Técnica de Escritura y Lectura: ==&lt;br /&gt;
&lt;br /&gt;
La interfaz de cada celda flash es serie (8/16 bits). Un sector se escribe en paralelo disperso en varias celdas. Para escribir, la celda debe estar vacía, de lo contrario, habrá que borrarla previamente.&lt;br /&gt;
Para conseguir un mejor rendimiento, se escriben o se leen varias celdas simultáneamente, dividiendo los tiempos de transferencia por el número de celdas que se paralelizan.&lt;br /&gt;
&lt;br /&gt;
'''Particularidades unidades SSD:'''&lt;br /&gt;
&lt;br /&gt;
* El tamaño típico del “sector” es de 4 KB.&lt;br /&gt;
&lt;br /&gt;
* Para poder escribir, hay que borrar previamente.&lt;br /&gt;
&lt;br /&gt;
* Las celdas no se pueden borrar individualmente, por lo que son agrupadas en unidades de borrado. Estas unidades de borrado tienen un tamaño típico de 128KB-256KB.&lt;br /&gt;
&lt;br /&gt;
* Debemos tener en cuenta que el borrado de un sector, puede afectar a otros sectores y, si ya hay otros sectores en la misma unidad de borrado, hay que preservarlos:&lt;br /&gt;
&lt;br /&gt;
       Escritura = Lectura + Borrado + Modificación + Escritura&lt;br /&gt;
&lt;br /&gt;
* Soportan un número finito de borrados. Un número típico de ciclos de borrado/programación: 100.000.&lt;br /&gt;
&lt;br /&gt;
Las SSD tienen la misma interfaz SATA que los discos magnéticos, luego son compatibles con cualquier sistema de archivos válido para discos magnéticos. Pero, debido a la Amplificación de la escritura y a que cada celda flash admite un número finito de borrados, hay que intentar evitar usar repetidamente una misma celda.&lt;br /&gt;
&lt;br /&gt;
== SSD vs Disco Magnético: ==&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SSD-VS-HDD.jpg]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold; text-decoration:underline;&amp;quot; | Características&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold; text-decoration:underline;&amp;quot; | Solid-State&lt;br /&gt;
&lt;br /&gt;
Drive&lt;br /&gt;
(SSD)&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold; text-decoration:underline;&amp;quot; | Hard&lt;br /&gt;
&lt;br /&gt;
Disk Drive&lt;br /&gt;
(HDD)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Capacidad de almacenamiento&lt;br /&gt;
| Los SSD´s son más caros que los HDD´s y parece que seguirá así hasta la siguiente década. &lt;br /&gt;
&lt;br /&gt;
A mayo de 2019 el giga está a 15 céntimos de euro.  Basado en modelos de 4 TB. &lt;br /&gt;
&lt;br /&gt;
Su precio sigue bajando conforme se extiende su uso y se abaratan costesde producción&lt;br /&gt;
 y seguirá así para los tamaños de almacenamiento cotidianos.&lt;br /&gt;
| El precio de los HDD´s está en Mayo de 2019 entre 2 y 3 céntimos dependiendo si es de 2.5” o de 3.5” y de la marca.&lt;br /&gt;
Se siguen abaratando costes de producción y se espera que su precio siga bajando.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Fiabilidad de la información almacenada y esperanza de vida&lt;br /&gt;
| Si se queda sin energía, los SSD que ya llevan un tiempo en uso suelen&lt;br /&gt;
comenzar a perder datos después de aproximadamente uno o dos años&lt;br /&gt;
de almacenamiento, dependiendo de la temperatura. &lt;br /&gt;
&lt;br /&gt;
Se supone los nuevos modelos retienen datos durante unos diez años&lt;br /&gt;
dependiendo de la tecnología. &lt;br /&gt;
&lt;br /&gt;
Los SSD no son aptos para guardar archivos a largo plazo tales como&lt;br /&gt;
copias de seguridad.&lt;br /&gt;
| En un ambiente seco a baja temperatura, los HDD pueden conservar sus&lt;br /&gt;
datos durante un período de tiempo muy largo, incluso sin&lt;br /&gt;
alimentación. &lt;br /&gt;
&lt;br /&gt;
En contra, las piezas mecánicas tienden a obstruirse con el tiempo lo&lt;br /&gt;
cual a la larga acaba impidiendo el giro del disco, impidiendo el&lt;br /&gt;
funcionamiento del dispositivo.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Tiempo de inicio&lt;br /&gt;
| Casi instantáneo; No hay componentes mecánicos que preparar. Puede&lt;br /&gt;
necesitar algunos milisegundos para salir de un modo automático de&lt;br /&gt;
ahorro de energía. Pero insignificante comparado con el de un HDD&lt;br /&gt;
| Pasan unos segundos hasta que el disco comienza a girar. &lt;br /&gt;
&lt;br /&gt;
Es posible que un sistema con muchas unidades deba escalonar la rotación para limitar&lt;br /&gt;
el consumo máximo de energía, ya que hay un pico de consumo cuando&lt;br /&gt;
se inicia por primera vez la unidad.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Rendimiento de acceso secuencial&lt;br /&gt;
| Para el uso personal, la tasa de transferencia máxima suele oscilar entre&lt;br /&gt;
&lt;br /&gt;
unos 500 MB / s y 3500 MB / s, dependiendo de la unidad.&lt;br /&gt;
 Para el uso empresarial se ofrece dispositivos con rendimiento de varios&lt;br /&gt;
gigabytes por segundo.&lt;br /&gt;
| Una vez el cabezal está preparado, al leer o escribir una pista&lt;br /&gt;
continua, un disco duro moderno puede transferir datos a&lt;br /&gt;
aproximadamente 250 MB / s.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La velocidad de transferencia de datos depende también de la velocidad&lt;br /&gt;
de rotación, que puede variar de 3.600 a 15.000 rpm y también de la&lt;br /&gt;
pista (la lectura de las pistas externas es más rápida).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Rendimiento&lt;br /&gt;
de acceso aleatorio&lt;br /&gt;
| En este apartado es donde más sobresalen los SSD, ya que la memoria flash es de acceso aleatorio, los datos se&lt;br /&gt;
pueden recuperar directamente de varias, evitando grandes cuellos de botella en el rendimiento.&lt;br /&gt;
&lt;br /&gt;
El tiempo de acceso aleatorio ronda generalmente los 0.1 ms.&lt;br /&gt;
&lt;br /&gt;
Mientras que los HDD´s tienen un factor limitante en la búsqueda de&lt;br /&gt;
información, los SSD´s emplean el mismo tiempo en acceder a&lt;br /&gt;
cualquier dirección de memoria. Esto se traduce en tiempos de inicio&lt;br /&gt;
de aplicaciones y arranque más rápidos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La tecnología SSD puede ofrecer una velocidad de lectura / escritura&lt;br /&gt;
bastante constante, pero cuando se accede a muchos bloques&lt;br /&gt;
individuales más pequeños, se reduce el rendimiento. &lt;br /&gt;
&lt;br /&gt;
Los SSD sufren un fenómeno de degradación del rendimiento de escritura&lt;br /&gt;
llamado amplificación de escritura, donde las células NAND muestran&lt;br /&gt;
una caída en el rendimiento y continuarán degradándose a lo largo&lt;br /&gt;
&lt;br /&gt;
de la vida útil del SSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se implementa una técnica llamada nivelación de desgaste para mitigar&lt;br /&gt;
este efecto, pero debido a la naturaleza de los chips NAND, la unidad&lt;br /&gt;
inevitablemente se degradará a un ritmo notable. Por lo tanto los&lt;br /&gt;
SSD´s tienen un número limitado de lecturas y escrituras.&lt;br /&gt;
| El tiempo de latencia en la lectura es mucho mayor que los SSD. &lt;br /&gt;
&lt;br /&gt;
El tiempo de acceso aleatorio varía de 2.9 ms (unidad de servidor de gama alta) &lt;br /&gt;
a 12 ms (disco duro portátil) debido a la necesidad de mover los cabezales &lt;br /&gt;
y esperar a que los datos giren bajo el cabezal magnético. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El tiempo de lectura es diferente para cada búsqueda diferente, ya que la ubicación de los datos &lt;br /&gt;
y la ubicación de la cabeza son probablemente diferentes. &lt;br /&gt;
Si se debe acceder a los datos de diferentes áreas de la fuente, como ocurre con los archivos &lt;br /&gt;
fragmentados, los tiempos de respuesta aumentarán por la necesidad de buscar cada fragmento. &lt;br /&gt;
Por eso la utilización de herramientas de desfragmentación son muy útilespara mantener &lt;br /&gt;
el rendimiento de este tipo de dispositivos durante su periodo de vida.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Impacto de la fragmentación &lt;br /&gt;
en los sistemas de archivos&lt;br /&gt;
| La lectura de datos secuencialmente tiene un beneficio limitado (más&lt;br /&gt;
allá de los tamaños de bloque FS típicos, digamos 4 KB), lo que&lt;br /&gt;
hace que la fragmentación sea insignificante para los SSD. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La desfragmentación causaría desgaste al realizar escrituras adicionales &lt;br /&gt;
de las celdas flash NAND, que tienen un ciclo de vida limitado.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, incluso en los SSD, existe un límite práctico sobre la&lt;br /&gt;
cantidad de fragmentación que pueden mantener ciertos sistemas de&lt;br /&gt;
archivos; una vez que se alcanza ese límite, fallan las asignaciones&lt;br /&gt;
de archivos subsiguientes. En consecuencia, la desfragmentación&lt;br /&gt;
puede ser necesaria, aunque en menor grado.&lt;br /&gt;
| Algunos sistemas de archivos, como NTFS, se fragmentan con el tiempo si se&lt;br /&gt;
escriben con frecuencia; se requiere una desfragmentación periódica&lt;br /&gt;
para mantener un rendimiento óptimo.&lt;br /&gt;
&lt;br /&gt;
Esto generalmente no es un problema en los sistemas de archivos modernos.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Consumo&lt;br /&gt;
de energía&lt;br /&gt;
| Los SSD basados en flash de alto rendimiento generalmente requieren&lt;br /&gt;
de la mitad a un tercio de la potencia de los HDD. &lt;br /&gt;
&lt;br /&gt;
Las SSD DRAM de alto rendimiento generalmente requieren tanta energía&lt;br /&gt;
como las HDD, y deben conectarse a la alimentación, incluso cuando&lt;br /&gt;
el resto del sistema está apagado. &lt;br /&gt;
&lt;br /&gt;
Las tecnologías emergentes como DevSlp pueden minimizar los requisitos&lt;br /&gt;
de energía de las unidades inactivas.&lt;br /&gt;
| Los discos duros de menor potencia (tamaño de 1,8 pulgadas) &lt;br /&gt;
pueden usar tan solo 0,35 vatios cuando están inactivos. &lt;br /&gt;
&lt;br /&gt;
Las unidades de 2,5 pulgadas suelen utilizar de 2 a 5 vatios. &lt;br /&gt;
Las unidades de 3,5 pulgadas de mayor rendimiento &lt;br /&gt;
pueden utilizar hasta unos 20 vatios.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Susceptibilidad a factores ambientales&lt;br /&gt;
| Al no tener partes móviles son bastantes resistentes a golpes, movimientos bruscos &lt;br /&gt;
y vibraciones.&lt;br /&gt;
| Las cabezan flotantes que se desplazan sobre los platos, que giran a gran &lt;br /&gt;
&lt;br /&gt;
velocidad, son muy susceptibles al movimiento, vibraciones y golpes.&lt;br /&gt;
Pudiendo provocar fallos o incluso roturas que dejen inservible el dispositivo&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Ruido(acústico)&lt;br /&gt;
| Al no tener piezas móviles ni motores son bastantes silenciosos, normalmente &lt;br /&gt;
no emiten ningún ruido perceptible. &lt;br /&gt;
&lt;br /&gt;
En algunos casos podemos escuchar una especie de zumbido &lt;br /&gt;
o pitido agudo, provocado por el generador de alto voltaje &lt;br /&gt;
que se utiliza en el borrado de bloques&lt;br /&gt;
| Las unidades de disco duro tienen partes móviles &lt;br /&gt;
(cabezas, brazo actuador y el motor encargado &lt;br /&gt;
de girar los platos). &lt;br /&gt;
&lt;br /&gt;
Producen sonidos característicos de zumbidos &lt;br /&gt;
y chasquidos. Los niveles de ruido varían entre&lt;br /&gt;
 los modelos, pero pueden ser &lt;br /&gt;
significativos (aunque a menudo son&lt;br /&gt;
 mucho más bajos que el sonido de los&lt;br /&gt;
ventiladores de refrigeración). &lt;br /&gt;
&lt;br /&gt;
Los discos duros de los portátiles son relativamente silenciosos.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Limitaciones de Escritura Segura&lt;br /&gt;
| La memoria flash NAND no se puede sobrescribir, pero se deben reescribir &lt;br /&gt;
en bloques previamente borrados. Si un programa de cifrado &lt;br /&gt;
cifra los datos que ya se encuentran en el SSD, los datos sobrescritos &lt;br /&gt;
aún no están protegidos, no están encriptados y son accesibles (el cifrado de hardware &lt;br /&gt;
basado en unidad no tiene este problema). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Además, los datos no se pueden borrar de forma segura sobrescribiendo &lt;br /&gt;
el archivo original sin procedimientos especiales &lt;br /&gt;
de &amp;quot;Borrado seguro&amp;quot; integrados en la unidad.&lt;br /&gt;
| Las unidades de disco duro pueden sobrescribir los datos de la unidad directamente&lt;br /&gt;
en cualquier sector en particular. &lt;br /&gt;
&lt;br /&gt;
Sin embargo, el firmware de la unidad  puede intercambiar bloques dañados &lt;br /&gt;
con áreas de repuesto, por lo que es posible que aún existan partes y fragmentos &lt;br /&gt;
de información que debería de estar sobreescrita e inaccesible.&lt;br /&gt;
&lt;br /&gt;
Los discos duros de algunos fabricantes llenan la unidad completa &lt;br /&gt;
&lt;br /&gt;
con ceros, incluidos los sectores reubicados, con el comando &lt;br /&gt;
&lt;br /&gt;
ATA Secure Erase, esto es conocido como formateo a bajo nivel.&lt;br /&gt;
|}&lt;br /&gt;
Fuente: Wikipedia en ingles, artículo [https://en.wikipedia.org/wiki/Solid-state_drive SSD].&lt;br /&gt;
&lt;br /&gt;
== Más información ==&lt;br /&gt;
&lt;br /&gt;
Enlace de Interés:&lt;br /&gt;
&lt;br /&gt;
https://www.cactus-tech.com/resources/blog/details/solid-state-drives-101&lt;br /&gt;
&lt;br /&gt;
11.3. [[Mejoras de tiempos de desplazamiento|Mejoras de tiempos de desplazamiento]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Unidades_SSD&amp;diff=4384</id>
		<title>Unidades SSD</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Unidades_SSD&amp;diff=4384"/>
				<updated>2019-06-06T03:30:52Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* SSD vs Disco Magnético: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Unidad de estado sólido (Solid State Drive, SSD)''' es un dispositivo de almacenamiento de datos hecho con componentes electrónicos. No tienen partes móviles y utilizan memoria Flash, que es similar a la tecnología que se emplea en dispositivos de almacenamiento portátiles USB (coloquialmente conocidos como ''pendrive''). Esta misma tecnología se puede emplear en unidades híbridas (SSHD) compuestas por SSD y disco duro mágnetico, que intentan compensar las limitaciones de capacidad de las SSD a la vez que se mejoran los tiempos de acceso a un precio inferior al SSD. Se tratan, por tanto, de memoria de almacenamiento no volátil.&lt;br /&gt;
&lt;br /&gt;
== Estructura hardware ==&lt;br /&gt;
&lt;br /&gt;
Su arquitectura emplea memoria no volátil Flash (tipo NAND). Además de una memoria DRAM volátil que se emplea como caché para amortiguar las escrituras directas sobre la memoria Flash, pues la vida de la memoria Flash está limitada por el número de escrituras que se realice, mientras que la DRAM no tiene este inconveniente, además de ser más lentas en las lecturas. Por tanto, la memoria DRAM se usa como zona intermedia en la que se mantienen los datos accedidos recientemente (ya se en lectura o escritura).&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ssdgrafico.jpg|320px|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
Los componentes clave de una SSD son el [[Estructura_típica_de_dispositivo_E/S|controlador]] y la memoria para almacenar los datos. &lt;br /&gt;
El controlador gestiona las operaciones de L/E al dispositivo y ofrece una interfaz (SATA) compatible con la de discos magnéticos.&lt;br /&gt;
El buffer es una memoria DRAM que actúa como almacenamiento intermedio entre el controlador y el array de memorias Flash, ya que las operaciones de escritura son lentas.&lt;br /&gt;
&lt;br /&gt;
Se transfieren bloques de datos que se almacenan en varias celdas flash.&lt;br /&gt;
&lt;br /&gt;
El dispositivo utiliza un condensador para retener energía suficiente como para volcar el buffer en el array de memorias en caso de pérdida repentina de la alimentación manteniendo así la integridad de los datos.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Ssdnand.jpg|350px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
==Técnica de Escritura y Lectura: ==&lt;br /&gt;
&lt;br /&gt;
La interfaz de cada celda flash es serie (8/16 bits). Un sector se escribe en paralelo disperso en varias celdas. Para escribir, la celda debe estar vacía, de lo contrario, habrá que borrarla previamente.&lt;br /&gt;
Para conseguir un mejor rendimiento, se escriben o se leen varias celdas simultáneamente, dividiendo los tiempos de transferencia por el número de celdas que se paralelizan.&lt;br /&gt;
&lt;br /&gt;
'''Particularidades unidades SSD:'''&lt;br /&gt;
&lt;br /&gt;
* El tamaño típico del “sector” es de 4 KB.&lt;br /&gt;
&lt;br /&gt;
* Para poder escribir, hay que borrar previamente.&lt;br /&gt;
&lt;br /&gt;
* Las celdas no se pueden borrar individualmente, por lo que son agrupadas en unidades de borrado. Estas unidades de borrado tienen un tamaño típico de 128KB-256KB.&lt;br /&gt;
&lt;br /&gt;
* Debemos tener en cuenta que el borrado de un sector, puede afectar a otros sectores y, si ya hay otros sectores en la misma unidad de borrado, hay que preservarlos:&lt;br /&gt;
&lt;br /&gt;
       Escritura = Lectura + Borrado + Modificación + Escritura&lt;br /&gt;
&lt;br /&gt;
* Soportan un número finito de borrados. Un número típico de ciclos de borrado/programación: 100.000.&lt;br /&gt;
&lt;br /&gt;
Las SSD tienen la misma interfaz SATA que los discos magnéticos, luego son compatibles con cualquier sistema de archivos válido para discos magnéticos. Pero, debido a la Amplificación de la escritura y a que cada celda flash admite un número finito de borrados, hay que intentar evitar usar repetidamente una misma celda.&lt;br /&gt;
&lt;br /&gt;
== SSD vs Disco Magnético: ==&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SSD-VS-HDD.jpg]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold; text-decoration:underline;&amp;quot; | Características&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold; text-decoration:underline;&amp;quot; | Solid-State&lt;br /&gt;
&lt;br /&gt;
Drive&lt;br /&gt;
(SSD)&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold; text-decoration:underline;&amp;quot; | Hard&lt;br /&gt;
&lt;br /&gt;
Disk Drive&lt;br /&gt;
(HDD)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Capacidad de almacenamiento&lt;br /&gt;
| Los SSD´s son más caros que los HDD´s y parece que seguirá así hasta la siguiente década. &lt;br /&gt;
&lt;br /&gt;
A mayo de 2019 el giga está a 15 céntimos de euro.  Basado en modelos de 4 TB. &lt;br /&gt;
&lt;br /&gt;
Su precio sigue bajando conforme se extiende su uso y se abaratan costesde producción&lt;br /&gt;
 y seguirá así para los tamaños de almacenamiento cotidianos.&lt;br /&gt;
| El precio de los HDD´s está en Mayo de 2019 entre 2 y 3 céntimos dependiendo si es de 2.5” o de 3.5” y de la marca.&lt;br /&gt;
Se siguen abaratando costes de producción y se espera que su precio siga bajando.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Fiabilidad de la información almacenada y esperanza de vida&lt;br /&gt;
| Si se queda sin energía, los SSD que ya llevan un tiempo en uso suelen&lt;br /&gt;
comenzar a perder datos después de aproximadamente uno o dos años&lt;br /&gt;
de almacenamiento, dependiendo de la temperatura. &lt;br /&gt;
&lt;br /&gt;
Se supone los nuevos modelos retienen datos durante unos diez años&lt;br /&gt;
dependiendo de la tecnología. &lt;br /&gt;
&lt;br /&gt;
Los SSD no son aptos para guardar archivos a largo plazo tales como&lt;br /&gt;
copias de seguridad.&lt;br /&gt;
| En un ambiente seco a baja temperatura, los HDD pueden conservar sus&lt;br /&gt;
datos durante un período de tiempo muy largo, incluso sin&lt;br /&gt;
alimentación. &lt;br /&gt;
&lt;br /&gt;
En contra, las piezas mecánicas tienden a obstruirse con el tiempo lo&lt;br /&gt;
cual a la larga acaba impidiendo el giro del disco, impidiendo el&lt;br /&gt;
funcionamiento del dispositivo.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Tiempo de inicio&lt;br /&gt;
| Casi instantáneo; No hay componentes mecánicos que preparar. Puede&lt;br /&gt;
necesitar algunos milisegundos para salir de un modo automático de&lt;br /&gt;
ahorro de energía. Pero insignificante comparado con el de un HDD&lt;br /&gt;
| Pasan unos segundos hasta que el disco comienza a girar. &lt;br /&gt;
&lt;br /&gt;
Es posible que un sistema con muchas unidades deba escalonar la rotación para limitar&lt;br /&gt;
el consumo máximo de energía, ya que hay un pico de consumo cuando&lt;br /&gt;
se inicia por primera vez la unidad.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Rendimiento de acceso secuencial&lt;br /&gt;
| Para el uso personal, la tasa de transferencia máxima suele oscilar entre&lt;br /&gt;
&lt;br /&gt;
unos 500 MB / s y 3500 MB / s, dependiendo de la unidad.&lt;br /&gt;
 Para el uso empresarial se ofrece dispositivos con rendimiento de varios&lt;br /&gt;
gigabytes por segundo.&lt;br /&gt;
| Una vez el cabezal está preparado, al leer o escribir una pista&lt;br /&gt;
continua, un disco duro moderno puede transferir datos a&lt;br /&gt;
aproximadamente 250 MB / s.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La velocidad de transferencia de datos depende también de la velocidad&lt;br /&gt;
de rotación, que puede variar de 3.600 a 15.000 rpm y también de la&lt;br /&gt;
pista (la lectura de las pistas externas es más rápida).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Rendimiento&lt;br /&gt;
de acceso aleatorio&lt;br /&gt;
| En este apartado es donde más sobresalen los SSD, ya que la memoria flash es de acceso aleatorio, los datos se&lt;br /&gt;
pueden recuperar directamente de varias, evitando grandes cuellos de botella en el rendimiento.&lt;br /&gt;
&lt;br /&gt;
El tiempo de acceso aleatorio ronda generalmente los 0.1 ms.&lt;br /&gt;
&lt;br /&gt;
Mientras que los HDD´s tienen un factor limitante en la búsqueda de&lt;br /&gt;
información, los SSD´s emplean el mismo tiempo en acceder a&lt;br /&gt;
cualquier dirección de memoria. Esto se traduce en tiempos de inicio&lt;br /&gt;
de aplicaciones y arranque más rápidos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La tecnología SSD puede ofrecer una velocidad de lectura / escritura&lt;br /&gt;
bastante constante, pero cuando se accede a muchos bloques&lt;br /&gt;
individuales más pequeños, se reduce el rendimiento. &lt;br /&gt;
&lt;br /&gt;
Los SSD sufren un fenómeno de degradación del rendimiento de escritura&lt;br /&gt;
llamado amplificación de escritura, donde las células NAND muestran&lt;br /&gt;
una caída en el rendimiento y continuarán degradándose a lo largo&lt;br /&gt;
&lt;br /&gt;
de la vida útil del SSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se implementa una técnica llamada nivelación de desgaste para mitigar&lt;br /&gt;
este efecto, pero debido a la naturaleza de los chips NAND, la unidad&lt;br /&gt;
inevitablemente se degradará a un ritmo notable. Por lo tanto los&lt;br /&gt;
SSD´s tienen un número limitado de lecturas y escrituras.&lt;br /&gt;
| El tiempo de latencia en la lectura es mucho mayor que los SSD. &lt;br /&gt;
&lt;br /&gt;
El tiempo de acceso aleatorio varía de 2.9 ms (unidad de servidor de gama alta) &lt;br /&gt;
a 12 ms (disco duro portátil) debido a la necesidad de mover los cabezales &lt;br /&gt;
y esperar a que los datos giren bajo el cabezal magnético. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El tiempo de lectura es diferente para cada búsqueda diferente, ya que la ubicación de los datos &lt;br /&gt;
y la ubicación de la cabeza son probablemente diferentes. &lt;br /&gt;
Si se debe acceder a los datos de diferentes áreas de la fuente, como ocurre con los archivos &lt;br /&gt;
fragmentados, los tiempos de respuesta aumentarán por la necesidad de buscar cada fragmento. &lt;br /&gt;
Por eso la utilización de herramientas de desfragmentación son muy útilespara mantener &lt;br /&gt;
el rendimiento de este tipo de dispositivos durante su periodo de vida.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Impacto de la fragmentación &lt;br /&gt;
en los sistemas de archivos&lt;br /&gt;
| La lectura de datos secuencialmente tiene un beneficio limitado (más&lt;br /&gt;
allá de los tamaños de bloque FS típicos, digamos 4 KB), lo que&lt;br /&gt;
hace que la fragmentación sea insignificante para los SSD. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La desfragmentación causaría desgaste al realizar escrituras adicionales &lt;br /&gt;
de las celdas flash NAND, que tienen un ciclo de vida limitado.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, incluso en los SSD, existe un límite práctico sobre la&lt;br /&gt;
cantidad de fragmentación que pueden mantener ciertos sistemas de&lt;br /&gt;
archivos; una vez que se alcanza ese límite, fallan las asignaciones&lt;br /&gt;
de archivos subsiguientes. En consecuencia, la desfragmentación&lt;br /&gt;
puede ser necesaria, aunque en menor grado.&lt;br /&gt;
| Algunos sistemas de archivos, como NTFS, se fragmentan con el tiempo si se&lt;br /&gt;
escriben con frecuencia; se requiere una desfragmentación periódica&lt;br /&gt;
para mantener un rendimiento óptimo.&lt;br /&gt;
&lt;br /&gt;
Esto generalmente no es un problema en los sistemas de archivos modernos.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Consumo&lt;br /&gt;
de energía&lt;br /&gt;
| Los SSD basados en flash de alto rendimiento generalmente requieren&lt;br /&gt;
de la mitad a un tercio de la potencia de los HDD. &lt;br /&gt;
&lt;br /&gt;
Las SSD DRAM de alto rendimiento generalmente requieren tanta energía&lt;br /&gt;
como las HDD, y deben conectarse a la alimentación, incluso cuando&lt;br /&gt;
el resto del sistema está apagado. &lt;br /&gt;
&lt;br /&gt;
Las tecnologías emergentes como DevSlp pueden minimizar los requisitos&lt;br /&gt;
de energía de las unidades inactivas.&lt;br /&gt;
| Los discos duros de menor potencia (tamaño de 1,8 pulgadas) &lt;br /&gt;
pueden usar tan solo 0,35 vatios cuando están inactivos. &lt;br /&gt;
&lt;br /&gt;
Las unidades de 2,5 pulgadas suelen utilizar de 2 a 5 vatios. &lt;br /&gt;
Las unidades de 3,5 pulgadas de mayor rendimiento &lt;br /&gt;
pueden utilizar hasta unos 20 vatios.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Susceptibilidad a factores ambientales&lt;br /&gt;
| Al no tener partes móviles son bastantes resistentes a golpes, movimientos bruscos &lt;br /&gt;
y vibraciones.&lt;br /&gt;
| Las cabezan flotantes que se desplazan sobre los platos, que giran a gran &lt;br /&gt;
&lt;br /&gt;
velocidad, son muy susceptibles al movimiento, vibraciones y golpes.&lt;br /&gt;
Pudiendo provocar fallos o incluso roturas que dejen inservible el dispositivo&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Limitaciones de Escritura Segura&lt;br /&gt;
| La memoria flash NAND no se puede sobrescribir, pero se deben reescribir &lt;br /&gt;
en bloques previamente borrados. Si un programa de cifrado &lt;br /&gt;
cifra los datos que ya se encuentran en el SSD, los datos sobrescritos &lt;br /&gt;
aún no están protegidos, no están encriptados y son accesibles (el cifrado de hardware &lt;br /&gt;
basado en unidad no tiene este problema). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Además, los datos no se pueden borrar de forma segura sobrescribiendo &lt;br /&gt;
el archivo original sin procedimientos especiales &lt;br /&gt;
de &amp;quot;Borrado seguro&amp;quot; integrados en la unidad.&lt;br /&gt;
| Las unidades de disco duro pueden sobrescribir los datos de la unidad directamente&lt;br /&gt;
en cualquier sector en particular. &lt;br /&gt;
&lt;br /&gt;
Sin embargo, el firmware de la unidad  puede intercambiar bloques dañados &lt;br /&gt;
con áreas de repuesto, por lo que es posible que aún existan partes y fragmentos &lt;br /&gt;
de información que debería de estar sobreescrita e inaccesible.&lt;br /&gt;
&lt;br /&gt;
Los discos duros de algunos fabricantes llenan la unidad completa &lt;br /&gt;
&lt;br /&gt;
con ceros, incluidos los sectores reubicados, con el comando &lt;br /&gt;
&lt;br /&gt;
ATA Secure Erase, esto es conocido como formateo a bajo nivel.&lt;br /&gt;
|}&lt;br /&gt;
Fuente: Wikipedia en ingles, artículo [https://en.wikipedia.org/wiki/Solid-state_drive SSD].&lt;br /&gt;
&lt;br /&gt;
== Más información ==&lt;br /&gt;
&lt;br /&gt;
Enlace de Interés:&lt;br /&gt;
&lt;br /&gt;
https://www.cactus-tech.com/resources/blog/details/solid-state-drives-101&lt;br /&gt;
&lt;br /&gt;
11.3. [[Mejoras de tiempos de desplazamiento|Mejoras de tiempos de desplazamiento]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Unidades_SSD&amp;diff=4383</id>
		<title>Unidades SSD</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Unidades_SSD&amp;diff=4383"/>
				<updated>2019-06-06T03:00:46Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* SSD vs Disco Magnético: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Unidad de estado sólido (Solid State Drive, SSD)''' es un dispositivo de almacenamiento de datos hecho con componentes electrónicos. No tienen partes móviles y utilizan memoria Flash, que es similar a la tecnología que se emplea en dispositivos de almacenamiento portátiles USB (coloquialmente conocidos como ''pendrive''). Esta misma tecnología se puede emplear en unidades híbridas (SSHD) compuestas por SSD y disco duro mágnetico, que intentan compensar las limitaciones de capacidad de las SSD a la vez que se mejoran los tiempos de acceso a un precio inferior al SSD. Se tratan, por tanto, de memoria de almacenamiento no volátil.&lt;br /&gt;
&lt;br /&gt;
== Estructura hardware ==&lt;br /&gt;
&lt;br /&gt;
Su arquitectura emplea memoria no volátil Flash (tipo NAND). Además de una memoria DRAM volátil que se emplea como caché para amortiguar las escrituras directas sobre la memoria Flash, pues la vida de la memoria Flash está limitada por el número de escrituras que se realice, mientras que la DRAM no tiene este inconveniente, además de ser más lentas en las lecturas. Por tanto, la memoria DRAM se usa como zona intermedia en la que se mantienen los datos accedidos recientemente (ya se en lectura o escritura).&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ssdgrafico.jpg|320px|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
Los componentes clave de una SSD son el [[Estructura_típica_de_dispositivo_E/S|controlador]] y la memoria para almacenar los datos. &lt;br /&gt;
El controlador gestiona las operaciones de L/E al dispositivo y ofrece una interfaz (SATA) compatible con la de discos magnéticos.&lt;br /&gt;
El buffer es una memoria DRAM que actúa como almacenamiento intermedio entre el controlador y el array de memorias Flash, ya que las operaciones de escritura son lentas.&lt;br /&gt;
&lt;br /&gt;
Se transfieren bloques de datos que se almacenan en varias celdas flash.&lt;br /&gt;
&lt;br /&gt;
El dispositivo utiliza un condensador para retener energía suficiente como para volcar el buffer en el array de memorias en caso de pérdida repentina de la alimentación manteniendo así la integridad de los datos.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Ssdnand.jpg|350px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
==Técnica de Escritura y Lectura: ==&lt;br /&gt;
&lt;br /&gt;
La interfaz de cada celda flash es serie (8/16 bits). Un sector se escribe en paralelo disperso en varias celdas. Para escribir, la celda debe estar vacía, de lo contrario, habrá que borrarla previamente.&lt;br /&gt;
Para conseguir un mejor rendimiento, se escriben o se leen varias celdas simultáneamente, dividiendo los tiempos de transferencia por el número de celdas que se paralelizan.&lt;br /&gt;
&lt;br /&gt;
'''Particularidades unidades SSD:'''&lt;br /&gt;
&lt;br /&gt;
* El tamaño típico del “sector” es de 4 KB.&lt;br /&gt;
&lt;br /&gt;
* Para poder escribir, hay que borrar previamente.&lt;br /&gt;
&lt;br /&gt;
* Las celdas no se pueden borrar individualmente, por lo que son agrupadas en unidades de borrado. Estas unidades de borrado tienen un tamaño típico de 128KB-256KB.&lt;br /&gt;
&lt;br /&gt;
* Debemos tener en cuenta que el borrado de un sector, puede afectar a otros sectores y, si ya hay otros sectores en la misma unidad de borrado, hay que preservarlos:&lt;br /&gt;
&lt;br /&gt;
       Escritura = Lectura + Borrado + Modificación + Escritura&lt;br /&gt;
&lt;br /&gt;
* Soportan un número finito de borrados. Un número típico de ciclos de borrado/programación: 100.000.&lt;br /&gt;
&lt;br /&gt;
Las SSD tienen la misma interfaz SATA que los discos magnéticos, luego son compatibles con cualquier sistema de archivos válido para discos magnéticos. Pero, debido a la Amplificación de la escritura y a que cada celda flash admite un número finito de borrados, hay que intentar evitar usar repetidamente una misma celda.&lt;br /&gt;
&lt;br /&gt;
== SSD vs Disco Magnético: ==&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SSD-VS-HDD.jpg]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center;&amp;quot; | Características&lt;br /&gt;
! style=&amp;quot;text-align: center;&amp;quot; | Solid-State&lt;br /&gt;
drive&lt;br /&gt;
! Hard&lt;br /&gt;
disk drive&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Capacidad de almacenamiento&lt;br /&gt;
| Los SSD´s son más caros que los HDD´s y parece que seguirá así hasta la siguiente década. &lt;br /&gt;
&lt;br /&gt;
A mayo de 2019 el giga está a 15 céntimos de euro.  Basado en modelos de 4 TB. &lt;br /&gt;
&lt;br /&gt;
Su precio sigue bajando conforme se extiende su uso y se abaratan costesde producción&lt;br /&gt;
 y seguirá así para los tamaños de almacenamiento cotidianos.&lt;br /&gt;
| El precio de los HDD´s está en Mayo de 2019 entre 2 y 3 céntimos dependiendo si es de 2.5” o de 3.5” y de la marca.&lt;br /&gt;
Se siguen abaratando costes de producción y se espera que su precio siga bajando.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Fiabilidad de la información almacenada y esperanza de vida&lt;br /&gt;
| Si se queda sin energía, los SSD que ya llevan un tiempo en uso suelen&lt;br /&gt;
comenzar a perder datos después de aproximadamente uno o dos años&lt;br /&gt;
de almacenamiento, dependiendo de la temperatura. &lt;br /&gt;
&lt;br /&gt;
Se supone los nuevos modelos retienen datos durante unos diez años&lt;br /&gt;
dependiendo de la tecnología. &lt;br /&gt;
&lt;br /&gt;
Los SSD no son aptos para guardar archivos a largo plazo tales como&lt;br /&gt;
copias de seguridad.&lt;br /&gt;
| En un ambiente seco a baja temperatura, los HDD pueden conservar sus&lt;br /&gt;
datos durante un período de tiempo muy largo, incluso sin&lt;br /&gt;
alimentación. &lt;br /&gt;
&lt;br /&gt;
En contra, las piezas mecánicas tienden a obstruirse con el tiempo lo&lt;br /&gt;
cual a la larga acaba impidiendo el giro del disco, impidiendo el&lt;br /&gt;
funcionamiento del dispositivo.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Tiempo de inicio&lt;br /&gt;
| Casi instantáneo; No hay componentes mecánicos que preparar. Puede&lt;br /&gt;
necesitar algunos milisegundos para salir de un modo automático de&lt;br /&gt;
ahorro de energía. Pero insignificante comparado con el de un HDD&lt;br /&gt;
| Pasan unos segundos hasta que el disco comienza a girar. &lt;br /&gt;
&lt;br /&gt;
Es posible que un sistema con muchas unidades deba escalonar la rotación para limitar&lt;br /&gt;
el consumo máximo de energía, ya que hay un pico de consumo cuando&lt;br /&gt;
se inicia por primera vez la unidad.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Rendimiento de acceso secuencial&lt;br /&gt;
| Para el uso personal, la tasa de transferencia máxima suele oscilar entre&lt;br /&gt;
&lt;br /&gt;
unos 500 MB / s y 3500 MB / s, dependiendo de la unidad.&lt;br /&gt;
 Para el uso empresarial se ofrece dispositivos con rendimiento de varios&lt;br /&gt;
gigabytes por segundo.&lt;br /&gt;
| Una vez el cabezal está preparado, al leer o escribir una pista&lt;br /&gt;
continua, un disco duro moderno puede transferir datos a&lt;br /&gt;
aproximadamente 250 MB / s.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La velocidad de transferencia de datos depende también de la velocidad&lt;br /&gt;
de rotación, que puede variar de 3.600 a 15.000 rpm y también de la&lt;br /&gt;
pista (la lectura de las pistas externas es más rápida).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Rendimiento&lt;br /&gt;
de acceso aleatorio&lt;br /&gt;
| En este apartado es donde más sobresalen los SSD, ya que la memoria flash es de acceso aleatorio, los datos se&lt;br /&gt;
pueden recuperar directamente de varias, evitando grandes cuellos de botella en el rendimiento.&lt;br /&gt;
&lt;br /&gt;
El tiempo de acceso aleatorio ronda generalmente los 0.1 ms.&lt;br /&gt;
&lt;br /&gt;
Mientras que los HDD´s tienen un factor limitante en la búsqueda de&lt;br /&gt;
información, los SSD´s emplean el mismo tiempo en acceder a&lt;br /&gt;
cualquier dirección de memoria. Esto se traduce en tiempos de inicio&lt;br /&gt;
de aplicaciones y arranque más rápidos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La tecnología SSD puede ofrecer una velocidad de lectura / escritura&lt;br /&gt;
bastante constante, pero cuando se accede a muchos bloques&lt;br /&gt;
individuales más pequeños, se reduce el rendimiento. &lt;br /&gt;
&lt;br /&gt;
Los SSD sufren un fenómeno de degradación del rendimiento de escritura&lt;br /&gt;
llamado amplificación de escritura, donde las células NAND muestran&lt;br /&gt;
una caída en el rendimiento y continuarán degradándose a lo largo&lt;br /&gt;
&lt;br /&gt;
de la vida útil del SSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se implementa una técnica llamada nivelación de desgaste para mitigar&lt;br /&gt;
este efecto, pero debido a la naturaleza de los chips NAND, la unidad&lt;br /&gt;
inevitablemente se degradará a un ritmo notable. Por lo tanto los&lt;br /&gt;
SSD´s tienen un número limitado de lecturas y escrituras.&lt;br /&gt;
| El tiempo de latencia en la lectura es mucho mayor que los SSD. &lt;br /&gt;
&lt;br /&gt;
El tiempo de acceso aleatorio varía de 2.9 ms (unidad de servidor de gama alta) &lt;br /&gt;
a 12 ms (disco duro portátil) debido a la necesidad de mover los cabezales &lt;br /&gt;
y esperar a que los datos giren bajo el cabezal magnético. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El tiempo de lectura es diferente para cada búsqueda diferente, ya que la ubicación de los datos &lt;br /&gt;
y la ubicación de la cabeza son probablemente diferentes. &lt;br /&gt;
Si se debe acceder a los datos de diferentes áreas de la fuente, como ocurre con los archivos &lt;br /&gt;
fragmentados, los tiempos de respuesta aumentarán por la necesidad de buscar cada fragmento. &lt;br /&gt;
Por eso la utilización de herramientas de desfragmentación son muy útilespara mantener &lt;br /&gt;
el rendimiento de este tipo de dispositivos durante su periodo de vida.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Impacto de la fragmentación &lt;br /&gt;
en los sistemas de archivos&lt;br /&gt;
| La lectura de datos secuencialmente tiene un beneficio limitado (más&lt;br /&gt;
allá de los tamaños de bloque FS típicos, digamos 4 KB), lo que&lt;br /&gt;
hace que la fragmentación sea insignificante para los SSD. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La desfragmentación causaría desgaste al realizar escrituras adicionales &lt;br /&gt;
de las celdas flash NAND, que tienen un ciclo de vida limitado.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, incluso en los SSD, existe un límite práctico sobre la&lt;br /&gt;
cantidad de fragmentación que pueden mantener ciertos sistemas de&lt;br /&gt;
archivos; una vez que se alcanza ese límite, fallan las asignaciones&lt;br /&gt;
de archivos subsiguientes. En consecuencia, la desfragmentación&lt;br /&gt;
puede ser necesaria, aunque en menor grado.&lt;br /&gt;
| Algunos sistemas de archivos, como NTFS, se fragmentan con el tiempo si se&lt;br /&gt;
escriben con frecuencia; se requiere una desfragmentación periódica&lt;br /&gt;
para mantener un rendimiento óptimo.&lt;br /&gt;
&lt;br /&gt;
Esto generalmente no es un problema en los sistemas de archivos modernos.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Consumo&lt;br /&gt;
de energía&lt;br /&gt;
| Los SSD basados en flash de alto rendimiento generalmente requieren&lt;br /&gt;
de la mitad a un tercio de la potencia de los HDD. &lt;br /&gt;
&lt;br /&gt;
Las SSD DRAM de alto rendimiento generalmente requieren tanta energía&lt;br /&gt;
como las HDD, y deben conectarse a la alimentación, incluso cuando&lt;br /&gt;
el resto del sistema está apagado. &lt;br /&gt;
&lt;br /&gt;
Las tecnologías emergentes como DevSlp pueden minimizar los requisitos&lt;br /&gt;
de energía de las unidades inactivas.&lt;br /&gt;
| Los discos duros de menor potencia (tamaño de 1,8 pulgadas) &lt;br /&gt;
pueden usar tan solo 0,35 vatios cuando están inactivos. &lt;br /&gt;
&lt;br /&gt;
Las unidades de 2,5 pulgadas suelen utilizar de 2 a 5 vatios. &lt;br /&gt;
Las unidades de 3,5 pulgadas de mayor rendimiento &lt;br /&gt;
pueden utilizar hasta unos 20 vatios.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | Susceptibilidad a factores ambientales&lt;br /&gt;
| Al no tener partes móviles son bastantes resistentes a golpes, movimientos bruscos &lt;br /&gt;
y vibraciones.&lt;br /&gt;
| Las cabezan flotantes que se desplazan sobre los platos, que giran a gran &lt;br /&gt;
&lt;br /&gt;
velocidad, son muy susceptibles al movimiento, vibraciones y golpes.&lt;br /&gt;
Pudiendo provocar fallos o incluso roturas que dejen inservible el dispositivo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Fuente: Wikipedia en ingles, artículo [https://en.wikipedia.org/wiki/Solid-state_drive SSD].&lt;br /&gt;
&lt;br /&gt;
== Más información ==&lt;br /&gt;
&lt;br /&gt;
Enlace de Interés:&lt;br /&gt;
&lt;br /&gt;
https://www.cactus-tech.com/resources/blog/details/solid-state-drives-101&lt;br /&gt;
&lt;br /&gt;
11.3. [[Mejoras de tiempos de desplazamiento|Mejoras de tiempos de desplazamiento]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Material_teor%C3%ADa&amp;diff=4381</id>
		<title>Material teoría</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Material_teor%C3%ADa&amp;diff=4381"/>
				<updated>2019-06-02T00:57:56Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Subida de notas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bienvenido al wiki de la asignatura de Sistemas Operativos del departamento de Lenguajes y Sistemas Informáticos de la Universidad de Sevilla. &lt;br /&gt;
&lt;br /&gt;
= Noticias =&lt;br /&gt;
&lt;br /&gt;
* El próximo día 19 de marzo (martes) no habrá clase.&lt;br /&gt;
* El primer control de evaluación continua tendrá lugar el 21 de marzo (jueves) a las 17h30.&lt;br /&gt;
* El tercer control de evaluación continua tendrá lugar el 30 de abril (martes) a las 15h30.&lt;br /&gt;
&lt;br /&gt;
= Subida de notas =&lt;br /&gt;
&lt;br /&gt;
Indica aquí tu UVUS si quieres que revise tus contribuciones para ser tenidas en cuenta en la subida de notas:&lt;br /&gt;
&lt;br /&gt;
* beagalcar&lt;br /&gt;
* antsilgor&lt;br /&gt;
&lt;br /&gt;
= Notas =&lt;br /&gt;
&lt;br /&gt;
           C1     C2    C3  C4&lt;br /&gt;
 aceralale  0    1,25   -   &lt;br /&gt;
 aratrijua  0    0      -&lt;br /&gt;
 asucarchr  2    2,5    0&lt;br /&gt;
 ayogarele  3,5  0      0&lt;br /&gt;
 cablinant  4    4,75   3   10&lt;br /&gt;
 calvazign  8    7,5   10    5&lt;br /&gt;
 camcremir  2    1      1,5&lt;br /&gt;
 cargaredu  4    7,5    6   10&lt;br /&gt;
 cerbegfra  1    2,5    0,5&lt;br /&gt;
 corborfra  4    2,5    0&lt;br /&gt;
 diacarraf  5    1,5    4   8,5&lt;br /&gt;
 dieblajua  3,5  2,75   2&lt;br /&gt;
 fermariva  5,5  -      -&lt;br /&gt;
 fersanjua  1    -      -&lt;br /&gt;
 galcarbea  9,5 10     10   10&lt;br /&gt;
 gilmarraf  5    -     0&lt;br /&gt;
 jimmarang  7,5  7,5   8    7.5&lt;br /&gt;
 laivaljua  2,5  2,0   5&lt;br /&gt;
 lopmordan  2    -     -&lt;br /&gt;
 loponcale  3    1     6    7&lt;br /&gt;
 micmanrog  4    2,5   0&lt;br /&gt;
 morviñadr  2    0,75  3&lt;br /&gt;
 muñgomant  0    0     0&lt;br /&gt;
 notquifra  4    0     2&lt;br /&gt;
 parmigale  4,5  0,5   3&lt;br /&gt;
 pazrubpab  3    2.75  5&lt;br /&gt;
 pertrijos  4    3.5   6    10&lt;br /&gt;
 rammarant  5    -     -&lt;br /&gt;
 romcacana  3    4,25  1&lt;br /&gt;
 rubhuralb  10   4,25  7&lt;br /&gt;
 silgorant  8    7     4    7,5&lt;br /&gt;
 gonmarfel                  5&lt;br /&gt;
&lt;br /&gt;
Revisión: martes 4 de junio, a las 17h30, en I0.66&lt;br /&gt;
&lt;br /&gt;
= Unidades didácticas =&lt;br /&gt;
&lt;br /&gt;
A continuación encontrarás las unidades didácticas que forman parte de la asignatura.&lt;br /&gt;
&lt;br /&gt;
== Introducción a los Sistemas Operativos ==&lt;br /&gt;
&lt;br /&gt;
* 1.1. [[Qué es un  Sistema operativo|Qué es un Sistema Operativo]]&lt;br /&gt;
* 1.2. [[Introducción histórica|Breve introducción histórica a los Sistemas Operativos]]&lt;br /&gt;
* 1.3. [[Tipos de Sistemas Operativos|Tipos de Sistemas Operativos]]&lt;br /&gt;
&lt;br /&gt;
== Fundamentos de Sistemas Operativos ==&lt;br /&gt;
&lt;br /&gt;
* 2.1. [[Organización básica de un ordenador]]&lt;br /&gt;
* 2.2. [[Modos de operación de la CPU|Modos de operación de la CPU]]&lt;br /&gt;
* 2.3. [[Interrupciones y excepciones|Interrupciones y excepciones]]&lt;br /&gt;
* 2.4. [[Conceptos básicos|Conceptos básicos]]&lt;br /&gt;
* 2.5. [[Arranque del sistema|Arranque del sistema]]&lt;br /&gt;
* 2.6. [[Componentes básicos de un sistema operativo|Componentes básicos de un sistema operativo]]&lt;br /&gt;
* 2.7. [[Llamadas al sistema|Llamadas al sistema]]&lt;br /&gt;
* 2.8. [[Ejercicios fundamentos Sistemas Operativos|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Modelos de diseño de Sistemas Operativos ==&lt;br /&gt;
&lt;br /&gt;
* 3.1. [[Modelos de Diseño de Sistemas Operativos|Modelos de diseño de sistemas operativos]]&lt;br /&gt;
* 3.2. [[Virtualización]]&lt;br /&gt;
* 3.3. [[Ejercicios 3|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Procesos ==&lt;br /&gt;
* 4.1. [[Multiprogramación|La multiprogramación]]&lt;br /&gt;
* 4.2. [[Estados de los procesos|Estados de los procesos]]&lt;br /&gt;
* 4.3. [[Planificador de procesos|El planificador de procesos]]&lt;br /&gt;
* 4.4. [[Comportamiento de los procesos|El comportamiento de los procesos según el planificador]]&lt;br /&gt;
* 4.5. [[Bloque de control de procesos|El bloque de control del proceso]]&lt;br /&gt;
* 4.6. [[Conmutación de procesos|La conmutación de procesos]]&lt;br /&gt;
* 4.7. [[Hilos|Hilos]]&lt;br /&gt;
* 4.8. [[Ejercicios Procesos|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Planificación de Procesos ==&lt;br /&gt;
* 5.1. [[Planificación de procesos|La planificación de procesos]]&lt;br /&gt;
* 5.2. [[Índices de evaluación|Índices de evaluación de la planificación de procesos]]&lt;br /&gt;
* 5.3. [[Criterios de planificación|Criterios de planificación]]&lt;br /&gt;
* 5.4. [[Planificadores de sistemas operativos existentes|Planificadores de sistemas operativos existentes]]&lt;br /&gt;
* 5.5. [[Planificación de procesos de tiempo real|La planificación de procesos de tiempo real]]&lt;br /&gt;
* 5.6. [[Planificación en sistemas multiprocesadores|La planificación de procesos en sistemas multiprocesadores]]&lt;br /&gt;
* 5.7. [[Ejercicios otros aspectos de la planificación|Ejercicios]]&lt;br /&gt;
* 5.8. [[Ejercicios planificación de procesos|Ejercicios]]&lt;br /&gt;
* 5.9. [[Ejercicios_simples_de_planificación_de_procesos|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Concurrencia de procesos ==&lt;br /&gt;
&lt;br /&gt;
* 6.1. [[Concurrencia de procesos|Concurrencia de procesos]]&lt;br /&gt;
* 6.2. [[Mecanismos de sincronización|Control optimista y pesimista de la concurrencia]]&lt;br /&gt;
* 6.3. [[Cerrojos|Cerrojos]]&lt;br /&gt;
* 6.4. [[Ejercicio de concurrencia de procesos|Ejercicios]]&lt;br /&gt;
* 6.5. [[Semáforos|Semáforos]]&lt;br /&gt;
* 6.6. [[Monitores|Monitores]]&lt;br /&gt;
* 6.7. [[Mensajería|Mensajería]]&lt;br /&gt;
* 6.8. [[Ejercicios sincronización y comunicación|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Interbloqueo ==&lt;br /&gt;
&lt;br /&gt;
* 7.1. [[Definición de interbloqueo|Definición]]&lt;br /&gt;
* 7.2. [[Condiciones para el interbloqueo y estrategias de resolución|Modelado y Estrategias]]&lt;br /&gt;
* 7.3. [[Algoritmo para averiguar interbloqueo|Algoritmo del banquero]]&lt;br /&gt;
* 7.4. [[Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Administración de memoria ==&lt;br /&gt;
&lt;br /&gt;
* 8.1. [[Introducción|Introducción]]&lt;br /&gt;
* 8.2. [[SO multiprogramables con particiones variables|SO multiprogramables con particiones variables]]&lt;br /&gt;
* 8.3. [[Segmentación|Segmentación]]&lt;br /&gt;
* 8.4. [[Paginación|Paginación]]&lt;br /&gt;
* 8.5. [[Sistema combinado|Sistema combinado]]&lt;br /&gt;
* 8.6. [[Ejercicios administración de memoria contigua|Ejercicios (Administración de memoria contigua)]]&lt;br /&gt;
* 8.7. [[Ejemplo de segmentación, paginación y combinado|Ejercicios (Segmentación, paginación y sistemas combinados)]]&lt;br /&gt;
&lt;br /&gt;
== Memoria virtual ==&lt;br /&gt;
&lt;br /&gt;
* 9.1. [[Memoria Virtual|Introducción]]&lt;br /&gt;
* 9.2. [[Criterios de reemplazo|Criterios de reemplazo]]&lt;br /&gt;
* 9.3. [[Memoria virtual con multiprogramacion|Otros aspectos relacionados con la memoria virtual]]&lt;br /&gt;
* 9.4. [[Ejercicios memoria virtual|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Entrada/Salida ==&lt;br /&gt;
&lt;br /&gt;
* 10.1. [[EstructuraES|Estructura dispositivo E/S]]&lt;br /&gt;
* 10.2. [[GestionES|Modos de gestionar dispositivos E/S]]&lt;br /&gt;
* 10.3. [[Diseño modular E/S|Diseño modular E/S]]&lt;br /&gt;
* 10.4. [[Ejercicios de Entrada/Salida|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Gestión E/S ==&lt;br /&gt;
&lt;br /&gt;
* 11.1. [[Discos Magnéticos|Discos Magnéticos]]&lt;br /&gt;
* 11.2. [[Mejoras de tiempos de desplazamiento|Mejoras de tiempos de desplazamiento]]&lt;br /&gt;
* 11.3. [[Mejoras en la demora de rotación|Mejoras en la demora de rotación]]&lt;br /&gt;
* 11.4. [[Tipos de errores en discos magnéticos|Tipos de errores en discos magnéticos]]&lt;br /&gt;
* 11.5. [[Unidades SSD|Unidades SSD]]&lt;br /&gt;
* 11.6. [[Reloj hardware: Intel 8253]]&lt;br /&gt;
* 11.7. [[Ejercicios Gestión L/E|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Administración de archivos ==&lt;br /&gt;
&lt;br /&gt;
* 12.1. [[Introducción en la administración de archivos|Introducción en la administración de archivos]]&lt;br /&gt;
* 12.2. [[FAT|FAT]]&lt;br /&gt;
* 12.3. [[EXT2 |EXT2]]&lt;br /&gt;
* 12.4. [[Ejercicios Administración Ficheros|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Seguridad ==&lt;br /&gt;
&lt;br /&gt;
* 13.1. [[Definiciones de Seguridad]]&lt;br /&gt;
&lt;br /&gt;
== Anexo ==&lt;br /&gt;
&lt;br /&gt;
Esta sección contiene información interesante pero que no pertenece al temario de la asignatura.&lt;br /&gt;
&lt;br /&gt;
* Todo lo que siempre has querido saber sobre el protocolo SSH está [[SSH|aquí]].&lt;br /&gt;
* Instrucciones para emular BATHOS usando QEMU [[bathos_QEMU|aquí]].&lt;br /&gt;
* Instrucciones para emular XV6 usando QEMU [[xv6|aquí]].&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Material_teor%C3%ADa&amp;diff=4380</id>
		<title>Material teoría</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Material_teor%C3%ADa&amp;diff=4380"/>
				<updated>2019-06-02T00:57:36Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Subida de notas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bienvenido al wiki de la asignatura de Sistemas Operativos del departamento de Lenguajes y Sistemas Informáticos de la Universidad de Sevilla. &lt;br /&gt;
&lt;br /&gt;
= Noticias =&lt;br /&gt;
&lt;br /&gt;
* El próximo día 19 de marzo (martes) no habrá clase.&lt;br /&gt;
* El primer control de evaluación continua tendrá lugar el 21 de marzo (jueves) a las 17h30.&lt;br /&gt;
* El tercer control de evaluación continua tendrá lugar el 30 de abril (martes) a las 15h30.&lt;br /&gt;
&lt;br /&gt;
= Subida de notas =&lt;br /&gt;
&lt;br /&gt;
Indica aquí tu UVUS si quieres que revise tus contribuciones para ser tenidas en cuenta en la subida de notas:&lt;br /&gt;
&lt;br /&gt;
* beagalcar&lt;br /&gt;
*antsilgor&lt;br /&gt;
&lt;br /&gt;
= Notas =&lt;br /&gt;
&lt;br /&gt;
           C1     C2    C3  C4&lt;br /&gt;
 aceralale  0    1,25   -   &lt;br /&gt;
 aratrijua  0    0      -&lt;br /&gt;
 asucarchr  2    2,5    0&lt;br /&gt;
 ayogarele  3,5  0      0&lt;br /&gt;
 cablinant  4    4,75   3   10&lt;br /&gt;
 calvazign  8    7,5   10    5&lt;br /&gt;
 camcremir  2    1      1,5&lt;br /&gt;
 cargaredu  4    7,5    6   10&lt;br /&gt;
 cerbegfra  1    2,5    0,5&lt;br /&gt;
 corborfra  4    2,5    0&lt;br /&gt;
 diacarraf  5    1,5    4   8,5&lt;br /&gt;
 dieblajua  3,5  2,75   2&lt;br /&gt;
 fermariva  5,5  -      -&lt;br /&gt;
 fersanjua  1    -      -&lt;br /&gt;
 galcarbea  9,5 10     10   10&lt;br /&gt;
 gilmarraf  5    -     0&lt;br /&gt;
 jimmarang  7,5  7,5   8    7.5&lt;br /&gt;
 laivaljua  2,5  2,0   5&lt;br /&gt;
 lopmordan  2    -     -&lt;br /&gt;
 loponcale  3    1     6    7&lt;br /&gt;
 micmanrog  4    2,5   0&lt;br /&gt;
 morviñadr  2    0,75  3&lt;br /&gt;
 muñgomant  0    0     0&lt;br /&gt;
 notquifra  4    0     2&lt;br /&gt;
 parmigale  4,5  0,5   3&lt;br /&gt;
 pazrubpab  3    2.75  5&lt;br /&gt;
 pertrijos  4    3.5   6    10&lt;br /&gt;
 rammarant  5    -     -&lt;br /&gt;
 romcacana  3    4,25  1&lt;br /&gt;
 rubhuralb  10   4,25  7&lt;br /&gt;
 silgorant  8    7     4    7,5&lt;br /&gt;
 gonmarfel                  5&lt;br /&gt;
&lt;br /&gt;
Revisión: martes 4 de junio, a las 17h30, en I0.66&lt;br /&gt;
&lt;br /&gt;
= Unidades didácticas =&lt;br /&gt;
&lt;br /&gt;
A continuación encontrarás las unidades didácticas que forman parte de la asignatura.&lt;br /&gt;
&lt;br /&gt;
== Introducción a los Sistemas Operativos ==&lt;br /&gt;
&lt;br /&gt;
* 1.1. [[Qué es un  Sistema operativo|Qué es un Sistema Operativo]]&lt;br /&gt;
* 1.2. [[Introducción histórica|Breve introducción histórica a los Sistemas Operativos]]&lt;br /&gt;
* 1.3. [[Tipos de Sistemas Operativos|Tipos de Sistemas Operativos]]&lt;br /&gt;
&lt;br /&gt;
== Fundamentos de Sistemas Operativos ==&lt;br /&gt;
&lt;br /&gt;
* 2.1. [[Organización básica de un ordenador]]&lt;br /&gt;
* 2.2. [[Modos de operación de la CPU|Modos de operación de la CPU]]&lt;br /&gt;
* 2.3. [[Interrupciones y excepciones|Interrupciones y excepciones]]&lt;br /&gt;
* 2.4. [[Conceptos básicos|Conceptos básicos]]&lt;br /&gt;
* 2.5. [[Arranque del sistema|Arranque del sistema]]&lt;br /&gt;
* 2.6. [[Componentes básicos de un sistema operativo|Componentes básicos de un sistema operativo]]&lt;br /&gt;
* 2.7. [[Llamadas al sistema|Llamadas al sistema]]&lt;br /&gt;
* 2.8. [[Ejercicios fundamentos Sistemas Operativos|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Modelos de diseño de Sistemas Operativos ==&lt;br /&gt;
&lt;br /&gt;
* 3.1. [[Modelos de Diseño de Sistemas Operativos|Modelos de diseño de sistemas operativos]]&lt;br /&gt;
* 3.2. [[Virtualización]]&lt;br /&gt;
* 3.3. [[Ejercicios 3|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Procesos ==&lt;br /&gt;
* 4.1. [[Multiprogramación|La multiprogramación]]&lt;br /&gt;
* 4.2. [[Estados de los procesos|Estados de los procesos]]&lt;br /&gt;
* 4.3. [[Planificador de procesos|El planificador de procesos]]&lt;br /&gt;
* 4.4. [[Comportamiento de los procesos|El comportamiento de los procesos según el planificador]]&lt;br /&gt;
* 4.5. [[Bloque de control de procesos|El bloque de control del proceso]]&lt;br /&gt;
* 4.6. [[Conmutación de procesos|La conmutación de procesos]]&lt;br /&gt;
* 4.7. [[Hilos|Hilos]]&lt;br /&gt;
* 4.8. [[Ejercicios Procesos|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Planificación de Procesos ==&lt;br /&gt;
* 5.1. [[Planificación de procesos|La planificación de procesos]]&lt;br /&gt;
* 5.2. [[Índices de evaluación|Índices de evaluación de la planificación de procesos]]&lt;br /&gt;
* 5.3. [[Criterios de planificación|Criterios de planificación]]&lt;br /&gt;
* 5.4. [[Planificadores de sistemas operativos existentes|Planificadores de sistemas operativos existentes]]&lt;br /&gt;
* 5.5. [[Planificación de procesos de tiempo real|La planificación de procesos de tiempo real]]&lt;br /&gt;
* 5.6. [[Planificación en sistemas multiprocesadores|La planificación de procesos en sistemas multiprocesadores]]&lt;br /&gt;
* 5.7. [[Ejercicios otros aspectos de la planificación|Ejercicios]]&lt;br /&gt;
* 5.8. [[Ejercicios planificación de procesos|Ejercicios]]&lt;br /&gt;
* 5.9. [[Ejercicios_simples_de_planificación_de_procesos|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Concurrencia de procesos ==&lt;br /&gt;
&lt;br /&gt;
* 6.1. [[Concurrencia de procesos|Concurrencia de procesos]]&lt;br /&gt;
* 6.2. [[Mecanismos de sincronización|Control optimista y pesimista de la concurrencia]]&lt;br /&gt;
* 6.3. [[Cerrojos|Cerrojos]]&lt;br /&gt;
* 6.4. [[Ejercicio de concurrencia de procesos|Ejercicios]]&lt;br /&gt;
* 6.5. [[Semáforos|Semáforos]]&lt;br /&gt;
* 6.6. [[Monitores|Monitores]]&lt;br /&gt;
* 6.7. [[Mensajería|Mensajería]]&lt;br /&gt;
* 6.8. [[Ejercicios sincronización y comunicación|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Interbloqueo ==&lt;br /&gt;
&lt;br /&gt;
* 7.1. [[Definición de interbloqueo|Definición]]&lt;br /&gt;
* 7.2. [[Condiciones para el interbloqueo y estrategias de resolución|Modelado y Estrategias]]&lt;br /&gt;
* 7.3. [[Algoritmo para averiguar interbloqueo|Algoritmo del banquero]]&lt;br /&gt;
* 7.4. [[Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Administración de memoria ==&lt;br /&gt;
&lt;br /&gt;
* 8.1. [[Introducción|Introducción]]&lt;br /&gt;
* 8.2. [[SO multiprogramables con particiones variables|SO multiprogramables con particiones variables]]&lt;br /&gt;
* 8.3. [[Segmentación|Segmentación]]&lt;br /&gt;
* 8.4. [[Paginación|Paginación]]&lt;br /&gt;
* 8.5. [[Sistema combinado|Sistema combinado]]&lt;br /&gt;
* 8.6. [[Ejercicios administración de memoria contigua|Ejercicios (Administración de memoria contigua)]]&lt;br /&gt;
* 8.7. [[Ejemplo de segmentación, paginación y combinado|Ejercicios (Segmentación, paginación y sistemas combinados)]]&lt;br /&gt;
&lt;br /&gt;
== Memoria virtual ==&lt;br /&gt;
&lt;br /&gt;
* 9.1. [[Memoria Virtual|Introducción]]&lt;br /&gt;
* 9.2. [[Criterios de reemplazo|Criterios de reemplazo]]&lt;br /&gt;
* 9.3. [[Memoria virtual con multiprogramacion|Otros aspectos relacionados con la memoria virtual]]&lt;br /&gt;
* 9.4. [[Ejercicios memoria virtual|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Entrada/Salida ==&lt;br /&gt;
&lt;br /&gt;
* 10.1. [[EstructuraES|Estructura dispositivo E/S]]&lt;br /&gt;
* 10.2. [[GestionES|Modos de gestionar dispositivos E/S]]&lt;br /&gt;
* 10.3. [[Diseño modular E/S|Diseño modular E/S]]&lt;br /&gt;
* 10.4. [[Ejercicios de Entrada/Salida|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Gestión E/S ==&lt;br /&gt;
&lt;br /&gt;
* 11.1. [[Discos Magnéticos|Discos Magnéticos]]&lt;br /&gt;
* 11.2. [[Mejoras de tiempos de desplazamiento|Mejoras de tiempos de desplazamiento]]&lt;br /&gt;
* 11.3. [[Mejoras en la demora de rotación|Mejoras en la demora de rotación]]&lt;br /&gt;
* 11.4. [[Tipos de errores en discos magnéticos|Tipos de errores en discos magnéticos]]&lt;br /&gt;
* 11.5. [[Unidades SSD|Unidades SSD]]&lt;br /&gt;
* 11.6. [[Reloj hardware: Intel 8253]]&lt;br /&gt;
* 11.7. [[Ejercicios Gestión L/E|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Administración de archivos ==&lt;br /&gt;
&lt;br /&gt;
* 12.1. [[Introducción en la administración de archivos|Introducción en la administración de archivos]]&lt;br /&gt;
* 12.2. [[FAT|FAT]]&lt;br /&gt;
* 12.3. [[EXT2 |EXT2]]&lt;br /&gt;
* 12.4. [[Ejercicios Administración Ficheros|Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
== Seguridad ==&lt;br /&gt;
&lt;br /&gt;
* 13.1. [[Definiciones de Seguridad]]&lt;br /&gt;
&lt;br /&gt;
== Anexo ==&lt;br /&gt;
&lt;br /&gt;
Esta sección contiene información interesante pero que no pertenece al temario de la asignatura.&lt;br /&gt;
&lt;br /&gt;
* Todo lo que siempre has querido saber sobre el protocolo SSH está [[SSH|aquí]].&lt;br /&gt;
* Instrucciones para emular BATHOS usando QEMU [[bathos_QEMU|aquí]].&lt;br /&gt;
* Instrucciones para emular XV6 usando QEMU [[xv6|aquí]].&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Definiciones_de_Seguridad&amp;diff=4375</id>
		<title>Definiciones de Seguridad</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Definiciones_de_Seguridad&amp;diff=4375"/>
				<updated>2019-05-30T03:34:04Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Virus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Malware es una definición genérica que hacer referencia a cualquier software que tiene un fin malicioso.&lt;br /&gt;
&lt;br /&gt;
= Virus =&lt;br /&gt;
&lt;br /&gt;
Software con fin malicioso, por ejemplo, borrar y/o alterar información del usuario. Necesitan ser ejecutados por el usuario para realizar su tarea maliciosa. Pueden sacar partido de una funcionalidad de &amp;quot;autorun&amp;quot; de un dispositivo de almacenamiento USB portable para ejecutarse al ser conectado al equipo. También podría ser ejecutado por el usuario de manera voluntaria, por ejemplo, al incluirse como adjunto de un correo electrónico. También podría ser descargado por un usuario de Internet, haciéndose pasar por otra utilidad.&lt;br /&gt;
&lt;br /&gt;
Un virus también puede sacar partido de las vulnerabilidad de seguridad de un sistema operativo. Si el usuario no aplica las actualizaciones de seguridad o el fabricante no soluciona defectos en el software de manera ágil, puede ofrecer una puerta de entrada, por medio de la vulnerabilidad de seguridad, para ejecutar el virus en el sistema.&lt;br /&gt;
&lt;br /&gt;
= Gusano =&lt;br /&gt;
&lt;br /&gt;
Es un tipo de virus, que tiene capacidad de autoreplicarse y propagarse por la red.&lt;br /&gt;
&lt;br /&gt;
= Troyano =&lt;br /&gt;
&lt;br /&gt;
Software con apariencia inofensiva que realiza una actividad maliciosa.&lt;br /&gt;
&lt;br /&gt;
= Bomba Lógica =&lt;br /&gt;
&lt;br /&gt;
Software malicioso que se ejecuta bajo una cierta condición, por ejemplo, en un cierto día, fecha y hora.&lt;br /&gt;
&lt;br /&gt;
= Puerta trasera =&lt;br /&gt;
&lt;br /&gt;
Un software malicioso que permite el control remoto de otro sistema, permiten:&lt;br /&gt;
&lt;br /&gt;
* Ver el escritorio remoto en tiempo virtual.&lt;br /&gt;
* Ver las imágenes capturadas por la webcam y el micrófono.&lt;br /&gt;
* Borrar, alterar y transferir datos del ordenador víctima.&lt;br /&gt;
* Ejecutar programas en el ordenador victima.&lt;br /&gt;
&lt;br /&gt;
Una variante de la puerta trasera es un '''spyware'''.&lt;br /&gt;
&lt;br /&gt;
= Ramsom =&lt;br /&gt;
&lt;br /&gt;
Software malicioso que cifra los datos de un ordenador víctima y solicita el pago para restaurar los datos a su estado original. El atacante generalmente solicita el rescate en criptomoneda.&lt;br /&gt;
&lt;br /&gt;
= Ataque de denegación de servicio (Denial of Service, DoS) =&lt;br /&gt;
&lt;br /&gt;
Consiste en generar peticiones aparentemente bien formadas con el fin de consumir los recursos de computación de la víctima, ya sea la banda disponible en la red, el procesador, la memoria o el espacio de la unidad de almacenamiento, con el fin de hacer que el servicio ofrecido deje de estar disponible.&lt;br /&gt;
&lt;br /&gt;
Se dice que es '''distribuido''' cuando la carga de trabajo viene generada desde múltiples computadores.&lt;br /&gt;
&lt;br /&gt;
= Vulnerabilidad =&lt;br /&gt;
&lt;br /&gt;
Se trata de un defecto en el software o en el hardware, ya sea de diseño o implementación, que permite al atacante obtener algún tipo de rédito, tales como alterar y robar información, hacer que el sistema deje de estar disponible (ataque de denegación de servicio), instalar un virus o puerta trasera.&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n_en_la_administraci%C3%B3n_de_archivos&amp;diff=4374</id>
		<title>Introducción en la administración de archivos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n_en_la_administraci%C3%B3n_de_archivos&amp;diff=4374"/>
				<updated>2019-05-30T03:30:32Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Propietario, grupo y permisos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se trata de la parte del sistema operativo que se encarga de la organización de los ficheros en el sistema operativo. También se le conoce como 'sistema de ficheros'.&lt;br /&gt;
&lt;br /&gt;
= Estructura lógica del sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
== Fichero ==&lt;br /&gt;
&lt;br /&gt;
Un fichero es un contenedor de información que consta como mínimo de un nombre, además de una serie de atributos (llamados [https://es.wikipedia.org/wiki/Metadatos metadatos]) como la fecha de creación, última actualización, propietario, grupo entre otros; y un número de bloques asignados.&lt;br /&gt;
&lt;br /&gt;
== Directorio (Carpeta) ==&lt;br /&gt;
&lt;br /&gt;
Un directorio o carpeta es un contenedor de ficheros. Por lo general, disponen a su vez de dos pseudodirectorios denominados &amp;quot;.&amp;quot; y &amp;quot;..&amp;quot; que sirven como referencia al propio directorio y al directorio padre. De esta manera, los directorios se organizan en una estructura arbórea con una cierta raíz.&lt;br /&gt;
&lt;br /&gt;
== Árbol directorios ==&lt;br /&gt;
&lt;br /&gt;
La organización de los directorios y ficheros en los sistemas operativos modernos emplea una estructura arbórea en la que existe un directorio raíz del que penden todos los demás directorios y ficheros.&lt;br /&gt;
&lt;br /&gt;
                                         raíz&lt;br /&gt;
                                          /\&lt;br /&gt;
                                         /  \&lt;br /&gt;
                                        d1  d2&lt;br /&gt;
                                       / \    \&lt;br /&gt;
                                      f1  f2   d3&lt;br /&gt;
                                               /\&lt;br /&gt;
                                              /  \&lt;br /&gt;
                                             f3  f4&lt;br /&gt;
&lt;br /&gt;
En el caso de sistemas operativos tipo Unix, la raíz se identifica con el directorio /. Para sistemas operativos de tipo-Microsoft, existe un directorio raíz por unidad. Cada unidad se trata de un sistema de fichero independiente que se identifica mediante una letra seguida de dos puntos, por ejemplo '''C:\''' .&lt;br /&gt;
&lt;br /&gt;
== Propietario, grupo y permisos ==&lt;br /&gt;
&lt;br /&gt;
Todo fichero o directorio en un sistema operativo moderno dispone de al menos un propietario que define las acciones que se pueden realizar sobre los ficheros. Por lo general son las siguientes:&lt;br /&gt;
&lt;br /&gt;
* Lectura: Da la posibilidad de leer el contenido del fichero.&lt;br /&gt;
* Modificación: Da la posibilidad de modificar el contenido del fichero.&lt;br /&gt;
* Ejecución: Da la posibilidad de ejecutar el fichero.&lt;br /&gt;
&lt;br /&gt;
En general, este esquema se aplica al propietario, al grupo y al resto del mundo, de manera que el propietario de cualquier fichero o directorio establece los permisos. Por ejemplo, un fichero con un documento ofimático puede ser leído y modificado por el propietario y por el grupo, pero no por el resto del mundo.&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&lt;br /&gt;
  propietario     grupo    resto del mundo&lt;br /&gt;
      rwx          rwx          rwx &lt;br /&gt;
&lt;br /&gt;
  fichero.odt: rw------- (fichero openoffice con sólo lectura y escritura para el propietario)&lt;br /&gt;
  sudoku:      rwxr-xr-x (fichero ejecutable con permisos de lectura, modificación y ejecución para el propietario)&lt;br /&gt;
&lt;br /&gt;
El propietario, el grupo y los permisos asociados son metainformación que se almacena en el sistema de ficheros.&lt;br /&gt;
&lt;br /&gt;
== Directorio de trabajo actual ==&lt;br /&gt;
&lt;br /&gt;
Todo sistema de fichero dispone de un cursor que indica cuál es el directorio de trabajo actual. Este directorio de trabajo actual puede alterarse a través de la llamada al sistema 'sys_chdir'.&lt;br /&gt;
&lt;br /&gt;
== Ruta absoluta== &lt;br /&gt;
&lt;br /&gt;
Las rutas absolutas, o completas, señalan la ubicación de un archivo o directorio desde el directorio raíz del sistema de archivos.&lt;br /&gt;
Por ejemplo, es una ruta absoluta /home/dir/ff.txt, que señala la ubicación del archivo ff.txt desde la raíz del sistema de archivos.&lt;br /&gt;
&lt;br /&gt;
== Ruta relativa==&lt;br /&gt;
&lt;br /&gt;
Las rutas relativas señalan la ubicación de un archivo o directorio a partir del directorio de trabajo actual.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, es una ruta relativa dir/ff.txt que señala al ff.txt dentro del directorio dir en la ubicación actual. &lt;br /&gt;
En sistemas tipo UNIX, la ruta ~/ es una ruta relativa que lleva al directorio personal del usuario que ha insertado la ruta relativa; &lt;br /&gt;
por ejemplo, si el usuario Fulano tiene una imagen en su directorio personal, esta imagen podría tener dos rutas de acceso, una relativa y una absoluta:&lt;br /&gt;
-La absoluta: /home/fulano/imagen.jpg&lt;br /&gt;
-La relativa: ~/imagen.jpg&lt;br /&gt;
&lt;br /&gt;
Las rutas relativas utilizan dos símbolos especiales, un punto (.) y dos puntos seguidos (..), lo que significa el directorio actual y el directorio padre.&lt;br /&gt;
Los dos puntos seguidos se utilizan para subir en la jerarquía. Un único punto representa el directorio actual.&lt;br /&gt;
&lt;br /&gt;
= Gestión del sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
Un sistema de fichero se trata de la estructura lógica (mediante un tipo abstracto de datos como una tabla, una lista o un árbol) y el conjunto de mecanismos que se emplean para gestionar los bloques asignados a ficheros y los bloques libres.&lt;br /&gt;
&lt;br /&gt;
== Bloque ==&lt;br /&gt;
&lt;br /&gt;
La memoria disponible en un dispositivo de almacenamiento masivo se divide en porciones de igual tamaño denominados '''bloques'''. Dichos bloques se asignan completamente y en exclusividad a un fichero de manera que un fichero está compuesto por un conjunto de bloques.&lt;br /&gt;
&lt;br /&gt;
El tamaño de bloque es un parámetro que se establece en el tiempo de formateo. Por lo general, se emplean bloques de 4 KB y 8 KB dependiendo del tamaño de palabra del procesador. No obstante, es un parámetro configurable. En el caso de un sistema que tenga que alojar gran cantidad de ficheros muy pequeños, podría reducirse el tamaño de bloque para hacer un mejor aprovechamiento del espacio de almacenamiento en disco.&lt;br /&gt;
&lt;br /&gt;
*Aspectos relevantes en la elección del tamaño de los bloques:&lt;br /&gt;
&lt;br /&gt;
Podemos destacar los siguientes 4 aspectos:&lt;br /&gt;
&lt;br /&gt;
'''Desperdicio interno:'''&lt;br /&gt;
Cuanto mayor sean los bloques mayor desperdicio interno se producirá en el último bloque del fichero.&lt;br /&gt;
&lt;br /&gt;
'''Tiempos de espera:'''&lt;br /&gt;
Cuanto mayor sea el bloque menos bloques formarán los ficheros con lo que se reduce el numero de accesos al soporte y, en consecuencia, los tiempos de espera.&lt;br /&gt;
&lt;br /&gt;
'''Espacio intermedio:'''&lt;br /&gt;
Cuanto mayor sean los bloques mayor será el espacio necesario para mantenerlos cargados en memoria mientras se opera con ellos.&lt;br /&gt;
&lt;br /&gt;
'''Aprovechamiento de las operaciones de lectura y escritura:'''&lt;br /&gt;
Si el proceso no realiza accesos a memoria secuenciales, sino que son aleatorios, es muy probable que solo necesite unos pocos octetos de cada bloque del fichero. Sin embargo en cada lectura y escritura los bloques se leen o escriben completamente, lo que significa un desaprovechamiento de las operaciones de lectura y escritura.&lt;br /&gt;
&lt;br /&gt;
== Tabla de entrada de ficheros ==&lt;br /&gt;
&lt;br /&gt;
Todo directorio dispone de una tabla de entrada de ficheros. Por cada entrada existe al menos una referencia al primer bloque que forma parte de dicho fichero, así como otros atributos como el propietario del fichero, la fecha de último acceso, modificación, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Directorios2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cada tabla de entrada de ficheros ocupa como mínimo un bloque. Por cada entrada se almacena la siguiente información:&lt;br /&gt;
&lt;br /&gt;
* Nombre del fichero o directorio (tamaño variable)&lt;br /&gt;
* Fecha de creación y último acceso (entero sin signo de 64-bits)&lt;br /&gt;
* Propietario (entero sin signo de 32-bits para el identificador de usuario)&lt;br /&gt;
* Grupo (entero sin signo de 32-bits para el identificador de grupo)&lt;br /&gt;
* Permisos (entero sin signo de 16 bits que codifican los permisos).&lt;br /&gt;
&lt;br /&gt;
De esta manera, cada entrada ocupa un número de bytes. Suponiendo que toda entrada requiera 64 bytes, si se emplea un tamaño de bloque de 4 KB, con un bloque se podrían mantener hasta 64 entradas. En caso de que un directorio tuviera más entradas, serían necesarios más bloques para la tabla de entrada de ficheros.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Llamadas a sistema para manejo de archivos==&lt;br /&gt;
&lt;br /&gt;
El UNIX proporciona un conjunto de llamadas al sistema para la manipulación de archivos. &lt;br /&gt;
Todas las aplicaciones o utilidades que en UNIX trabajan con archivos están fundamentadas en estos servicios básicos. &lt;br /&gt;
La biblioteca estándar de C dispone de un conjunto de funciones para utilizar directamente estas llamadas al sistema,&lt;br /&gt;
proporcionando al programador la misma visión que sobre los recursos tiene el sistema operativo UNIX.&lt;br /&gt;
Dentro del kernel de Linux, este descriptor es manejado por un entero (del tipo C int) llamado el descriptor del archivo, abreviado fd.&lt;br /&gt;
Una gran parte de la programación del sistema Linux consiste en abrir, manipular, cerrar y usar descriptores de archivos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Llamada a sistema&lt;br /&gt;
! Número&lt;br /&gt;
! Descripción&lt;br /&gt;
|-&lt;br /&gt;
|-operaciones sobre ficheros-&lt;br /&gt;
|-&lt;br /&gt;
| sys_close&lt;br /&gt;
| 3&lt;br /&gt;
| cerrar un descriptor de archivo&lt;br /&gt;
|-&lt;br /&gt;
| sys_creat&lt;br /&gt;
| 85&lt;br /&gt;
| abrir archivo, y si no existe, crealo&lt;br /&gt;
|-&lt;br /&gt;
| sys_open&lt;br /&gt;
| 2&lt;br /&gt;
| abrir un archivo&lt;br /&gt;
|-&lt;br /&gt;
| sys_rename&lt;br /&gt;
| 82&lt;br /&gt;
| renombrar un archivo&lt;br /&gt;
|-&lt;br /&gt;
| sys_truncate &lt;br /&gt;
| 76&lt;br /&gt;
| truncar un archivo a una longitud especificada&lt;br /&gt;
|-&lt;br /&gt;
| sys_link&lt;br /&gt;
| 86&lt;br /&gt;
| crear un enlace simbolico o duro a un archivo&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| sys_unlink &lt;br /&gt;
| 87&lt;br /&gt;
| eliminar un archivo&lt;br /&gt;
|-&lt;br /&gt;
| sys_chdir&lt;br /&gt;
| 80&lt;br /&gt;
| cambiar directorio de trabajo actual (Cambia el Current Working Directory)&lt;br /&gt;
|-&lt;br /&gt;
| sys_chroot&lt;br /&gt;
| 161&lt;br /&gt;
| cambiar el directorio raíz (Sólo para el administrador)&lt;br /&gt;
|-&lt;br /&gt;
| sys_mkdir&lt;br /&gt;
| 83&lt;br /&gt;
| crea un directorio&lt;br /&gt;
|-&lt;br /&gt;
| sys_rmdir&lt;br /&gt;
| 84&lt;br /&gt;
| elimina un directorio (sólo si está vacío el directorio)&lt;br /&gt;
|-&lt;br /&gt;
| sys_stat&lt;br /&gt;
| 4&lt;br /&gt;
| obtener metadatos de archivo&lt;br /&gt;
|-&lt;br /&gt;
| sys_chmod&lt;br /&gt;
| 90&lt;br /&gt;
| cambiar los permisos de un archivo&lt;br /&gt;
|-&lt;br /&gt;
| sys_chown&lt;br /&gt;
| 92&lt;br /&gt;
| cambiar el propietario y grupo de un archivo&lt;br /&gt;
|-&lt;br /&gt;
| sys_utime&lt;br /&gt;
| 132&lt;br /&gt;
| Cambiar tiempos de último acceso y de modificación de un archivo&lt;br /&gt;
|-&lt;br /&gt;
| sys_getcwd&lt;br /&gt;
|&lt;br /&gt;
| Obtiene el directorio de trabajo actual (Current Working Directory)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
12.2 [[FAT | FAT]]&lt;br /&gt;
&lt;br /&gt;
== Material suplementario ==&lt;br /&gt;
&lt;br /&gt;
 Sistemas de ficheros por Daniel García [[Archivo:Sistemas-de-ficheros-fat-ext2-ext3-y-ext4.pdf]].&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Unidades_SSD&amp;diff=4373</id>
		<title>Unidades SSD</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Unidades_SSD&amp;diff=4373"/>
				<updated>2019-05-30T01:47:36Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Estructura hardware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Unidad de estado sólido (Solid State Drive, SSD)''' es un dispositivo de almacenamiento de datos hecho con componentes electrónicos. No tienen partes móviles y utilizan memoria Flash, que es similar a la tecnología que se emplea en dispositivos de almacenamiento portátiles USB (coloquialmente conocidos como ''pendrive''). Esta misma tecnología se puede emplear en unidades híbridas (SSHD) compuestas por SSD y disco duro mágnetico, que intentan compensar las limitaciones de capacidad de las SSD a la vez que se mejoran los tiempos de acceso a un precio inferior al SSD. Se tratan, por tanto, de memoria de almacenamiento no volátil.&lt;br /&gt;
&lt;br /&gt;
== Estructura hardware ==&lt;br /&gt;
&lt;br /&gt;
Su arquitectura emplea memoria no volátil Flash (tipo NAND). Además de una memoria DRAM volátil que se emplea como caché para amortiguar las escrituras directas sobre la memoria Flash, pues la vida de la memoria Flash está limitada por el número de escrituras que se realice, mientras que la DRAM no tiene este inconveniente, además de ser más lentas en las lecturas. Por tanto, la memoria DRAM se usa como zona intermedia en la que se mantienen los datos accedidos recientemente (ya se en lectura o escritura).&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ssdgrafico.jpg|320px|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
Los componentes clave de una SSD son el [[Estructura_típica_de_dispositivo_E/S|controlador]] y la memoria para almacenar los datos. &lt;br /&gt;
El controlador gestiona las operaciones de L/E al dispositivo y ofrece una interfaz (SATA) compatible con la de discos magnéticos.&lt;br /&gt;
El buffer es una memoria DRAM que actúa como almacenamiento intermedio entre el controlador y el array de memorias Flash, ya que las operaciones de escritura son lentas.&lt;br /&gt;
&lt;br /&gt;
Se transfieren bloques de datos que se almacenan en varias celdas flash.&lt;br /&gt;
&lt;br /&gt;
El dispositivo utiliza un condensador para retener energía suficiente como para volcar el buffer en el array de memorias en caso de pérdida repentina de la alimentación manteniendo así la integridad de los datos.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Ssdnand.jpg|350px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
==Técnica de Escritura y Lectura: ==&lt;br /&gt;
&lt;br /&gt;
La interfaz de cada celda flash es serie (8/16 bits). Un sector se escribe en paralelo disperso en varias celdas. Para escribir, la celda debe estar vacía, de lo contrario, habrá que borrarla previamente.&lt;br /&gt;
Para conseguir un mejor rendimiento, se escriben o se leen varias celdas simultáneamente, dividiendo los tiempos de transferencia por el número de celdas que se paralelizan.&lt;br /&gt;
&lt;br /&gt;
'''Particularidades unidades SSD:'''&lt;br /&gt;
&lt;br /&gt;
* El tamaño típico del “sector” es de 4 KB.&lt;br /&gt;
&lt;br /&gt;
* Para poder escribir, hay que borrar previamente.&lt;br /&gt;
&lt;br /&gt;
* Las celdas no se pueden borrar individualmente, por lo que son agrupadas en unidades de borrado. Estas unidades de borrado tienen un tamaño típico de 128KB-256KB.&lt;br /&gt;
&lt;br /&gt;
* Debemos tener en cuenta que el borrado de un sector, puede afectar a otros sectores y, si ya hay otros sectores en la misma unidad de borrado, hay que preservarlos:&lt;br /&gt;
&lt;br /&gt;
       Escritura = Lectura + Borrado + Modificación + Escritura&lt;br /&gt;
&lt;br /&gt;
* Soportan un número finito de borrados. Un número típico de ciclos de borrado/programación: 100.000.&lt;br /&gt;
&lt;br /&gt;
Las SSD tienen la misma interfaz SATA que los discos magnéticos, luego son compatibles con cualquier sistema de archivos válido para discos magnéticos. Pero, debido a la Amplificación de la escritura y a que cada celda flash admite un número finito de borrados, hay que intentar evitar usar repetidamente una misma celda.&lt;br /&gt;
&lt;br /&gt;
== SSD vs Disco Magnético: ==&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SSD-VS-HDD.jpg]]&lt;br /&gt;
&lt;br /&gt;
Fuente: Wikipedia en ingles, artículo [https://en.wikipedia.org/wiki/Solid-state_drive SSD].&lt;br /&gt;
&lt;br /&gt;
== Más información ==&lt;br /&gt;
&lt;br /&gt;
Enlace de Interés:&lt;br /&gt;
&lt;br /&gt;
https://www.cactus-tech.com/resources/blog/details/solid-state-drives-101&lt;br /&gt;
&lt;br /&gt;
11.3. [[Mejoras de tiempos de desplazamiento|Mejoras de tiempos de desplazamiento]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Unidades_SSD&amp;diff=4372</id>
		<title>Unidades SSD</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Unidades_SSD&amp;diff=4372"/>
				<updated>2019-05-30T01:45:55Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Estructura hardware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Unidad de estado sólido (Solid State Drive, SSD)''' es un dispositivo de almacenamiento de datos hecho con componentes electrónicos. No tienen partes móviles y utilizan memoria Flash, que es similar a la tecnología que se emplea en dispositivos de almacenamiento portátiles USB (coloquialmente conocidos como ''pendrive''). Esta misma tecnología se puede emplear en unidades híbridas (SSHD) compuestas por SSD y disco duro mágnetico, que intentan compensar las limitaciones de capacidad de las SSD a la vez que se mejoran los tiempos de acceso a un precio inferior al SSD. Se tratan, por tanto, de memoria de almacenamiento no volátil.&lt;br /&gt;
&lt;br /&gt;
== Estructura hardware ==&lt;br /&gt;
&lt;br /&gt;
Su arquitectura emplea memoria no volátil Flash (tipo NAND). Además de una memoria DRAM volátil que se emplea como caché para amortiguar las escrituras directas sobre la memoria Flash, pues la vida de la memoria Flash está limitada por el número de escrituras que se realice, mientras que la DRAM no tiene este inconveniente, además de ser más lentas que las lecturas. Por tanto, la memoria DRAM se usa como zona intermedia en la que se mantienen los datos accedidos recientemente (ya se en lectura o escritura).&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ssdgrafico.jpg|320px|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
Los componentes clave de una SSD son el [[Estructura_típica_de_dispositivo_E/S|controlador]] y la memoria para almacenar los datos. &lt;br /&gt;
El controlador gestiona las operaciones de L/E al dispositivo y ofrece una interfaz (SATA) compatible con la de discos magnéticos.&lt;br /&gt;
El buffer es una memoria DRAM que actúa como almacenamiento intermedio entre el controlador y el array de memorias Flash, ya que las operaciones de escritura son lentas.&lt;br /&gt;
&lt;br /&gt;
Se transfieren bloques de datos que se almacenan en varias celdas flash.&lt;br /&gt;
&lt;br /&gt;
El dispositivo utiliza un condensador para retener energía suficiente como para volcar el buffer en el array de memorias en caso de pérdida repentina de la alimentación manteniendo así la integridad de los datos.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Ssdnand.jpg|350px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
==Técnica de Escritura y Lectura: ==&lt;br /&gt;
&lt;br /&gt;
La interfaz de cada celda flash es serie (8/16 bits). Un sector se escribe en paralelo disperso en varias celdas. Para escribir, la celda debe estar vacía, de lo contrario, habrá que borrarla previamente.&lt;br /&gt;
Para conseguir un mejor rendimiento, se escriben o se leen varias celdas simultáneamente, dividiendo los tiempos de transferencia por el número de celdas que se paralelizan.&lt;br /&gt;
&lt;br /&gt;
'''Particularidades unidades SSD:'''&lt;br /&gt;
&lt;br /&gt;
* El tamaño típico del “sector” es de 4 KB.&lt;br /&gt;
&lt;br /&gt;
* Para poder escribir, hay que borrar previamente.&lt;br /&gt;
&lt;br /&gt;
* Las celdas no se pueden borrar individualmente, por lo que son agrupadas en unidades de borrado. Estas unidades de borrado tienen un tamaño típico de 128KB-256KB.&lt;br /&gt;
&lt;br /&gt;
* Debemos tener en cuenta que el borrado de un sector, puede afectar a otros sectores y, si ya hay otros sectores en la misma unidad de borrado, hay que preservarlos:&lt;br /&gt;
&lt;br /&gt;
       Escritura = Lectura + Borrado + Modificación + Escritura&lt;br /&gt;
&lt;br /&gt;
* Soportan un número finito de borrados. Un número típico de ciclos de borrado/programación: 100.000.&lt;br /&gt;
&lt;br /&gt;
Las SSD tienen la misma interfaz SATA que los discos magnéticos, luego son compatibles con cualquier sistema de archivos válido para discos magnéticos. Pero, debido a la Amplificación de la escritura y a que cada celda flash admite un número finito de borrados, hay que intentar evitar usar repetidamente una misma celda.&lt;br /&gt;
&lt;br /&gt;
== SSD vs Disco Magnético: ==&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SSD-VS-HDD.jpg]]&lt;br /&gt;
&lt;br /&gt;
Fuente: Wikipedia en ingles, artículo [https://en.wikipedia.org/wiki/Solid-state_drive SSD].&lt;br /&gt;
&lt;br /&gt;
== Más información ==&lt;br /&gt;
&lt;br /&gt;
Enlace de Interés:&lt;br /&gt;
&lt;br /&gt;
https://www.cactus-tech.com/resources/blog/details/solid-state-drives-101&lt;br /&gt;
&lt;br /&gt;
11.3. [[Mejoras de tiempos de desplazamiento|Mejoras de tiempos de desplazamiento]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Ssd_vs_hdd-1.jpg&amp;diff=4334</id>
		<title>Archivo:Ssd vs hdd-1.jpg</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Ssd_vs_hdd-1.jpg&amp;diff=4334"/>
				<updated>2019-05-18T18:25:51Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: Antsilgor subió una nueva versión de Archivo:Ssd vs hdd-1.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Ssd_vs_hdd-1.jpg&amp;diff=4333</id>
		<title>Archivo:Ssd vs hdd-1.jpg</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Ssd_vs_hdd-1.jpg&amp;diff=4333"/>
				<updated>2019-05-18T18:07:36Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n&amp;diff=4322</id>
		<title>Introducción</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n&amp;diff=4322"/>
				<updated>2019-04-27T20:03:03Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El administrador de memoria es la parte del sistema operativo que se encarga de gestionar la memoria principal existente en el sistema. Para ello, asigna zonas de memoria principal a cada uno de los procesos existentes en base a sus necesidades.&lt;br /&gt;
&lt;br /&gt;
Todo proceso, desde el punto de vista de la memoria, está compuesto de cuatro secciones:&lt;br /&gt;
&lt;br /&gt;
* '''Código''': Se trata de la sección de memoria que contiene el código de nuestro proceso, entendido como la sección de instrucciones que componen nuestro programa.&lt;br /&gt;
* '''Variables globales y constantes''': Esta sección incluye las constantes definidas en el código del programa. Además, incluyen también las variables globales, que se trata de aquellas que son accesibles desde cualquier función.&lt;br /&gt;
* '''Pila (''Stack'')''': Se trata de la sección de memoria que se emplea para reservar espacio a las variables locales, y en la invocación de funciones (en las que se carga la dirección de retorno con respecto al código, la dirección de memoria en la que se encuentra definida la función y los parámetros de dicha función).&lt;br /&gt;
* '''Montón (''Heap'')''': Es la sección de memoria que se reserva de manera dinámica mediante las llamadas malloc() y free() de la biblioteca estándar de C, que invocan a las llamadas al sistema brk() y mmap() cuando corresponde.&lt;br /&gt;
&lt;br /&gt;
Cuando se lanza un programa desde el lanzador de aplicaciones se hace uso de las llamadas al sistema ''fork'' y ''exec''. &lt;br /&gt;
&lt;br /&gt;
La llamada ''fork'' crea  una copia exacta del padre (salvo por el PID y la memoria que ocupa). Al proceso hijo se le facilita una copia de las variables del proceso padre y de los descriptores de fichero. &lt;br /&gt;
&lt;br /&gt;
La llamada al sistema ''exec'' reemplaza el código del proceso clon recién creado por el de un programa que se encuentra almacenado en un fichero. El administrador de memoria actúa ante estas llamadas al sistema reservando memoria para el nuevo proceso que se acaba de lanzar.&lt;br /&gt;
&lt;br /&gt;
En este tema, por razones de simplicidad, vamos a considerar que la administración de memoria se realiza de manera que '''todo''' el espacio de memoria ocupa una zona de memoria contigua. Es decir, no vamos a poder dividir las diferentes secciones de manera que se repartan en diferentes zonas de memoria que cuyo espacio de direccionamiento no sea consecutivo. No obstante, los sistemas operativos modernos '''no''' emplean las estrategias de asignación que vamos a ver a continuación:&lt;br /&gt;
&lt;br /&gt;
* [[SO multiprogramables con particiones variables|Administración de memoria en sistemas operativos multiprogramables con particiones variables]]&lt;br /&gt;
&lt;br /&gt;
Para más información, se puede consultar [https://stackoverflow.com/questions/6988487/what-does-the-brk-system-call-do|este enlace a stack overflow].&lt;br /&gt;
&lt;br /&gt;
8.2 [[SO_multiprogramables_con_particiones_variables | SO multiprogramables con particiones variables]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n&amp;diff=4321</id>
		<title>Introducción</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n&amp;diff=4321"/>
				<updated>2019-04-27T20:02:01Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El administrador de memoria es la parte del sistema operativo que se encarga de gestionar la memoria principal existente en el sistema. Para ello, asigna zonas de memoria principal a cada uno de los procesos existentes en base a sus necesidades.&lt;br /&gt;
&lt;br /&gt;
Todo proceso, desde el punto de vista de la memoria, está compuesto de cuatro secciones:&lt;br /&gt;
&lt;br /&gt;
* '''Código''': Se trata de la sección de memoria que contiene el código de nuestro proceso, entendido como la sección de instrucciones que componen nuestro programa.&lt;br /&gt;
* '''Variables globales y constantes''': Esta sección incluye las constantes definidas en el código del programa. Además, incluyen también las variables globales, que se trata de aquellas que son accesibles desde cualquier función.&lt;br /&gt;
* '''Pila (''Stack'')''': Se trata de la sección de memoria que se emplea para reservar espacio a las variables locales, y en la invocación de funciones (en las que se carga la dirección de retorno con respecto al código, la dirección de memoria en la que se encuentra definida la función y los parámetros de dicha función).&lt;br /&gt;
* '''Montón (''Heap'')''': Es la sección de memoria que se reserva de manera dinámica mediante las llamadas malloc() y free() de la biblioteca estándar de C, que invocan a las llamadas al sistema brk() y mmap() cuando corresponde.&lt;br /&gt;
&lt;br /&gt;
Cuando se lanza un programa desde el lanzador de aplicaciones se hace uso de las llamadas al sistema ''fork'' y ''exec''. &lt;br /&gt;
La llamada ''fork'' crea  una copia exacta del padre (salvo por el PID y la memoria que ocupa). Al proceso hijo se le facilita una copia de las variables del proceso padre y de los descriptores de fichero. &lt;br /&gt;
La llamada al sistema ''exec'' reemplaza el código del proceso clon recién creado por el de un programa que se encuentra almacenado en un fichero. El administrador de memoria actúa ante estas llamadas al sistema reservando memoria para el nuevo proceso que se acaba de lanzar.&lt;br /&gt;
&lt;br /&gt;
En este tema, por razones de simplicidad, vamos a considerar que la administración de memoria se realiza de manera que '''todo''' el espacio de memoria ocupa una zona de memoria contigua. Es decir, no vamos a poder dividir las diferentes secciones de manera que se repartan en diferentes zonas de memoria que cuyo espacio de direccionamiento no sea consecutivo. No obstante, los sistemas operativos modernos '''no''' emplean las estrategias de asignación que vamos a ver a continuación:&lt;br /&gt;
&lt;br /&gt;
* [[SO multiprogramables con particiones variables|Administración de memoria en sistemas operativos multiprogramables con particiones variables]]&lt;br /&gt;
&lt;br /&gt;
Para más información, se puede consultar [https://stackoverflow.com/questions/6988487/what-does-the-brk-system-call-do|este enlace a stack overflow].&lt;br /&gt;
&lt;br /&gt;
8.2 [[SO_multiprogramables_con_particiones_variables | SO multiprogramables con particiones variables]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n&amp;diff=4320</id>
		<title>Introducción</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n&amp;diff=4320"/>
				<updated>2019-04-27T20:01:07Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El administrador de memoria es la parte del sistema operativo que se encarga de gestionar la memoria principal existente en el sistema. Para ello, asigna zonas de memoria principal a cada uno de los procesos existentes en base a sus necesidades.&lt;br /&gt;
&lt;br /&gt;
Todo proceso, desde el punto de vista de la memoria, está compuesto de cuatro secciones:&lt;br /&gt;
&lt;br /&gt;
* '''Código''': Se trata de la sección de memoria que contiene el código de nuestro proceso, entendido como la sección de instrucciones que componen nuestro programa.&lt;br /&gt;
* '''Variables globales y constantes''': Esta sección incluye las constantes definidas en el código del programa. Además, incluyen también las variables globales, que se trata de aquellas que son accesibles desde cualquier función.&lt;br /&gt;
* '''Pila (''Stack'')''': Se trata de la sección de memoria que se emplea para reservar espacio a las variables locales, y en la invocación de funciones (en las que se carga la dirección de retorno con respecto al código, la dirección de memoria en la que se encuentra definida la función y los parámetros de dicha función).&lt;br /&gt;
* '''Montón (''Heap'')''': Es la sección de memoria que se reserva de manera dinámica mediante las llamadas malloc() y free() de la biblioteca estándar de C, que invocan a las llamadas al sistema brk() y mmap() cuando corresponde.&lt;br /&gt;
&lt;br /&gt;
Cuando se lanza un programa desde el lanzador de aplicaciones se hace uso de las llamadas al sistema ''fork'' y ''exec''. La llamada ''fork'' crea  una copia exacta del padre (salvo por el PID y la memoria que ocupa). Al proceso hijo se le facilita una copia de las variables del proceso padre y de los descriptores de fichero. La llamada al sistema ''exec'' reemplaza el código del proceso clon recién creado por el de un programa que se encuentra almacenado en un fichero. El administrador de memoria actúa ante estas llamadas al sistema reservando memoria para el nuevo proceso que se acaba de lanzar.&lt;br /&gt;
&lt;br /&gt;
En este tema, por razones de simplicidad, vamos a considerar que la administración de memoria se realiza de manera que '''todo''' el espacio de memoria ocupa una zona de memoria contigua. Es decir, no vamos a poder dividir las diferentes secciones de manera que se repartan en diferentes zonas de memoria que cuyo espacio de direccionamiento no sea consecutivo. No obstante, los sistemas operativos modernos '''no''' emplean las estrategias de asignación que vamos a ver a continuación:&lt;br /&gt;
&lt;br /&gt;
* [[SO multiprogramables con particiones variables|Administración de memoria en sistemas operativos multiprogramables con particiones variables]]&lt;br /&gt;
&lt;br /&gt;
Para más información, se puede consultar [https://stackoverflow.com/questions/6988487/what-does-the-brk-system-call-do|este enlace a stack overflow].&lt;br /&gt;
&lt;br /&gt;
8.2 [[SO_multiprogramables_con_particiones_variables | SO multiprogramables con particiones variables]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n&amp;diff=4319</id>
		<title>Introducción</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Introducci%C3%B3n&amp;diff=4319"/>
				<updated>2019-04-27T19:43:40Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El administrador de memoria es la parte del sistema operativo que se encarga de gestionar la memoria principal existente en el sistema. Para ello, asigna zonas de memoria principal a cada uno de los procesos existentes en base a sus necesidades.&lt;br /&gt;
&lt;br /&gt;
Todo proceso, desde el punto de vista de la memoria, está compuesto de cuatro secciones:&lt;br /&gt;
&lt;br /&gt;
* '''Código''': Se trata de la sección de memoria que contiene el código de nuestro proceso, entendido como la sección de instrucciones que componen nuestro programa.&lt;br /&gt;
* '''Variables globales y constantes''': Esta sección incluye las constantes definidas en el código del programa. Además, incluyen también las variables globales, que se trata de aquellas que son accesibles desde cualquier función.&lt;br /&gt;
* '''Pila (''Stack'')''': Se trata de la sección de memoria que se emplea para reservar espacio a las variables locales, y en la invocación de funciones (en las que se carga la dirección de retorno con respecto al código, la dirección de memoria en la que se encuentra definida la función y los parámetros de dicha función).&lt;br /&gt;
* '''Montón (''Heap'')''': Es la sección de memoria que se reserva de manera dinámica mediante las llamadas malloc() y free() de la biblioteca estándar de C, que invocan a las llamadas al sistema brk() y mmap() cuando corresponde.&lt;br /&gt;
&lt;br /&gt;
Cuando se lanza un programa desde el lanzador de aplicaciones se hace uso de las llamadas al sistema ''fork'' y ''exec''. La llamada ''fork'' crea un proceso clon del lanzador de aplicaciones, mientras que la llamada al sistema ''exec'' reemplaza el código del proceso clon recién creado por el de un programa que se encuentra almacenado en un fichero. El administrador de memoria actúa ante estas llamadas al sistema reservando memoria para el nuevo proceso que se acaba de lanzar.&lt;br /&gt;
&lt;br /&gt;
En este tema, por razones de simplicidad, vamos a considerar que la administración de memoria se realiza de manera que '''todo''' el espacio de memoria ocupa una zona de memoria contigua. Es decir, no vamos a poder dividir las diferentes secciones de manera que se repartan en diferentes zonas de memoria que cuyo espacio de direccionamiento no sea consecutivo. No obstante, los sistemas operativos modernos '''no''' emplean las estrategias de asignación que vamos a ver a continuación:&lt;br /&gt;
&lt;br /&gt;
* [[SO multiprogramables con particiones variables|Administración de memoria en sistemas operativos multiprogramables con particiones variables]]&lt;br /&gt;
&lt;br /&gt;
Para más información, se puede consultar [https://stackoverflow.com/questions/6988487/what-does-the-brk-system-call-do|este enlace a stack overflow].&lt;br /&gt;
&lt;br /&gt;
8.2 [[SO_multiprogramables_con_particiones_variables | SO multiprogramables con particiones variables]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Mecanismos_de_sincronizaci%C3%B3n&amp;diff=4317</id>
		<title>Mecanismos de sincronización</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Mecanismos_de_sincronizaci%C3%B3n&amp;diff=4317"/>
				<updated>2019-04-07T20:21:04Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Optimistas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Optimistas =&lt;br /&gt;
&lt;br /&gt;
Este mecanismo debe emplearse si el programador considera que la frecuencia de acceso a un recurso compartido es baja, es decir, que supone que la probabilidad de coincidencia de dos o más procesos al recurso compartido es baja.&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo muestra el código ejecutado por dos hilos: h&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt; y h&amp;lt;sub&amp;gt;y&amp;lt;/sub&amp;gt; de un mismo proceso.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int tabla[3] = { 100, 101, 102 };  /* tabla compartida por ambos hilos hx y hy. */&lt;br /&gt;
&lt;br /&gt;
/* actividad del hilo */&lt;br /&gt;
void *actividad_hilo(void *ptr)&lt;br /&gt;
{&lt;br /&gt;
        int i;&lt;br /&gt;
&lt;br /&gt;
        while(1) {&lt;br /&gt;
            for (i=0; i&amp;lt;3; i++) {&lt;br /&gt;
                  actualiza_tabla(i);&lt;br /&gt;
                  sleep((random() % 10) + 1);    /* hilo pasa a estado bloqueado durante 1 a 10 segundos. */&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return NULL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
        pthread_t hilo1, hilo2;&lt;br /&gt;
&lt;br /&gt;
        pthread_create(&amp;amp;hilo1, NULL, actividad_hilo, NULL);  /* creación hilo&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;. */&lt;br /&gt;
        pthread_create(&amp;amp;hilo2, NULL, actividad_hilo, NULL);  /* creación hilo&amp;lt;sub&amp;gt;y&amp;lt;/sub&amp;gt;. */&lt;br /&gt;
        pthread_join(hilo1, NULL);&lt;br /&gt;
        pthread_join(hilo2, NULL);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void actualiza_tabla(int i) {&lt;br /&gt;
        int tmp;&lt;br /&gt;
retry:&lt;br /&gt;
        tmp = tabla[i];            /* almaceno el valor de la variable compartida en una temporal. */&lt;br /&gt;
        tmp++;                     /* actualizo la varible temporal. */&lt;br /&gt;
        if (tabla[i]+1 != tmp) {   /* compruebo si la variable compartida ha sido modificada */&lt;br /&gt;
            goto retry;            /* mientras operaba con la variable temporal. */&lt;br /&gt;
        }&lt;br /&gt;
        tabla[i]=tmp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los inconvenientes de este tipo de mecanismo son dos:&lt;br /&gt;
&lt;br /&gt;
* Se consume más memoria, pues hay que realizar una copia del recurso compartido para efectuar la actualización.&lt;br /&gt;
* En situaciones de coincidencia, se tiene que volver a realizar la operación, por tanto, se desperdician recursos de procesamiento.&lt;br /&gt;
&lt;br /&gt;
En base al ejemplo anterior, hay que garantizar que la operación de comprobación y actualización es '''atómica'''. Se dice que una operación es '''atómica''' cuando es indivisible, es decir, que no quedamos en una situación intermedia al ejecutar dicha operación. Los procesadores incluyen una función llamada ''Test and Set'' (TAS) que nos permite ejecutar dos órdenes de manera '''atómica'''. Al ser una instrucción máquina el procesador nos garantiza que ningún proceso va a interrumpirla, evitando así la '''condición de carrera'''. Por ejemplo en x86 tenemos la instrucción ''LOCK BTS'' (Bit Test and Set) que nos permite añadir una cadena de bits para que se ejecute de manera '''atómica'''.&lt;br /&gt;
&lt;br /&gt;
Como ventaja, este tipo de mecanismo nos ofrece un mayor grado de paralelismo, por tanto, una mayor tasa de transferencia, siempre que se emplee en una situación donde la frecuencia de concurrencia sea baja.&lt;br /&gt;
&lt;br /&gt;
Por último, si el programador ha empleado una aproximación optimista para una situación en la que la frecuencia de coincidencia es alta, podría darse el caso de que un hilo no progrese en su ejecución de manera indefinida, al tener que volver a reintentar la actualización una y otra vez hasta conseguirlo sin que haya concurrencia.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un mecanismo de sincronización optimista funciona de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
* Paso 1. Realiza una copia del estado en el que está el recurso compartido.&lt;br /&gt;
* Paso 2. Opera con esa copia.&lt;br /&gt;
* Paso 3. Compruebo si mi copia alterada coincide con el original aplicándole también el tratamiento.&lt;br /&gt;
&lt;br /&gt;
= Pesimistas =&lt;br /&gt;
Este mecanismo debe emplearse si se considera que la frecuencia de acceso al recurso compartido es alta.&lt;br /&gt;
&lt;br /&gt;
En este mecanismo disponemos de tres partes:&lt;br /&gt;
&lt;br /&gt;
* El protocolo de entrada, en el que se emplea un mecanismo que no permite continuar con la ejecución si otro u otros procesos están accediendo al recurso compartido.&lt;br /&gt;
* La sección crítica, en el que se realizan las operaciones pertinentes con el recurso compartido.&lt;br /&gt;
* El protocolo de salida, en el que se vuelve a permitir el acceso al recurso compartido.&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo muestra cómo se implementa el control de concurrencia pesimista para 2 hilos, h&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt; y h&amp;lt;sub&amp;gt;y&amp;lt;/sub&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
   int compartida = 1;&lt;br /&gt;
   protocolo_de_entrada();     /* no permito acceso a variable compartida. */&lt;br /&gt;
   compartida++;               /* sección crítica: actualización de la variable compartida. */&lt;br /&gt;
   protocolo_de_salida();      /* vuelvo a permitir acceso a la variable compartida. */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los protocolos de entrada y salida son, generalmente, operaciones costosas en términos de recursos de procesamiento, pues requieren el uso de instrucciones atómicas cuyo tiempo de ejecución es alto.&lt;br /&gt;
&lt;br /&gt;
Por último, se podría emplear un control de concurrencia pesimista para resolver un problema que se resuelve con un control de concurrencia optimista, pero no al revés.&lt;br /&gt;
&lt;br /&gt;
== Implementación del control de concurrencia pesimista ==&lt;br /&gt;
&lt;br /&gt;
El control de concurrencia pesimista se puede implementar de dos formas mediante:&lt;br /&gt;
&lt;br /&gt;
* Espera ocupada o activa, mediante '''cerrojos'''. En este mecanismo se comprueba continuamente la condición que permite franquear en el protocolo de entrada, por tanto, el proceso permanece en estado activo comprobando continuadamente la condición que le permite progresar en su ejecución, tiempo que está siendo desaprovechado por el procesador.&lt;br /&gt;
* Espera no ocupada o bloqueante, mediante '''semáforos''', '''monitores''' o '''mensajería'''. Estos mecanismos hacen que el proceso pase a estado bloqueado cuando no se puede franquear el protocolo de entrada, por tanto, al quedar un proceso que no puede progresar en estado bloqueado, el planificador de procesos tiene que seleccionar a otro proceso.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nota aclarativa: Definición de ''espera ocupada o activa''&lt;br /&gt;
&lt;br /&gt;
Esperar a que algo ocurra realizando continuas comprobaciones.&lt;br /&gt;
Ejemplo:&lt;br /&gt;
            …&lt;br /&gt;
            variable= 0;&lt;br /&gt;
            while(variable==0);&lt;br /&gt;
            …&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6.3[[Cerrojos | Cerrojos]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Cerrojos&amp;diff=4316</id>
		<title>Cerrojos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Cerrojos&amp;diff=4316"/>
				<updated>2019-04-06T17:39:01Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Cerrojos mediante instrucciones atómicas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ejemplo de implementación =&lt;br /&gt;
&lt;br /&gt;
El siguiente código sería un posible ejemplo del uso de control de concurrencia mediante cerrojos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int cerrojo = 0;      /* Inicializamos la variable cerrojo. Esto sería sólo válido para&lt;br /&gt;
                         hilos, ya que los procesos no comparten espacio de memoria. La variable se inicializa FUERA de los hilos.&lt;br /&gt;
                         Del while en adelante, ya es código perteneciente a los hilos en ejecución. */&lt;br /&gt;
&lt;br /&gt;
while(cerrojo == 1);  // Protocolo de               &lt;br /&gt;
cerrojo = 1;          // entrada&lt;br /&gt;
&lt;br /&gt;
...                   // Sección crítica&lt;br /&gt;
&lt;br /&gt;
cerrojo = 0;          // Protocolo de salida&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sin embargo, esto es problemático: Supongamos que tenemos únicamente un proceso con dos hilos (Hx y Hy) y el planificador retira el hilo Hx justo antes de ejecutarse la instrucción ''cerrojo = 1;''. El hilo Hy ejecuta su código, entra en la sección crítica (Esto puede ocurrir ya que cerrojo sigue a 0) y el planificador le retira el uso del procesador dentro de ésta. A continuación, se le vuelve a asignar el procesador a Hx.&lt;br /&gt;
&lt;br /&gt;
De esta forma, tenemos a dos hilos ejecutando código de la sección crítica. Para evitar este problema, debemos implementar los protocolos de entrada y salida de forma que se ejecuten en una sola instrucción, con lo cual o el planificador retira el uso del procesador antes de esta instrucción, o sino lo retira después de haberla ejecutado.&lt;br /&gt;
&lt;br /&gt;
= Cerrojos mediante instrucciones atómicas =&lt;br /&gt;
&lt;br /&gt;
Podemos implementar cerrojos mediante instrucciones especiales de comprobación y puesta a 0 y 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int cerrojo = 0;&lt;br /&gt;
&lt;br /&gt;
void lock() {&lt;br /&gt;
    while (__sync_lock_test_and_set(&amp;amp;cerrojo, 1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void unlock() {&lt;br /&gt;
    __sync_lock_release(&amp;amp;cerrojo);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El método lock comprueba mediante __sync_locktest_and_set(&amp;amp;cerrojo,1) el valor del cerrojo: si es 0, cambia el valor del cerrojo a 1 y devuelve 0, por tanto, se sale del while y entra en sección crítica; si es 1, devuelve 1 y continúa comprobando el valor, por tanto, no entra en la sección crítica hasta que cambie el valor del cerrojo.&lt;br /&gt;
&lt;br /&gt;
El método unlock, mediante _sync_lock_release(&amp;amp;cerrojo), cambia el valor del cerrojo a 0.&lt;br /&gt;
&lt;br /&gt;
* http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html&lt;br /&gt;
* http://stackoverflow.com/questions/1383363/is-my-spin-lock-implementation-correct-and-optimal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6.4[[Ejercicio_de_concurrencia_de_procesos | Ejercicio de concurrencia de procesos]]&lt;br /&gt;
&lt;br /&gt;
6.5[[Semáforos | Semáforos]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Cerrojos&amp;diff=4315</id>
		<title>Cerrojos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Cerrojos&amp;diff=4315"/>
				<updated>2019-04-06T17:38:31Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Cerrojos mediante instrucciones atómicas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ejemplo de implementación =&lt;br /&gt;
&lt;br /&gt;
El siguiente código sería un posible ejemplo del uso de control de concurrencia mediante cerrojos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int cerrojo = 0;      /* Inicializamos la variable cerrojo. Esto sería sólo válido para&lt;br /&gt;
                         hilos, ya que los procesos no comparten espacio de memoria. La variable se inicializa FUERA de los hilos.&lt;br /&gt;
                         Del while en adelante, ya es código perteneciente a los hilos en ejecución. */&lt;br /&gt;
&lt;br /&gt;
while(cerrojo == 1);  // Protocolo de               &lt;br /&gt;
cerrojo = 1;          // entrada&lt;br /&gt;
&lt;br /&gt;
...                   // Sección crítica&lt;br /&gt;
&lt;br /&gt;
cerrojo = 0;          // Protocolo de salida&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sin embargo, esto es problemático: Supongamos que tenemos únicamente un proceso con dos hilos (Hx y Hy) y el planificador retira el hilo Hx justo antes de ejecutarse la instrucción ''cerrojo = 1;''. El hilo Hy ejecuta su código, entra en la sección crítica (Esto puede ocurrir ya que cerrojo sigue a 0) y el planificador le retira el uso del procesador dentro de ésta. A continuación, se le vuelve a asignar el procesador a Hx.&lt;br /&gt;
&lt;br /&gt;
De esta forma, tenemos a dos hilos ejecutando código de la sección crítica. Para evitar este problema, debemos implementar los protocolos de entrada y salida de forma que se ejecuten en una sola instrucción, con lo cual o el planificador retira el uso del procesador antes de esta instrucción, o sino lo retira después de haberla ejecutado.&lt;br /&gt;
&lt;br /&gt;
= Cerrojos mediante instrucciones atómicas =&lt;br /&gt;
&lt;br /&gt;
Podemos implementar cerrojos mediante instrucciones especiales de comprobación y puesta a 0 y 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int cerrojo = 0;&lt;br /&gt;
&lt;br /&gt;
void lock() {&lt;br /&gt;
    while (__sync_lock_test_and_set(&amp;amp;cerrojo, 1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void unlock() {&lt;br /&gt;
    __sync_lock_release(&amp;amp;cerrojo);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El método lock comprueba mediante __sync_locktest_and_set(&amp;amp;cerrojo,1) el valor del cerrojo: si es 0, cambia el valor del cerrojo a 1 y devuelve 0, por tanto, se sale del while y entra en sección crítica; si es 1, devuelve 1 y continúa comprobando el valor, por tanto, no entra en la '''sección crítica''' hasta que cambie el valor del cerrojo.&lt;br /&gt;
&lt;br /&gt;
El método unlock, mediante _sync_lock_release(&amp;amp;cerrojo), cambia el valor del cerrojo a 0.&lt;br /&gt;
&lt;br /&gt;
* http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html&lt;br /&gt;
* http://stackoverflow.com/questions/1383363/is-my-spin-lock-implementation-correct-and-optimal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6.4[[Ejercicio_de_concurrencia_de_procesos | Ejercicio de concurrencia de procesos]]&lt;br /&gt;
&lt;br /&gt;
6.5[[Semáforos | Semáforos]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Mecanismos_de_sincronizaci%C3%B3n&amp;diff=4314</id>
		<title>Mecanismos de sincronización</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Mecanismos_de_sincronizaci%C3%B3n&amp;diff=4314"/>
				<updated>2019-04-06T15:45:37Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Optimistas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Optimistas =&lt;br /&gt;
&lt;br /&gt;
Este mecanismo debe emplearse si el programador considera que la frecuencia de acceso a un recurso compartido es baja, es decir, que supone que la probabilidad de coincidencia de dos o más procesos al recurso compartido es baja.&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo muestra el código ejecutado por dos hilos: h&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt; y h&amp;lt;sub&amp;gt;y&amp;lt;/sub&amp;gt; de un mismo proceso.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int tabla[3] = { 100, 101, 102 };  /* tabla compartida por ambos hilos hx y hy. */&lt;br /&gt;
&lt;br /&gt;
/* actividad del hilo */&lt;br /&gt;
void *actividad_hilo(void *ptr)&lt;br /&gt;
{&lt;br /&gt;
        int i;&lt;br /&gt;
&lt;br /&gt;
        while(1) {&lt;br /&gt;
            for (i=0; i&amp;lt;3; i++) {&lt;br /&gt;
                  actualiza_tabla(i);&lt;br /&gt;
                  sleep((random() % 10) + 1);    /* hilo pasa a estado bloqueado durante 1 a 10 segundos. */&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return NULL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
        pthread_t hilo1, hilo2;&lt;br /&gt;
&lt;br /&gt;
        pthread_create(&amp;amp;hilo1, NULL, actividad_hilo, NULL);  /* creación hilo&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;. */&lt;br /&gt;
        pthread_create(&amp;amp;hilo2, NULL, actividad_hilo, NULL);  /* creación hilo&amp;lt;sub&amp;gt;y&amp;lt;/sub&amp;gt;. */&lt;br /&gt;
        pthread_join(hilo1, NULL);&lt;br /&gt;
        pthread_join(hilo2, NULL);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void actualiza_tabla(int i) {&lt;br /&gt;
        int tmp;&lt;br /&gt;
retry:&lt;br /&gt;
        tmp = tabla[i];            /* almaceno el valor de la variable compartida en una temporal. */&lt;br /&gt;
        tmp++;                     /* actualizo la varible temporal. */&lt;br /&gt;
        if (tabla[i]+1 != tmp) {   /* compruebo si la variable compartida ha sido modificada */&lt;br /&gt;
            goto retry;            /* mientras operaba con la variable temporal. */&lt;br /&gt;
        }&lt;br /&gt;
        tabla[i]=tmp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los inconvenientes de este tipo de mecanismo son dos:&lt;br /&gt;
&lt;br /&gt;
* Se consume más memoria, pues hay que realizar una copia del recurso compartido para efectuar la actualización.&lt;br /&gt;
* En situaciones de coincidencia, se tiene que volver a realizar la operación, por tanto, se desperdician recursos de procesamiento.&lt;br /&gt;
&lt;br /&gt;
En base al ejemplo anterior, hay que garantizar que la operación de comprobación y actualización es '''atómica'''. Se dice que una operación es '''atómica''' cuando es indivisible, es decir, que no quedamos en una situación intermedia al ejecutar dicha operación. Los procesadores incluyen una función llamada ''Test and Set'' (TAS) que nos permite ejecutar dos órdenes de manera '''atómica'''. Al ser una instrucción máquina el procesador nos garantiza que ningún proceso va a interrumpirla, evitando así la '''condición de carrera'''.&lt;br /&gt;
&lt;br /&gt;
Como ventaja, este tipo de mecanismo nos ofrece un mayor grado de paralelismo, por tanto, una mayor tasa de transferencia, siempre que se emplee en una situación donde la frecuencia de concurrencia sea baja.&lt;br /&gt;
&lt;br /&gt;
Por último, si el programador ha empleado una aproximación optimista para una situación en la que la frecuencia de coincidencia es alta, podría darse el caso de que un hilo no progrese en su ejecución de manera indefinida, al tener que volver a reintentar la actualización una y otra vez hasta conseguirlo sin que haya concurrencia.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un mecanismo de sincronización optimista funciona de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
* Paso 1. Realiza una copia del estado en el que está el recurso compartido.&lt;br /&gt;
* Paso 2. Opera con esa copia.&lt;br /&gt;
* Paso 3. Compruebo si mi copia alterada coincide con el original aplicándole también el tratamiento.&lt;br /&gt;
&lt;br /&gt;
= Pesimistas =&lt;br /&gt;
Este mecanismo debe emplearse si se considera que la frecuencia de acceso al recurso compartido es alta.&lt;br /&gt;
&lt;br /&gt;
En este mecanismo disponemos de tres partes:&lt;br /&gt;
&lt;br /&gt;
* El protocolo de entrada, en el que se emplea un mecanismo que no permite continuar con la ejecución si otro u otros procesos están accediendo al recurso compartido.&lt;br /&gt;
* La sección crítica, en el que se realizan las operaciones pertinentes con el recurso compartido.&lt;br /&gt;
* El protocolo de salida, en el que se vuelve a permitir el acceso al recurso compartido.&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo muestra cómo se implementa el control de concurrencia pesimista para 2 hilos, h&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt; y h&amp;lt;sub&amp;gt;y&amp;lt;/sub&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
   int compartida = 1;&lt;br /&gt;
   protocolo_de_entrada();     /* no permito acceso a variable compartida. */&lt;br /&gt;
   compartida++;               /* sección crítica: actualización de la variable compartida. */&lt;br /&gt;
   protocolo_de_salida();      /* vuelvo a permitir acceso a la variable compartida. */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los protocolos de entrada y salida son, generalmente, operaciones costosas en términos de recursos de procesamiento, pues requieren el uso de instrucciones atómicas cuyo tiempo de ejecución es alto.&lt;br /&gt;
&lt;br /&gt;
Por último, se podría emplear un control de concurrencia pesimista para resolver un problema que se resuelve con un control de concurrencia optimista, pero no al revés.&lt;br /&gt;
&lt;br /&gt;
== Implementación del control de concurrencia pesimista ==&lt;br /&gt;
&lt;br /&gt;
El control de concurrencia pesimista se puede implementar de dos formas mediante:&lt;br /&gt;
&lt;br /&gt;
* Espera ocupada o activa, mediante '''cerrojos'''. En este mecanismo se comprueba continuamente la condición que permite franquear en el protocolo de entrada, por tanto, el proceso permanece en estado activo comprobando continuadamente la condición que le permite progresar en su ejecución, tiempo que está siendo desaprovechado por el procesador.&lt;br /&gt;
* Espera no ocupada o bloqueante, mediante '''semáforos''', '''monitores''' o '''mensajería'''. Estos mecanismos hacen que el proceso pase a estado bloqueado cuando no se puede franquear el protocolo de entrada, por tanto, al quedar un proceso que no puede progresar en estado bloqueado, el planificador de procesos tiene que seleccionar a otro proceso.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nota aclarativa: Definición de ''espera ocupada o activa''&lt;br /&gt;
&lt;br /&gt;
Esperar a que algo ocurra realizando continuas comprobaciones.&lt;br /&gt;
Ejemplo:&lt;br /&gt;
            …&lt;br /&gt;
            variable= 0;&lt;br /&gt;
            while(variable==0);&lt;br /&gt;
            …&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6.3[[Cerrojos | Cerrojos]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Mecanismos_de_sincronizaci%C3%B3n&amp;diff=4313</id>
		<title>Mecanismos de sincronización</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Mecanismos_de_sincronizaci%C3%B3n&amp;diff=4313"/>
				<updated>2019-04-06T15:44:35Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Optimistas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Optimistas =&lt;br /&gt;
&lt;br /&gt;
Este mecanismo debe emplearse si el programador considera que la frecuencia de acceso a un recurso compartido es baja, es decir, que supone que la probabilidad de coincidencia de dos o más procesos al recurso compartido es baja.&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo muestra el código ejecutado por dos hilos: h&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt; y h&amp;lt;sub&amp;gt;y&amp;lt;/sub&amp;gt; de un mismo proceso.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int tabla[3] = { 100, 101, 102 };  /* tabla compartida por ambos hilos hx y hy. */&lt;br /&gt;
&lt;br /&gt;
/* actividad del hilo */&lt;br /&gt;
void *actividad_hilo(void *ptr)&lt;br /&gt;
{&lt;br /&gt;
        int i;&lt;br /&gt;
&lt;br /&gt;
        while(1) {&lt;br /&gt;
            for (i=0; i&amp;lt;3; i++) {&lt;br /&gt;
                  actualiza_tabla(i);&lt;br /&gt;
                  sleep((random() % 10) + 1);    /* hilo pasa a estado bloqueado durante 1 a 10 segundos. */&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return NULL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
        pthread_t hilo1, hilo2;&lt;br /&gt;
&lt;br /&gt;
        pthread_create(&amp;amp;hilo1, NULL, actividad_hilo, NULL);  /* creación hilo&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;. */&lt;br /&gt;
        pthread_create(&amp;amp;hilo2, NULL, actividad_hilo, NULL);  /* creación hilo&amp;lt;sub&amp;gt;y&amp;lt;/sub&amp;gt;. */&lt;br /&gt;
        pthread_join(hilo1, NULL);&lt;br /&gt;
        pthread_join(hilo2, NULL);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void actualiza_tabla(int i) {&lt;br /&gt;
        int tmp;&lt;br /&gt;
retry:&lt;br /&gt;
        tmp = tabla[i];            /* almaceno el valor de la variable compartida en una temporal. */&lt;br /&gt;
        tmp++;                     /* actualizo la varible temporal. */&lt;br /&gt;
        if (tabla[i]+1 != tmp) {   /* compruebo si la variable compartida ha sido modificada */&lt;br /&gt;
            goto retry;            /* mientras operaba con la variable temporal. */&lt;br /&gt;
        }&lt;br /&gt;
        tabla[i]=tmp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los inconvenientes de este tipo de mecanismo son dos:&lt;br /&gt;
&lt;br /&gt;
* Se consume más memoria, pues hay que realizar una copia del recurso compartido para efectuar la actualización.&lt;br /&gt;
* En situaciones de coincidencia, se tiene que volver a realizar la operación, por tanto, se desperdician recursos de procesamiento.&lt;br /&gt;
&lt;br /&gt;
En base al ejemplo anterior, hay que garantizar que la operación de comprobación y actualización es '''atómica'''. Se dice que una operación es '''atómica''' cuando es indivisible, es decir, que no quedamos en una situación intermedia al ejecutar dicha operación. Los procesadores incluyen una función llamada ''Test and Set'' (TAS) que nos permite ejecutar dos órdenes de manera atómica. Al ser una instrucción máquina el procesador nos garantiza que ningún proceso va a interrumpirla, evitando así la condición de carrera.&lt;br /&gt;
&lt;br /&gt;
Como ventaja, este tipo de mecanismo nos ofrece un mayor grado de paralelismo, por tanto, una mayor tasa de transferencia, siempre que se emplee en una situación donde la frecuencia de concurrencia sea baja.&lt;br /&gt;
&lt;br /&gt;
Por último, si el programador ha empleado una aproximación optimista para una situación en la que la frecuencia de coincidencia es alta, podría darse el caso de que un hilo no progrese en su ejecución de manera indefinida, al tener que volver a reintentar la actualización una y otra vez hasta conseguirlo sin que haya concurrencia.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un mecanismo de sincronización optimista funciona de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
* Paso 1. Realiza una copia del estado en el que está el recurso compartido.&lt;br /&gt;
* Paso 2. Opera con esa copia.&lt;br /&gt;
* Paso 3. Compruebo si mi copia alterada coincide con el original aplicándole también el tratamiento.&lt;br /&gt;
&lt;br /&gt;
= Pesimistas =&lt;br /&gt;
Este mecanismo debe emplearse si se considera que la frecuencia de acceso al recurso compartido es alta.&lt;br /&gt;
&lt;br /&gt;
En este mecanismo disponemos de tres partes:&lt;br /&gt;
&lt;br /&gt;
* El protocolo de entrada, en el que se emplea un mecanismo que no permite continuar con la ejecución si otro u otros procesos están accediendo al recurso compartido.&lt;br /&gt;
* La sección crítica, en el que se realizan las operaciones pertinentes con el recurso compartido.&lt;br /&gt;
* El protocolo de salida, en el que se vuelve a permitir el acceso al recurso compartido.&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo muestra cómo se implementa el control de concurrencia pesimista para 2 hilos, h&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt; y h&amp;lt;sub&amp;gt;y&amp;lt;/sub&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
   int compartida = 1;&lt;br /&gt;
   protocolo_de_entrada();     /* no permito acceso a variable compartida. */&lt;br /&gt;
   compartida++;               /* sección crítica: actualización de la variable compartida. */&lt;br /&gt;
   protocolo_de_salida();      /* vuelvo a permitir acceso a la variable compartida. */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los protocolos de entrada y salida son, generalmente, operaciones costosas en términos de recursos de procesamiento, pues requieren el uso de instrucciones atómicas cuyo tiempo de ejecución es alto.&lt;br /&gt;
&lt;br /&gt;
Por último, se podría emplear un control de concurrencia pesimista para resolver un problema que se resuelve con un control de concurrencia optimista, pero no al revés.&lt;br /&gt;
&lt;br /&gt;
== Implementación del control de concurrencia pesimista ==&lt;br /&gt;
&lt;br /&gt;
El control de concurrencia pesimista se puede implementar de dos formas mediante:&lt;br /&gt;
&lt;br /&gt;
* Espera ocupada o activa, mediante '''cerrojos'''. En este mecanismo se comprueba continuamente la condición que permite franquear en el protocolo de entrada, por tanto, el proceso permanece en estado activo comprobando continuadamente la condición que le permite progresar en su ejecución, tiempo que está siendo desaprovechado por el procesador.&lt;br /&gt;
* Espera no ocupada o bloqueante, mediante '''semáforos''', '''monitores''' o '''mensajería'''. Estos mecanismos hacen que el proceso pase a estado bloqueado cuando no se puede franquear el protocolo de entrada, por tanto, al quedar un proceso que no puede progresar en estado bloqueado, el planificador de procesos tiene que seleccionar a otro proceso.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nota aclarativa: Definición de ''espera ocupada o activa''&lt;br /&gt;
&lt;br /&gt;
Esperar a que algo ocurra realizando continuas comprobaciones.&lt;br /&gt;
Ejemplo:&lt;br /&gt;
            …&lt;br /&gt;
            variable= 0;&lt;br /&gt;
            while(variable==0);&lt;br /&gt;
            …&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6.3[[Cerrojos | Cerrojos]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Mecanismos_de_sincronizaci%C3%B3n&amp;diff=4312</id>
		<title>Mecanismos de sincronización</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Mecanismos_de_sincronizaci%C3%B3n&amp;diff=4312"/>
				<updated>2019-04-06T15:44:08Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Optimistas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Optimistas =&lt;br /&gt;
&lt;br /&gt;
Este mecanismo debe emplearse si el programador considera que la frecuencia de acceso a un recurso compartido es baja, es decir, que supone que la probabilidad de coincidencia de dos o más procesos al recurso compartido es baja.&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo muestra el código ejecutado por dos hilos: h&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt; y h&amp;lt;sub&amp;gt;y&amp;lt;/sub&amp;gt; de un mismo proceso.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int tabla[3] = { 100, 101, 102 };  /* tabla compartida por ambos hilos hx y hy. */&lt;br /&gt;
&lt;br /&gt;
/* actividad del hilo */&lt;br /&gt;
void *actividad_hilo(void *ptr)&lt;br /&gt;
{&lt;br /&gt;
        int i;&lt;br /&gt;
&lt;br /&gt;
        while(1) {&lt;br /&gt;
            for (i=0; i&amp;lt;3; i++) {&lt;br /&gt;
                  actualiza_tabla(i);&lt;br /&gt;
                  sleep((random() % 10) + 1);    /* hilo pasa a estado bloqueado durante 1 a 10 segundos. */&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return NULL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
        pthread_t hilo1, hilo2;&lt;br /&gt;
&lt;br /&gt;
        pthread_create(&amp;amp;hilo1, NULL, actividad_hilo, NULL);  /* creación hilo&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;. */&lt;br /&gt;
        pthread_create(&amp;amp;hilo2, NULL, actividad_hilo, NULL);  /* creación hilo&amp;lt;sub&amp;gt;y&amp;lt;/sub&amp;gt;. */&lt;br /&gt;
        pthread_join(hilo1, NULL);&lt;br /&gt;
        pthread_join(hilo2, NULL);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void actualiza_tabla(int i) {&lt;br /&gt;
        int tmp;&lt;br /&gt;
retry:&lt;br /&gt;
        tmp = tabla[i];            /* almaceno el valor de la variable compartida en una temporal. */&lt;br /&gt;
        tmp++;                     /* actualizo la varible temporal. */&lt;br /&gt;
        if (tabla[i]+1 != tmp) {   /* compruebo si la variable compartida ha sido modificada */&lt;br /&gt;
            goto retry;            /* mientras operaba con la variable temporal. */&lt;br /&gt;
        }&lt;br /&gt;
        tabla[i]=tmp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los inconvenientes de este tipo de mecanismo son dos:&lt;br /&gt;
&lt;br /&gt;
* Se consume más memoria, pues hay que realizar una copia del recurso compartido para efectuar la actualización.&lt;br /&gt;
* En situaciones de coincidencia, se tiene que volver a realizar la operación, por tanto, se desperdician recursos de procesamiento.&lt;br /&gt;
&lt;br /&gt;
En base al ejemplo anterior, hay que garantizar que la operación de comprobación y actualización es '''atómica'''. Se dice que una operación es '''atómica''' cuando es indivisible, es decir, que no quedamos en una situación intermedia al ejecutar dicha operación. Los procesadores incluyen una función llamada ''Test and Set''(TAS) que nos permite ejecutar dos órdenes de manera atómica. Al ser una instrucción máquina el procesador nos garantiza que ningún proceso va a interrumpirla, evitando así la condición de carrera.&lt;br /&gt;
&lt;br /&gt;
Como ventaja, este tipo de mecanismo nos ofrece un mayor grado de paralelismo, por tanto, una mayor tasa de transferencia, siempre que se emplee en una situación donde la frecuencia de concurrencia sea baja.&lt;br /&gt;
&lt;br /&gt;
Por último, si el programador ha empleado una aproximación optimista para una situación en la que la frecuencia de coincidencia es alta, podría darse el caso de que un hilo no progrese en su ejecución de manera indefinida, al tener que volver a reintentar la actualización una y otra vez hasta conseguirlo sin que haya concurrencia.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un mecanismo de sincronización optimista funciona de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
* Paso 1. Realiza una copia del estado en el que está el recurso compartido.&lt;br /&gt;
* Paso 2. Opera con esa copia.&lt;br /&gt;
* Paso 3. Compruebo si mi copia alterada coincide con el original aplicándole también el tratamiento.&lt;br /&gt;
&lt;br /&gt;
= Pesimistas =&lt;br /&gt;
Este mecanismo debe emplearse si se considera que la frecuencia de acceso al recurso compartido es alta.&lt;br /&gt;
&lt;br /&gt;
En este mecanismo disponemos de tres partes:&lt;br /&gt;
&lt;br /&gt;
* El protocolo de entrada, en el que se emplea un mecanismo que no permite continuar con la ejecución si otro u otros procesos están accediendo al recurso compartido.&lt;br /&gt;
* La sección crítica, en el que se realizan las operaciones pertinentes con el recurso compartido.&lt;br /&gt;
* El protocolo de salida, en el que se vuelve a permitir el acceso al recurso compartido.&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo muestra cómo se implementa el control de concurrencia pesimista para 2 hilos, h&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt; y h&amp;lt;sub&amp;gt;y&amp;lt;/sub&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
   int compartida = 1;&lt;br /&gt;
   protocolo_de_entrada();     /* no permito acceso a variable compartida. */&lt;br /&gt;
   compartida++;               /* sección crítica: actualización de la variable compartida. */&lt;br /&gt;
   protocolo_de_salida();      /* vuelvo a permitir acceso a la variable compartida. */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los protocolos de entrada y salida son, generalmente, operaciones costosas en términos de recursos de procesamiento, pues requieren el uso de instrucciones atómicas cuyo tiempo de ejecución es alto.&lt;br /&gt;
&lt;br /&gt;
Por último, se podría emplear un control de concurrencia pesimista para resolver un problema que se resuelve con un control de concurrencia optimista, pero no al revés.&lt;br /&gt;
&lt;br /&gt;
== Implementación del control de concurrencia pesimista ==&lt;br /&gt;
&lt;br /&gt;
El control de concurrencia pesimista se puede implementar de dos formas mediante:&lt;br /&gt;
&lt;br /&gt;
* Espera ocupada o activa, mediante '''cerrojos'''. En este mecanismo se comprueba continuamente la condición que permite franquear en el protocolo de entrada, por tanto, el proceso permanece en estado activo comprobando continuadamente la condición que le permite progresar en su ejecución, tiempo que está siendo desaprovechado por el procesador.&lt;br /&gt;
* Espera no ocupada o bloqueante, mediante '''semáforos''', '''monitores''' o '''mensajería'''. Estos mecanismos hacen que el proceso pase a estado bloqueado cuando no se puede franquear el protocolo de entrada, por tanto, al quedar un proceso que no puede progresar en estado bloqueado, el planificador de procesos tiene que seleccionar a otro proceso.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nota aclarativa: Definición de ''espera ocupada o activa''&lt;br /&gt;
&lt;br /&gt;
Esperar a que algo ocurra realizando continuas comprobaciones.&lt;br /&gt;
Ejemplo:&lt;br /&gt;
            …&lt;br /&gt;
            variable= 0;&lt;br /&gt;
            while(variable==0);&lt;br /&gt;
            …&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6.3[[Cerrojos | Cerrojos]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Concurrencia_de_procesos&amp;diff=4311</id>
		<title>Concurrencia de procesos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Concurrencia_de_procesos&amp;diff=4311"/>
				<updated>2019-04-06T11:30:27Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Sección crítica */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La concurrencia de procesos se refiere a las situaciones en las que dos o más procesos puedan coincidir en el acceso a un recurso compartido o, dicho de otra forma, que requieran coordinarse en su ejecución. Para evitar dicha coincidencia, el sistema operativo ofrece mecanismos de arbitraje que permiten coordinar la ejecución de los procesos.&lt;br /&gt;
&lt;br /&gt;
= El problema del productor y consumidor =&lt;br /&gt;
&lt;br /&gt;
Un ejemplo de un problema de concurrencia sería el siguiente: dados dos procesos A (productor) y B (consumidor) que se ejecutan indefinidamente en el tiempo, el proceso A debe recibir tiempo de ejecución antes que B. Tras esto, el proceso B debe recibir su oportunidad de ejecución, dando paso de nuevo al proceso A y así sucesivamente, siguiendo un esquema de alternancia estricta.&lt;br /&gt;
&lt;br /&gt;
 proceso A  |--   --    --&lt;br /&gt;
                       |&lt;br /&gt;
 proceso B  |   --    --     --&lt;br /&gt;
                       |_____________&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recuerde que el planificador de procesos, al desconocer la naturaleza de los procesos y sus objetivos, no dispone de información suficiente para garantizar la secuencia de ejecución descrita en el ejemplo anterior. De este modo, suponiendo que ambos procesos se encuentran en estado preparado, podría seleccionar al proceso B para pasar a estado activo antes de seleccionar al proceso A, situación que no es deseada.&lt;br /&gt;
&lt;br /&gt;
El planificador de procesos, como hemos visto en capítulos anteriores, emplea [[Criterios de planificación|criterios de planificación]] que no tienen en consideración el objetivo de los procesos. Podemos decir que este '''desconoce''' cuál es el propósito de los procesos; únicamente puede observar si presentan un comportamiento más o menos interactivo.&lt;br /&gt;
&lt;br /&gt;
Por tanto, el programador, a la hora de modelar los procesos, debe emplear los mecanismos de arbitraje que ofrece el sistema operativo y que permitirían resolver el problema de concurrencia que se plantee.&lt;br /&gt;
&lt;br /&gt;
= Mecanismos de arbitraje =&lt;br /&gt;
&lt;br /&gt;
Los mecanismos de arbitraje que ofrece el sistema operativo son dos principalmente:&lt;br /&gt;
&lt;br /&gt;
* Mecanismos de '''sincronización''': el sistema operativo ofrece mecanismos que permiten a los procesos coordinar su ejecución para conseguir el objetivo sin que sucedan situaciones no deseadas, como por ejemplo que dos o más procesos coincidan simultáneamente en el acceso a un cierto recurso que no se puede compartir.&lt;br /&gt;
&lt;br /&gt;
* Mecanismos de '''mensajería''': el sistema operativo ofrece mecanismos de comunicación entre procesos mediante mensajes. El intercambio de mensajes entre procesos permite coordinarlos.&lt;br /&gt;
&lt;br /&gt;
= Programación concurrente = &lt;br /&gt;
&lt;br /&gt;
El término programación concurrente se emplea con frecuencia para referirse a un conjunto de programas que funcionan en cooperación.&lt;br /&gt;
&lt;br /&gt;
Hay tres formas de interacción entre procesos cooperativos:&lt;br /&gt;
&lt;br /&gt;
*Concurrencia: Hay un recurso común, si varios procesos modificaran  la misma información a la vez, cada uno podría destruir parte del trabajo de los demás. Si lo hacen uno tras otro, en serie, se obtendrá el resultado correcto.&lt;br /&gt;
&lt;br /&gt;
*Sincronización: El Sistema Operativo se encarga de enviarle señales a los procesos para coordinar su evolución y conseguir que progrese armónicamente.&lt;br /&gt;
&lt;br /&gt;
*Comunicación:  El S.O. transmite mensajes entre los procesos, que se usan para intercambiar, enviar o recibir información.&lt;br /&gt;
&lt;br /&gt;
Se le llama programación concurrente ya que la concurrencia fue la primera forma de iterar recursos entre procesos cooperativos.&lt;br /&gt;
&lt;br /&gt;
= Sección crítica =&lt;br /&gt;
&lt;br /&gt;
Una ''sección crítica'' se trata de una sección del código que no debe ser ejecutada por varios procesos o hilos simultáneamente. Un ejemplo de ''sección crítica'' es la sección de código en la que se accede a un recurso compartido. Para evitar el acceso simultaneo a la sección crítica se emplean mecanismos que garantizan la ''exclusión mutua''.&lt;br /&gt;
&lt;br /&gt;
La exclusión mutua se debe realizar de forma coordinada y eficiente, para ello se requiere:&lt;br /&gt;
&lt;br /&gt;
*No más de un proceso por sección crítica y recurso compartido.&lt;br /&gt;
&lt;br /&gt;
*El mismo proceso no puede usar el mismo recurso compartido indefinidamente.&lt;br /&gt;
&lt;br /&gt;
*Todo proceso debe entrar antes o después a usar el recurso.&lt;br /&gt;
&lt;br /&gt;
*Si el recurso está sin uso, cualquiera que lo requiera dispondrá de él inmediatamente.&lt;br /&gt;
&lt;br /&gt;
*Si hay varios esperando usar el recurso y éste se libera, uno de los que estaba esperando lo usará durante un tiempo determinado.&lt;br /&gt;
&lt;br /&gt;
Para llevar esto a cabo se necesita un protocolo que indique cuando el recurso está libre y cuando está siendo ocupado.&lt;br /&gt;
&lt;br /&gt;
= Tipos de mecanismos de sincronización =&lt;br /&gt;
&lt;br /&gt;
Los mecanismos de sincronización los podemos catalogar en dos categorías:&lt;br /&gt;
&lt;br /&gt;
*[[Mecanismos de sincronización#Optimista|Optimistas]]: Este mecanismo considera que la frecuencia de acceso a un cierto recurso compartido es ''baja''. Este tipo tiene más consumo de memoria, ya que tiene que copiar el recurso compartido y, en caso de interferencia en el hilo, tiene que volver a ejecutarlo y consume más recursos.&lt;br /&gt;
&lt;br /&gt;
*[[Mecanismos de sincronización#Pesimista|Pesimistas]]: Este mecanismo permite coordinar la ejecución de dos o más procesos que acceden al recurso compartido con una frecuencia ''alta''.&lt;br /&gt;
&lt;br /&gt;
Dependerá del criterio del programador el tipo de mecanismo que utilice ya que puede que no elija el tipo correcto. Por ejemplo, puede que la frecuencia de acceso a un cierto recurso sea alta y el programador le asigna un mecanismo optimista, esto provocaría no obtener el resultado esperado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ¿Cómo provocar errores de concurrencia en Java? ==&lt;br /&gt;
Pequeño experimento, por si queremos observar cómo se producen errores de concurrencia en operaciones tan simples como la actualización de una lista.&lt;br /&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;Integer&amp;gt; list = new ArrayList&amp;lt;Integer&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
		/*&lt;br /&gt;
		 * EXPLICACIÓN:&lt;br /&gt;
		 * &lt;br /&gt;
		 * Tenemos creada una lista global, &amp;quot;list&amp;quot; , que será accedida al mismo&lt;br /&gt;
		 * tiempo por varios hilos. En este código se observa como a veces se&lt;br /&gt;
		 * producen errores de concurrencia al realizar modificaciones sobre la&lt;br /&gt;
		 * lista al mismo tiempo. Este es el motivo por el que debemos usar&lt;br /&gt;
		 * mecanismos como los semáforos u otras técnicas para prevenir este&lt;br /&gt;
		 * tipo de errores.&lt;br /&gt;
		 * &lt;br /&gt;
		 * Los errores de concurrencia en java se muestran como:&lt;br /&gt;
		 * ConcurrentModificationError&lt;br /&gt;
		 *&lt;br /&gt;
		 * También es curioso notar que los errores se dan sobretodo al principio, en&lt;br /&gt;
		 * los 30 primeros segundos, luego hay hilos que no se vuelven a&lt;br /&gt;
		 * ejecutar mientras que un par de ellos de forma aleatoria, se ejecutan&lt;br /&gt;
		 * cíclicamente, uno tras el otro.&lt;br /&gt;
		 * &lt;br /&gt;
		 */&lt;br /&gt;
		// -----------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
		// Los hilos con esta tarea añaden un número aleatorio de 0 a 100 en la&lt;br /&gt;
		// lista cada seg.&lt;br /&gt;
		Runnable tarea = () -&amp;gt; {&lt;br /&gt;
			while (true) {&lt;br /&gt;
				String nombreHilo = Thread.currentThread().getName();&lt;br /&gt;
				System.out.println(&amp;quot;Hola soy el hilo &amp;quot; + nombreHilo);&lt;br /&gt;
				list.add(new Random().nextInt(100));&lt;br /&gt;
				System.out.println(list);&lt;br /&gt;
				try {&lt;br /&gt;
					Thread.sleep(1000);&lt;br /&gt;
				} catch (InterruptedException e) {&lt;br /&gt;
&lt;br /&gt;
					e.printStackTrace();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Los hilos con esta tarea añaden también otro número aleatorio de 0 a&lt;br /&gt;
		// 100 en la lista cada seg.&lt;br /&gt;
&lt;br /&gt;
		Runnable tarea2 = () -&amp;gt; {&lt;br /&gt;
			while (true) {&lt;br /&gt;
				String nombreHilo = Thread.currentThread().getName();&lt;br /&gt;
				System.out.println(&amp;quot;Hola soy el hilo &amp;quot; + nombreHilo);&lt;br /&gt;
				list.add(new Random().nextInt(100));&lt;br /&gt;
				System.out.println(list);&lt;br /&gt;
				try {&lt;br /&gt;
					Thread.sleep(1000);&lt;br /&gt;
				} catch (InterruptedException e) {&lt;br /&gt;
&lt;br /&gt;
					e.printStackTrace();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Los hilos con esta tarea eliminan un número de una posición aleatoria&lt;br /&gt;
		// cada seg.&lt;br /&gt;
		Runnable tarea3 = () -&amp;gt; {&lt;br /&gt;
			while (true) {&lt;br /&gt;
				String nombreHilo = Thread.currentThread().getName();&lt;br /&gt;
				System.out.println(&amp;quot;Hola soy el hilo &amp;quot; + nombreHilo);&lt;br /&gt;
				Random r = new Random(list.size());&lt;br /&gt;
				if (list.contains(r))&lt;br /&gt;
					list.remove(r);&lt;br /&gt;
				System.out.println(list);&lt;br /&gt;
				try {&lt;br /&gt;
					Thread.sleep(1000);&lt;br /&gt;
				} catch (InterruptedException e) {&lt;br /&gt;
&lt;br /&gt;
					e.printStackTrace();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		//Creación de Hilos.&lt;br /&gt;
		Thread hilo = new Thread(tarea);&lt;br /&gt;
		Thread hilo2 = new Thread(tarea2);&lt;br /&gt;
		Thread hilo3 = new Thread(tarea3);&lt;br /&gt;
		Thread hilo4 = new Thread(tarea3);&lt;br /&gt;
		Thread hilo5 = new Thread(tarea);&lt;br /&gt;
		Thread hilo6 = new Thread(tarea3);&lt;br /&gt;
&lt;br /&gt;
		//Ejecución.&lt;br /&gt;
		hilo.start();&lt;br /&gt;
		hilo2.start();&lt;br /&gt;
		hilo3.start();&lt;br /&gt;
		hilo4.start();&lt;br /&gt;
		hilo5.start();&lt;br /&gt;
		hilo6.start();&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6.2[[Mecanismos_de_sincronización | Control optimista y pesimista de la concurrencia]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Cerrojos&amp;diff=4297</id>
		<title>Cerrojos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Cerrojos&amp;diff=4297"/>
				<updated>2019-04-02T16:39:28Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Ejemplo de implementación */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ejemplo de implementación =&lt;br /&gt;
&lt;br /&gt;
El siguiente código sería un posible ejemplo del uso de control de concurrencia mediante cerrojos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int cerrojo = 0;      /* Inicializamos la variable cerrojo. Esto sería sólo válido para&lt;br /&gt;
                         hilos, ya que los procesos no comparten espacio de memoria. La variable se inicializa FUERA de los hilos.&lt;br /&gt;
                         Del while en adelante, ya es código perteneciente a los hilos en ejecución. */&lt;br /&gt;
&lt;br /&gt;
while(cerrojo == 1);  // Protocolo de               &lt;br /&gt;
cerrojo = 1;          // entrada&lt;br /&gt;
&lt;br /&gt;
...                   // Sección crítica&lt;br /&gt;
&lt;br /&gt;
cerrojo = 0;          // Protocolo de salida&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sin embargo, esto es problemático: Supongamos que tenemos únicamente un proceso con dos hilos (Hx y Hy) y el planificador retira el hilo Hx justo antes de ejecutarse la instrucción ''cerrojo = 1;''. El hilo Hy ejecuta su código, entra en la sección crítica (Esto puede ocurrir ya que cerrojo sigue a 0) y el planificador le retira el uso del procesador dentro de ésta. A continuación, se le vuelve a asignar el procesador a Hx.&lt;br /&gt;
&lt;br /&gt;
De esta forma, tenemos a dos hilos ejecutando código de la sección crítica. Para evitar este problema, debemos implementar los protocolos de entrada y salida de forma que se ejecuten en una sola instrucción, con lo cual o el planificador retira el uso del procesador antes de esta instrucción, o sino lo retira después de haberla ejecutado.&lt;br /&gt;
&lt;br /&gt;
= Cerrojos mediante instrucciones atómicas =&lt;br /&gt;
&lt;br /&gt;
Podemos implementar cerrojos mediante instrucciones especiales de comprobación y puesta a 0 y 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int cerrojo = 0;&lt;br /&gt;
&lt;br /&gt;
void lock() {&lt;br /&gt;
    while (__sync_lock_test_and_set(&amp;amp;cerrojo, 1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void unlock() {&lt;br /&gt;
    __sync_lock_release(&amp;amp;cerrojo);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El método lock comprueba mediante __sync_locktest_and_set(&amp;amp;cerrojo,1) el valor del cerrojo: si es 0, cambia el valor del cerrojo a 1 y devuelve 0, por tanto, se sale del while y entra en sección crítica; si es 1, devuelve 1 y continúa comprobando el valor, por tanto, no entra en situación crítica hasta que cambie el valor del cerrojo.&lt;br /&gt;
&lt;br /&gt;
El método unlock, mediante _sync_lock_release(&amp;amp;cerrojo), cambia el valor del cerrojo a 0.&lt;br /&gt;
&lt;br /&gt;
* http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html&lt;br /&gt;
* http://stackoverflow.com/questions/1383363/is-my-spin-lock-implementation-correct-and-optimal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6.4[[Ejercicio_de_concurrencia_de_procesos | Ejercicio de concurrencia de procesos]]&lt;br /&gt;
&lt;br /&gt;
6.5[[Semáforos | Semáforos]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Cerrojos&amp;diff=4296</id>
		<title>Cerrojos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Cerrojos&amp;diff=4296"/>
				<updated>2019-04-02T16:35:09Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Ejemplo de implementación */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ejemplo de implementación =&lt;br /&gt;
&lt;br /&gt;
El siguiente código sería un posible ejemplo del uso de control de concurrencia mediante cerrojos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int cerrojo = 0;      /* Inicializamos la variable cerrojo. Esto sería sólo válido para&lt;br /&gt;
                         hilos, ya que los procesos no comparten espacio de memoria. La variable se inicializa FUERA de los hilos.&lt;br /&gt;
                         Del while en adelante, ya es código perteneciente a los hilos en ejecución. */&lt;br /&gt;
&lt;br /&gt;
while(cerrojo == 0);  // Protocolo de               &lt;br /&gt;
cerrojo = 1;          // entrada&lt;br /&gt;
&lt;br /&gt;
...                   // Sección crítica&lt;br /&gt;
&lt;br /&gt;
cerrojo = 0;          // Protocolo de salida&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sin embargo, esto es problemático: Supongamos que tenemos únicamente un proceso con dos hilos (Hx y Hy) y el planificador retira el hilo Hx justo antes de ejecutarse la instrucción ''cerrojo = 1;''. El hilo Hy ejecuta su código, entra en la sección crítica (Esto puede ocurrir ya que cerrojo sigue a 0) y el planificador le retira el uso del procesador dentro de ésta. A continuación, se le vuelve a asignar el procesador a Hx.&lt;br /&gt;
&lt;br /&gt;
De esta forma, tenemos a dos hilos ejecutando código de la sección crítica. Para evitar este problema, debemos implementar los protocolos de entrada y salida de forma que se ejecuten en una sola instrucción, con lo cual o el planificador retira el uso del procesador antes de esta instrucción, o sino lo retira después de haberla ejecutado.&lt;br /&gt;
&lt;br /&gt;
= Cerrojos mediante instrucciones atómicas =&lt;br /&gt;
&lt;br /&gt;
Podemos implementar cerrojos mediante instrucciones especiales de comprobación y puesta a 0 y 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int cerrojo = 0;&lt;br /&gt;
&lt;br /&gt;
void lock() {&lt;br /&gt;
    while (__sync_lock_test_and_set(&amp;amp;cerrojo, 1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void unlock() {&lt;br /&gt;
    __sync_lock_release(&amp;amp;cerrojo);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El método lock comprueba mediante __sync_locktest_and_set(&amp;amp;cerrojo,1) el valor del cerrojo: si es 0, cambia el valor del cerrojo a 1 y devuelve 0, por tanto, se sale del while y entra en sección crítica; si es 1, devuelve 1 y continúa comprobando el valor, por tanto, no entra en situación crítica hasta que cambie el valor del cerrojo.&lt;br /&gt;
&lt;br /&gt;
El método unlock, mediante _sync_lock_release(&amp;amp;cerrojo), cambia el valor del cerrojo a 0.&lt;br /&gt;
&lt;br /&gt;
* http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html&lt;br /&gt;
* http://stackoverflow.com/questions/1383363/is-my-spin-lock-implementation-correct-and-optimal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6.4[[Ejercicio_de_concurrencia_de_procesos | Ejercicio de concurrencia de procesos]]&lt;br /&gt;
&lt;br /&gt;
6.5[[Semáforos | Semáforos]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Modelos_de_Dise%C3%B1o_de_Sistemas_Operativos&amp;diff=4293</id>
		<title>Modelos de Diseño de Sistemas Operativos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Modelos_de_Dise%C3%B1o_de_Sistemas_Operativos&amp;diff=4293"/>
				<updated>2019-03-21T12:23:22Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Sistemas operativos Monolíticos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 3.1. Modelos de Diseño de SSOO =&lt;br /&gt;
&lt;br /&gt;
== Modos de operación del procesador ==&lt;br /&gt;
&lt;br /&gt;
Para entender los diseños de sistemas operativos existentes, tenemos que hacer referencia a los modos de ejecución del procesador. El modo de ejecución del procesador determina qué conjunto de instrucciones y a qué recursos del procesador se puede acceder.&lt;br /&gt;
&lt;br /&gt;
Los procesadores ofrecen, como mínimo, dos modos de funcionamiento del procesador:&lt;br /&gt;
&lt;br /&gt;
* '''Modo privilegiado''', que permite la ejecución de todo el conjunto de instrucciones que ofrece el procesador. Es el modo en el que se ejecuta el núcleo de un sistema operativo.&lt;br /&gt;
&lt;br /&gt;
* '''Modo no privilegiado''', que permite acceder a un subconjunto de las instrucciones que ofrece el procesador, es el modo en el que se ejecutan los procesos.&lt;br /&gt;
&lt;br /&gt;
== Núcleo del sistema operativo ==&lt;br /&gt;
&lt;br /&gt;
El núcleo del sistema operativo, también conocido por la terminología inglesa ''kernel'', es la parte más esencial del sistema operativo. Es la parte del código del sistema operativo que se ejecuta en modo privilegiado del procesador.&lt;br /&gt;
&lt;br /&gt;
Al operar en dicho modo, un error de programación en el núcleo del sistema operativo resulta en un error fatal del cual el sistema sólo puede recuperarse mediante el reinicio del sistema. A tal error fatal también se le conoce en los sistemas operativos UNIX por la locución inglesa ''[http://es.wikipedia.org/wiki/Kernel_panic kernel panic]'' y en los sistemas operativos Windows por el nombre de ''[http://www.google.es/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CCwQFjAA&amp;amp;url=http%3A%2F%2Fes.wikipedia.org%2Fwiki%2FPantalla_azul_de_la_muerte&amp;amp;ei=s02WTqvCCMjHtAaxuJyBBA&amp;amp;usg=AFQjCNE2tZra15VdohxjrhSogTQZOVedKg Pantallazo azul o BSOD]''.&lt;br /&gt;
&lt;br /&gt;
== Tipos de Sistemas Operativos ==&lt;br /&gt;
&lt;br /&gt;
Los sistemas operativos se pueden clasificar en base a la cantidad de funcionalidades propias del sistema operativo que se implementan en su núcleo. En general distinguimos dos tipos de sistemas operativos:&lt;br /&gt;
&lt;br /&gt;
* '''Monolíticos:''' gestionan los cuatro componentes fundamentales del sistema operativo en modo supervisor, esto incluye, la planificación de procesos, la administración de la memoria principal, la gestión de E/S y el administrador de ficheros.&lt;br /&gt;
&lt;br /&gt;
* '''Micronúcleos:''' implementan en su núcleo únicamente la planificación de procesos, la gestión de interrupciones (la parte básica fundamental de la gestión de E/S que necesariamente se tiene que realizar en modo privilegiado) y la comunicación entre procesos. Por tanto, la administración de memoria principal, la gestión de la E/S y la gestión de ficheros se realiza en modo usuario. En este tipo de sistema operativo hay procesos especiales propios del sistema operativo que implementan dichas funcionalidades en modo usuario y se denominan ''proceso servidor''.&lt;br /&gt;
&lt;br /&gt;
Además, contamos con una clasificación intermedia:&lt;br /&gt;
&lt;br /&gt;
* '''Híbrido:''' a mitad de camino entre monolítico y micronúcleo, incluyen la gestión de dispositivos de E/S en modo supervisor con el fin de mejorar el rendimiento del sistema.&lt;br /&gt;
&lt;br /&gt;
En número de líneas de código, el núcleo monolítico es mayor que el micronúcleo, al implementar más componentes del sistema operativo que permiten la gestión del computador en el espacio del núcleo, es decir, en modo privilegiado.&lt;br /&gt;
&lt;br /&gt;
Los sistemas operativo monolíticos ofrecen mejor rendimiento que los micronúcleos, pero los micronúcleos son más fiables, pues un fallo de programación en el núcleo lleva al traste con la ejecución del sistema.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Hay que reparar esto [[Archivo:OS-structure2b(EDITADO).svg‎ |880px| Comparativa de distribución de funcionalidades entre distintos tipos de SO]] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sistemas operativos Monolíticos ===&lt;br /&gt;
&lt;br /&gt;
Los sistemas operativos monolíticos se caracterizan por implementar en el núcleo los cuatro componentes fundamentales del sistema operativo, que son la planificación de procesos, la administración de la memoria principal, la administración de ficheros y la gestión de los dispositivos de entrada/salida.&lt;br /&gt;
&lt;br /&gt;
Los sistemas operativos de propósito general son predominantemente monolíticos hoy día, algunos ejemplos son:&lt;br /&gt;
&lt;br /&gt;
* Sistemas operativos UNIX, tales como FreeBSD, NetBSD y OpenBSD. &lt;br /&gt;
* Sistemas operativos GNU/Linux, y por tanto, Android también.&lt;br /&gt;
* DOS, tales como MS-DOS y DR-DOS.&lt;br /&gt;
&lt;br /&gt;
Como inconveniente, este tipo de sistemas operativo dispone de un alto número de líneas de código ejecutándose en modo privilegiado. Por ello, un error de programación en el núcleo puede provocar un ''kernel panic''. Además, el hecho de añadir nuevas funcionalidades provocaría una nueva recompilación del núcleo llevando a reiniciar el sistema para que se apliquen los nuevos cambios. Por ejemplo, un bug en el núcleo de un sistema operativo monolítico obliga a tener que reiniciar el sistema. En un sistema operativo monolítico, el código del núcleo se incluye en un único fichero binario que se carga en memoria principal en tiempo de arranque, por tanto, si se instala una nueva imagen, es necesario reiniciar el sistema operativo para que se inicie con la nueva versión que incluye la imagen actualizada.&lt;br /&gt;
&lt;br /&gt;
Como principal ventaja, los sistemas operativos monolíticos ofrecen un alto rendimiento puesto que las peticiones entre los diferentes componentes se reducen a invocaciones de funciones.&lt;br /&gt;
&lt;br /&gt;
=== Sistemas operativos Micronúcleo ===&lt;br /&gt;
&lt;br /&gt;
Se caracterizan por disponer de un núcleo que implementa únicamente:&lt;br /&gt;
&lt;br /&gt;
* Planificación de procesos&lt;br /&gt;
* Mecanismo de comunicación entre procesos&lt;br /&gt;
* Gestión de interrupciones&lt;br /&gt;
&lt;br /&gt;
Además, existen procesos servidores que se ejecutan en modo no privilegiado del procesador - que, por supuesto, se ejecutan fuera del espacio del núcleo del sistema operativo - y que implementan los siguientes componentes:&lt;br /&gt;
&lt;br /&gt;
* Administración de memoria principal&lt;br /&gt;
* Administración de ficheros&lt;br /&gt;
* Gestión de dispositivos de entrada/salida.&lt;br /&gt;
&lt;br /&gt;
Siguiendo este esquema, cuando un proceso cualquiera solicita un servicio a través de una llamada al sistema, el micronúcleo canaliza la petición al proceso servidor correspondiente. Dicha comunicación se realiza mediante mensajería.&lt;br /&gt;
&lt;br /&gt;
La principal ventaja de los sistemas operativos micronúcleo es que, al ejecutar menos líneas de código en modo privilegiado, de manera intuitiva son más fiables. Otras ventajas son que se garantiza el aislamiento de las partes que están fuera del núcleo. Generalmente, si un proceso servidor tiene un bug en su código que hace que entre en una condición de error, se puede relanzar sin tener que reiniciar el sistema por completo.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, el principal problema que presentan es el rendimiento, puesto que cualquier petición requiere mensajería, que lleva consigo un coste extra debido a la construcción de los mensajes, el reparto y la interpretación. Son estos problemas relacionados con el rendimiento los que hacen que no existan sistemas operativos micronúcleo, y que generalmente únicamente tiene propósitos educativos y/o propósitos muy específicos.&lt;br /&gt;
&lt;br /&gt;
Algunos ejemplos de sistemas operativos micronúcleos son:&lt;br /&gt;
&lt;br /&gt;
* Symbian OS, hoy día en desuso.&lt;br /&gt;
* Minix, en sus versiones 2 y 3.&lt;br /&gt;
&lt;br /&gt;
=== Sistemas operativos Híbridos ===&lt;br /&gt;
&lt;br /&gt;
«Híbrido» implica que el núcleo en cuestión usa conceptos de arquitectura tanto del diseño monolítico como del micronúcleo, específicamente el paso de mensajes y la ejecución de ciertos componentes del sistema operativo en espacio de usuario.&lt;br /&gt;
&lt;br /&gt;
Algunos ejemplos de núcleos híbridos:&lt;br /&gt;
&lt;br /&gt;
* Microsoft Windows NT, usado en todos los sistemas que usan el código base de Windows NT.&lt;br /&gt;
* XNU (usado en Mac OS X), es un micronúcleo modificado, debido a la inclusión de código del núcleo de FreeBSD en el núcleo basado en Mach.&lt;br /&gt;
* DragonFlyBSD, es el primer sistema BSD que adopta una arquitectura de núcleo híbrido sin basarse en Mach.&lt;br /&gt;
* ReactOS.&lt;br /&gt;
&lt;br /&gt;
No hay que confundir el concepto «núcleo híbrido» con el soporte de módulos cargables después del arranque que está disponible en núcleos monolíticos.&lt;br /&gt;
&lt;br /&gt;
=== Unikernel ===&lt;br /&gt;
&lt;br /&gt;
Las aplicaciones se ejecutan en modo supervisor, dentro del espacio del núcleo del Sistema Operativo. Por tanto, la totalidad del código se ejecuta en modo privilegiado. Los procesos no invocan llamadas al sistema pues tienen acceso directo a los recursos del computador. El argumento para este diseño es el rendimiento a cambio de sacrificar la fiabilidad. Sólo es aplicable a sistemas de propósito muy específico.&lt;br /&gt;
&lt;br /&gt;
== Otro material a consultar ==&lt;br /&gt;
&lt;br /&gt;
El estudiante puede encontrar el siguiente material de interés para complementar sus conocimientos:&lt;br /&gt;
&lt;br /&gt;
* Debate entre Linus Torvalds, creador del núcleo Linux, que sigue el paradigma monolítico y Andrew S. Tanembaum, creador de Minux, que sigue el modelo micronúcleo: http://oreilly.com/catalog/opensources/book/appa.html (en inglés).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2.[[Virtualización | Virtualización]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Modelos_de_Dise%C3%B1o_de_Sistemas_Operativos&amp;diff=4287</id>
		<title>Modelos de Diseño de Sistemas Operativos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Modelos_de_Dise%C3%B1o_de_Sistemas_Operativos&amp;diff=4287"/>
				<updated>2019-03-19T18:44:51Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Tipos de Sistemas Operativos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 3.1. Modelos de Diseño de SSOO =&lt;br /&gt;
&lt;br /&gt;
== Modos de operación del procesador ==&lt;br /&gt;
&lt;br /&gt;
Para entender los diseños de sistemas operativos existentes, tenemos que hacer referencia a los modos de ejecución del procesador. El modo de ejecución del procesador determina qué conjunto de instrucciones y a qué recursos del procesador se puede acceder.&lt;br /&gt;
&lt;br /&gt;
Los procesadores ofrecen, como mínimo, dos modos de funcionamiento del procesador:&lt;br /&gt;
&lt;br /&gt;
* '''Modo privilegiado''', que permite la ejecución de todo el conjunto de instrucciones que ofrece el procesador. Es el modo en el que se ejecuta el núcleo de un sistema operativo.&lt;br /&gt;
&lt;br /&gt;
* '''Modo no privilegiado''', que permite acceder a un subconjunto de las instrucciones que ofrece el procesador, es el modo en el que se ejecutan los procesos.&lt;br /&gt;
&lt;br /&gt;
== Núcleo del sistema operativo ==&lt;br /&gt;
&lt;br /&gt;
El núcleo del sistema operativo, también conocido por la terminología inglesa ''kernel'', es la parte más esencial del sistema operativo. Es la parte del código del sistema operativo que se ejecuta en modo privilegiado del procesador.&lt;br /&gt;
&lt;br /&gt;
Al operar en dicho modo, un error de programación en el núcleo del sistema operativo resulta en un error fatal del cual el sistema sólo puede recuperarse mediante el reinicio del sistema. A tal error fatal también se le conoce en los sistemas operativos UNIX por la locución inglesa ''[http://es.wikipedia.org/wiki/Kernel_panic kernel panic]'' y en los sistemas operativos Windows por el nombre de ''[http://www.google.es/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CCwQFjAA&amp;amp;url=http%3A%2F%2Fes.wikipedia.org%2Fwiki%2FPantalla_azul_de_la_muerte&amp;amp;ei=s02WTqvCCMjHtAaxuJyBBA&amp;amp;usg=AFQjCNE2tZra15VdohxjrhSogTQZOVedKg Pantallazo azul o BSOD]''.&lt;br /&gt;
&lt;br /&gt;
== Tipos de Sistemas Operativos ==&lt;br /&gt;
&lt;br /&gt;
Los sistemas operativos se pueden clasificar en base a la cantidad de funcionalidades propias del sistema operativo que se implementan en su núcleo. En general distinguimos dos tipos de sistemas operativos:&lt;br /&gt;
&lt;br /&gt;
* '''Monolíticos:''' gestionan los cuatro componentes fundamentales del sistema operativo en modo supervisor, esto incluye, la planificación de procesos, la administración de la memoria principal, la gestión de E/S y el administrador de ficheros.&lt;br /&gt;
&lt;br /&gt;
* '''Micronúcleos:''' implementan en su núcleo únicamente la planificación de procesos, la gestión de interrupciones (la parte básica fundamental de la gestión de E/S que necesariamente se tiene que realizar en modo privilegiado) y la comunicación entre procesos. Por tanto, la administración de memoria principal, la gestión de la E/S y la gestión de ficheros se realiza en modo usuario. En este tipo de sistema operativo hay procesos especiales propios del sistema operativo que implementan dichas funcionalidades en modo usuario y se denominan ''proceso servidor''.&lt;br /&gt;
&lt;br /&gt;
Además, contamos con una clasificación intermedia:&lt;br /&gt;
&lt;br /&gt;
* '''Híbrido:''' a mitad de camino entre monolítico y micronúcleo, incluyen la gestión de dispositivos de E/S en modo supervisor con el fin de mejorar el rendimiento del sistema.&lt;br /&gt;
&lt;br /&gt;
En número de líneas de código, el núcleo monolítico es mayor que el micronúcleo, al implementar más componentes del sistema operativo que permiten la gestión del computador en el espacio del núcleo, es decir, en modo privilegiado.&lt;br /&gt;
&lt;br /&gt;
Los sistemas operativo monolíticos ofrecen mejor rendimiento que los micronúcleos, pero los micronúcleos son más fiables, pues un fallo de programación en el núcleo lleva al traste con la ejecución del sistema.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Hay que reparar esto [[Archivo:OS-structure2b(EDITADO).svg‎ |880px| Comparativa de distribución de funcionalidades entre distintos tipos de SO]] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sistemas operativos Monolíticos ===&lt;br /&gt;
&lt;br /&gt;
Los sistemas operativos monolíticos se caracterizan por implementar en el núcleo los cuatro componentes fundamentales del sistema operativo, que son la planificación de procesos, la administración de la memoria principal, la administración de ficheros y la gestión de los dispositivos de entrada/salida.&lt;br /&gt;
&lt;br /&gt;
Los sistemas operativos de propósito general son predominantemente monolíticos hoy día, algunos ejemplos son:&lt;br /&gt;
el sistema&lt;br /&gt;
* Sistemas operativos UNIX, tales como FreeBSD, NetBSD y OpenBSD. &lt;br /&gt;
* Sistemas operativos GNU/Linux, y por tanto, Android también.&lt;br /&gt;
* DOS, tales como MS-DOS y DR-DOS.&lt;br /&gt;
&lt;br /&gt;
Como inconveniente, este tipo de sistemas operativo dispone de un alto número de líneas de código ejecutándose en modo privilegiado. Por ello, un error de programación en el núcleo puede provocar un ''kernel panic''. Además, el hecho de añadir nuevas funcionalidades provocaría una nueva recompilación del núcleo llevando a reiniciar el sistema para que se apliquen los nuevos cambios. Por ejemplo, un bug en el núcleo de un sistema operativo monolítico obliga a tener que reiniciar el sistema. En un sistema operativo monolítico, el código del núcleo se incluye en un único fichero binario que se carga en memoria principal en tiempo de arranque, por tanto, si se instala una nueva imagen, es necesario reiniciar el sistema operativo para que se inicie con la nueva versión que incluye la imagen actualizada.&lt;br /&gt;
&lt;br /&gt;
Como principal ventaja, los sistemas operativos monolíticos ofrecen un alto rendimiento puesto que las peticiones entre los diferentes componentes se reducen a invocaciones de funciones.&lt;br /&gt;
&lt;br /&gt;
=== Sistemas operativos Micronúcleo ===&lt;br /&gt;
&lt;br /&gt;
Se caracterizan por disponer de un núcleo que implementa únicamente:&lt;br /&gt;
&lt;br /&gt;
* Planificación de procesos&lt;br /&gt;
* Mecanismo de comunicación entre procesos&lt;br /&gt;
* Gestión de interrupciones&lt;br /&gt;
&lt;br /&gt;
Además, existen procesos servidores que se ejecutan en modo no privilegiado del procesador - que, por supuesto, se ejecutan fuera del espacio del núcleo del sistema operativo - y que implementan los siguientes componentes:&lt;br /&gt;
&lt;br /&gt;
* Administración de memoria principal&lt;br /&gt;
* Administración de ficheros&lt;br /&gt;
* Gestión de dispositivos de entrada/salida.&lt;br /&gt;
&lt;br /&gt;
Siguiendo este esquema, cuando un proceso cualquiera solicita un servicio a través de una llamada al sistema, el micronúcleo canaliza la petición al proceso servidor correspondiente. Dicha comunicación se realiza mediante mensajería.&lt;br /&gt;
&lt;br /&gt;
La principal ventaja de los sistemas operativos micronúcleo es que, al ejecutar menos líneas de código en modo privilegiado, de manera intuitiva son más fiables. Otras ventajas son que se garantiza el aislamiento de las partes que están fuera del núcleo. Generalmente, si un proceso servidor tiene un bug en su código que hace que entre en una condición de error, se puede relanzar sin tener que reiniciar el sistema por completo.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, el principal problema que presentan es el rendimiento, puesto que cualquier petición requiere mensajería, que lleva consigo un coste extra debido a la construcción de los mensajes, el reparto y la interpretación. Son estos problemas relacionados con el rendimiento los que hacen que no existan sistemas operativos micronúcleo, y que generalmente únicamente tiene propósitos educativos y/o propósitos muy específicos.&lt;br /&gt;
&lt;br /&gt;
Algunos ejemplos de sistemas operativos micronúcleos son:&lt;br /&gt;
&lt;br /&gt;
* Symbian OS, hoy día en desuso.&lt;br /&gt;
* Minix, en sus versiones 2 y 3.&lt;br /&gt;
&lt;br /&gt;
=== Sistemas operativos Híbridos ===&lt;br /&gt;
&lt;br /&gt;
«Híbrido» implica que el núcleo en cuestión usa conceptos de arquitectura tanto del diseño monolítico como del micronúcleo, específicamente el paso de mensajes y la ejecución de ciertos componentes del sistema operativo en espacio de usuario.&lt;br /&gt;
&lt;br /&gt;
Algunos ejemplos de núcleos híbridos:&lt;br /&gt;
&lt;br /&gt;
* Microsoft Windows NT, usado en todos los sistemas que usan el código base de Windows NT.&lt;br /&gt;
* XNU (usado en Mac OS X), es un micronúcleo modificado, debido a la inclusión de código del núcleo de FreeBSD en el núcleo basado en Mach.&lt;br /&gt;
* DragonFlyBSD, es el primer sistema BSD que adopta una arquitectura de núcleo híbrido sin basarse en Mach.&lt;br /&gt;
* ReactOS.&lt;br /&gt;
&lt;br /&gt;
No hay que confundir el concepto «núcleo híbrido» con el soporte de módulos cargables después del arranque que está disponible en núcleos monolíticos.&lt;br /&gt;
&lt;br /&gt;
=== Unikernel ===&lt;br /&gt;
&lt;br /&gt;
Las aplicaciones se ejecutan en modo supervisor, dentro del espacio del núcleo del Sistema Operativo. Por tanto, la totalidad del código se ejecuta en modo privilegiado. Los procesos no invocan llamadas al sistema pues tienen acceso directo a los recursos del computador. El argumento para este diseño es el rendimiento a cambio de sacrificar la fiabilidad. Sólo es aplicable a sistemas de propósito muy específico.&lt;br /&gt;
&lt;br /&gt;
== Otro material a consultar ==&lt;br /&gt;
&lt;br /&gt;
El estudiante puede encontrar el siguiente material de interés para complementar sus conocimientos:&lt;br /&gt;
&lt;br /&gt;
* Debate entre Linus Torvalds, creador del núcleo Linux, que sigue el paradigma monolítico y Andrew S. Tanembaum, creador de Minux, que sigue el modelo micronúcleo: http://oreilly.com/catalog/opensources/book/appa.html (en inglés).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2.[[Virtualización | Virtualización]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Planificadores_de_sistemas_operativos_existentes&amp;diff=4286</id>
		<title>Planificadores de sistemas operativos existentes</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Planificadores_de_sistemas_operativos_existentes&amp;diff=4286"/>
				<updated>2019-03-19T17:40:50Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Planificador de Windows */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Planificador de Linux 2.6 =&lt;br /&gt;
 &lt;br /&gt;
Este planificador posee 140 prioridades (de 0 a 139), de 0 a 99 son para tiempo real y para el resto de procesos que no son de tiempo real de 100 a 139 basadas en el Nice(de -20 a 19).&lt;br /&gt;
&lt;br /&gt;
Posee un mapa de bits (140 bits), 1 bit para cada prioridad en la que implementan distintas estructuras SCHED_FIFO y SCHED_RR ambas para tiempo real y el resto SCHED_OTHER. Esta ultima estructura posee el número de procesos preparados y dos colas, una para los procesos pendientes y otra para los que ya han consumido su ''quantum''. Cuando un proceso solo consume una parte de su ''quantum'' es insertado al final de la cola de pendientes con lo que le queda de su ventana de tiempo(es decir, si ha consumido el 25% la siguiente vez que sea asignado al procesador solo tendra el 75% del ''quantum''), y si consume totalmente su tiempo de asignación al procesador este pasa a la cola de consumido hasta que este totalmente vacía la cola de pendientes. (Esto se hace para compensar los procesos más interactivos)&lt;br /&gt;
&lt;br /&gt;
      Esquema de estructura de SCHED_OTHER:&lt;br /&gt;
  &lt;br /&gt;
         &amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;struct&amp;lt;/font&amp;gt;{&lt;br /&gt;
            &amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;int&amp;lt;/font&amp;gt; num_procesos_preparados&lt;br /&gt;
            cola pendientes&lt;br /&gt;
            cola consumido_quantum&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
= Planificador Mac Os X (Darwin) =&lt;br /&gt;
&lt;br /&gt;
La planificación en el kernel de Mac OS X esta basada en cuatro listas de ejecución, cada una de ellas con diferente prioridad. Un hilo puede migrar de un nivel de prioridad a otro en función de sus requerimientos, dependiendo de la política en concreto que se utilice en el sistema. En general, es posible manejar estas prioridades mediante los procedimientos definidos en el estándar de llamadas POSIX. Con lo que podemos decir, que se trata de un '''criterio de planificación en colas multinivel''' mezclado con '''prioridades'''. Algo parecido al planificador SCHED_OTHER de Linux.&lt;br /&gt;
&lt;br /&gt;
Las cuatro listas de ejecución que maneja el planificador de Mac OS X, son:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Archivo:DarwinSched.svg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Planificador de Windows =&lt;br /&gt;
&lt;br /&gt;
El planificador utiliza un sistema de multi-cola ordenadas por prioridades. Son 32 niveles de prioridades (de 0 a 31) que se dividen de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
 - Niveles 16 a 31: Tiempo Real&lt;br /&gt;
 - Niveles 1 a 15: Variable&lt;br /&gt;
 - Nivel 0: Reservado para el sistema&lt;br /&gt;
&lt;br /&gt;
El planificador utiliza Round Robin para recorrer las distintas colas. Tiene un quantum fijo que por defecto valdrá q=2 o q=12, dependiendo de si es un SO de servidor o de usuario. El quantum se puede cambiar entre estos dos valores a través del sistema.&lt;br /&gt;
&lt;br /&gt;
Windows utiliza este sistema de planificación desde Windows NT.&lt;br /&gt;
Si quieres saber más del sistema de planificación de Windows puedes leer el libro Windows Internals[https://repo.zenk-security.com/Linux%20et%20systemes%20d.exploitations/Windows%20Internals%20Part%201_6th%20Edition.pdf](PDF), donde se explica el funcionamiento y las caracteristicas de todo el SO.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5.5. [[Planificación_de_procesos_de_tiempo_real | La planificación de procesos de tiempo real]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Tipos_de_Sistemas_Operativos&amp;diff=4285</id>
		<title>Tipos de Sistemas Operativos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Tipos_de_Sistemas_Operativos&amp;diff=4285"/>
				<updated>2019-03-17T15:58:58Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: /* Características que pueden presentar: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 1.3. Tipos de Sistemas Operativos =&lt;br /&gt;
== 1.3.1. Según cuántas aplicaciones pueda ejecutar a la vez ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Monoprogramables'''===&lt;br /&gt;
*En un determinado instante de tiempo, '''solo hay un único proceso en ejecución que monopoliza todos los recursos''' del sistema.&lt;br /&gt;
*Principal ventaja: su sencillez.&lt;br /&gt;
*Dos subtipos:&lt;br /&gt;
**Ofrece intérprete de órdenes.&lt;br /&gt;
**Ofrece entrada a través de cinta/switches o disquettes (SSOO históricos).&lt;br /&gt;
*Ejemplo: DOS (80's), BeOS (90's).&lt;br /&gt;
&lt;br /&gt;
=== '''Multiprogramables''' ===&lt;br /&gt;
&lt;br /&gt;
*Permiten ejecutar '''múltiples procesos en un único procesador'''. Se tienen varios programas cargados simultáneamente en la memoria, así que el SO debe controlar los accesos y los espacios de la misma.&lt;br /&gt;
*Tienen mecanismos de protección del espacio de memoria (el SO impide que una aplicación acceda al espacio de memoria de otra).&lt;br /&gt;
&lt;br /&gt;
====Características que pueden presentar:====&lt;br /&gt;
&lt;br /&gt;
*Multiprogramación: se ejecutan varios procesos simultáneamente de manera que se reparte el uso del procesador. A esta característica también se le llama (de forma imprecisa) &amp;quot;multitarea&amp;quot;.&lt;br /&gt;
**Multiusuario: admite múltiples usuarios trabajando simultáneamente.&lt;br /&gt;
**Multiacceso: el sistema ofrece varios mecanismos para el acceso concurrente a los diferentes procesos.&lt;br /&gt;
**Multiprocesamiento o multiprocesadores: soporta más de un procesador y hace uso de todos ellos.&lt;br /&gt;
***Tipos de sistemas multiprocesadores: especializados, con acoplamiento débil y con acoplamiento fuerte:&lt;br /&gt;
****Sistemas multiprocesadores con procesadores especializados: son sistemas que cuentan con un procesador de propósito general y varios procesadores especializados (como por ejemplo coprocesadores aritméticos o el procesador de una tarjeta gráfica(GPU)). Dichos procesadores especializados solo son capaces de ejecutar un conjunto de operaciones específicas y funcionan únicamente cuando el procesador general se lo solicita, en ese momento colaboran con el procesador general.&lt;br /&gt;
****Sistemas multiprocesadores con acoplamiento débil: son sistemas con procesadores relativamente independientes, cada uno tiene su propia memoria y sus propios canales de E/S.&lt;br /&gt;
****Sistemas multiprocesadores con acoplamiento fuerte: son sistemas con varios procesadores de propósito general independientes entre sí pero que comparten la memoria y trabajan bajo un sistema operativo común. &lt;br /&gt;
**Tiempo real: intenta garantizar que determinadas tareas se ejecuten en un plazo de tiempo específico. Atendiendo al nivel de exigencia, se subdividirían en dos: soft (suave) o '''flexible''' y hard (duro) o '''estricto'''. Un ejemplo puede ser el sistema operativo de tiempo real instalado en el procesador de un teléfono móvil; si llega una llamada tiene que pasarla en ese momento, si no, ese proceso deja de ser importante.&lt;br /&gt;
**Distribuido: permite la ejecución de múltiples procesos en diferentes máquinas comunicadas por un enlace de red. El primer SO en soportar esta característica fue [http://es.wikipedia.org/wiki/Plan_9_from_Bell_Labs Plan 9] de ''Bell Labs''.&lt;br /&gt;
&lt;br /&gt;
== 1.3.2. Según cómo se presta el servicio ==&lt;br /&gt;
&lt;br /&gt;
Clasificación no excluyente:&lt;br /&gt;
&lt;br /&gt;
* Sistemas operativos de servidor&lt;br /&gt;
* Sistemas operativos de ordenador personal&lt;br /&gt;
* Sistemas operativos en tiempo real&lt;br /&gt;
* Sistemas operativos embarcados / integrados / &amp;quot;embebidos&amp;quot; (dispositivos móviles o smartcard, p.ej.)&lt;br /&gt;
* Sistemas operativos web&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.1 [[Organización básica de un ordenador]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Llamadas_al_sistema&amp;diff=4259</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=4259"/>
				<updated>2019-02-19T15:57:29Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 2.7. Llamadas al sistema =&lt;br /&gt;
&lt;br /&gt;
== Definición de llamada al sistema ==&lt;br /&gt;
&lt;br /&gt;
Una llamada al sistema es un método o función que puede invocar un proceso para solicitar un cierto servicio al sistema operativo. Dado que el acceso a ciertos recursos del sistema requiere la ejecución de código en modo privilegiado, el sistema operativo ofrece un conjunto de métodos o funciones que el programa puede emplear para acceder a dichos recursos. En otras palabras, el sistema operativo actúa como intermediario, ofreciendo una interfaz de programación (API) que el programa puede usar en cualquier momento para solicitar recursos gestionados por el sistema operativo.&lt;br /&gt;
&lt;br /&gt;
Algunos ejemplos de llamadas al sistema son las siguientes:&lt;br /&gt;
&lt;br /&gt;
* '''write''', que se emplea para escribir un dato en un cierto dispositivo de salida, tales como una pantalla o un disco magnético.&lt;br /&gt;
* '''read''', que es usada para leer de un dispositivo de entrada, tales como un teclado o un disco magnético.&lt;br /&gt;
* '''open''', que es usada para obtener un descriptor de un fichero del sistema, ese fichero suele pasarse a write.&lt;br /&gt;
* '''close''', que se emplea para cerrar un descriptor de fichero.&lt;br /&gt;
&lt;br /&gt;
Todo sistema operativo ofrece un conjunto de llamadas al sistema. En el caso de Linux 3.0, se ofrecen un total de [http://syscalls.kernelgrok.com/ 345 llamadas al sistema]. El sistema operativo xv6 ofrece también una lista de llamadas al sistema [https://github.com/mit-pdos/xv6-public/blob/master/syscall.c#L107 mucho menor] al ser un sistema operativo muy sencillo.&lt;br /&gt;
&lt;br /&gt;
Toda llamada al sistema se identifica de manera unívoca mediante un valor numérico que no debe ser modificado a lo largo de la vida del sistema operativo para evitar que se rompa la compatibilidad hacia atrás.&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo muestra en C la invocación de las llamadas al sistema '''write''', '''read''', '''open''' y '''close'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
	char buf[1024];&lt;br /&gt;
	int fd, ret;&lt;br /&gt;
&lt;br /&gt;
	fd = open(&amp;quot;f123&amp;quot;, O_RDONLY);&lt;br /&gt;
	if (fd &amp;lt; 0) {&lt;br /&gt;
		perror(&amp;quot;open&amp;quot;);&lt;br /&gt;
		exit(EXIT_FAILURE);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	ret = read(fd, buf, sizeof(buf));&lt;br /&gt;
	if (ret &amp;lt; 0) {&lt;br /&gt;
		perror(&amp;quot;read&amp;quot;);&lt;br /&gt;
		exit(EXIT_FAILURE);&lt;br /&gt;
	}&lt;br /&gt;
	close(fd);&lt;br /&gt;
&lt;br /&gt;
	write(1, buf, ret);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Familias de llamadas al sistema operativo: POSIX y WIN32/64 ===&lt;br /&gt;
&lt;br /&gt;
Las dos familias de APIs estandarizas más importantes son:&lt;br /&gt;
&lt;br /&gt;
* [http://es.wikipedia.org/wiki/POSIX POSIX].&lt;br /&gt;
* WIN32/64, empleada en los sistemas operativos de tipo-Windows. Además, existen emuladores como '''Wine''' ''(permite instalar y ejecutar aplicaciones de Windows en distribuciones de Linux)'' que también las implementan.&lt;br /&gt;
&lt;br /&gt;
== Implementación de llamadas al sistema ==&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo muestra el código en ensamblador de x86 para invocar a la llamada al sistema '''write''' que permite escribir un dato en cualquier dispositivo. En concreto, se va a escribir una cadena por el dispositivo de salida '''pantalla''', que se identifica mediante el descriptor de fichero número 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
section .text&lt;br /&gt;
    global _start&lt;br /&gt;
_start:&lt;br /&gt;
    mov eax, 4         ;cargamos el número de la llamada al sistema en el regitro eax&lt;br /&gt;
    mov ebx, 1         ;cargamos el descriptor de fichero sobre el que queremos escribir&lt;br /&gt;
    mov ecx, string    ;cargamos en ecx la dirección de la cadena a imprimir&lt;br /&gt;
    mov edx, length   ;cargamos en edx el tamaño de la cadena a imprimir&lt;br /&gt;
    int 80h            ;se invoca a interrupción por software número 80&lt;br /&gt;
                       ;que invoca al dispatcher de llamadas al sistema&lt;br /&gt;
&lt;br /&gt;
    mov eax, 1&lt;br /&gt;
    mov ebx, 0&lt;br /&gt;
    int 80h&lt;br /&gt;
&lt;br /&gt;
section .data&lt;br /&gt;
    string: db &amp;quot;Hola Mundo&amp;quot;, 0x0A&lt;br /&gt;
    lenght: equ 13&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La instrucción ''int'' forma parte del conjunto de instrucciones de procesadores x86. Esta instrucción emite una [[Gestión_de_Entrada/Salida|interrupción]] por software cuyo tratamiento es realizado por la rutina ''dispatcher''. Dicha rutina se encarga del tratamiento de la interrupción por software número 80.&lt;br /&gt;
&lt;br /&gt;
En el siguiente segmento de código se muestra una llamada a sistema en un procesador de 32 bits:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
_start:&lt;br /&gt;
    movl $4, %eax   ; use the write syscall&lt;br /&gt;
    movl $1, %ebx   ; write to stdout&lt;br /&gt;
    movl $msg, %ecx ; use string &amp;quot;Hello World&amp;quot;&lt;br /&gt;
    movl $12, %edx  ; write 12 characters&lt;br /&gt;
    int $0x80       ; make syscall&lt;br /&gt;
    &lt;br /&gt;
    movl $1, %eax   ; use the _exit syscall&lt;br /&gt;
    movl $0, %ebx   ; error code 0&lt;br /&gt;
    int $0x80       ; make syscall&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análogamente en un procesador de 64 bits:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
_start:&lt;br /&gt;
    movq $4, %rax   ; use the write syscall&lt;br /&gt;
    movq $1, %rdi   ; write to stdout&lt;br /&gt;
    movq $msg, %rsi ; use string &amp;quot;Hello World&amp;quot;&lt;br /&gt;
    movq $12, %rdx  ; write 12 characters&lt;br /&gt;
    syscall         ; make syscall&lt;br /&gt;
    &lt;br /&gt;
    movq $60, %rax  ; use the _exit syscall&lt;br /&gt;
    movq $0, %rdi   ; error code 0&lt;br /&gt;
    syscall         ; make syscall&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ejemplo de llamadas al sistema de Linux (64 bits):''' http://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/&lt;br /&gt;
&lt;br /&gt;
[http://cs.lmu.edu/~ray/notes/linuxsyscalls/ Implementación de llamadas al sistema en Linux (32 y 64 bit)]&lt;br /&gt;
&lt;br /&gt;
== El ''dispatcher'' ==&lt;br /&gt;
&lt;br /&gt;
El dispatcher, que forma parte del SO, se ejecuta cuando se invoca una llamada al sistema. &lt;br /&gt;
Cuando un proceso hace una llamada al sistema, el dispatcher, se encarga de invocar la llamada que el proceso ha solicitado.&lt;br /&gt;
 &lt;br /&gt;
Tiene un comportamiento sincronizado, cuando recibe una llamada se la pasa al sistema operativo y hasta que no recibe respuesta no atiende otra llamada. &lt;br /&gt;
&lt;br /&gt;
En el caso de x86, el dispatcher consulta el registro eax e invoca a la llamada al sistema identificada con dicha numeración.&lt;br /&gt;
&lt;br /&gt;
El sistema xv6 ofrece un dispatcher muy sencillo, que se puede consultar [https://github.com/mit-pdos/xv6-public/blob/master/syscall.c#L132 aquí].&lt;br /&gt;
&lt;br /&gt;
2.8. [[Ejercicios_fundamentos_Sistemas_Operativos | Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
3.1. [[Modelos_de_Diseño_de_Sistemas_Operativos | Modelos de Diseño de SSOO]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Qu%C3%A9_es_un_Sistema_operativo&amp;diff=4245</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=4245"/>
				<updated>2019-02-12T18:13:11Z</updated>
		
		<summary type="html">&lt;p&gt;Antsilgor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Archivo:Arquitectura_SO.svg|right|370px]]&lt;br /&gt;
Un '''sistema operativo''' es el '''software''' que gestiona los tres recursos fundamentales de un computador (la parte hardware), que son:&lt;br /&gt;
&lt;br /&gt;
* El procesador o CPU.&lt;br /&gt;
* La memoria principal.&lt;br /&gt;
* Los dispositivos de Entrada/Salida.&lt;br /&gt;
&lt;br /&gt;
Las utilidades y características de estos son las siguientes:&lt;br /&gt;
&lt;br /&gt;
* '''Abstrae del hardware''': Esto hace posible que los programas desarrollados para el sistema operativo en cuestión funcionen en distintos dispositivos, sin conocer sus detalles específicos. Es el sistema operativo el que se encarga de comunicarlo con el hardware.&lt;br /&gt;
&lt;br /&gt;
* '''Proporciona una biblioteca de métodos a las aplicaciones de usuario''': Estos métodos o funciones pueden ser usados por los programadores a la hora de desarrollar sus aplicaciones.&lt;br /&gt;
&lt;br /&gt;
* '''Gestiona los recursos de manera equitativa''': Un sistema operativo debe encargarse de que los procesos progresen en tiempo de ejecución. Un solo procesador debe encargarse de un gran número de procesos simultáneamente, y no es posible hacerlo en paralelo. El sistema operativo los gestiona para que todos los procesos avancen de manera ecuánime.&lt;br /&gt;
&lt;br /&gt;
* '''Debe consumir el mínimo de recursos''': Para que los procesos se realicen de la manera más rápida posible, el sistema operativo debe consumir los menos recursos posibles, de manera que la mayor parte de recursos se dedique a estos procesos.&lt;br /&gt;
&lt;br /&gt;
* '''Lanzador de aplicaciones''': El sistema operativo ofrece al usuario una interfaz que le permite lanzar las aplicaciones de usuario, ya sea de modo texto, gráfico basado en ventanas y ratón, táctil y la última implementada, mediante órdenes de voz .&lt;br /&gt;
&lt;br /&gt;
1.2. [[Introducción histórica|Breve introducción histórica a los Sistemas Operativos]]&lt;/div&gt;</summary>
		<author><name>Antsilgor</name></author>	</entry>

	</feed>