252M 6 SO
this site the web

5.5 relojes

Los relojes o cronómetros son esenciales para la operación de sistemas de tiempo compartido
Registran la hora del día.
Evitan que un proceso monopolice la cpu.

5.5.1 hardware de discos

Los discos están organizados en cilindros, pistas y sectores.
El número típico de sectores por pista varía entre 8 y 32 (o más).
Todos los sectores tienen igual número de bytes.
Los sectores cercanos a la orilla del disco serán mayores físicamente que los cercanos al anillo.
Un controlador puede realizar búsquedas en una o más unidades al mismo tiempo:
• Son las búsquedas traslapadas.
• Mientras el controlador y el software esperan el fin de una búsqueda en una unidad, el controlador puede iniciar una búsqueda en otra.
Muchos controladores pueden:
• Leer o escribir en una unidad.
• Buscar en otra.

5.5.2 El software para reloj

toma generalmente la forma de un manejador de dispositivo, aunque no es un dispositivo de bloque ni de caracter.
Los relojes más sencillo trabajan con la línea de corriente eléctrica de 110 o 220 voltios y provocan una interrupción por cada ciclo de voltaje, a 50 o 60 hz.
Otro tipo de relojes consta de tres componentes:
• Un oscilador de cristal, un contador y un registro.
• Una pieza de cristal de cuarzo se monta en una estructura bajo tensión:
o Genera una señal periódica de muy alta precisión, generalmente entre 5 y 100 mhz.
o La señal se alimenta en el contador para que cuente en forma descendente hasta cero.
o Cuando el contador llega a cero, provoca una interrupción de la cpu.
Los relojes programables tienen varios modos de operación:
• Modo de una instancia:
o Cuando el reloj se inicializa, copia el valor del registro en el contador.
o Decrementa el contador en cada pulso del cristal.
o Cuando el contador llega a cero provoca una interrupción y se detiene hasta ser nuevamente inicializado por el software.
• Modo de onda cuadrada:
o Luego de llegar a cero y provocar la interrupción, el registro se copia de manera automática en el contador.
o Todo el programa se repite en forma indefinida.
o Las interrupciones periódicas se llaman marcas del reloj.
La ventaja del reloj programable es que su frecuencia de interrupción puede ser controlada por el software.
Las principales funciones del software manejador del reloj son:
• Mantener la hora del día o tiempo real.
• Evitar que los procesos se ejecuten durante más tiempo del permitido.
• Mantener un registro del uso de la cpu.
• Controlar llamadas al sistema tipo “alarm” por parte de los procesos del usuario.
• Proporcionar cronómetros guardianes de partes del propio sistema.
• Realizar resúmenes, monitoreo y recolección de estadísticas.
El software manejador del reloj puede tener que simular varios relojes virtuales con un único reloj físico.

5.5.3 MANEJADOR DE RELOJ

Las principales funciones del software manejador del reloj son:
 Mantener la hora del día o tiempo real
 Evitar que los procesos se ejecuten durante mas tiempo del permitido
 Mantener un registro del uso de la CPU
 Controlar llamadas al sistema tipo “alarm” por parte de los procesos del usuario
 Proporcionar cronómetros guardianes de partes del propio sistema
 Realizar resúmenes, monitoreo y recolección de estadísticas
El software manejador del reloj puede tener que simular varios relojes virtuales con un único reloj físico.

5.2.5 SOFTWARE DE E / S EN EL ESPACIO DEL USUARIO

La mayoría del software de e / s está dentro del S. O.
Una pequeña parte consta de bibliotecas ligadas entre sí con los programas del usuario.
La biblioteca estándar de e / s contiene varios procedimientos relacionados con e / s y todos se ejecutan como parte de los programas del usuario.
Otra categoría importante de software de e / s a nivel usuario es el sistema de spooling.
El spooling es una forma de trabajar con los dispositivos de e /s de uso exclusivo en un sistema de multiprogramación:
• El ejemplo típico lo constituye la impresora de líneas.
• Los procesos de usuario no abren el archivo correspondiente a la impresora.
• Se crea un proceso especial, llamado demonio en algunos sistemas.
• Se crea un directorio de spooling.
Para imprimir un archivo:
• Un proceso genera todo el archivo por imprimir y lo coloca en el directorio de spooling.
• El proceso especial, único con permiso para utilizar el archivo especial de la impresora, debe imprimir los archivos en el directorio.
• Se evita el posible problema de tener un proceso de usuario que mantenga un recurso tomado largo tiempo.
Un esquema similar también es aplicable para la transferencia de archivos entre equipos conectados:
• Un usuario coloca un archivo en un directorio de spooling de la red.
• Posteriormente, el proceso especial lo toma y transmite. Un ej. son los sistemas de correo electrónico.

5.3 DISCOS EN RAM

Utilizan una parte de la memoria principal asignada con anterioridad para almacenar los bloques
Tienen la ventaja del acceso instantáneo:
• No hay demora rotacional o debida a las búsquedas.
• Son adecuados para el almacenamiento de programas o datos con accesos muy frecuentes.
Los bloques de almacenamiento tienen el mismo tamaño que en los discos reales.
Cuando el manejador debe leer de o escribir en un bloque de un disco en RAM, calcula el lugar de la memoria donde se encuentra el bloque solicitado y lee o escribe en el mismo.

5.4 DISCO DURO

Un disco duro (del inglés hard disk (HD)) es un disco magnético en el que puedes almacenar datos de ordenador. El disco duro es la parte de tu ordenador que contiene la información electrónica y donde se almacenan todos los programas (software). Es uno de los componentes del hardware más importantes dentro de tu PC.
El término duro se utiliza para diferenciarlo del disco flexible o disquete (floppy en inglés). Los discos duros pueden almacenar muchos más datos y son más rápidos que los disquetes. Por ejemplo, un disco duro puede llegar a almacenar más de 100 gigabytes, mientras que la mayoría de los disquetes tienen una memoria máxima de 1.4 megabytes.
Componentes de un disco duro
Normalmente un disco duro consiste en varios discos o platos. Cada disco requiere dos cabezales de lectura/grabación, uno para cada lado. Todos los cabezales de lectura/grabación están unidos a un solo brazo de acceso, de modo que no puedan moverse independientemente. Cada disco tiene el mismo número de pistas, y a la parte de la pista que corta a través de todos los discos se le llama cilindro.

5.4.1 SOFTWARE DE DISCO

Siempre que se enciende el computador, los discos sobre los que se almacenan los datos giran a una gran velocidad (a menos que disminuyan su potencia para ahorrar electricidad).
Los discos duros de hoy, con capacidad de almacenar multigigabytes mantienen el mínimo principio de una cabeza de Lectura/Escritura suspendida sobre una superficie magnética que gira velozmente con precisión microscópica.
Pero hay un aspecto de los discos duros que probablemente permanecerá igual. A diferencia de otros componentes de la PC que obedecen a los comandos del software, el disco duro hace ruidos cuando emprende su trabajo. Estos ruidos son recordatorio de que es uno de los pocos componentes de una PC que tiene carácter mecánico y electrónico al mismo tiempo
Los discos duros pertenecen a la llamada memoria secundaria o almacenamiento secundario. Al disco duro se le conoce con gran cantidad de denominaciones como disco duro, rígido (frente a los discos flexibles o por su fabricación a base de una capa rígida de aluminio), fijo (por su situación en el ordenador de manera permanente). Estas denominaciones aunque son las habituales no son exactas ya que existen discos de iguales prestaciones pero son flexibles, o bien removibles o transportables, u otras marcas diferentes fabricantes de cabezas.
Las capacidades de los discos duros varían desde 10 Mb. hasta varios Gb. en minis y grandes ordenadores. Para conectar un disco duro a un ordenador es necesario disponer de una tarjeta controladora. La velocidad de acceso depende en gran parte de la tecnología del propio disco duro y de la tarjeta controladora asociada al discos duro.
Estos están compuestos por varios platos, es decir varios discos de material magnético montados sobre un eje central sobre el que se mueven. Para leer y escribir datos en estos platos se usan las cabezas de lectura/escritura que mediante un proceso electromagnético codifican / decodifican la información que han de leer o escribir. La cabeza de lectura/escritura en un disco duro está muy cerca de la superficie, de forma que casi vuela sobre ella, sobre el colchón de aire formado por su propio movimiento. Debido a esto, están cerrados herméticamente, porque cualquier partícula de polvo puede dañarlos.
Unidad de disco duro:
Los discos duros se presentan recubiertos de una capa magnética delgada, habitualmente de óxido de hierro, y se dividen en unos círculos concéntricos cilindros (coincidentes con las pistas de los disquetes), que empiezan en la parte exterior del disco (primer cilindro) y terminan en la parte interior (último). Asimismo estos cilindros se dividen en sectores, cuyo número esta determinado por el tipo de disco y su formato, siendo todos ellos de un tamaño fijo en cualquier disco. Cilindros como sectores se identifican con una serie de números que se les asignan, empezando por el 1, pues el numero 0 de cada cilindro se reserva para propósitos de identificación mas que para almacenamiento de datos. Estos, escritos/leídos en el disco, deben ajustarse al tamaño fijado del almacenamiento de los sectores. Habitualmente, los sistemas de disco duro contienen más de una unidad en su interior, por lo que el número de caras puede ser más de 2. Estas se identifican con un número, siendo el 0 para la primera. En general su organización es igual a los disquetes. La capacidad del disco resulta de multiplicar el número de caras por el de pistas por cara y por el de sectores por pista, al total por el número de bytes por sector.

