sábado, 7 de mayo de 2016

Algoritmo del barbero.

El problema del barbero durmiente es un problema de sincronización; consiste en una barbería en la que trabaja un barbero, que tiene un único sillón de barbero y varias sillas para esperar. Cuando no hay clientes, el barbero se sienta en una silla y se duerme. Cuando llega un nuevo cliente, éste o bien despierta al barbero o —si el barbero está afeitando a otro cliente— se sienta en una silla(o se va si todas las sillas están ocupadas por clientes esperando). El problema consiste en realizar la actividad del barbero sin que ocurran condiciones de carrera. La solución implica el uso de semáforos y objetos de exclusión mutua para proteger la sección crítica.

Un semáforo es una variable protegida (o tipo abstracto de datos) que constituye el método clásico para restringir o permitir el acceso a recursos compartidos (por ejemplo, un recurso de almacenamiento) en un entorno de multiprocesamiento. Fueron inventados por Edsger Dijkstra y se usaron por primera vez en el sistema operativo THEOS.


En electrónica y en programación concurrente, se conoce como condición de carrera al error que se produce en programas o circuitos lógicos que no se han construido adecuadamente para su ejecución simultánea con otros procesos.



Algoritmo del banquero.

Es una forma de evitar el interbloqueo, propuesta por primera vez por Edsger Dijkstra. Es un acercamiento teórico para evitar los interbloqueos en la planificaicon de recursos. requiere conocer con anticipación los recursos que serán utilizados por todos los procesos. Esto ultimo generalmente no puede ser satisfecho en la practica.

Este algoritmo usualmente es Explicado usando la analogía con el funcionamiento de un banco. los clientes representan a los procesos, que tienen un crédito limite, y el dinero representa a los recursos. el banquero es el sistema operativo.

El banco confía en que no tendrá que permitir a todos sus clientes la utilización de todo su crédito a la vez. El banco también asume que si un cliente maximiza su crédito será capaz de terminar sus negocios y devolver el dinero a la entidad, permitiendo servir a otros clientes.

El algoritmo mantiene al sistema en un estado seguro. Un sistema se encuentra en un estado seguro si existe un orden en que pueden concederse las peticiones de recursos a todos los procesos, previniendo el interbloqueo. 

Los procesos piden recursos, y son complacidos siempre y cuando el sistema se mantenga en un estado seguro después de la concesión. de lo contrario, el proceso es suspendido hasta que otro proceso libere recursos suficientes. 

Estructuras y complejidad. 
Se deben utilizar cuatro estructuras de datos para implementar el algoritmo del banquero. estas decodifican el estado del sistema de asignación de recursos. Sea n, el numero de procesos del sistema, m el numero de tipos de recursos. 

Se necesita:
  • Recursos (disponible): Un vector de longitud m que mantiene la cantidad total de recursos, de cada tipo, que pueden ser utilizados por los procesos. De esta forma, recursos[i] = k significa que hay una cantidad total k de recursos tipo Ri disponibles.
  • Demanda (max): Esta matriz, n x m, guarda las cantidades máximas de recurso de cada tipo que pueden ser demandadas por cada proceso. Si Max[i][j] = k, el proceso i, puede solicitar, como máximo k instancias del recurso j.
  • Asignación (allocation): En esta matriz, n x m, numero de recursos de cada tipo actualmente asignados a casa proceso. Asignación[I][j] = k significa que el proceso i tiene asignado k unidades del recurso j.
  • Necesidad (need): Una matriz, n x m, que indica la necesidad restante del recurso de cada proceso. Si necesidad[i][j] = k, entonces el proceso i puede necesitar k instancias del tipo de recursos j. Observe que necesidad[i][j] = max[i][j] - asignación[i][j].

viernes, 6 de mayo de 2016

Segmentacion

La segmentación es una técnica de gestión de memoria que pretende acercarse mas al punto de vista del usuario. Los programas se desarrollan, generalmente, en torno a un núcleo central (principal) desde el que se bifurca a otras partes (rutinas) o se accede a zonas de datos (tablas , pilas, etc).

Desde este punto de vista, un programa es un conjunto de componentes lógicos de tamaño variable o un conjunto de segmentos, es decir, el espacio lógico de direcciones se considera como un conjunto de segmentos, cada uno definido por un identificador, y consistente de un punto de inicio y el tamaño asignado.

