miércoles, 8 de febrero de 2017

Procesos de Sistemas Operativos

Definición de Procesos: Un proceso no es más que un programa en ejecución, e incluye los valores actuales del contador de programa, los registros y las variables. Conceptualmente cada unos de estos procesos tiene su propia CPU virtual. Desde luego, en la realidad la verdadera CPU conmuta de un proceso a otro.
Un proceso es un concepto manejado por el sistema operativo que consiste en el conjunto formado por:
Las instrucciones de un programa destinadas a ser ejecutadas por el microprocesador.
Su estado de ejecución en un momento dado, esto es, los valores de los registros de la CPU para dicho programa.
Su memoria de trabajo, es decir, la memoria que ha reservado y sus contenidos.
Otra información que permite al sistema operativo su planificación.
Estados de los Procesos: Consideramos que todo proceso puede estar, como mínimo, en uno de los siguientes tres estados:
Activo: el proceso está empleando la CPU, por tanto, está ejecutándose. Pueden haber tantos procesos activos como procesadores haya disponibles. Por tanto, si el sistema dispone de un único procesador, únicamente puede haber un proceso activo a la vez.
Preparado: el proceso no está ejecutándose pero es candidato a pasar a estado activo. Es el planificador el que, en base a un criterio de planificación, decide qué proceso selecciona de la lista de procesos preparados para pasar a estado activo.
Bloqueado: el proceso está pendiente de un evento externo que le ha hecho bloquear, tales como una operación de lectura/escritura, la espera de finalización de un proceso hijo, una señal o una operación sobre un semáforo. El dispositivo/hecho externo "avisa" al S.O. cuando ha terminado la acción que realizaba mediante una INTERRUPCIÓN, dejando el S.O. lo que está haciendo para atender a esta última. Tras esto, el S.O. comprueba cuales son los procesos que fueron bloqueados por ese evento externo, cambiándolos al estado de preparado.