5.4.2 HARDWARE PARA DISCOS

Los discos están organizados en cilindros, pistas y sectores.
El número típico de sectores por pista varía entre 8 y 32 (o más).
Todos los sectores tienen igual número de bytes.
Los sectores cercanos a la orilla del disco serán mayores físicamente que los cercanos al anillo.
Un controlador puede realizar búsquedas en una o más unidades al mismo tiempo:
• Son las búsquedas traslapadas.
• Mientras el controlador y el software esperan el fin de una búsqueda en una unidad, el controlador puede iniciar una búsqueda en otra.
Muchos controladores pueden:
• Leer o escribir en una unidad.
• Buscar en otra.
Los controladores no pueden leer o escribir en dos unidades al mismo tiempo.
La capacidad de búsquedas traslapadas puede reducir considerablemente el tiempo promedio de acceso.
5.2.4 SOFTWARE DE IO INDEPENDIENTE DE DISPOSITIVOS.
El siguiente nivel dentro de la administración de dispositivos de entrada/salida tenemos al subsistema de E/S del kernel. Este es una interfaz común de la cual pueden hacer uso todos los manejadores de dispositivos.
El kernel además proporciona servicios relacionados con la E/S tales como:

1.Planificación.
2.Almacenamiento en búfer.
3.Almacenamiento en caché.
4.Administración de colas.
5.Reserva de dispositivos.
6.Tratamiento de errores.

Planificación

Significa determinar un orden mediante el cual se debe de ejecutar las órdenes de entrada/salida. Muchas veces, el orden en el cual son solicitadas no es la mejor manera de ejecutarlas. Bajo una buena planificación es posible elevar el desempeño de sistema, puesto que va a permitir compartir el acceso a los dispositivos de forma equitativa entre los distintos procesos y puede reducir el tiempo de espera promedio requerido para que la entrada/salida se complete.
Los diseñadores de sistemas operativos implementan los mecanismos de planificación manteniendo una cola de espera de solicitudes para cada dispositivo. Cuando una aplicación ejecuta una llamada al sistema de entrada/salida solicitando a su vez el bloqueo, la solicitud se coloca en la cola correspondiente a dicho dispositivo. El planificador de entrada/salida reordena la cola para mejorar la eficiencia global del sistema y el tiempo promedio de respuesta experimentado por las aplicaciones.
El sistema operativo puede escoger en dar un servicio equitativo a todos los procesos que demandan servicios de entrada/salida o pueden también privilegiar a ciertos procesos que tienen mayor prioridad y que son sensibles a la pérdida de datos si no se atienden con la suficiente rapidez.
Cuando el sistema operativo soporta mecanismos de entrada salida asíncrona, debe también ser capaz de controlar múltiples solicitudes de entrada/salida que lleguen simultáneamente. Para solucionar este problema, el sistema operativo hace uso de una cola de espera asociada a cada dispositivo de entrada/salida. En esta estructura de datos el sistema operativo mantiene información acerca del estado del dispositivo.
Almacenamiento en búfer
Un búfer es un área de memoria que permite almacenar datos temporalmente mientras se están transfiriendo entre dos dispositivos o entre un dispositivo y un proceso o aplicación. El almacenamiento en búfer se realiza por tres razones:
•Permite adaptar las diferentes velocidades de los dispositivos o la aplicación.
•Permite adaptar el tamaño de transferencia de datos que pueden tener dispositivos diferentes. Esto es el tamaño de búfer interno puede variar de dispositivo a dispositivo. Entonces con un búfer intermedio puede resolverse este problema.
•Permite también mantener la integridad de los datos durante una transferencia de datos. Esto suele pasar cuando una aplicación hace una llamada al sistema operativo para escribir información de su búfer, el sistema operativo copia primero esos datos a otro búfer y libera a la aplicación. Si la aplicación hace cambios en su búfer, éstos no se reflejarán en disco puesto que fueron hechos después de la llamada de escritura.

Almacenamiento en caché.

Una caché es una región de memoria rápida que alberga copias de ciertos datos. El acceso a la copia almacenada en la caché es más rápida que la que se hace a la memoria principal. No debe confundirse el almacenamiento en búfer con el de la caché. Un búfer puede almacenar la única copia existente de un elemento de datos, mientras que una caché, por definición, almacena en un dispositivo más rápido una copia de un elemento de datos que existe en otro lugar.


Administración de colas

Una cola de dispositivo es un búfer que almacena la salida dirigida a un dispositivo, por ejemplo, una impresora, que no pueda aceptar flujos de datos entrelazados. Aunque una impresora solo puede dar servicio a un trabajo a la vez, es posible que varias aplicaciones quieran hacer uso de la impresora en un mismo instante. Por supuesto que si el sistema operativo permitiera esa situación, los trabajos enviados se mezclarían siendo así inservibles. Para resolver este problema, el sistema operativo intercepta toda la salida dirigida a la impresora y va almacenando cada trabajo en un archivo de disco separado. Cuando una aplicación termina de imprimir, el sistema de administración de colas pone otro archivo temporal en la impresora. Esta administración puede llevarse a cabo ya sea por un hilo del sistema operativo o por un demonio de impresión. Cualquiera de estas técnicas permiten al usuario a al administrador ver el estado de impresión de los trabajos o de las impresoras, así como agregar nuevos trabajos, suspenderlos si hay un error o eliminarlos.

Tratamiento de errores
Un sistema operativo que utilice memoria protegida debe de prever los posibles errores de hardware y de las aplicaciones, de modo que cada pequeño error no provoque un fallo completo del sistema. Los dispositivos y las transferencias de entrada salida pueden fallar de muchas maneras, debido a razones transitorias como por ejemplo, cuando una red local se sobrecarga y no es capaz de comunicar adecuadamente dos computadoras o razones más graves como cuando falla la tarjeta controladora de disco o hay un error en la memoria principal.
Cuando ocurre un error de entrada salida es normal que el sistema operativo reintente la operación algunas veces para tratar de recuperarse del error, pero si el fallo es permanente, el sistema operativo debe de buscar la forma recuperarse perdiendo la menor cantidad de datos posible y evitando también que sean afectadas otras aplicaciones.
5.2.3 MANEJADOR DE DISPOSITIVOS

Son los manejadores asociados al dispositivo.
Un manejador contiene código dependiente de las características del dispositivo, por lo que el esquema del funcionamiento que se proporciona aquí es muy general. Para cada petición, el
Manejador o gestor del dispositivo está a la espera de que la rutina de E/S señale su evento, según se ha descrito más arriba, para atenderla. En un esquema cliente servidor, el manejador realiza un bucle infinito, bloqueándose en cada iteración.

Se describe el esquema ejemplo: de una iteración para el tratamiento de una entrada/salida por interrupciones típica en un dispositivo de caracteres.
•Cuando el manejador detecta un evento de petición pendiente, toma un elemento (IORB) de su cola de peticiones y extrae los parámetros de la petición.

•Programa la operación solicitada. Esto hace que el manejador se bloquee y que el núcleo del sistema operativo promueva un cambio de contexto.


•Espera por el final de la operación. Cuando se ejecute la rutina de atención correspondiente, el manejador se desbloquea y puede continuar.

•Transfiere la información a/desde el buffer especificado en el IORB. Para algunos dispositivos es preciso traducir la representación de los datos.


•Hace una comprobación de errores y escribe en el IORB el diagnóstico de la operación.

•Señala el evento especificado por el cliente en el IORB

•Si se trata de transferencias DMA (en dispositivos de bloques), el paso (4) va implícito y no lo gestiona el manejador, realizándose entre los pasos (2) y (3).


La función básica, consiste en ejecutar las funciones de entrada y salida que son comunes a todos los dispositivos.
Funciones:
•Identificación del dispositivo (Ubicación, tipo).
•Proveer un tamaño de bloque, independiente
•del dispositivo
•Asignación de memoria a los bloques, en los
•dispositivos.
•Asignación y liberación de los dispositivos
•dedicados.
5.2.2 MANEJADORES DE INTERRUPCIONES

Manejadores de Interrupciones: Tratan las interrupciones que generan los controladores de los dispositivos una vez que estos están listos para la transferencia de datos o bien han leído o escrito los datos de la memoria principal.

La función principal de los manejadores de interrupciones es:

Su función es salvar los registros, comunicar el evento al manejador del dispositivo y restaurar la ejecución de un proceso. Cuando una interrupción ocurre muy frecuentemente, caso del reloj, o cuando la cantidad de información a transferir es muy pequeña, en el caso del teclado, sería muy costoso comunicar siempre el evento al manejador de dispositivo asociado. En estos casos, el propio manejador de interrupción registra la ocurrencia del evento, bien mediante el incremento de una variable global para el reloj o la acumulación de caracteres en un buffer del teclado. La notificación al manejador se hace únicamente cada cierto número de ocurrencias del evento, el caso del reloj, o activando un flag que indica que hay datos en el buffer del teclado.

•Las interrupciones deben diseñarse y manejarse en la forma más oculta posible.
•La mejor forma es que cada proceso que inicie una operación de E/S se bloquee hasta que la operación se haya completado y ocurra la interrupción.
•Luego, cuando la interrupción ocurre, el procedimiento de interrupción desbloquea el proceso que la originó.
5.2.1 OBJETIVOS DEL SOFTWARE DE IO