La segmentación de un programa la realiza el compilador y en ella cada dirección lógica se expresara mediante dos valores: numero de segmento (s) y desplazamiento dentro del segmento (d).

Una de las implementaciones mas obvias y directas de un espacio de memoria segmentado es asignar un segmento distinto a cada una de las secciones del espacio en memoria de un proceso.

La segmentación también ayuda a incrementar la modularidad de un programa: Es muy común que las bibliotecas enlazadas dinámicas estén representadas en segmentos independientes.

Rendimiento.
Esta técnica permite reducir la fragmentacion interna de la memoria provocada pro la paginacion, ya que asigna a cada programa la cantidad de memoria que requiere.

La carga de un programa en memoria exige la búsqueda de los huecos adecuados a sis segmentos, y puesto que estos son de tamaño variable, se ajustarán los mas posibles a las necesidades, produciéndose huecos pequeños. En este caso se produce fragmentario externa. La eficiencia de la segmentación requiere, de igual forma que la paginacion, el uso de memorias cache para lograr unos tiempos de acceso compartido. de igual forma que en la paginación, se pueden compartir segmentos entre varios procesos.

Paginación.

En la paginacion, todo consiste en dividir en partes iguales, entonces el sistema operativo recupera datos desde en dispositivo de almacenamiento secundario en bloques de un mismo tamaño llamados paginas. la principal ventaja de paginacion sobre la segmentación de memoria es que permite al espacio de dirección física de un proceso ser no continuo. antes de la paginacion, los sistemas debían tener programas en almacenamiento de forma continua, lo que causaba varios problemas de almacenamiento y fragmentacion.

El método básico para implementar paginacion consiste en dividir la memoria física en bloques de tamaño fijos llamados frames (marcos) y dividir la memoria lógica en bloques de mismo tamaño llamados pages (paginas). 

Cuando un proceso se va a ejecutar, sus paginas son cargadas en cualquier marco de la memoria de almacenamiento secundario. Este esta dividido en bloques de tamaño fijo del mismo tamaño de los marcos en memoria.



Paginación por demanda.
Este sistema es similar a un sistema de paginacion con intercambios. Los procesos residen en memoria secundaria (en el disco). Cuando queremos ejecutar un proceso lo metemos en memoria, sin embargo, en vez de intercambiar todo el proceso hacia la memoria, utilizamos un intercambio perezoso el cual nunca reincorpora una pagina a memoria, amenos que se necesite. 

Como ahora consideramos un proceso como una secuencia de paginas, en vez de un gran espacio continuo de direcciones, el termino intercambio es técnicamente incorrecto. Un intercambiador manipula procesos enteros, mientras que un paginador trata con las paginas individualmente de un proceso. 


Relocalización

Recordemos que la memoria es aquel dispositivo en el cual podemos guardar,almacenas o depositar toda nuestra información así como recuperarla para su posterior revisión. 

La memoria debe estar protegida de manera que un proceso no pueda acceder directamente a la memoria del S.O. Un proceso no pueda acceder a la memoria de otros procesos. Las maneras mas elementales de implementar la protección con dos registros limite con un registro base y un registro limite.

En la relocalización se observa que los programas que tienen que cargarse a memoria real ya están compilados y ligados, de manera que internamente contienen una serie de referencias a direcciones de instrucciones, rutinas y procedimientos que ay no son validos en el espacio de direcciones de memoria real de la sección en la que se carga el programa, estos problemas surgen después de haber sido compilados los programas y que se podrían solucionar de una forma estática que es usada para programas largos, si el programa es muy grande tardara mucho en resolver la nuevas direcciones pero después se ejecutara de manera rápida, pero lento al principio. También de forma dinámica, siendo usada para programas cortos se inicia muy rápido pero realiza mas instrucciones para poder resolver las direcciones al tiempo de ser corrido.




Asignación de Memoria

La asignación de memoria consiste en el proceso de asignar memoria para propósitos específicos, ya sea en tiempo de compilación o de ejecución. si es en tiempo de compilación es estática, si es en tiempo de ejecución es dinámica y si son variables locales a un grupo de sentencias se denomina automática.

Asignación estática de memoria.
consiste en el proceso de asignar memoria en tiempo de compilación antes de que el programa asociado sea ejecutado, a diferencia de la asignación dinámica o la automática donde la memoria se asigna a medida que se necesita en tiempo de ejecución. 