La transición de activo a preparado y viceversa depende de decisiones tomadas por el planificador del sistema operativo en base a un cierto criterio. La transición de activo a bloqueado, y de bloqueado a preparado puede inducirlas el programador mediante llamadas al sistema.
Bloque de Control de los Procesos: El bloque de control del proceso (BCP) o en inglés PCB (Process Control Block) es un registro especial donde el sistema operativo agrupa toda la información que necesita conocer respecto a un proceso particular. Cada vez que se crea un proceso el sistema operativo crea el BCP correspondiente para que sirva como descripción en tiempo de ejecución durante toda la vida del proceso.
Cuando el proceso termina, su BCP es borrado y el registro puede ser utilizado para otros procesos. Un proceso resulta conocido para el sistema operativo y por tanto elegible para competir por los recursos del sistema sólo cuando existe un BCP activo asociado a él. El bloque de control de proceso es una estructura de datos con campos para registrar los diferentes aspectos de la ejecución del proceso y de la utilización de recursos. La información almacenada en un BCP incluye típicamente algunos o todos los campos siguientes:
Identificador del proceso (Process Identificator -PID-, de sus siglas en inglés).
Estado del proceso. Por ej.: listo, en espera, bloqueado.
Contador de programa: dirección de la próxima instrucción a ejecutar.
Valores de registro de CPU. Se utilizan también en el cambio de contexto.
Espacio de direcciones de memoria.
Prioridad en caso de utilizarse dicho algoritmo para planificación de CPU.
Lista de recursos asignados (incluyendo descriptores de archivos y sockets abiertos).
Estadísticas del proceso.
Datos del propietario (owner).
Permisos asignados.
Signals pendientes de ser servidos. (Almacenados en un mapa de bits).
Esta lista es simplemente indicativa, cada sistema operativo tiene su propio diseño de BCP, con el conjunto de meta datos necesarios para la administración. Puede medir desde 32 bits a 1024. Su denominación cambia según el sistema operativo, por ej. en IBM se designa PSW por palabra de estado de proceso. Difiere significativamente entre los sistemas de procesamiento por lotes (BATCH) y los sistemas interactivos.
Algunos sistemas de multiprogramación incluyen información de mantenimiento con el propósito de facturar a los usuarios individuales el tiempo de procesador, el almacenamiento, las operaciones de E/S y otras utilizaciones de recursos.
Una vez creado, el BCP se rellena con los atributos definidos como parámetros que se hallan en la plantilla del proceso o que son especificados como parámetros de la llamada al sistema operativo crear proceso. En ese momento el sistema operativo suele asignar valores a otros campos. Por ejemplo, cuando se crea un proceso, los registros e indicadores harware se fijan a los valores proporcionados por el cargador/enlazador.
Planificación de procesos en Sistemas Operativos: Conjunto de políticas y mecanismos incorporados al sistemas operativos, a través de un módulo denominado planificador, que debe decidir cuál de los procesos en condiciones de ser ejecutado conviene ser despachado primero y qué orden de ejecución debe seguirse. Esto debe realizarse sin perder de vista su principal objetivo que consiste en el máximo aprovechamiento del sistema, lo que implica proveer un buen servicio a los procesos existentes en un momento dado.
Comunicación y sincronización entre los Procesos: 
Los procesos que ejecutan de forma concurrente en un sistema se pueden clasificar como procesos independientes o cooperantes. Un proceso independiente es aquel que ejecuta sin requerir la ayuda o cooperación de otros procesos. Un claro ejemplo de procesos independientes son los diferentes intérpretes de mandatos que se ejecutan de forma simultánea en un sistema. Los procesos son cooperantes cuando están diseñados para trabajar conjuntamente en alguna actividad, para lo que deben ser capaces de comunicarse e interactuar entre ellos.
Tanto si los procesos son independientes como cooperantes, pueden producirse una serie de interacciones entre ellos. Estas interacciones pueden ser de dos tipos:
Interacciones motivadas porque los procesos comparten o compiten por el acceso a recursos físicos o lógicos. Esta situación aparece en los distintos tipos de procesos anteriormente comentados. Por ejemplo, dos procesos totalmente independientes pueden competir por el acceso a disco. En este caso, el sistema operativo deberá encargarse de que los dos procesos accedan ordenadamente sin que se cree ningún conflicto. Esta situación también aparece cuando varios procesos desean modificar el contenido de un registro de una base de datos. Aquí es el gestor de la base de datos el que se tendrá que encargar de ordenar los distintos accesos al registro.
Interacción motivada porque los procesos se comunican y sincronizan entre sí para alcanzar un objetivo común. Por ejemplo, un compilador se puede construir mediante dos procesos: el compilador propiamente dicho, que se encarga de generar código ensamblador, y el proceso ensamblador, que obtiene código en lenguaje máquina a partir del ensamblador. En este ejemplo puede apreciarse la necesidad de comunicar y sincronizar a los dos procesos.
Estos dos tipos de interacciones obligan al sistema operativo a incluir mecanismo y servicios que permitan la comunicación y la sincronización entre procesos.
 Definición de concurrencia