Para lograr estos objetivos, el Software de E/S puede estructurarse en cuatro capas de la siguiente manera:
•Manejadores de interrupciones. ( Interrupt -Handlers ).
•Manejadores de dispositivos ( Device- Driver)
•Software de E/S independiente del dispositivo
•( Device Independient I/O Software ).
•Software de E/S al nivel del usuario ( User level software ).

El objetivo de lograr nombres uniformes está muy relacionado con el de independencia del dispositivo.
Todos los archivos y dispositivos adquieren direcciones de la misma forma, es decir mediante el nombre de su ruta de acceso.
Lo mas importante del software es el manejo de errores de e / s:
• Generalmente los errores deben manejarse lo más cerca posible del hardware.
• Solo si los niveles inferiores no pueden resolver el problema, se informa a los niveles superiores.
• Generalmente la recuperación se puede hacer en un nivel inferior y de forma transparente. Otro aspecto clave son las transferencias síncronas (por bloques) o asíncronas (controlada por interruptores):
• La mayoría de la e / s es asíncrona: la CPU inicia la transferencia y realiza otras tareas hasta una interrupción.
• La programación es más fácil si la e / s es síncrona (por bloques): el programa se suspende automáticamente hasta que los datos estén disponibles en el buffer.

5.3 CONTROLADOR DE DISPOSITIVOS

Las unidades de entrada y salida constan por lo general de un componente mecánico y otro electrónico. El componente electrónico se llama controlador de dispositivo de adaptador.
La tarjeta controladora tiene por lo general un conector, en el que se puede conectar el cable que va al dispositivo en sí. Muchos controladores pueden manejar dos, cuatro y hasta ocho dispositivos idénticos.
El controlador de una terminal CRT también funciona como un dispositivo de bits en un nivel igual de bajo. Lee bytes que contienen caracteres a exhibir en la memoria y genera las señales utilizadas para modular la luz CRT para que esta se escriba en la pantalla. El controlador también genera las señales para que la luz CRT vuelva a realizar un trazo horizontal después de terminar una línea de rastreo, así como las señales para que se vuelva a hacer un trazo vertical después de rastrear en toda la pantalla. De no ser por el controlador CRT, el programador del sistema operativo tendría que programar en forma explicita el rastreo análogo del tubo de rayos catódicos. Con el controlador, el sistema operativo inicializa éste con pocos parámetros, tales como el número de caracteres por línea y el número de líneas en la pantalla, para dejar que el controlador se encargue de dirigir en realidad el rayo de luz.
Cada controlador tiene unos cuantos registros que se utiliza para la comunicación con la CPU. En ciertas computadoras, estos registros son parte del espacio normal de direcciones de la memoria.

5.2 PRINCIPIOS Y CUALIDADES DEL SOFTWARE

En general la elección de principios y técnicas está determinada por las cualidades que se desean para el software.
Los principios están orientados a obtener sistemas confiables y evolucionables. El IS no sólo necesita buenos principios para obtener productos de calidad sino también técnicas, metodologías y herramientas que se apoyen sobre ellos.
Rigor y formalidad
Sólo una aproximación rigurosa puede producir productos más confiables, controlar sus costos e incrementar su confiabilidad. La ventaja de la formalidad sobre el rigor es que la formalidad puede ser la base para la mecanizació del proceso.
No hay necesidad de ser formal durante todo el desarrollo pero el IS debe saber cuándo, cómo y dónde utilizar la formalidad.
Separación de intereses Permite lidiar con aspectos individuales del problema. Primero se debe intentar separar los temas que no están íntimamente relacionados entre sí.
La separación se puede hacer según vario criterios:
Tiempo (ciclo de vida del software)
Cualidades
Vistas (flujo de datos, de control, estático, dinámico,
etc.)
Partes (estructura, diseño)

5.6 TERMINALES

En informática terminal se refiere al dispositivo hardware usado para introducir o mostrar datos de una computadora. Por extensión puede entenderse como terminal la línea de comandos, que es el software que habitualmente se asociaba a estos terminales
Los sistemas originales UNIX® no tenín consolas. En su lugar la gente se firmaba y corría programas a través de terminales conectadas a los puertos serie de la computadora. Es bastante similar a usar un modem y un programa de terminal para marcar hacia un sistema remoto para hacer trabajo en modo texto.
Las PCs actuales tienen consolas con gráficos de alta calidad, pero la habilidad para establecer una sesión en un puerto serie todavía existe en casi cualquier sistema operativo UNIX al día de hoy; FreeBSD no es la excepción. Utilizando una terminal conectada a un puerto serie libre, usted puede accesar y correr cualquier programa de texto que podría correr normalmente en la consola o en una ventana xterm en el sistema X Window.
Para el usuario corporativo, se pueden conectar muchas terminales a un sistema FreeBSD y ponerlas en los escritorios de sus empleados. Para un usuario casero, una computadora de reserva, como una IBM PC más antigua o una Macintosh®, puede ser una terminal cableada a una computadora más poderosa corriendo FreeBSD. Puede convertir lo que de otra manera sería una computadora de un solo usuario en un poderoso sistema de usuarios múltiples.
Para FreeBSD, existen tres clases de terminales:
• Terminales tontas
• PCs actuando como terminales
• Terminales X

4.1.1 organizacion de la memoria

Los sistemas de administración de memoria se pueden clasificar en dos tipos: los que desplazan los procesos de la memoria principal al disco y viceversa durante la ejecución y los que no.
El propósito principal de una computadora es el de ejecutar programas, estos programas, junto con la información que accesan deben de estar en la memoria principal (al menos parcialmente) durante la ejecución.
Para optimizar el uso del CPU y de la memoria, el sistema operativo debe de tener varios procesos a la vez en la memoria principal, para lo cual dispone de varias opciones de administración tanto del procesador como de la memoria. La selección de uno de ellos depende principalmente del diseño del hardwarepara el sistema. A continuación se observarán los puntos correspondientes a la administración de la memoria.
Se jerarquizan en: memoria real, memoria virtual y segmentación

4.1.2 administrador de la memoria

El Administrador De Memoria se refiere a los distintos métodos y operaciones que se encargan de obtener la máxima utilidad de la memoria, organizando los procesos y programas que se ejecutan de manera tal que se aproveche de la mejor manera posible el espacio disponible.
Para poder lograrlo, la operación principal que realiza es la de trasladar la información que deberá ser ejecutada por el procesador, a la memoria principal. Actualmente esta administración se conoce como Memoria Virtual ya que no es la memoria física del procesador sino una memoria virtual que la representa. Entre algunas ventajas, esta memoria permite que el sistema cuente con una memoria más extensa teniendo la misma memoria real, con lo que esta se puede utilizar de manera más eficiente. Y por supuesto, que los programas que son utilizados no ocupen lugar innecesario.
Las técnicas que existen para la carga de programas en la memoria son: partición fija, que es la división de la memoria libre en varias partes (de igual o distinto tamaño) y la partición dinámica, que son las particiones de la memoria en tamaños que pueden ser variables, según la cantidad de memoria que necesita cada proceso.

4.1.3 jerarquia de la memoria

Se conoce como jerarquía de memoria a la organización piramidal de la memoria en niveles, que tienen los ordenadores. Su objetivo es conseguir el rendimiento de una memoria de gran velocidad al coste de una memoria de baja velocidad, basándose en el principio de cercanía de referencias.
Los puntos básicos relacionados con la memoria pueden resumirse en:
* Cantidad
* Velocidad
* Coste
La cuestión de la cantidad es simple, cuanto más memoria haya disponible, más podrá utilizarse. La velocidad óptima para la memoria es la velocidad a la que el procesador puede trabajar, de modo que no haya tiempos de espera entre cálculo y cálculo, utilizados para traer operandos o guardar resultados. En suma, el costo de la memoria no debe ser excesivo, para que sea factible construir un equipo accesible.

4.1.4 estrategias para la administracion de memoria

ADMINISTRACION DE MEMORIA CONCEPTO:
La memoria principal puede ser considerada como un arreglo lineal de localidades de almacenamiento de un byte de tamaño. Cada localidad de almacenamiento tiene asignada una dirección que la identifica.
POLITICAS Y FILOSOFIA DE LA ADMINISTRACION DE LA MEMORIA.
La memoria principal es el lugar donde el CPU lee las instrucciones a ejecutar, asi como algunos datos a emplear.
Una de las funciones básicas que debe implementar un SO es la Administración de la Memoria para tener un control sobre los lugares donde están almacenados los procesos y datos que actualmente se están utilizando.
MECANISMOS DE ASIGNACION. Un mecanismo de asignación determina la cantidad de bloques (particiones) que serán administrados en la memoria.
Existen 3 mecanismos de Asignación:
1. ASIGNACIÓN DE UNA PARTICIÓN. En la memoria se considera la existencia de una sola partición, esto es, se tiene la capacidad de ejecutar un proceso. La partición es toda la memoria, cuya administración corre por cuenta del usuario, o sea, no hay un sistema operativo.
2. ASIGNACIÓN DE DOS PARTICIONES. La memoria se divide en 2 bloques. En una partición se carga el Sistema Operativo y en la otra el programa del usuario. Es el concepto de Sistema Operativo Monousuario.
3. ASIGNACIÓN DE MULTIPLES PARTICIONES. La memoria es dividida en varias particiones una para el Sistema Operativo y las demás para los procesos de usuarios u otras funciones especiales del Sistema Operativo. Este es el concepto teórico de asignación de memoria en los Sistemas Operativos de Multiparticiones y de Multitarea..
ESTRATEGIAS DE ASIGNACIÓN.
Una estrategia de asignación de memoria determina el lugar donde será cargado un nuevo proceso en base a un criterio.
Las estrategias de asignación son:
1. PRIMER AJUSTE. El Sistema Operativo asigna el primer bloque de memoria libre con espacio suficiente para satisfacer la información. La búsqueda de este bloque es de manera secuencial.
2. MEJOR AJUSTE. El sistema operativo busca el bloque de memoria que represente el menor desperdicio según el requerimiento.
3. PEOR AJUSTE. El sistema operativo asigna el bloque mas grande que encuentre.
MÉTODOS DE ASIGNACIÓN DE MEMORIA.
Un método de asignación de memoria es la manera mediante la cual el Sistema Operativo lleva el control de la memoria tratando de que sea lo más eficiente posible.
Los métodos de asignación más comunes son:
SEGMENTACIÓN.
Este método consiste en la asignación de bloques de memoria de tamaño variable, llamados segmentos. El tamaño de cada segmento será el requerido según la petición, por ejemplo el tamaño del proceso a cargar.
El tamaño máximo para un segmento estará determinado por la capacidad de direccionamiento del hardware de la computadora, esto es, de cuantos bits se dispone para almacenar una dirección. El acceso a cada elemento individual (byte) en la memoria se hace mediante una dirección de memoria que se integra por dos elementos: una dirección de segmento y una de desplazamiento.
La combinación (suma) de la dirección de segmento y la de desplazamiento generan la dirección de memoria absoluta a accesar.