Una aplicación de esta técnica conlleva que un modulo de programa (ejemplo función o subrutina) declara datos estáticos de forma local, deforma que estos datos son inaccesibles desde otros módulos a menos que se les pasen referenciados como parámetros o que les sean devueltos por la función. Se mantiene una copia simple de los datos estáticos, accesible a través de llamadas a la función en la cual han sido declarados.

El uso de variables estáticas dentro de una clase en la programación orientada a objetos permite que una copia individual de tales datos se comparta entre todos los objetos de esa clase.

Asignación automática de memoria.
Son variables locales a un bloque de sentencias (subrutina, función o procedimiento). Pueden ser asignadas automáticamente en la pila de datos cuando se entra en el bloque de código. Cuando se sale del bloque, las variables son automáticamente desasignadas. Las variables automáticas tendrán un valor sin definir cuando son declaradas, por tanto es buena practica de programación inicializarlas con un valor válido antes de usarlas. 

Asignación dinámica de memoria.
En ciencia de la computación, asignación dinámica de la memoria es la asignación de almacenamiento de memoria para utilización por parte de un programa de computador durante el tiempo de ejecución de ese programa. Es una manera de distribuir la propiedad de recursos de memoria limitada entre muchas piezas de código y datos. Un objeto asignado dinamicamente permanece asignado hasta que es desasignado explicitamente, o por el programador o por un recolector de basura; esto es notablemente diferente de la asignación automática de memoria y de la asignación estática de memoria (la de las variables estáticas). Se dice que tal objeto tiene tiempo de vida dinámica.  

Asignación de bloques de tamaño fijo.
Una solución es tener una lista enlazada LIFO de bloques de memoria de tamaño fijo. esto funciona bien para sistemas empotrados simples.

jueves, 5 de mayo de 2016

Particiones


Es el nombre que recibe cada una de las divisiones en una sola unidad física de almacenamiento de datos donde a cada partición un propio sistema de archivo llamado formato, la gran mayoría de los sistemas operativos reconocen utilizan y manipulan a una partición como un disco físico independiente sabiendo que están en un solo disco físico.


Particiones fijas.

Con la creación de estas particiones se comienza a ver la multiprogramacion, una partición fija por cada tarea, el tamaño de la partición se daba al arrancar el sistema, cada partición se podía reconfigurar al volver  a encender o reiniciar el sistema. Con estas particiones nos aparecen las fragmentacion interna.













Consiste en dividir la memoria libre en varias partes de igual tamaño o de diferente tamaño. Un programa puede ser demasiado grande para caber en la partición, es este caso, el programador debe diseñar el programa mediante superposiciones,para que solo una parte del programa este en memoria principal. 

En el caso de particiones de igual tamaño, si todas las particiones estuvieran ocupadas con procesos que no están listos para ejecutar y necesita un nuevo proceso, debe determinarse que partición expulsarse de memoria.

Asignación de memoria con particiones fijas, consiste en el proceso de asignar memoria en tiempo de compilación antes de que el programa asociado sea ejecutado.

Particiones dinámicas.

Con esta partición, las particiones son variables en numero y longitud, esto quiere decir que cuando se carga un proceso a la memoria principal se le asigna el espacio que necesita en memoria y no mas. Esta partición comienza siendo muy buena pero en el trascurso de eso deja un gran numero de huecos pequeños en la memoria lo cual se le denomina fragmentacion externa.




consiste en particiones de memoria de tamaños variable, es decir, a cada proceso se le asigna algunos algoritmos para la ubicación de procesos en las particiones. 

Mejor ajuste: se elige el bloque con el tamaño mas parecido al del proceso entrante.

Primer ajuste: comienza recorriendo la memoria desde el comienzo y escoge el primer bloque disponible en el que entre el proceso entrante.

Siguiente ajuste: recorre la memoria desde el lugar de la ultima ubicación y elige el siguiente bloque disponible que sea suficientemente grande.

Peor ajuste: elige el bloque mas grande posible.

Memoria


