viernes, 16 de noviembre de 2012

Gestión de los recursos

1. Procesos y flujos
Un proceso es un concepto manejado por el SO y que referencia un programa en ejecución.
A los procesos se les denomina flujos de control, tareas, threads o hilos, según su contexto.
Cuando se ejecuta mas de un proceso de forma concurrente en un sistema, todos necesitan que el propio sistema les suministre una serie de recursos, esto se los da la UCP. Se encarga de asignar estos recursos en un orden adecuado y atendiendo prioridades. También realiza funciones de sincronización en los procesos.
Cada vez que se ejecuta un programa, además de ubicar en memoria las instrucciones que lo componen y sus datos asociados, a dicho proceso le da una estructura de datos.
Esta estructura de datos, es única para cada proceso y controla que funcione bien. Es a lo que denominamos bloque de control de proceso o BCP y contendrá el estado actual del proceso, el identificador, la prioridad, la ubicación en memoria y los recursos utilizados.
2. Hebras y estados de los procesos
Una hebra es un punto de ejecución en un proceso.
Las hebras son un método de software para mejorar el rendimiento y eficacia de los SO. Las hebras de un mismo proceso comparten recursos.
El proceso clásico solo contiene una hebra.
Ahora hay muchos programas que están preparados para mas de una hebra ( Multihebra), y se ejecutan a la vez como por ejemplo: desfragmentar el disco duro que aunque solo sea un proceso implica varios procesos.
Los estados posibles pueden ser:
- En ejecución: El procesador ejecuta las instrucciones del programa que lo componen y tiene concedido el tiempo de uso de la UCP en un instante preciso.
- Preparado, en espera o activo: Un proceso esta preparado para ser ejecutado; es decir, esta esperando a que le toque para poder utilizar el intervalo de tiempo que le pertenece y poner a funcionar sus instrucciones accediendo a los recursos del sistema.
- Bloqueado: El proceso esta retenido; es decir, esta bloqueado por varias causas. Uno de estos motivos puede ser que utilice el mismo fichero que otro programa de datos.
Todos los procesos dentro de cualquier SO tienen unas características que las identifican.
Cada proceso, tiene un identificador que lo diferencia de los demás. Cada proceso tiene un numero que les da el SO que sirve para identificar al proceso, ponerlo en ejecución, pararlo, detenerlo... Este identificador de proceso se le denomina PID.
Los procesos los lanzan normalmente otros procesos. Dependen de otros procesos llamados proceso padre. Al nuevo proceso se le llama Proceso hijo.
3. Transición de los procesos
Una vez que un programa se ha hecho proceso, puede atravesar varias fases o estados.
Cuando un proceso se lanza, nunca se ejecuta directamente, se coloca en la cola de procesos en un estado denominado preparado. Cuando la UCP le asigna su tiempo, el proceso pasa de estar preparado a ejecución. Estos dos estados se alternan en caso de que se este ejecutando mas de un proceso en el sistema.
Los cambios de estado se les llama transiciones.
- Transición A: Ocurre cuando el programa que esta en ejecución necesita algún elemento, señal o dato para continuar ejecutándose.
- Transición B: Ocurre cuando un programa o proceso ha utilizado el tiempo asignado por la UCP para su ejecución y tiene que dejar paso al siguiente proceso.
- Transición C: Ocurre cuando el proceso que esta preparado pasa al proceso de ejecución  es decir, cuando al proceso le llega una nueva disposición de tiempo de la UCP para poder ejecutarse.
- Transición D: Ocurre cuando el proceso pasa de estar bloqueado a estar preparado, es decir, cuando el proceso recibe una orden o señal que estaba esperando para poder pasar al estado preparado y, posteriormente, tras la transición, a estado de ejecución.
En un sistema multiproceso/multihebra, cuando un proceso o hilo pasa de un estado a otro, se producira un cambio de contexto.
Existen dos tipos de cambio de contexto son:
Parcial: si se hace entre hilos del mismo proceso.
Completo: Si es entre hilos de diferentes procesos, ya que cambia a la memoria, hardware... 
Los diferentes estados tienen una relación directa con Prioridades, son aquellas que el administrador del sistema, o el sistema le asignan a los procesos. De esto dependerá que un proceso se ejecute antes o después.
La Planificacion consiste en indicar al ordenador los procesos que deben ejecutarse y los estados que estos deben adoptar gracias a los algoritmos de planificacion podemos decidir que proceso ha de ejecutarse en cada momento y por que. Algunas características de estos algoritmos son la imparcialidad, la equipad, la eficiencia, el tiempo de respuesta y el rendimiento.
Una vez cargado el proceso, el SO asigna a través del planificador la prioridad del nuevo proceso respecto de los que hay en ejecución.
Cada proceso atraviesa varias fases. En un momento dado, el proceso se estará ejecutando; posteriormente estará en espera, mientras la UCP ejecuta otro; otros procesos estarán preparados para ser lanzados; otros podrán estar bloqueados...
Cuando se están ejecutando varias tareas, es necesario que compartan el tiempo de trabajo de la UCP. Consiste en partir el tiempo de ejecución del procesador en minúsculos intervalos de tiempo (quantum) e ir asignando cada uno de esos intervalos en ejecución a cada proceso que esta en ejecución.
4. Bloque de control de procesos
El bloque de control de procesos o BCP. En sistemas operativos multiproceso, el sistema operativo mantiene listas de bloques de control de procesos para cada uno de los estados del sistema.
El BCP de cada proceso almacena información como:
- Estado actual del proceso: Ejecución, preparado o bloqueado.
- Identificador del proceso: dependiendo del sistema operativo, a cada proceso se le asigna un PID.
- Prioridad del proceso: La asignada por el planificador.
Ubicación en memoria: Dirección de memoria en la que se carga el proceso
- Recursos utilizados: Recursos hardware y software para poder ejecutarse.
Gracias a los algoritmos de planificación  el cargador, planificador, BCP, recursos hardware y software se sincronizan mediante el sistema operativo para la ejecucion ordenada de procesos.
En programas multihilo, el BCP puede contener ademas el PPID. Este dato referencia al PID del proceso padre dentro del BCP, de tal forma que desde el propio BCP se pueden identificar todos los procesos que sin hijos de otro, siempre y cuando tengan el mismo PPID.
En procesos convencionales, este dato en el BCP no existirá. 
5. Algoritmos de planificacion
Gracias a los algoritmos de planificación, especialmente en los SO multiproceso, la CPU se encarga de dar tiempos de ejecución a cada proceso segun el tipo de algoritmo y la prioridad de cada proceso.
Hay 2 tipos de algoritmos en windows y linux:
Algoritmo de rueda: Asigna rotativamente tiempos de ejecución a los distintos procesos. Denominado también Round-Robin y en el ocurre el tiempo de ejecución de los procesos es la misma y de forma secuencial. A cada uno se le da un quantum o intervalo de tiempo en ejecución). La selección entre los procesos se realiza mediante una cola llamada FIFO que trata de que el primero que entra el primero que sale. Es el que mas se utiliza actualmente.
Algoritmo FIFO o FCFS: Los ciclos de UCP dados a cada proceso se les da un orden en FIFO. Al primer proceso que llega se le asigna tiempos o ciclos de UCP hasta que termina completamente. A continuación  se ejecuta completo el siguiente proceso que hay en la cola FIFO y así hasta el ultimo proceso. Este proceso se utiliza sobre todo para las colas de impresión.
6. Memoria RAM y memoria virtual
El ordenador cuenta con la memoria central, pero esta limitada y a veces es insuficiente.
Al principio se adopto la forma de separar el programa en capas. Cada una se iva ejecutando según fuera necesario. Primero se pasaría parte del programa del disco duro a la memoria, y cuando fuera necesario usar otra parte se iría de nuevo al disco para cargarla a la memoria principal.
Fotheringam diseño el conocido método de memoria virtual. Penso en la posibilidad de que al meter al programa en memoria, fuera muy grande y creo una técnica solo la parte del programa que se estaba ejecutando estaría hay el resto estaría en el disco.
Considera el espacio libre de disco como si se tratase de memoria RAM , pero solo se carga en esta la parte que se esta ejecutando.
Si se necesita usar otra parte del programa la actual pasara al disco y la que se necesita a la RAM asi siempre queda mas espacio, esto viene muy bien para los multitarea.
Cuando se cargan muchos procesos a la vez el ordenador se realentiza puesto que tiene que pasar mucha información constantemente del disco a la RAM y al contrario.
Los sistemas multiusuario gestionan muy bien la memoria virtual.
Para realizar esta gestión dispone de un mínimo de 2,5% de la memoria RAM y un máximo de 5%.
Respecto a windows surge un problema en diferencia con linux y es que la fragmentación de archivos se almacena en la zona de intercambio. Esto implica que el equipo sea cada vez mas lento puesto que la información esta fragmentada y cuesta mas acceder a ellos.
7. Intercambio
En los SO monousuario y monoproceso, la gestión de memoria era muy simple ya que estas tenían poca capacidad.
En los sistemas multiusuario es una de las funciones mas importantes del SO.
La parte que administra la memoria es el Administrador de memoria, que lleva un registro de las partes de la memoria que se están utilizando y de las que no. Así guarda espacio en la memoria para los nuevos procesos y libera a los que han acabado. Ademas gestiona también  el intercambio de datos entre memoria y disco, siempre y cuando los procesos sean tan grandes que no quepan de una sola vez en memoria.
La memoria tiene que ser gestionada y controlada por el SO de tal manera que cada proceso utilice su espacio en memoria sin afectar a otros donde puede a ver datos...
Para gestionar la memoria en sistemas operativos multitarea, esta se divide en particiones fijas.
El planificador cuenta los requerimientos de memoria de cada proceso y las particiones de memoria disponibles. Estos requerimientos de uso de memoria se almacena en la BCP.
La dificultad de las particiones fijas es la forma correcta de seleccionar los tamaños.
Con un conjunto dinámico de procesos que están ejecutándose no se puede encontrar las particiones en memoria adecuadas. Por eso se dispone de otras que son las particiones variables.
Ahora se necesita un registro con información de las particiones libres y ocupadas, que sea eficiente en el tiempo de asignación tanto en aprovechamiento de la memoria. Aun con todo esto sigue un problema en la fragmentacion externa. Una de las soluciones es permitir que los procesos puedan utilizar memoria no contigua, lo que se consigue con ciertos métodos como la de paginación en esta hay un mecanismo de traducción de las direcciones lógicas a las físicas mediante una tabla de paginas.
La tabla de paginas presenta dos cuestiones: El tamaño (puede ser muy grande), y el tiempo de asignación (que debe de ser corto).
Segmentación: la RAM se divide en espacios que no tienen que ser del mismo tamaño y que estarán en función del tamaño de los procesos que se vayan a ejecutar.
Memoria virtual: En los sistemas operativos actuales se puede configurar el área de intercambio, incluso se puede indicar en que disco se puede realizar el intercambio. El gran inconveniente de modificar a la ligera lo que el sistema administra automáticamente, es que podemos provocar que el rendimiento sea mas lento.
8. paginación, segmentación y swapping
Son técnicas de gestión de memoria, permiten ejecutar programas de mayor tamaño a los de la memoria RAM usando el disco duro como ampliación el inconveniente de esto es que baja el rendimiento.
8.1 paginación
Es una técnica que consiste en dividir la memoria interna o RAM en zonas iguales llamadas frames, y los programas en partes del mismo tamaño denominadas paginas.
El tamaño de los frames se diseña por hardware.
Si utilizamos multiprogramacion y solo hay un trabajo, este tendrá todos los frames necesarios para el. Esta asignación la realiza el SO.
Mediante la tabla de paginas, la UCP asigna las direcciones físicas de los frames a las paginas en las que se ha dividido el programa. La asignación de los frames no tiene que ser necesariamente consecutiva. Un proceso se puede ubicar en memoria interna en frames no contiguos, ya que estos pueden estar ocupados por otros procesos.
La técnica de paginación es similar a la de la memoria virtual.
El sistema operativo DOS utiliza una técnica parecida a la paginación.
La paginación es una técnica de reasignación o redireccionamiento dinámico  con la consideración de que la tabla de paginas se puede almacenar en registros especiales destinados a tal efecto o en una parte de la propia memoria.
La transformación de las direcciones lógicas en físicas la realiza la unidad de administración de memoria.
8.2 Segmentación
Cada segmento puede variar desde 0 hasta un máximo permitido.
La longitud de un segmento puede variar según las necesidades del programa.
Puede organizar la memoria en bloques concretos y tener partes de ella destinadas a almacenar las estructuras de datos, que pueden crecer o menguar según las necesidades del usuario o del programa. Para ello se utilizaran las pilas de memoria o stacks, en las que gestionan las estructuras de datos necesarias.
La paginación difiere de la segmentación en que las paginas son de tamaño fijo y los segmentos no.
8.3 Swapping
Es una técnica parecida a la de memoria virtual. Cuando varios usuarios están ejecutando procesos en un mismo ordenador, este se ve obligado a cargarlos en RAM. Según el estado en el que se encuentre el proceso de cada usuario, la memoria se ira liberando de su proceso y pasara a la zona swap mediante la técnica llamada swap-out. De esta forma, la memoria interna queda liberada para que en ella se pueda almacenar otro proceso del mismo usuario o de otro.
La diferencia entre la gestión de memoria virtual y el swapping es que, mediante la primera, puede llegar a ocurrir que el disco este tan lleno que la gestión sea difícil o imposible, ya que el espacio destinado al intercambio suele ser espacio del disco duro en el que esta instalado tanto el SO como el software de aplicaciones y los datos del usuario.
En el swapping no puede ocurrir esto, ya que esta zona siempre estará reservada y disponible para el intercambio de programas con la memoria principal.
9. Programas reubicables, reentrantes, residentes y reutilizables
Según como, donde y cuando se ubiquen en memoria:
- A. Reubicables
Son aquellos que, una vez cargados en RAM para ejecutarse, pueden variar de situación  ya que la parte de RAM que ocupan puede ser necesaria para ubicar otro proceso. Estos procesos o programas cambian de posición cuando se esta realizando una operación sobre el ordenador.
- B. Reentrantes
Son aquellos programas que, si no se están ejecutando, dejan la memoria libre para otros procesos. Estos procesos, cuando se liberan, se suelen almacenar temporalmente en el disco duro.
- C. Residentes
Son aquellos que, una vez cargados en memoria, permanecerán en ella hasta que se apague el ordenador. No cambian su ubicación en ningún momento. Suelen ser programas de antivirus, de análisis de sistema, de monitorizacion, etc. Los mas comunes son los centinelas, que incorporan los antivirus para que analicen continuamente lo que se carga en memoria.
La ubicación de estos programas dependerá  fundamentalmente, del SO y de la propia aplicacion que lanze el programa residente.
- D. Reutilizables
Son programas que normalmente son utilizados por varios usuarios a la vez en memoria, independientemente del numero de usuarios que lo vayan a usar.
10. Gestión de entrada/salida: tipos de periféricos
Una de las funciones mas importantes de un SO es el control de los periféricos de entrada/salida del ordenador. El sistema operativo se encarga de enviar ordenes, determinar el dispositivo que necesita la atención del procesador.
Hay una clasificación según como sean los periféricos para la gestión de información que es:
- Periférico tipo bloque: Son aquellos en los que la información que se maneja es de tamaño fijo. La información entra o sale de memoria en forma de bloque.
- Periférico tipo carácter: Son los que sirven para introducir datos dentro de la memoria del ordenador en forma de caracteres, sin ningún orden concreto, por ejemplo los teclados.
Cada periférico esta compuesto por un componente mecánico y por otro, u otros, componentes electrónicos.
El SO se encarga de acceder a la información de la memoria principal, extraerla en forma de impulsos eléctricos y enviarla a los diferentes dispositivos periféricos  Si la información se envía a un disco duro, los impulsos se transformaran en señales magnéticas; si se envía a una impresora, se transformaran en caracteres.
11. Comunicación con el sistema: interfaces de usuario
Hay 2 tipos de interfaces y son:
Interfaz de texto: Se representa mediante cadenas de caracteres.
Interfaz gráfica: Comunicación ente maquina y ordenador tipo gráfico  ahora es lo habitual. En esta interfaz es imprescindible el ratón. La información se muestra en pantallas llamadas ventanas, en ellas aparece la información para enviar o recibir información.
12. Clasificación de los periféricos
- De entrada: Son los que introducen la información, la información va desde ellos hasta la memoria y el resto de componentes internos para ser procesada.
- De salida: Son los que extraen la información  desde la memoria y resto de componentes internos del ordenado, y mostrar los datos.
- De entrada/salida: Son los que se utilizan para introducir o extraer datos desde y hacia el ordenado. En ellos se puede escribir información al igual que leerla ( Salida y entrada). Hay otros dentro de este grupo como puede ser un monitor táctil.
No se debe confundir periféricos con soportes, los periféricos son los puertos donde se introducen los soportes que son los que sirven para extraer y meter la información. El soporte es la parte extraible.
Los soportes tienen algunas características como que son reutilizables, tienen mucha capacidad, son económicos y no son volátiles.
A. Raton y teclado
Son los periféricos de entrada por excelencia.
1- Crtl: Combinación de teclas
2- Shift: Se utiliza para escribir letras en mayúsculas o el símbolo de la parte superior del resto de teclas.
3- Caps Lock: Se utiliza para dejar activada la escritura en mayúsculas.
4- Tab: Se utiliza para tabulaciones en procesadores de texto y movimiento en campos de entrada de formularios.
5- Esc: Se utiliza para finalizar
6- Teclas de funcion (F1 a F12): Es para la abrebiacion de acciones.
7- Retroceso: Se utiliza para borrar el carácter de la izquierda.
8- Panel identificador: Indica si esta activado el teclado numérico o las mayúsculas.
9- Teclado numérico: sirve solo para los números
10- Teclado de edición: Se utiliza para escribir, juegos y todo aquello que necesite de letras.
11- Enter: Sirve para confirmar acciones, aplicaciones ofimáticas y relacionado con espacios entre lineas.
12- Espaciador: Se utiliza para separar caracteres (espacios en blanco).
13- Alt: Se utiliza en combinación de otras teclas y realiza determinadas acciones.