4.1.5 multiprogramacion con particiones y variables fijas

Para poder implementar la multiprogramación, se puede hacer uso de particiones fijas o variables en la memoria. En el caso de las particiones fijas, la memoria se puede organizar dividiéndose en diversas partes, las cuales pueden variar en tamaño. Esta partición la puede hacer el usuario en forma manual, al iniciar una sesión con la máquina.
Una vez implementada la partición, hay dos maneras de asignar los procesos a ella. La primera es mediante el uso de una cola única que asigna los procesos a los espacios disponibles de la memoria conforme se vayan desocupando. El tamaño del hueco de memoria disponible es usado para localizar en la cola el primer proceso que quepa en él. Otra forma de asignación es buscar en la cola el proceso de tamaño mayor que se ajuste al hueco, sin embargo hay que tomar en cuenta que tal método discrimina a los procesos más pequeños. Dicho problema podría tener solución si se asigna una partición pequeña en la memoria al momento de hacer la partición inicial, el cual sería exclusivo para procesos pequeños.
Esta idea nos lleva a la implementación de otro método para particiones fijas, que es el uso de diferentes colas independientes exclusivas para cierto rango en el tamaño de los procesos. De esta manera al llegar un proceso, éste sería asignado a la cola de tamaño más pequeño que la pueda aceptar. La desventaja en esta organización es que si una de las colas tiene una larga lista de procesos en espera, mientras otra cola esta vacía, el sector de memoria asignado para ese tamaño de procesos estaría desperdiciándose.



Multiprogramación con particiones variables
Este esquema fue originalmente usado por el sistema operativo IBM OS/360 (llamado MFT), el cual ya no está en uso. El sistema operativo lleva una tabla indicando cuáles partes de la memoria están disponibles y cuáles están ocupadas. Inicialmente, toda la memoria está disponible para los procesos de usuario y es considerado como un gran bloque o hueco único de memoria. Cuando llega un proceso que necesita memoria, buscamos un hueco lo suficientemente grande para el proceso. Si encontramos uno, se asigna únicamente el espacio requerido, manteniendo el resto disponible para futuros procesos que requieran de espacio. Cuando a un proceso se le asigna un espacio y es cargado a la memoria principal, puede entonces competir para el uso del CPU.

4.2 MEMORIA REAL

La memoria real o principal es en donde son ejecutados los programas y procesos de una computadora y es el espacio real que existe en memoria para que se ejecuten los procesos. Por lo general esta memoria es de mayor costo que la memoria secundaria, pero el acceso a la información contenida en ella es de más rápido acceso. Solo la memoria cache es más rápida que la principal, pero su costo es a su vez mayor.

4.2.1 administracion de la memoria con mapa de bits

Este tipo de administración divide la memoria en unidades de asignación, las cuales pueden ser tan pequeñas como unas cuantas palabras o tan grandes como varios kilobytes. A cada unidad de asignación le corresponde un bit en el mapa de bits, el cual toma el valor de 0 si la unidad está libre y 1 si está ocupada (o viceversa).
Un mapa de bits es una forma sencilla para llevar un registro de las palabras de la memoria en una cantidad fija de memoria, puesto que el tamaño del mapa sólo depende del tamaño de la memoria y el tamaño de la unidad de asignación.

4.2.2 administracion de la memoria con listas ligadas

Otra forma de mantener un registro de la memoria es mediante una lista ligada de los segmentos de memoria asignados o libres, en donde un segmento puede ser un proceso o un hueco entre dos procesos.
Asignación del hueco de intercambio
En algunos sistemas, cuando el proceso se encuentra en la memoria, no hay un hueco en el disco asignado a él. Cuando deba intercambiarse, se deberá asignar un hueco para él en el área de intercambio del disco. Los algoritmos para la administración del hueco de intercambio son los mismos que se utilizan para la administración de la memoria principal.
En otros sistemas, al caerse un proceso, se le asigna un hueco de intercambio en el disco. Cuando el proceso sea intercambiado, siempre pasará al hueco asignado, en vez de ir a otro lugar cada vez. Cuando el proceso concluya, se libera el hueco de intercambio. La única diferencia es que el hueco en disco necesario para un proceso debe representarse como un número entero de bloques del disco. Por ejemplo, un proceso de 13.5 K debe utilizar 14K (usando bloques de 1K).

Mantiene una lista enlazada de segmentos de memoria asignados y libres, donde un segmento es un proceso o un hueco entre dos procesos.
•Si la lista se ordena por dirección es más fácil su actualización.
•Si hay dos listas, una para memoria usada y otra para huecos, la asignación es más rápida, pero la liberación es más lenta
•Ocurre lo mismo para asignar hueco de intercambio.

UNIDAD "4"

4.3 MEMORIA VIRTUAL
La memoria virtual es una técnica que permite ejecutar procesos que no caben totalmente en memoria RAM (memoria física). Esto propicia la creación de programas que sean más grandes que la memoria física. Además, la memoria virtual ayuda a crear un esquema de abstracción de la memoria que la separa de la zona lógica que el usuario ve, esto facilita enormemente la tarea a los programadores puesto que no se han de preocupar por limitaciones de memoria.

Los procedimientos de implementación de la memoria virtual se basan en que cuando se ejecuta un programa, éste está parcialmente en memoria, es decir, sólo hay cargada aquella zona de código y datos que se necesitan en ese instante de tiempo, y no el programa completo. La memoria virtual es la separación entre la memoria lógica disponible para el usuario y la memoria RAM, se implementa generalmente con el método de paginación por demanda aunque también se puede implementar en un sistema con segmentación.

En el momento en que en el sistema empieza a escasear la memoria, se crea un fichero SWAP (intercambio) en el disco que sirve como ampliación auxiliar de memoria. En el caso de Windows, cuando tenemos muchas aplicaciones en funcionamiento y la memoria RAM se agota, el sistema se apoya en el fichero SWAP para realizar movimientos desde el disco duro a la RAM y viceversa. De ese modo crean espacios en memoria física para ir ejecutando las órdenes. Esto, evidentemente, hace que el sistema vaya más lento.

Los métodos más comunes para el manejo de memoria virtual son:
•Segmentación
•Paginación
•Segmentación con paginación


4.3.1 PAGINACION MEMORIA VIRTUALç

El término memoria virtual se asocia normalmente con sistemas que emplean En paginación, aunque también se puede usar memoria virtual basada en la segmentación. El uso de la paginación en la memoria virtual fue presentado por primera vez en el computador Atlas.
Cada proceso tiene su propia tabla de páginas y cuando carga todas sus páginas en la memoria principal, se crea y carga en la memoria principal una tabla de páginas. Cada entrada de la tabla de páginas contiene el número de marco de la página correspondiente en la memoria principal. Puesto que sólo algunas de las páginas de un proceso pueden estar en la memoria principal, se necesita un bit en cada entrada de la tabla para indicar si la página correspondiente está presente (P) en la memoria principal o no. Si el bit indica que la página está en la memoria, la entrada incluye también el número de marco para esa página.
Otro bit de control necesario en la entrada de la tabla de páginas es el bit de modificación (M), para indicar si el contenido de la página correspondiente se ha alterado desde que la página se cargó en la memoria principal. Si no ha habido cambios, no es necesario escribir la página cuando sea sustituida en el marco que ocupa actualmente.

Una dirección virtual es un sistema de paginación que consiste de un par ordenado las paginas son transferidas de disco a memoria real y viceversa usando marcos de pagina de memoria principal.


4.3.2 SEGMENTACION MEMORIA VIRTUAL

La segmentación permite al programador contemplar la memoria como si constara de varios espacios de direcciones o segmentos. Los segmentos pueden ser de distintos tamaños, incluso de forma dinámica. Las referencias a la memoria constan de una dirección de la forma (número de segmento, desplazamiento).
Esta organización ofrece al programador varias ventajas sobre un espacio de direcciones no segmentado:
1.Simplifica la gestión de estructuras de datos crecientes. Si el programador no conoce a priori cuán larga puede llegar a ser una estructura de datos determinada, es necesario suponerlo a menos que se permitan tamaños de segmentos dinámicos. Con memoria virtual segmentada, a la estructura de datos se le puede asignar a su propio segmento y el S.O expandirá o reducirá el segmento cuando se necesite.