En la actualidad, memoria suele referirse a una forma de almacenamiento de estado solido, conocida como memoria RAM (memoria de acceso aleatorio; RAM por sus siglas en inglés, de random access memory), y otras veces se refiere a otras formas de almacenamiento rápido, pero temporal. De forma similar, se refiere a formas de almacenamiento masivo, como discos ópticos, y tipos de almacenamiento magnético, como discos duros y otros tipos de almacenamiento, más lentos que las memorias RAM, pero de naturaleza más permanente. Estas distinciones contemporáneas son de ayuda, porque son fundamentales para la arquitectura de computadores en general, Además, se refleja una diferencia técnica importante y significativa entre memoria y dispositivos de almacenamiento masivo, que se ha ido diluyendo por el uso histórico de los términos almacenamiento primario (a veces almacenamiento principal), para memorias de acceso aleatorio, y almacenamiento secundario, para dispositivos de almacenamiento masivo. 


Tipos de memoria:

Memoria RAM.
Es la memoria de acceso aleatorio (Random Access Memory), se le llama de acceso aleatorio porque el procesador accede a la información que esta en la memoria en cualquier pinto sin tener que acceder a la información anterior y posterior. 
Es la memoria que se actualiza constantemente mientras el ordenador esta en uso y que pierde sis datos cuando el ordenador se apaga.

Hay dos tipos básicos de memoria RAM:

- DRAM (Dynamic Random Access Memory)
Es la memoria de acceso aleatorio dinámica. Esta organizada en direcciones de memoria (Addresses) que son reemplazadas muchas veces por segundo.

- SRAM (Static Random Access Memory)
Memoria estática de acceso aleatorio es la alternativa a la DRAM. No necesita tanta electricidad para su refresco y reemplazo de las direcciones y funciona mas rápido porque no esta reemplazando constantemente las instrucciones y los valores almacenados en ella.

Memoria ROM.
Estas son las siglas de Read Only Memory (memoria de solo lectura) y eso es exactamente lo que es, una memoria que se graba en el proceso de fabricación con una información que esta hay para siempre, para lo bueno y lo malo.

Memoria cache.
Un cache es un sistema especial de almacenamiento de alta velocidad. Puede ser tanto un área reservada de la memoria principal como un dispositivo de almacenamiento de alta velocidad independiente. En las computadoras personales frecuentemente hay dos tipos de cache: memoria cache y cache de disco.

Jerarquías de almacenamiento.
Los componentes fundamentales de las computadoras de propósito general son la CPU, el espacio de almacenamiento y los dispositivos de entrada/salida. La habilidad para almacenar las instrucciones que forman un programa de computadora y la información que manipulan las instrucciones es lo que hace versátiles a las computadoras diseñadas según la arquitectura de programas almacenados.

Una computadora digital representa toda la información usando el sistema binario. Texto, números, imágenes, sonido y casi cualquier otra forma de información puede ser transformada en una sucesión de bits, o dígitos binarios, cada uno de los cuales tiene un valor de 1 - 0. La unidad de almacenamiento más común es el byte, igual a 8 bits.

Almacenamiento primario.
La memoria primaria, está directamente conectada a la CPU de la computadora. Debe estar presente para que la CPU efectúe cualquier función. El almacenamiento primario consta, pues, de la memoria primaria del sistema; contiene los programas en ejecución y los datos con que operan. Se puede transferir información muy rápidamente (típicamente en menos de 100 ciclos de reloj) entre un registro del microprocesador y localizaciones del almacenamiento principal. En las computadoras modernas se usan memorias de acceso aleatorio basadas en electrónica del estado sólido, que está directamente conectada a la CPU a través de buses de direcciones, datos y control.

Almacenamiento secundario.
La memoria secundaria requiere que la computadora use sus canales de entrada/salida para acceder a la información y se utiliza para almacenamiento a largo plazo de información persistente. Sin embargo, la mayoría de los sistemas operativos usan los dispositivos de almacenamiento secundario como área de intercambio para incrementar artificialmente la cantidad aparente de memoria principal en la computadora (a esta utilización del almacenamiento secundario se le denomina memoria virtual). La memoria secundaria también se llama de almacenamiento masivo. Un disco duro es un ejemplo de almacenamiento secundario.

Almacenamiento terciario.
La memoria terciaria es un sistema en el que un robot industrial brazo robótico, montará, conectará o desmontará (desconectará) un medio de almacenamiento masivo fuera de línea (véase el siguiente punto) según lo solicite el sistema operativo de la computadora. La memoria terciaria se usa en el área del almacenamiento industrial, la computación científica en grandes sistemas informáticos y en redes empresariales. Este tipo de memoria es algo que los usuarios de computadoras personales normales nunca ven de primera mano.