Dos o más procesos decimos que son concurrentes, paralelos, o que se ejecutan concurrentemente, cuando son procesados al mismo tiempo, es decir, que para ejecutar uno de ellos, no hace falta que se haya ejecutado otro.
En sistemas multiprocesador, esta ejecución simultánea podría conseguirse completamente, puesto que podremos asignarle, por ejemplo, un proceso A al procesador A y un proceso B al procesador B y cada procesador realizaran la ejecución de su proceso.
Cuando tenemos un solo procesador se producirá un intercalado delas instrucciones de ambos procesos, de tal forma que tendremos la sensación de que hay un paralelismo en el sistema (concurrencia, ejecución simultánea de más de un proceso).
Ahora bien, está claro que en esto tenemos que tener en cuenta que mientras un proceso está escribiendo un valor en una variable determinada, puede darse el caso que otro proceso que es concurrente al primero vaya a leer o escribir en esa misma variable, entonces habrá que estudiar el caso en el que un proceso haga una operación sobre una variable (o recurso en general) y otro proceso concurrente a él realice otra operación de tal forma que no se realice correctamente
Tipos de Interrupciones: Una interrupción es un mecanismo que permite ejecutar un bloque de instrucciones interrumpiendo la ejecución de un programa, y luego restablecer la ejecución del mismo sin afectarlo directamente. De este modo un programa puede ser interrumpido temporalmente para atender alguna necesidad urgente del computador y luego continuar su ejecución como si nada hubiera pasado.
Generalmente se aplica para realizar tareas elementales asincrónicas en el computador tales como responder al teclado, escribir en la pantalla, leer y escribir archivos. Podemos considerar una tarea asincrónica como aquella que es solicitada sin previo aviso y aleatoriamente desde el punto de vista del computador. Tomemos el caso de la operación Ctrl-Alt-Supr. En Windows tiene el efecto de que aparece en pantalla una lista de los procesos y ventanas en ejecución en el computador. En cambio en el Sistema Operativo DOS cuando el usuario presiona simultáneamente dichas teclas el computador procede a reinicializarse, aunque pueda estar ocupado ejecutando un programa en ese instante. Vale decir fuerza obligadamente a que el computador se reinicialice. Ya sea en el sistema Windows o en DOS, el computador no está constantemente monitoreando el teclado para ver si el usuario ha solicitado un Ctrl-Alt-Del, ya que en ese caso consumiría mucho tiempo de proceso en ello y por ende la capacidad de proceso se vería significativamente afectada. La solución empleada es una interrupción
Interrupciones internas de hardware:
Las interrupciones internas son generadas por ciertos eventos que surgen durante la ejecución de un programa.
Este tipo de interrupciones son manejadas en su totalidad por el hardware y no es posible modificarlas.
Un ejemplo claro de este tipo de interrupciones es la que actualiza el contador del reloj interno de la computadora, el hardware hace el llamado a esta interrupción varias veces durante un segundo para mantener la hora actualizada.
Aunque no podemos manejar directamente esta interrupción (no podemos controlar por software las actualizaciones del reloj), es posible utilizar sus efectos en la computadora para nuestro beneficio, por ejemplo para crear un "reloj virtual" actualizado continuamente gracias al contador del reloj interno. Unicamente debemos escribir un programa que lea el valor actual del contador y lo traduzca a un formato entendible para el usuario.
Interrupciones externas de hardware:
Las interrupciones externas las generan los dispositivos perifericos, como pueden ser: teclado, impresoras, tarjetas de comunicaciones, etc. También son generadas por los coprocesadores.
No es posible desactivar a las interrupciones externas.
Estas interrupciones no son enviadas directamente a la UCP, sino que se mandan a un circuito integrado cuya función es exclusivamente manejar este tipo de interrupciones. El circuito, llamado PIC 8259A, si es controlado por la UCP utilizando para tal control una serie de vias de comunicación llamadas puertos.

Una lista de las interrupciones generadas por hardware es la siguiente:

IRQ
Prioridad
Función
0
1
Timer
1
2
Teclado Hardware
2
Reservada
3
11
COM 2
4
12
COM 1
5
13
Tarjeta de Sonido
6
14
Controlador Floppy
7
15
Puerta Paralela
8
3
Reloj (tics)
9
4
Libre para tarjeta de red, sonido, puerta SCSI
10
5
idem
11
6
idem
12
7
PS-mouse
13
8
Co-procesador matemático
14
9
Canal IDE primario
15
10
Canal IDE secundario
Interrupciones de software:
Las interrupciones de software pueden ser activadas directamente por el ensamblador invocando al número de interrupción deseada con la instrucción INT.
El uso de las interrupciones nos ayuda en la creación de programas, utilizandolas nuestros programas son más cortos, es más fácil entenderlos y usualmente tienen un mejor desempeño debido en gran parte a su menor tamaño.
Este tipo de interrupciones podemos separarlas en dos categorias: las interrupciones del sistema operativo DOS y las interrupciones del BIOS.
La diferencia entre ambas es que las interrupciones del sistema operativo son más fáciles de usar pero también son más lentas ya que estas interrupciones hacen uso del BIOS para lograr su cometido, en cambio las interrupciones del BIOS son mucho más rápidas pero tienen la desventaja que, como son parte del hardware son muy específicas y pueden variar dependiendo incluso de la marca del fabricante del circuito.