2.Permite modificar y recopilar los programas independientemente, sin que sea necesario recopilar o volver a montar el conjunto de programas por completo.
3.Se presta a la compartición entre procesos. Un programador puede situar un programa de utilidades o una tabla de datos en un segmento que puede ser referenciado por otros procesos.

4.Se presta a la protección. Puesto que un segmento puede ser construido para albergar un conjunto de procedimientos y datos bien definido, el programador o el administrador del sistema podrá asignar los permisos de acceso de la forma adecuada.



PAGINACION Y SEGMENTACION COMBINADAS

Tanto la paginación como la segmentación tienen sus ventajas. La paginación elimina la fragmentación externa y de este modo, aprovecha la memoria principal de forma eficiente. Además, puesto que los fragmentos que se cargan y descargan de la memoria principal son de tamaño fijo e iguales, es posible construir algoritmos se gestión de memoria sofisticados que aprovechen mejor el comportamiento de los programas. La segmentación tiene las ventajas antes citadas, incluida la capacitación de gestionar estructuras de datos que puedan crecer, la modularidad y el soporte de la compartición y la protección. Para combinar las ventajas de ambas, algunos sistemas están equipados con hardware del procesador y software del S.O.


En un sistema con paginación y segmentación combinadas, el espacio de direcciones de un usuario se divide en varios segmentos según el criterio del programador. Cada segmento se vuelve a dividir en varias páginas de tamaño fijo, que tienen la misma longitud que un marco de memoria principal. Si el segmento tiene menor longitud que la página, el segmento ocupará sólo una página. Desde el punto de vista del programador, una dirección lógica todavía está formada por un número de segmento y un desplazamiento en el segmento. Desde el punto de vista de sistema, el desplazamiento del segmento se ve como un número de página dentro del segmento y un desplazamiento dentro de la página.


La entrada de la tabla de segmentos contiene la longitud del segmento. Los bits de presencia y modificación no son necesarios, puesto que estos elementos se gestionan en la página. Pueden usarse otros bits de control para comparación y protección. La entrada de la tabla de páginas es, la misma que se usa en un sistema de paginación pura. Cada número de página se convierte en el número de marco correspondiente si la página está presente en la memoria. El bit de modificación indica si se necesita escribir la página en el disco cuando se asigna el marco a otra página.

4.3.3 ALGORITMOS DE SUSTITUCION DE PAGINAS

El sistema operativo tiene que escoger la pagina que sacara de la memoria para que puede entrar la nueva pagina, si la pagina que se elimina fue modificada mientras estaba en la memoria se debe rescribir en el disco a fin de actualizar la copia de disco
4.3.4 ASPECTOS DE DISEÑO PARA ALGORITMOS

Aspectos que los diseñadores de sistema operativo debe considerar detenidamente si quieren obtener un buen rendimiento de un sistema de paginación.

4.3.5 LIBERACIÓN DE PÁGINAS

La idea es que los compiladores y los sistemas operativos pudieran detectar cuando una pagina ya no se necesita y liberarla de esta manera, los conjuntos de trabajo no experimentarían espacio de memoria principal utilizados lo cual haría posible soportar mayor numero de procesos.

3.3.5 hrt

Definición:
Algoritmo apropiativo parecido al SRT consistente en calcular el Reponse Ratio (Ratio de respuesta) para asignar la CPU a procesos más viejos. (Para evitar la inanición).
Características:
Es muy productivo pero se sobrecarga el sistema.

Ofrece un buen tiempo de respuesta.

Equilibra los procesos, aunque da prioridad a los procesos más cortos.

Evita la inanición (los procesos que envejecen serán ejecutados).
Las prioridades, que son dinámicas, se calculan según la siguiente fórmula, donde pr es la “prioridad”, te es el “tiempo de espera” y ts es el “tiempo de servicio”:
• Elige proceso listo con valor mayor de R
• Tiene en cuenta edad del proceso
• Debe estimarse el tiempo se servicio previamente: en base a historia pasada o valor dado por usuario o administrador.
• R= w + s
R= tasa de respuesta
w= tiempo consumido esperando al procesador
s = tiempo de servicio esperado
Que corrige algunas deficiencias de SJF, particularmente el retraso excesivo de trabajos largos y el favoritismo excesivo para los trabajos cortos. HRN es un disciplina de planificación no apropiativa en la cual la prioridad de cada proceso no sólo se calcula en función del tiempo de servicio, sino también del tiempo que ha esperado para ser atendido. Cuando un trabajo obtiene el procesador, se ejecuta hasta terminar. Las prioridades dinámicas en HRN se calculan de acuerdo con la siguiente expresión: Prioridad = (tiempo de espera + tiempo de servicio) / tiempo de servicio Como el tiempo de servicio aparece en el denominador, los procesos cortos tendrán preferencia. Pero como el tiempo de espera aparece en el numerador, los procesos largos que han esperado también tendrán un trato favorable. Obsérvese que la suma tiempo de espera + tiempo de servicio es el tiempo de respuesta del sistema para el proceso si éste se inicia de inmediato.
Para cada proceso, basado en el tiempo que va a ocupar el procesador(s) y el tiempo que lleva esperando para ocuparlo (w), Se calcula w+s/s, una vez echo esto el proceso que tenga un valor mayor será asignado al procesador. Este algoritmo es bastante bueno, por que además de dar preferencia a los procesos cortos también tiene en cuenta el envejecimiento de los procesos para evitar así la “inanición”. Cuando el proceso actual termina o se bloquea, se elige el proceso listo con un mayor valor de R.
La decisión de planificación se basa en una estimación del tiempo de retorno normalizado.
Este método es atractivo porque tiene en cuenta la edad del proceso. Aunque se favorece a los trabajos más cortos (un denominador menor produce una razón mayor), el envejecimiento de un proceso sin que haya sido servido incrementa el valor de la razón, de forma que los procesos más largos puedan pasar, en competición con los más cortos.

3.4 multiprocesamiento

Generalidades de Multiprocesadores.
Un multiprocesador se define como una computadora que contiene dos o más unidades de procesamiento que trabajan sobre una memoria común bajo un control integrado.
Si el sistema de multiprocesamiento posee procesadores de aproximadamente igual capacidad, estamos en presencia de multiprocesamiento simétrico; en el otro caso hablamos de multiprocesamiento asimétrico.
Si un procesador falla, los restantes continúan operando, lo cual no es automático y requiere de un diseño cuidadoso.
Un procesador que falla habrá de informarlo a los demás de alguna manera, para que se hagan cargo de su trabajo .
Los procesadores en funcionamiento deben poder detectar el fallo de un procesador
Determinado. El Sistema Operativo debe percibir que ha fallado un procesador determinado y ya no podrá asignarlo y también debe ajustar sus estrategias de asignación de recursos para evitar la sobrecarga del sistema que está degradado.
Distribución de Ciclos
Una “estructura de ciclos o de repetición” implica la repetición de una serie de proposiciones (cuerpo del ciclo) hasta que ocurre alguna condición de terminación, por ejemplo:
For i = 1 to 3
Do

El procesador secuencial realizará en secuencia lo siguiente:
En un sistema de multiprocesamiento con tres procesadores disponibles se podrían
Ejecutar concurrentemente.
Reducción de la Altura del Arbol
Utilizando las propiedades asociativa, conmutativa y distributiva de la aritmética, los
Compiladores pueden:
1. Detectar el paralelismo implícito en expresiones algebraicas.
2. Producir un código objeto para multiprocesadores que indique las operaciones que se pueden realizar simultáneamente.
3. Reordenar expresiones para que sean más apropiadas para la computación en paralelo.

3.5 sistemas multiprocesamiento

A pesar de las grandes mejoras acaecidas en monoprocesadores para algunas aplicaciones no es suficiente.
– La solución pueden ser los sistemas multiprocesadores:
o Solución más sencilla, natural y con mejor coste-prestaciones.
o Las mejoras en microprocesadores cada vez son más complejas: cada avance implica crecer en complejidad, potencia y superficie.
o Lenta pero clara mejora en el software, que permite explotar el paralelismo.
– Las arquitecturas actuales son muy diversas: hay más investigación que resultados definitivos.
– Hablaremos de multiprocesadores de pequeña y median escala
Dos factores clave para la extensión de los Multiprocesadores
1. Flexibilidad: El mismo sistema puede usarse para un único usuario incrementado el rendimiento en la ejecución de una única aplicación o para varios usuarios y aplicaciones en un entorno compartido.
2. Coste-rendimiento: Actualmente estos sistemas se basan en procesadores comerciales, por lo que su coste se ha reducido drásticamente. La inversión más fuerte se hace en la memoria y la red de interconexión.
Como su nombre indica son aquellos sistemas operativos que están montados sobre ordenadores que están compuestos por más de un procesador, supongamos un PC que en vez de tener un Pentium, tuviera dos o más Pentium conectados entre si dentro de la misma placa base, esto sería un sistema multiprocesador.

3.6 paralelismo