B. Monitor
Es un periférico de salida. Puede ser en B/N o en color, sus presentaciones dependen de la tarjeta gráfica y de la memoria apropiada que incorpore el fabricante, de la frecuencia de refresco, de las pulgadas etc...
C. Impresora
Es un periférico de salida, que permite la salida de papel con la información deseada.
D. Otros periféricos
- Escaner: Hace posible que una imagen o documento, se haga datos.
- Módem: Es de E/S permite la comunicación remota con otros equipos.
- Unidad de disquete: Son de E/S y almacena datos o los puedes extraer al pc.
- Unidad de disco duro: Son de alta capacidad y alta velocidad, utilizadas para instalar programas, almacenar fotos..., y también se encuentra instalado el SO
- Tableta digitalizadora y lápiz óptico: Se utilizan para hacer gráficos y esquemas.
- DVD: Periférico de entrada. Para acceder a su información es mediante un lector láser  Su capacidad es de 4GB o superior.
- Blue-ray: Es similar a las anteriores pero con una capacidad de unos 50GB.
- HDVD: Similar al DVD pero con capacidad de hasta 30GB
13. Gestión de la información
Cuando trabajamos con SO multiusuario, la gestión de datos que se hace dentro del ordenador y su ubicación en memoria y los soportes de almacenamiento externo, pueden plantear algunos problemas.
En cuanto almacenamiento en soportes externos, la gestión que haga el SO tiene que responder ante varias características  Se almacenara gran cantidad de información  se almacenara de forma correcta y los programas podrán acceder a ella.
La información tiene que almacenarse de forma permanente en los soportes externos a través de archivos. Cada SO utiliza su propio sistema de archivos. El SO gestiona cada archivo almacenado en el soporte.
Veremos en cada SO cual es su sistema de archivos o File System. Cada uno de ellos hace una gestión diferente del espacio de almacenamiento, lo cual dependerá de si el sistema es multiusuario o monousuario, multitarea o monotarea, multiprocesador o monoprocesador etc...
- Archivos regulares o estandares: Son los que contienen información del usuario, programas, documentos, textos gráficos etc...
- Directorios: Son archivos que contienen referencias a otros archivos regulares o a otros directorios.
- Archivos especiales: Los que no son de ninguno de los otros.