La elección del tipo de interrupción a utilizar dependerá unicamente de las caracteristicas que le quiera dar a su programa: velocidad (utilizando las del BIOS) o portabilidad (utilizando las del DOS).

viernes, 18 de noviembre de 2016

Sistema de Computacion

Arquitectura de Von Neumann
Una computadora (Hispanoamérica) u ordenador (España) es un dispositivo electrónico compuesto básicamente de un procesador, memoria y dispositivos de entrada/salida (E/S). La característica principal de la computadora, respecto a otros dispositivos similares, como una calculadora no programable, es que con él se pueden realizar tareas muy diversas, cargando distintos programas en la memoria para que los ejecute el procesador. Siempre se busca optimizar los procesos, ganar tiempo, hacerlo más fácil de usar y simplificar las tareas rutinarias La arquitectura Von Neumann, también conocida como modelo de Von Neumann o arquitectura Princeton, es una arquitectura de computadoras basada en la descrita en 1945 por el matemático y físico John von Neumann y otros, en el primer borrador de un informe sobre el EDVAC Este describe una arquitectura de diseño para un computador digital electrónico con partes que constan de una unidad de procesamiento que contiene una unidad aritmético lógica y registros del procesador, una unidad de control que contiene un registro de instrucciones y un contador de programa, una memoria para almacenar tanto datos como instrucciones, almacenamiento masivo externo, y mecanismos de entrada y salida, El significado ha evolucionado hasta ser cualquier computador de programa almacenado en el cual no pueden ocurrir una extracción de instrucción y una operación de datos al mismo tiempo, ya que comparten un bus en común. Esto se conoce como el cuello de botella Von Neumann y muchas veces limita el rendimiento del sistema.
El diseño de una arquitectura Von Neumann es más simple que la arquitectura Harvard más moderna, que también es un sistema de programa almacenado, pero tiene un conjunto dedicado de direcciones y buses de datos para leer datos desde memoria y escribir datos en la misma, y otro conjunto de direcciones y buses de datos para ir a buscar instrucciones.
Un computador digital de programa almacenado es una que mantiene sus instrucciones de programa, así como sus datos, en memoria de acceso aleatorio (RAM) de lectura-escritura. Las computadoras de programa almacenado representaron un avance sobre los ordenadores controlados por programas de la década de 1940, como la Colossus y la ENIAC, que fueron programadas por ajustando interruptores e insertando parches, conduciendo datos de la ruta y para controlar las señales entre las distintas unidades funcionales.
 En la gran mayoría de las computadoras modernas, se utiliza la misma memoria tanto para datos como para instrucciones de programa, y la distinción entre Von Neumann vs. Harvard se aplica a la arquitectura de memoria caché, pero no a la memoria principal

Definición de hardware y software.
 El Hardware: Componentes físicos del ordenador, es decir, todo lo que se puede ver y tocar. Clasificaremos el hardware en dos tipos:
- El que se encuentra dentro de la torre o CPU, y que por lo tanto no podemos ver a simple vista.
- El que se encuentra alrededor de la torre o CPU, y que por lo tanto, si que vemos a simple vista, y que denominamos periféricos. 
El Software: Son las instrucciones que el ordenador necesita para funcionar, no existen físicamente, o lo que es igual, no se pueden ver ni tocar. También tenemos de dos tipos:
Sistemas Operativos: Tienen como misión que el ordenador gestione sus recursos de forma eficiente, además de permitir su comunicación con el usuario. Nosotros utilizamos el Sistema Windows.
Aplicaciones: Son programas informáticos que tratan de resolver necesidades concretar del usuario, como por ejemplo: escribir, dibujar, escuchar música.