Almacenamiento fuera de linea.
El almacenamiento fuera de línea (off-line) es un sistema donde el medio de almacenamiento puede ser extraído fácilmente del dispositivo de almacenamiento. Estos medios de almacenamiento suelen usarse para transporte y archivo de datos. En computadoras modernas son de uso habitual para este propósito los disquetes, discos ópticos y las memorias flash, incluyendo las unidades USB. También hay discos duros USB que se pueden conectar rápidamente. Los dispositivos de almacenamiento fuera de línea usados en el pasado son cintas magnéticas en muchos tamaños y formatos diferentes, y las baterías extraíbles de discos Winchester.

Almacenamiento de red.
El almacenamiento de red es cualquier tipo de almacenamiento de computadora que incluye el hecho de acceder a la información a través de una red informática. Discutiblemente, el almacenamiento de red permite centralizar el “control de información” en una organización y reducir la duplicidad de la información. El almacenamiento en red incluye:

  • El almacenamiento asociado a red es una memoria secundaria o terciaria que reside en una computadora a la que otra de éstas puede acceder a través de una red de área local, una red de área extensa, una red privada virtual o, en el caso de almacenamiento de archivos en línea, Internet.
  • Las redes de computadoras son computadoras que no contienen dispositivos de almacenamiento secundario. En su lugar, los documentos y otros datos son almacenados en un dispositivo de la red.


miércoles, 4 de mayo de 2016

Sistemas Operativos


Un sistema operativo es un programa o conjunto de programas de un sistema informático que gestiona los recursos de hardware y provee servicios a los programas de aplicaciones de software, ejecutándose en modo privilegiado respecto a los restantes ( aunque puede que parte de el se ejecute en espacio de usuario ).

Es un error común pero muy extendido denominar como sistema operativo al conjunto completo de herramientas, es decir, la inclusión en el mismo termino de programas como el explorador de ficheros, el navegador web y todo tipo de herramientas que periten la interacción con el sistema operativo. Otro ejemplo para comprender esta diferencia se encuentra en al plataforma amiga, donde el entorno gráfico de usuario se distribuía por separado, de modo que, también podría reemplazarse por otro, como era el caso de directory Opus o incluso manejar lo arrancando con una linea de comandos y e sistema gráfico.  

De este modo comenzaba a funcionar con el propio sistema operativo que llevaba incluido en una ROM, por lo que era cuestión del usuario decidir si necesitaba un entorno gráfico para manejar el sistema operativo o simplemente esta aplicación.

Uno de los mas prominentes ejemplos de esta diferencia, es el NÚCLEO LINUX, usado en las llamadas DISTRIBUCIONES LINUX, ya que al estas también basadas en UNIX, proporcionan un sistema de funcionamiento similar. 

Este error de precisión, se debe a la modernización de la informática llevada a cabo a finales de los 80, cuando la filosofía de estructura básica de funcionamiento de los grandes computadores se diseño a fin de llevarla a los hogares y facilitar su uso, cambiando el concepto de computador multiusuario, por un sistema monousuario mas sencillo de gestionar. 

Un sistema se basa básicamente en cuatro características que son:

1. MEMORIA: Es el dispositivo que retiene, memoriza o almacena datos informáticos durante algún intervalo de tiempo. La memoria proporciona una de las principales funciones de la computadora moderna: el almacenamiento de información y conocimiento. Es uno de los componentes fundamentales de la computadora que interconectada a la UNIDAD CENTRAS DE PROCESAMIENTO ( CPU, por las siglas en ingles de Central Processing Unit ) y los dispositivos de entrada y salida, implementan lo fundamental del modelo de computadora de la arquitectura de VON NEUMANN. 

2. PROCESOS: Un proceso puede informalmente entenderse como un programa en ejecución. Formalmente un proceso es una unidad de actividad que se caracteriza por la ejecución de una secuencia de instrucciones, un estado actual, y un conjunto de recursos del sistema asociados.

3. ENTRADA/SALIDA: Es un dispositivo que permite la comunicación entre un sistema de procesamiento de información, tal como la computadora y el mundo exterior, y posiblemente un humano u otro sistema de procesamiento de información.

4. DISPOSITIVOS: Es un conjunto de componentes utilizados para leer o grabar datos en el soporte de almacenamiento de datos, de forma temporal o permanente.