Funcionamiento
El paralelismo consiste en ejecutar más instrucciones en menos tiempo, aunque las instrucciones sigan tardando lo mismo en ejecutarse, mediante un simple truco, aunque algo difícil de explicar en detalle. Intentémoslo.
un microprocesador ejecuta instrucciones de código máquina.
Estas instrucciones le dicen como tiene que ir modificando diferentes posiciones de memoria, y como debe ir modificando el flujo de ejecución. Se tiende a pensar, erróneamente, que un procesador con un reloj a 200 MHz (200 millones de ciclos por segundo) ejecuta 200 millones de estas operaciones por segundo. Esto no es así, por una sencilla razón. Una instrucción no se ejecuta en un solo ciclo de reloj, salvo alguna rara excepción. De hecho, algunas instrucciones tardan bastantes más ciclos, llegando algunas a necesitar 50 o más ciclos para completarse. En cambio, las más rápidas se ejecutan en tan sólo 3 o 4 ciclos de reloj. Aquí es donde entra el paralelismo para solucionar este problema. Se puede dividir cualquier instrucción en fases más o menos comunes a todas:
-fetch (carga de la instrucción desde la memoria al procesador)
-decodificación (identificación de qué instrucción nos hemos encontrado)
-carga de operandos
-operación en sí
-escritura de resultados
Este esquema, expresamente simplificado, nos da una idea de las fases que todo microprocesador tiene. Vamos a suponer un microprocesador ideal donde todas las operaciones que se pueden ejecutar en él tardan 15 ciclos, correspondientes a tres ciclos por cada una de las 5 fases que hemos descrito. Si ejecutáramos tres de estas operaciones sin ningún tipo de paralelismo, tardaríamos 45 ciclos, según el siguiente esquema:
instr.1:111222333444555
instr.2:_________111222333444555
instr. 3:________111222333444555
Ahora supongamos que somos capaces de dividir el microprocesador en circuitos separados capaces cada uno de trabajar independientemente y ejecutar cada una de las 5 fases anteriores. Si logramos que sean independientes, cuando la instrucción uno ha acabado ya la fase de fetch y pasa a la decodificación, deja libre el módulo que se encarga del fetch, donde puede ir ya ejecutándose la segunda instrucción. De esta forma, logramos paralelizar las instrucciones.
instr.1111222333444555
instr.2:___111222333444555
instr. 3:______111222333444555
Resultado: las tres instrucciones, por separado, siguen ejecutándose en el mismo tiempo, pero en conjunto ya no tardan 45 ciclos, sino solo 21 ciclos. Más de un 45% de incremento en el rendimiento. De esta forma es como algunos procesadores muy paralelizados logran ejecutar, en promedio, más de una instrucción por ciclo de reloj, aunque estas instrucciones tarden, por sí mismas, más de un ciclo en ejecutarse.

Paralelismo en hardware Definamos como paralelismo en hardware como la ejecución de un programa tomando en consideración el hardware con que va a ser ejecutado.
El diagrama de paralelismo en Software representa el caso ideal con que dicho programa puede ser ejecutado. Nótese que la ejecución de las 8 instrucciones se realiza solamente en tres ciclos de máquina. Por otro lado podemos observar las limitantes que genera la ejecución de este mismo programa con un hardware en particular (procesador Superescalar con capacidad de ejecutar un acceso a la memoria y una operación aritmética simultáneamente) obteniendo 6 ciclos de maquina para ejecutar el programa.

3.7 organizacion del hardware del multiprocesador

El problema clave es determinar los medios de conexión de los procesadores múltiples y los procesadores de Entrada / Salida a las unidades de almacenamiento.
Los multiprocesadores se caracterizan por los siguientes aspectos:
• Un multiprocesador contiene dos o más procesadores con capacidades aproximadamente comparables.
• Todos los procesadores comparten el acceso a un almacenamiento común y a canales de Entrada / Salida, unidades de control y dispositivos.
• Todo está controlado por un Sistema Operativo que proporciona interacción entre procesadores y sus programas en los niveles de trabajo, tarea, paso, archivo y elementos de datos.
Las organizaciones más comunes son las siguientes:
• Tiempo compartido o bus común (conductor común).
• Matriz de barras cruzadas e interruptores.
• Almacenamiento de interconexión múltiple.
Tiempo Compartido o Bus Común (o Conductor Común)
Usa un solo camino de comunicación entre todas las unidades funcionales
El bus común es en esencia una unidad pasiva.
Un procesador o procesador de Entrada / Salida que desee transferir datos debe efectuar los siguientes pasos:
1. Verificar la disponibilidad del conductor y de la unidad de destino.
2. Informar a la unidad de destino de lo que se va a hacer con los datos.
3. Iniciar la transferencia de datos.
Las unidades receptoras deben poder reconocer qué mensajes del bus son enviados hacia ellas y seguir y confirmar las señales de control recibidas de la unidad emisora.
Es una organización económica, simple y flexible pero con una sola vía de comunicación, por lo cual:
• El sistema falla totalmente si falla el bus.
• La tasa neta de transmisiones está limitada por la tasa neta de transmisión del conductor.
• La contención por el uso del bus en un sistema sobrecargado puede ocasionar una seria degradación.
Matriz de Barras Cruzadas e Interruptores
En este caso existe un camino diferente para cada unidad de almacenamiento, por lo cual las referencias a dos unidades diferentes de almacenamiento no son bloque antes sino simultáneas y la multiplicidad de caminos de transmisión puede proporcionar tasas de transferencia muy altas
Almacenamiento de Interconexión Múltiple Se obtiene al sacar las lógicas de control, de conmutación y de arbitraje de prioridades fuera del interruptor de barras cruzadas se las coloca en la interfaz de cada unidad de almacenamiento
Cada unidad funcional puede acceder a cada unidad de almacenamiento, pero sólo en una “conexión de almacenamiento” específica, es decir que hay una conexión de almacenamiento por unidad funcional.
El conexionado es más complejo que en los otros esquemas.
Se puede restringir el acceso a las unidades de almacenamiento para que no todas las unidades de procesamiento las accedan, en tal caso habrá unidades de almacenamiento “privadas” de determinados procesadores

3.8 sistema operativo del multiprocesador

Sistema Operativo de multiprogramación y de multiprocesadores incluyen lo siguiente:
• Asignación y administración de recursos.
• Protección de tablas y conjuntos de datos.
• Prevención contra el ínter bloqueo del sistema.
• Terminación anormal.
• Equilibrio de cargas de Entrada / Salida.
• Equilibrio de carga del procesador.
• Reconfiguración.
Las tres últimas son especialmente importantes en Sistemas Operativos de multiprocesadores, donde es fundamental explotar el paralelismo en el hardware y en los programas y hacerlo automáticamente. Las organizaciones básicas de los Sistemas Operativos para multiprocesadores son las siguientes:
• Maestro / satélite.
• Ejecutivo separado para cada procesador.
• Tratamiento simétrico (o anónimo) para todos los procesadores.
• Maestro / Satélite - Es la organización más fácil de implementar.
No logra la utilización óptima del hardware dado que sólo el procesador maestro puede ejecutar el Sistema Operativo y el procesador satélite sólo puede ejecutar programas del usuario.
Las interrupciones generadas por los procesos en ejecución en los procesadores satélites que precisan atención del Sistema Operativo deben ser atendidas por el procesador maestro y por ello pueden generarse largas colas de requerimientos pendientes.
• Ejecutivos Separados - Cada procesador tiene su propio Sistema Operativo y responde a interrupciones de los usuarios que operan en ese procesador.
Existen tablas de control con información global de todo el sistema (por ejemplo, lista de procesadores conocidos por el Sistema Operativo) a las que se debe acceder utilizando exclusión mutua.
Es más confiable que la organización maestro / satélite.
Cada procesador controla sus propios recursos dedicados.
La reconfiguración de los dispositivos de Entrada / Salida puede implicar el cambio de dispositivos a diferentes procesadores con distintos Sistemas Operativos.
La contención sobre las tablas del Sistema Operativo es mínima.
Los procesadores no cooperan en la ejecución de un proceso individual, que habrá sido asignado a uno de ellos.
• Tratamiento Simétrico - Es la organización más complicada de implementar y también la más poderosa y confiable.
3.3.1 FIRST IN FIRST OUT JOB SCHEDULING (FIFO)

El Concepto Significa Primero En Llegar Primero En Ser Tendido. La CPU Se Asigna A Los Procesos En El Orden Que Lo Solicitan,
Se Le Inicia De Inmediato Y Se Le Permite Ejecutar Todo El Tiempo Que Necesite, Cuando Llegan Otros Procesos Se Les Coloca Al Final De La Cola.Cuando Se Bloquea El Proceso En Ejecucion, Se Ejecuta El Primer Proceso De La Cola, Si Un Proceso Bloqueado Vuelve A Estar Listo Se Le Coloca Al Final De La Cola Como Si Fuera Un Proceso Recien Llegado.


CARACTERISTICAS

. Es del tipo no expropiativo
. Es equitativo
. Solo necesita una cola para implementarse
. Presenta desventajas cuando se tienen procesos dedicados a CPU y dedicados a E/S.



3.3.2 ROUND ROBIN JOB SCHEDULING (RR)

Algoritmo apropiativo consistente en determinar un quantum (tiempo de reloj) que marcará ,el intervalo de CPU que se le cederá al proceso ejecutando. Cuando finalice el quantum al
Proceso se le quitará la CPU y pasará a la cola de listo. La cola de listos sigue la estructura
FIFO. Si un proceso no consume su quantum libera la CPU y ésta es asignada al siguiente
Proceso de la cola de listo.
Los procesos se despachan en “FIFO” y disponen de una cantidad limitada de tiempo de cpu, llamada “división de tiempo” o “cuanto”.

Si un proceso no termina antes de expirar su tiempo de cpu ocurren las siguientes acciones:
1. La cpu es apropiada.
2. La cpu es otorgada al siguiente proceso en espera.
3. El proceso apropiado es situado al final de la lista de listos.