Unidad Central de Procesamiento
 Es el cerebro de la computadora, pues es el coordinador de la máquina y la parte encargada de supervisar el funcionamiento de las otras secciones. La CPU le dice a la unidad de entrada cuándo debe leerse información para introducirla en la unidad de memoria, le dice a la ALU cuando la información de la unidad de memoria debe utilizarse en los cálculos y le dice la unidad de salida cuando debe enviar la información que está es la unidad de memoria a ciertos dispositivos de salida.

            La Unidad Central de Procesamiento CPU se divide en dos:
·          Unidad de Control: Coordina las actividades de la computadora y determina que operaciones se deben realizar y en que orden; así mismo controla todo el proceso de la computadora.
·          Unidad Aritmético - Lógica: Realiza operaciones aritméticas y lógicas, tales como suma, resta, multiplicación, división y comparacione

Memoria Principal o Primaria (RAM – ROM)
En la Memoria Principal o Primaria de la computadora se encuentran las memorias RAM, ROM y CACHÉ.
La Memoria RAM (Random Access Memory o Memoria de Acceso Aleatorio) es un circuito integrado o chip que almacena los programas, datos y resultados ejecutados por la computadora y de forma temporal, pues su contenido se pierde cuando esta se apaga. Se llama de acceso aleatorio - o de acceso directo - porque se puede acceder a cualquier posición de memoria sin necesidad de seguir un orden. La Memoria RAM puede ser leída y escrita por lo que su contenido puede ser modificado.

La Memoria ROM (Read Only Memory o Memoria de sólo lectura)
 viene grabada en chips con una serie de programas por el fabricante de hardware y es sólo de lectura, por lo que no puede ser modificada - al menos no muy rápida o fácilmente - y tampoco se altera por cortes de corriente. En esta memoria se almacenan los valores correspondientes a las rutinas de arranque o inicio del sistema y a su configuración.

La Memoria Caché o RAM Caché es una memoria auxiliar de alta velocidad, que no es más que una copia de acceso rápido de la memoria principal almacenada en los módulos de RAM.

Memoria Secundaria (Disco Duro, Disco Flexibles, etc.)
La Memoria Secundaria (también llamada Periférico de Almacenamiento) está compuesta por todos aquellos dispositivos capaces de almacenar datos en dispositivos que pueden ser internos como el disco duro, o extraíble como los discos flexibles (disquetes), CDs, DVDs, etc

Dispositivos de Entradas y Salidas

Los dispositivos de entrada y salida son el conjunto de aparatos tecnológicos que usan las distintas unidades de un sistema de procesamiento de información como una computadora para comunicarse unas con otras.

Un dispositivo de entrada o salida puede ser cualquier tipo de unidad funcional o subsistema que forma parte del conjunto integral del sistema del ordenador. En todos los casos, pueden enviar señales o procesar información para establecer distintos tipos de comunicación interna y externa. El término entrada y salida o input / output (del inglés) también refiere a la ejecución de acciones u operaciones a través de dichos dispositivos. La mayoría de estos dispositivos permiten tanto la entrada como la salida de datos.



Típicamente, las unidades de input y output en un ordenador pueden ser el teclado, ratón o mouse, joystick, micrófono, webcam, escáner, monitor, altavoz o parlantes, auriculares, impresora, proyector, unidades de almacenamiento, CD o DVD, módem, tarjeta de red, USB y fax, entre otros.

El funcionamiento de estos dispositivos depende de su propósito, pero también puede variar y ser, alternativamente, de entrada, o bien, de salida. Por ejemplo, para un teclado el movimiento de la mano del usuario es una entrada de datos, mientras que la señal eléctrica que envían al ordenador es una salida. Lo mismo ocurre con casi cualquiera de estos aparatos.

Hoy en día es prácticamente imposible el uso de un ordenador sin el empleo de uno o más dispositivos de esta índole. Muchos de ellos permiten no sólo convertir información y agilizar el uso de las funcionalidades de una computadora, sino también conectarla con otros ordenadores, brindarle acceso a Internet, operar con dispositivos analógicos y hasta combinar sus funciones entre sí.