CARACTERISTICAS

• Fácil de implementar.
• Perjudica a los procesos de E/S.
• Si el quantum es muy grande se comporta como un FCFS.
• El tiempo de respuesta para procesos cortos es bueno.
• Trato equitativo entre procesos, bueno para interactividad.
• No se produce inanición.
• El valor mínimo del quantum debe ser (10 * Tiempo Cambio Contexto ) .
• El quantum más adecuado es el Tiempo de CPU del proceso más corto.


3.3.3 SHORTEST JOB FIRST (SJF)

Es una disciplina no apropiativa y por lo tanto no recomendable en ambientes de tiempo compartido. El proceso en espera con el menor tiempo estimado de ejecución hasta su terminación es el siguiente en ejecutarse. Los tiempos promedio de espera son menores que con “FIFO”.

CARACTERISTICAS

•Los tiempos de espera son menos predecibles que en “FIFO”.
•Favorece a los procesos cortos en detrimento de los largos.
•Tiende a reducir el número de procesos en espera.
•el número de procesos que esperan detrás de procesos largos.
•Se pueden estimar los tiempos en base a series de valores anteriores.

INSTALACION PASO 5


PASO 5:
LINUX INSTALADO
Despues del proceso de instalación (puede resultar un poco tardado) encontraremos en OPEN OFFICE todos los ficheros instalados con el sistema operativo.

INSTALACION PASO 4


PASO 4: PROCESO DE INSTALACION
Dentro de la instalación del nuevo sistema operativo, se requiere introducir una serie de datos, como lo son, el idioma, la región, el nombre del usuario y el nombre con el que se quiere iniciar sesión, y estará listo para instalarse.

INSTALACION PASO 3


PASO 3:
ASIGNACION DE PARTICIONES
Preparar el espacio del disco, aquí nos da la opción de borrar el disco completo o editar manualmente la tabla de particiones, en esta ocasión elegimos borrar el disco completo.

INSTALACION. PASO 2


PASO 2:
La Instalación consta de unos sencillos pasos.

Elegir el idioma: En la pantalla de bienvenida se elige el idioma español después se pulsa adelante («Siguiente» o «Forward»), y en automático se empieza a instalar en español
Elegir la zona horaria: Simplemente se pulso sobre la zona y después sobre la ciudad representativa de su huso horario y listo.

manual de instalacion PASO 1


Primero deberemos de tener el CD de instalación de Ubuntu
PASO 1
Entrar al BIOS y modificar:
Lo que se realizo aquí es que se mando a llamar al orden bus para modificarlo y poder leerlo, le dimos f1 para que se empezara la lectura del CD de Ubuntu.

  • UNIDAD II. ADMINISTRACION DE PROCESOS

    2.1 DESCRIPCION Y CONTROL DE PROCESOS:

    En algunos casos el sistema operativo como en el tiempo compartido, cada programa se ejecuta por ejemplo: mediante una peticion a ejecutar dada por el usuario, estos procesos generados por el S.O se denominan implícitos una vez terminada la ejecución de los mismos. el S.O proporciona en tiempo real los servicios que son necesarios para el usuario y se definen así de forma explicita.

Los programas acceden a estos servicios realizando llamadas al sistema, Estas llamadas pueden aparecer incrustadas en el código de un programa de usuario o del propio sistema, en cuyo caso, se asemejan a llamadas a procedimientos o funciones que dan lugar a transferencias de rutinas del O.S cuando se invocan en tiempo real

Las llamadas al sistema se realizan forma indirecta, cuando se dan ordenes al O.S a través de un terminal, la rutina de monitorización del terminal (que es a su vez un proceso) se encarga de transformar la ordenes en llamadas al sistema.

De este modo, al comienzo de la ejecución del programa principal de un usuario se inicia la ejecución de un proceso. A su vez el proceso podría crear nuevos procesos. En este caso, el proceso que crea otro nuevo se denomina proceso padre y el proceso creado de denomina proceso hijo. Una vez creado un proceso hijo, la ejecución de padre e hijo transcurre de manera concurrente. De esta forma se puede crear una jerarquía arborescente de procesos, en la que un padre puede tener varios hijos y estos pueden tener otros hijos


2.2
DEFINICION DE PROCESOS DE S.O

un proceso es una instancia de ejecución de un programa caracterizado por una serie de operaciones a realizar.

2.3
ESTADOS DE PROCESOS DEL S.O


De forma general, un proceso puede encontrarse en un instante determinado en uno de lo siguientes estados:

Según un primer autor

1. inicio o nuevo

2. En espera-esperando

3. Ejecución-despacho

4. Bloqueado-bloqueo

5. Terminado-fin

Según un segundo autor

1. La tarea activa es la que está ejecutándose en un instante dado.

2. En el estado de preparado, se encuentran todas las tareas que están listas para ejecutarse pero que esperan a que procesador quede libre.

3. Bloqueado: Las tareas que están a la espera de que se cumpla una condición y que por lo tanto, no están preparadas para ejecutase.

4. Un proceso muerto cuando ha terminado su ejecución o bien el sistema operativo a detectado un error fatal y lo ha transferido a dicho estado

5. El estado de nonato indica que el programa realmente existe pero todavía no es conocido por el OS.

2.4 CONTROL DE PROCESOS DE S.O

la manifestación de un s.o en proceso es un bloque de control de procesos es una estructura de datos que contiene la siguiente información:

La mayoría de los procesadores dan soporte para dos modos de ejecución por lo menos. Ciertas instrucciones pueden ejecutarse sólo en modo privilegiado. Entre éstas están la lectura o modificación de registros de control (como la palabra de estado del programa), instrucciones primitivas de E/S e instrucciones relativas a la gestión de memoria. Además, se puede acceder a ciertas regiones de memoria sólo en el modo más privilegiado.

El modo menos privilegiado a menudo se conoce como modo de usuario, ya que los programas de usuario ejecutan normalmente en ese modo. Al modo más privilegiado normalmente se le conoce como modo del sistema, modo de controlo modo del núcleo. Este último término se refiere al núcleo del sistema operativo, que es la parte del sistema operativo que lleva a cabo las funciones importantes del sistema. La razón por la que se usan dos modos debe quedar clara. Es necesario proteger al sistema operativo y a las tablas importantes del mismo, tales como los bloques de control de procesos, de las injerencias de los programas de usuario. En el modo del núcleo, el software tiene control completo del procesador y de todas sus instrucciones, registros y memoria. Este nivel de con¬ trol no es necesario y, por seguridad, tampoco conveniente para los programas de usuario.

  • estado actual del proceso

  • id único para proceso

  • prioridad del proceso

  • area para reservar registros

Las operaciones con proceso son:

1. crear un proceso

2. destruir un proceso

3. suspender un proceso

4. reanudar un proceso

5. cambiar la prioridad de un proceso

6. bloquear un proceso

7. despertar un proceso

8. despachar un proceso

2.5 PROCESOS E HILOS

Cada proceso va acompañado de tareas a realizar o ejecutar y los hilos son las tareas que comparten el segmento de código.

Cada proceso tiene su propio contador y un hilo tiene lo siguiente:

  • estado
  • punto de ejecución de la instrucción
  • pila de ejecución
  • espacio de almacenamiento
  • acceso a los recursos de las tareas

Dos hilos de una misma tarea (denominados hilos pares) comparten el segmento de código, el segmento de datos y un espacio de pila, es decir, los recursos asignados a la tarea.

Podemos captar la funcionalidad de los hilos si comparamos el control de múltiples hilos con el control de múltiples procesos. En el caso de los procesos, cada uno opera independientemente de los otros; cada proceso tiene su propio contador de programa, registro de pila, y espacio de direcciones. Este tipo de organización es muy útil cuando los trabajos que los procesos efectúan no tienen ninguna relación entre si.

2.6 CONCURRENCIA, EXCLUSION MUTUA, SINCRONIZACION

Concurrencia:

es una propiedad de los S.O que permite que varios procesos sean ejecutados al mismo tiempo siempre y cuando no sea en la misma aplicación y de manera alternada

La concurrencia es fundamental en todas estas áreas y para el diseño sistemas operativos. La concurrencia comprende un gran número de cuestiones de diseño, incluida la comunicación entre procesos, compartición y competencia por los recursos, sincronización de la ejecución de varios procesos y asignación del tiempo de procesador a los procesos. Se verá que estas cuestiones no solo surgen en entornos de multiprocesadores y proceso distribuido, sino incluso en sistemas multiprogramados con un solo procesador.

La concurrencia puede presentarse en tres contextos diferentes:

• Múltiples aplicaciones: la multiprogramación se creó para permitir que el tiempo de procesador de la máquina fuese compartido dinámicamente entre varias aplicaciones activas.

• Aplicaciones estructuradas: como ampliación de los principios del diseño modular y la programación estructurada, algunas aplicaciones pueden implementarse eficazmente como un conjunto de procesos concurrentes.

• Estructura del sistema operativo: las mismas ventajas de estructuración son aplicables a los programadores de sistemas y se ha comprobado que algunos sistemas operativos están implementados como un conjunto de procesos o hilos.

.
Exclusión mutua: consiste en q un solo proceso excluye temporalmente a todos los demás para usar un recurso compartido de forma que garantice la integridad del sistema. Consiste en asignar el recurso a uno de los procesos mientras los demás se quedan en espera.


Sincronizacion: comunicación requerida entre dos o mas procesos con el fin de sincronizar sus actividades.

2.7PRINCIPIOS BASICOS DE CONCURRENCIA

En un sistema multiprogramado con único procesador, los procesos se intercalan en el tiempo para dar la apariencia de ejecución simultanea (es un programa que parece que varias partes del mismo se ejecutan ala misma ves)
En un sistema con varios procesadores, no solo es posible intercalar los procesos, también superponerlos (poner los procesos unos sobre otros).
En el caso de un sistema monoprocesador, los problemas creados por la multiprogramación parten del hecho de que la velocidad relativa de ejecución de los procesos no puede predecirse.

Cuando dos o mas procesos llegan al mismo tiempo a ejecutarse se presenta una concurrencia de procesos.
Para los procesos sean concurrentes, es necesario que tengan alguna relación entre ellos, como puede ser la cooperación para un determinado trabajo o el uso de información o recursos compartidos.
Los procesos de concurrencia funcionan:
•De manera independiente
•Pueden ser asíncronos, (requieren cierta sincronización o cooperación).


2.9 SEMAFOROS


solucionan problemas de procesos concurrentes, estos solo pueden tomar dos valores, 0 y 1.

Semáforos es un algoritmo de control de procesos, que tiene solo dos operaciones básicas, las cuales son:

Wait.- Pregunta a los procesos si su contador es > ó = que cero, en caso de no ser así, los decremento.

Signal.- A partir de un tiempo t definido por el despachador se ejecuta, y pregunta a los procesos si su contador es <>

2.10 MONITORES


Es un servicio de exclusión mutua, solo puede ser ejecutado un proceso en un momento dado, cualquier otro proceso puede ser suspendido esperando la disponibilidad del monitor.

Ventajas:

• Mantenimiento más simple

• Menos errores de programación

La interfaz del monitor es un conjunto de funciones que representan las diferentes operaciones que pueden hacerse con el recurso.

2.11 PASO DE MENSAJES S.O

El paso de mensajes es una técnica empleada en programación concurrente para aportar sincronización entre procesos y permitir la exclusión mutua
Su principal característica es que no precisa de memoria compartida, por lo que es muy importante en la programación para sistemas distribuidos.
Los elementos principales que intervienen en el paso de mensajes son el proceso que envía, el que recibe y el mensaje.

•Automatizar Operaciones
• Mínimo Espacio
• Reducción de Errores
• Trabajan sin descanso
•Atienden mayor numero de Operaciones

2.12 CONCURRENCIA E INTERBLOQUEO DEAD LOCK

Deadlock: Los procesos no son ejecutados constantemente desde que se inician hasta que son finalizados.
Un proceso puede estar identificado con tres estados diferentes: leyendo (ready), ejecutando (running) o bloqueado (blocked). En el estado de lectura, un proceso está parado, concediendo que otro proceso sea ejecutado; en el estado de ejecución, un proceso está utilizando algún recurso; y en el estado de bloqueo, el proceso está parado y no se ejecutará mientras algo lo restaure.
Una condición común no deseable es descripta como deadlock.


2.13 PRINCIPIOS DE INTERBLOQUEO

Los interbloqueos se relacionan con los recursos no apropiables. Lo usual es que los bloqueos asociados a recursos apropiables se pueden resolver, mediante la reasignación de recursos de un proceso a otro.
La secuencia de eventos necesaria para utilizar un recurso es:

• Solicitar el recurso
• Utilizar el recurso
Liberar el recurso

CONDICIONES PARA PRODUCIR INTERBLOQUEO
En la política del sistema operativo, deben darse tres condiciones para que pueda producirse un interbloqueo:
1.Condición de exclusión mutua: Cada recurso esta asignado a un único proceso o esta disponible.
2.Condición de posesión y espera: Los procesos que tienen, en un momento dado, recursos asignados con anterioridad, pueden solicitar nuevos recursos.
3.Condición de no apropiación: Los recursos otorgados con anterioridad no pueden ser forzados a dejar un proceso. El proceso que los posee debe liberarlos en forma explicita.

2.14 ACCIONES A REALIZAR EN INTERBLOQUEO

PREVENCIÓN DEL INTERBLOQUEO.


La estrategia básica de la prevención del interbloqueo consiste, en diseñar su sistema de manera que esté excluida, la posibilidad de interbloqueo.

Los métodos para prevenir el interbloqueo son de dos tipos:

Los métodos indirectos que consisten en impedir la aparición de alguna de las tres condiciones necesarias para que se de el interbloqueo.

Los métodos directos que consisten en evitar la aparición del circulo vicioso de espera.

Exclusión mutua
Retención y espera
No apropiación
Circulo vicioso de espera

PREDICCIÓN DEL INTERBLOQUEO


Una forma de resolver el problema del interbloqueo, que se diferencia sutilmente de la prevención, es la predicción del interbloqueo.
Con predicción del interbloqueo, se decide dinámicamente si la petición actual de asignación de un recurso podría, de concederse, llevar potencialmente a un interbloqueo. La predicción del interbloqueo necesita, por lo tanto, conocer las peticiones futuras de recursos.
Enfoques para la predicción del interbloqueo:

No iniciar un proceso si sus demandas pueden llevar a interbloqueo.
No conceder una solicitud de incrementar los recursos de un proceso si esta asignación puede llevar a interbloqueo.

DETECCIÓN DEL INTERBLOQUEO


Las estrategias de prevención de interbloqueo son muy conservadoras; resuelven el problema limitando el acceso a recursos e imponiendo restricciones sobre los procesos.
Recuperación de Interbloqueo
Cuando se ha detectado que existe un interbloqueo, podemos actuar de varias formas. Una posibilidad es informar al operador que ha ocurrido un interbloqueo y dejar que el operador se ocupe de él manualmente. La otra posibilidad es dejar que el sistema se recupere automáticamente del interbloqueo.

Recuperación Manual
Está forma de recuperación consiste en avisarle al administrador o al operador del sistema que se ha presentado un interbloqueo, y será el administrador el que solucione dicho problema.
Abortar los Procesos
Para eliminar interbloqueos abortando un proceso, tenemos dos métodos;

Abortar todos los procesos interbloque dos. Este método romperá definitivamente el ciclo de interbloqueo pero con un costo muy elevado, ya que estos procesos efectuaron cálculos durante mucho tiempo y habrá que descartar los resultados de estos cálculos parciales, para quizá tener que volver a calcularlos más tarde.
Abortar un proceso en cada ocasión hasta eliminar el ciclo de interbloqueo. El orden en que se seleccionan los procesos para abortarlos debe basarse en algún criterio de costo mínimo. Después de cada aborto, debe solicitarse de nuevo el algoritmo de detección, para ver si todavía existe el interbloqueo. Este método cae en mucho tiempo de procesamiento adicional.

SISTEMAS OPERATIVOS
GUIA DE EXAMEN
UNIDAD 11

1-¿QUE ES UN PROCESO?
Es el conjunto de actividades que se realizan o suceden con un fin determinado.
2-¿QUE ES CONCURRENCIA?
Ejecución de procesos al mismo tiempo
3-¿CUALES SON LOS ESTADOS DE LOS PROCESOS?
§ Ejecución: el proceso está actualmente en ejecución.
§ Listo: el proceso está listo para ser ejecutado
§ Espera: el proceso no puede ejecutar hasta que no se produzca cierto suceso..
§ Nuevo: El proceso recién fue creado y todavía no fue admitido por el sistema operativo.
§ Terminado: El proceso fue expulsado del grupo de procesos ejecutables.

4-¿QUE ES UNA BANDERA Y DONDE SE APLICA?
Es aquella que indica el estado del proceso, y se aplica del sistema.
5-¿QUE DIFERENCIA HAY ENTRE SEMAFORO Y MONITOR?
El monitor es encargado del funcionamiento que hay, ¿Qué? se esta haciendo (monitorea),
El semáforo se encarga de dar la señal para saber si se puede llevar a cabo un proceso o no
6-INVESTIGAR EN INTERNET O LIBROS COMO MATAR UN PROCESO EN WINDOWS Y LINUX
Windows (ctrl-alt-suprimir)
Linux (kill-nombre programa-enter)
7-EN QUE CONSISTE LA TECNICA DE INTERBLOQUEO?
En bloquear procesos que puedan producir el bloqueo, impide que se lleven a cabo las instrucciones
8-¿CUALES SON LAS CONDICIONES PARA PRODUCIR UN INTERBLOQUEO?
§ Exclusión mutua
§ Posición espera
§ Condición no apropiación

9- DEFINA LOS SIGUIENTES CONCEPTOS:
A) SINCRONIZACION:
Ejecución simultanea entre dos procesos


B) EXCLUSION MUTUA:

Comunicación requerida entre uno o mas procesos

C) SEMAFORO:

Evita problemas o bien los soluciona es aplicado en los procesos concurrentes

10- ¿CUALES SON LOS ESTADOS DE LOS PROCESOS Y SUS SIMILITUDES?
§ Ejecución: el proceso está actualmente en ejecución.
§ Listo: el proceso está listo para ser ejecutado.
§ Espera: el proceso no puede ejecutar hasta que no se produzca cierto suceso
§ Nuevo: El proceso recién fue creado y todavía no fue admitido por el sistema operativo.
§ Terminado: El proceso fue expulsado del grupo de procesos ejecutables.

§ running:
§ blocked
§ ready

 

W3C Validations

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi dapibus dolor sit amet metus suscipit iaculis. Quisque at nulla eu elit adipiscing tempor.

Usage Policies