martes, 27 de octubre de 2015

UNIDAD 3,1 POLÍTICA Y FILOSOFÍA



3.1 POLÍTICA Y FILOSOFÍA


La filosofía del administrador de memoria consiste en optimizar el uso de este recurso,ya que la memoria es uno de los componentes críticos de todo sistema de cómputo.

Procesos:
FIFO: Los procesos se despachan de acuerdo a su tiempo de llega a la cola de procesos listos, si un proceso llega al procesador sale hasta que termine. La política FIFO
actualmente no se usa como el esquema principal de un sistema, pero si por ejemplo cuando se usa una política de prioridades y hay procesos con la misma prioridad, a estos se les podría aplicar FIFO.






Round Robin: Los procesos se despachan en la forma que lo hace el FIFO, pero se les asigna una cantidad limitada de tiempo (CUANTUM) en el procesador, si no termina en ese lapso se manda al final de la lista de procesos listos.

SJF (Shortest job first - Prioridad del trabajo mas corto): Se ejecuta primero el proceso en espera que tiene el menor tiempo estimado. SJF favorece a los procesos cortos, ya que los largos podrían llegar a rezagarse mucho tiempo e incluso nunca ejecutarse.

HRN: (highest response ratio next ? Prioridad de la tasa de respuesta mas alta): Politica no apropiativa que corrige el retraso excesivo de procesos grandes que produce el SJF, para así no caer en un favoritismo excesivo por los procesos cortos, lo logra usando una formula basada en el tiempo de espera y el tiempo de servicio, con lo cual la prioridad de cada trabajo no solo esta en función del tiempo de servicio sino tambien del tiempo que ha esperado para ser atendido.










domingo, 25 de octubre de 2015

2.6 técnicas de administración


TÉCNICAS DE ADMINISTRACIÓN 

Planificación del CPU
Ciclo de ráfaga del CPU y de E/S.
El éxito de la planificación del CPU depende de la siguiente prioridad observada de los procesos: la ejecución de un proceso consiste en un ciclo de ejecución del CPU y de E/S, y los procesos se alternan entre estos dos estados. La ejecución del proceso se hace alternando una ráfaga de CPU y una ráfaga de E/S. La última ráfaga de CPU terminará con una solicitud al sistema para que concluya la ejecución.
Planificador del CPU.
Siempre que el CPU queda inactivo, el sistema operativo debe seleccionar para su ejecución uno de sus procesos de la lista de listos. La selección es revisada por el planificador a corto plazo, Estructura de planificación.
Las decisiones de planificación del CPU pueden efectuarse cuando un proceso cambia:

  • De ejecución a bloqueado
  • De ejecución a listo 
  • De bloqueado a listo 
  • Cuando termina.


Algoritmos de planificación


Los procesos que se asignan al cpu son tomados de la lista de listos. Esta lista se alimenta de 2 puntos: Cuando un usuario inicia la ejecución de un programa, el planificador a largo plazo recibe la orden de ejecución, crea el proceso y lo pasa al planificador a corto plazo.
Cuando un proceso deja de estar en ejecución y no hay causas de bloqueo, o deja de estar bloqueado. Políticas de planificación:
Apropiativas.- Producen un cambio de proceso con cada cambio de contexto; el proceso que usa el cpu puede ser suspendido y permitir el acceso al cpu a otro proceso. (Tiempo compartido y tiempo real) No apropiativas.- Un proceso no abandona nunca el procesador desde su comienzo hasta su fin. (Por lotes).


FIFO
Primero en llegar primero en ser servido (FCFS)
EL cpu ejecuta cada proceso hasta que termina, los procesos que entran a la lista de listos estarán formados en el orden en que llegan hasta que les toque turno (FIFO).



Siguiente proceso el más corto (SJN)
Toma de la lista de listos el proceso que necesite menos tiempo de ejecución para realizar su trabajo. Debe saberse el tiempo de cpu que necesita cada proceso por medio de: información suministrada por el usuario, por el programa, por experiencia.
El tiempo de servicio T es bueno para procesos cortos y malo para procesos largos.











2.5 Niveles, objetivos y criterios de planificación.



 Niveles, objetivos y criterios de planificación.

Planificación de largo plazo.-(planificación de trabajo), determina a que trabajos se les permite entrar
al sistema, cuál es el próximo trabajo que se va a ejecutar. Existe en los sistemas por lotes donde la decisión se basa en las necesidades de recursos y su disponibilidad. En los sistemas de tiempo compartido tiene como misión cargar los programas que se desea ejecutar en memoria, es por tanto el encargado de crear los procesos.
Planificación de mediano plazo.- (Planificación de Swapping), determina a qué proceso se le permite competir por el CPU. Suspende y/o activa temporalmente procesos para mantener una operación uniforme en el sistema y ayuda a realizar algunas funciones para optimizar el rendimiento del sistema.
Planificación de corto plazo.- (Planificación de CPU), determina a qué proceso deberá asignarse el CPU (despachar). Esta operación se realiza muchas veces por segundo, por lo que el despachador debe estar permanente en memoria.


Objetivos de la planificación

  • Justicia.- Sin favorecer o perjudicar procesos
  • Máxima capacidad de ejecución.- Realizar los trabajos lo más rápido posible. Minimizar los cambios de procesos
  • Máximo número de usuarios interactivos.- Simultáneos
  • Predecibilidad.- Saber en todo momento cómo será la ejecución.
  • Mínima sobrecarga.- A menor sobrecarga mayor velocidad. Minimizar los cambios de contexto
  • Equilibrio en el uso de recursos.- Que estén ocupados equitativamente el mayor tiempo posible
  • Seguridad de las prioridades.- Ejecutar más pronto los de más alta prioridad
  • Muchos de estos objetivos están en conflicto unos con otros, esto hace que la planificación sea un problema complejo.



Criterios de planificación.

  • Tiempo de respuesta.- Velocidad con que la computadora responde a una petición, depende mucho de la velocidad de los dispositivos E/S.
  • Tiempo de servicio.- Tiempo que tarda en ejecutarse un proceso, desde su carga en memoria, espera en la lista de listos, ejecución en CPU y operaciones e/s.
  • Tiempo de ejecución.- Tiempo de servicio menos la espera en la lista de listos, o sea, el tiempo teórico que necesitaría el proceso para ejecutarse si fuera el único.
  • Tiempo de CPU.- Tiempo que un proceso usa el CPU sin contar el tiempo de bloqueado.
  • Tiempo de espera.- Tiempo en que el proceso está activo pero sin ser ejecutado (listas)
  • Eficiencia.- Que el cpu siempre esté ocupado para lograr un buen rendimiento.
  • Rendimiento.- Número de procesos realizados por unidad de tiempo, mientras mayor, mejor.



Medidas
  • t.- Tiempo que un proceso P necesita estar en ejecución para hacer su 
  • tarea. ti.- Instante en que el usuario da la orden de ejecución del proceso 
  • tf.- Instante en que el proceso termina la ejecución
  • Tiempo de servicio (T): T=tf-ti Tiempo de espera (E): E=T-t t=20
  •  ti=1 tf=30 T=30-1=29 E=29-20=9
  • Índice de servicio.- relación para evaluar la actuación de la política establecida. Representa la relación de tiempo de ejecución y tiempo de vidaI=t/T I=20/29=0.68
  • Si es un solo proceso, cuando I tiende a 1 el proceso está limitado por cpu, si tiende a 0 está limitado por e/s. Si son varios procesos deben sacarse valores promedio:
  • Tiempo medio de servicio, de espera y eficiencia (índice medio de servicio)
  • Tiempo del núcleo.- Tiempo consumido por el kernel para tomar decisiones del planificador de procesos, incluido el tiempo de cambio de contexto y proceso
Tiempo de inactividad (Idle).- Tiempo consumido cuando la lista de listos está vacía.










2.4 Concurrencia y secuenciabilidad.



Concurrencia y secuenciabilidad.


La concurrencia comprende un gran número de cuestiones de diseño, incluyendo la comunicación entre procesos, competencia por los recursos, sincronización de la ejecución de varios procesos y asignación del tiempo de procesador a los procesos y es fundamental para que existan diseños como Multiprogramación, Multiproceso y Proceso distribuido.
Los procesos son concurrentes si existen simultáneamente 2 o más y llegan al mismo tiempo a ejecutarse.
La concurrencia puede presentarse en tres contextos diferentes:
• Varias aplicaciones: (multiprogramación) para permitir que el cpu sea compartido entre varios trabajos • Aplicaciones estructuradas: Como ampliación 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 sistemas operativos que están implementados como un conjunto de procesos.
Tipos de computadora en los que puede haber concurrencia:
• Multiprogramación con un CPU. El sistema operativo se encarga de repartir el CPU entre los procesos, intercalando su ejecución para dar una apariencia de ejecución simultánea.
• Multiprocesador. Máquina formada por más de un CPU que comparten memoria principal. Los procesos no sólo intercalan su ejecución sino también la superponer.
• Multicomputadora. Es una máquina de memoria distribuida formada por una serie de computadoras, es posible la ejecución simultánea de los procesos en los diferentes CPU’s.
La concurrencia será aparente siempre que el número de procesos sea mayor que el de procesadores disponibles y será real cuando haya un proceso por procesador (Paralelismo).
Pros:
• Facilita la programación de aplicaciones: permite que se estructuren como un conjunto de procesos que cooperan entre sí para alcanzar un objetivo común. •Acelera los cálculos: Dividiendo una tarea en varios procesos, ejecutándolos en “paralelo”.
• Posibilita el uso interactivo a múltiples usuarios que trabajan de forma simultánea. • Permite un mejor aprovechamiento de los recursos, en especial del CPU, ya que pueden aprovechar las fases de entrada-salida de unos procesos para realizar las fases de procesamiento de otros. Contras:
• Inanición e interrupción de procesos
• Ocurrencia de bloqueos
• Que 2 o más procesos requieran el mismo recurso Tipos de procesos concurrentes:
Proceso independiente: El que se ejecuta sin cooperación de otros. Ejemplo: varias ventanas de una misma aplicación de forma simultánea.
Procesos cooperantes: Los que están diseñados para trabajar conjuntamente, deben comunicarse e interactuar. (Aplicaciones en red) Tipos de interacción:
• Motivada porque los procesos comparten o compiten por el acceso a recursos. Ejemplo: dos procesos independientes compiten por el acceso a disco o para modificar una base de datos. • Motivada porque los procesos se comunican y sincronizan entre sí para alcanzar un objetivo común. Ejemplo: compilador con varios procesos que trabajan conjuntamente para obtener un solo archivo de salida. Aspectos de un sistema operativo para gestionar la concurrencia.
1. Debe seguir la pista de los distintos procesos activos, por medio de PBC’s
2. Debe asignar y quitar recursos a cada proceso activo:
• Tiempo de procesador.
• Memoria: (virtual, swapping) • Archivos
• E/S:
3. Debe proteger datos y recursos de cada proceso contra injerencias no intencionadas de otros procesos.

2.3 procesos ligeros: hilos o hebras


2.3 Procesos ligeros (Hilos o hebras).

Un hilo de ejecución, en sistemas operativos, es similar a un proceso en que ambos representan una secuencia simple de instrucciones ejecutada en paralelo con otras secuencias. Los hilos permiten dividir un programa en dos o más tareas que corren simultáneamente, por medio de la multiprogramación. En realidad, este método permite incrementar el rendimiento de un procesador de manera considerable. En todos los sistemas de hoy en día los hilos son utilizados para simplificar la estructura de un programa que lleva a cabo diferentes funciones. Todos los hilos de un proceso comparten los recursos del proceso. Residen en el mismo espacio de direcciones y tienen acceso a los mismos datos. Cuando un hilo modifica un dato en la memoria, los otros hilos utilizan el resultado cuando acceden al dato. Cada hilo tiene su propio estado, su propio contador, su propia pila y su propia copia de los registros de la CPU. Los valores comunes se guardan en el bloque de control de proceso (PCB), y los valores propios en el bloque de control de hilo (TCB).
Un ejemplo de la utilización de hilos es tener un hilo atento a la interfaz gráfica (iconos, botones, ventanas), mientras otro hilo hace una larga operación internamente. De esta manera el programa responde más ágilmente a la interacción con el usuario.
Diferencias entre hilos y procesos
Los hilos se distinguen de los tradicionales procesos en que los procesos son generalmente independientes, llevan bastante información de estados, e interactúan sólo a través de mecanismos de comunicación dados por el sistema. Por otra parte, muchos hilos generalmente comparten otros recursos directamente. En sistemas operativos que proveen facilidades para los hilos, es más rápido cambiar de un hilo a otro dentro del mismo proceso, que cambiar de un proceso a otro. Este fenómeno se debe a que los hilos comparten datos y espacios de direcciones, mientras que los procesos al ser independientes no lo hacen. Al cambiar de un proceso a otro el sistema operativo (mediante el dispatcher) genera lo que se conoce como overhead, que es tiempo desperdiciado por el procesador para realizar un cambio de modo (mode switch), en este caso pasar del estado de Running al estado de Waiting o Bloqueado y colocar el nuevo proceso en Running. En los hilos como pertenecen a un mismo proceso al realizar un cambio de hilo este overhead es casi despreciable.

2.2 Estados y transiciones de los procesos



2.2 Estados y transiciones de los procesos


Los PCB’s se almacenan en listas, una para cada posible estado:














Los estados se pueden dividir en: Activos e inactivos 

  • Activos los que compiten por el procesador. Tipos:
  • Ejecución.- Cuando el proceso tiene el control del cpu
  • Preparado (Listo).- Tienen las condiciones para ser ejecutados pero no están en ejecución por alguna causa.



Inactivos.- No pueden competir por el cpu Los 3 estados principales pueden no ser suficientes Justificación:
Si todos los procesos están en bloqueados esperando un suceso y no hay memoria disponible para nuevos procesos, el procesador estará desocupado, sin uso. La Solución: procesos suspendidos:
• Permitir la ejecución de más procesos
• Ampliar la memoria principal
• Intercambio de procesos entre memoria y disco (swapping) Surgen 2 nuevos estados de un proceso:
suspendido listo: el proceso está suspendido, pero se encuentra listo para ejecutarse suspendido bloqueado: el proceso está suspendido y además está esperando que suceda un evento
• El sistema operativo puede poner en suspendido un proceso y transferirlo a disco
• El espacio liberado en la memoria principal es usado para traer otro proceso ¿Qué proceso elegir para cargar en memoria?
Uno nuevo
Uno previamente suspendido (debemos elegir los que se encuentran en suspendido listo y no en suspendido bloqueado)
Otras razones por las que un proceso puede pasar a estado suspendido:
• El sistema está en riesgo de fallo. El sistema suspende todos los procesos activos para poder corregir errores y volver a activarlos cuando el sistema funcione correctamente
• Un proceso sospechoso de mal funcionamiento puede ser suspendido hasta verificar su correcto funcionamiento
• El planificador puede suspender los procesos de baja prioridad en momento de carga excesiva del sistema.


TRANSICIONES DE ESTADO.- Cambio de un estado a otro
Comienzo (Creación).- Un proceso comienza al ser dada la orden de ejecución insertándose en la lista de listos
Ejecución.- Cuando el CPU está inactivo y en la cola de listos haya un proceso en espera de ser ejecutado. (Pasa al CPU)
Bloqueado.- Un proceso en ejecución solicita una operación a un dispositivo, durante la espera el proceso se bloqueará. Su PCB se insertará en la lista de bloqueados.
Preparado.- 4 causas:
1 Orden de ejecución de un programa en espera
2 Si un proceso está bloqueado esperando una operación de entrada/salida y ésta termina.
3 Si un proceso está en ejecución y aparece una interrupción que fuerza al sistema operativo a ejecutar otro proceso, el 1º pasará a listo y su PCB se inserta en la lista de listos (Quantum, proceso de mayor prioridad)
4 Activación.- Un proceso suspendido listo pasará a listo al ser reactivado
Suspendido bloqueado.- Un proceso está bloqueado y el sistema operativo lo suspende Suspendido listo.- 3 causas:
1 Suspensión de un proceso listo
2 Suspensión de un proceso en ejecución
3 Desbloqueo de un proceso suspendido bloqueado al desaparecer la causa de su bloqueo
Operaciones sobre procesos
1.- Creación.- Se produce con la orden de ejecución del programa, usa argumentos (nombre, prioridad). En este momento aparece el PCB y es insertado en la lista de listos.











Pasos que sigue el S.O.
1. Asignarle un PCB
2. Establecer espacio de direcciones de memoria
3. Cargar imagen (ejecutable) en memoria 4. Marcar la tarea como ejecutable Tipos de creación:
Jerárquica.- cada proceso que se crea es hijo del proceso creador y hereda el entorno de ejecución del padre. El primer proceso que ejecuta un usuario será hijo del intérprete de comandos. Un proceso durante su ejecución puede crear varios procesos hijos a través de llamadas al sistema para creación de procesos. Al restringirse un proceso hijo a un subconjunto de recursos del padre, se evita que éste sature al sistema creando demasiados procesos hijos. Al crear procesos hijos, el padre continúa ejecutando concurrentemente con sus hijos o espera a que todos sus hijos hayan terminado y luego continúa él.
No jerárquica.- Cada proceso creado por otro se ejecuta independiente de su creador con un entorno independiente.
2.- Destrucción.- Orden de eliminación del proceso, el sistema operativo destruye el PCB y libera los recursos empleados
– Normalmente lo hace un antepasado directo (p.e. el proceso padre)
– Significa la terminación de toda su “descendencia” (terminación en cascada) – Pasos que sigue el S.O.
1. Envío de datos del proceso finalizado al creador. (p.e. Código de finalización)
2. El SO desasigna los recursos que tiene
3.- Suspensión.- Paralización de un proceso que puede ser reanudado posteriormente, se aplica en ocasiones de mal funcionamiento o sobrecarga de trabajo (Guarda su PCB en disco)
4.- Reanudación.- Activación de un proceso suspendido (Reinserta el PCB en memoria)
5.- Cambio de prioridad.- Reasignación de un nuevo rango de prioridad
6.- Temporizar la ejecución.- Un proceso se ejecuta cada cierto periodo de tiempo, por etapas o de una vez.
7.- Despertar un proceso.- Desbloqueo de un proceso


8.- Bloqueo.- puesta en espera de un proceso
Prioridades
Todo proceso por su importancia tiene necesidades de ejecución en cuanto a urgencia de recursos. No todos acceden de igual forma y con igual frecuencia al CPU debido a su prioridad Tipos según quién las asigna:
1 Asignadas por el sistema operativo.- Se asigna al iniciar la ejecución y depende de los privilegios de su propietario
2 Asignadas por el propietario.- El usuario la asigna.
Tipos según su posibilidad de variación:
1 Estáticas.- No pueden ser modificadas durante la ejecución del proceso
2 Dinámicas.- Pueden ser modificadas en la ejecución respondiendo a eventos
Tipos de procesos Según el uso:
1 Reutilizables.- Pueden cambiar los datos que usan, si vuelven a ejecutarse comienzan desde su estado inicial y procesar nuevos datos (programas de usuario) Están escritos con variables genéricas y cada uno introducirá los valores de las variables genéricas que precise.
2 Reentrantes.- No tienen asociados datos, sólo código puro. Los datos que usan están en los registros internos y no se modifican durante su uso. (programas del sistema operativo) Según la utilización de memoria:
1 Procesos residentes.- Durante su vida activa tiene que estar cargado en memoria.
2 Procesos intercambiables.- Pueden ser llevados de memoria principal a disco mientras estén bloqueados. La memoria liberada puede ser reasignada
Según el acceso a los recursos
1 Apropiativos.- Al tener asignado un recurso no permiten que otro proceso lo use hasta que ellos lo liberen
2 No apropiativos.- Permiten a otros procesos acceder a recursos usados por ellos-















sábado, 17 de octubre de 2015

UNIDAD 2.1 concepto de proceso



ADMINISTRACIÓN DE PROCESOS Y DEL PROCESADOR 


La gestión de procesos es la tarea fundamental de cualquier sistema operativo moderno. El sistema operativo debe asignar recursos a los procesos, permitir el intercambio de información entre los mismos, proteger los recursos de un proceso del resto y facilitar la sincronización de procesos. Para alcanzar estos objetivos, el sistema operativo mantiene una estructura de datos para cada proceso que describe su estado y los recursos que posee y que permite al sistema operativo imponer un control sobre los procesos (PCB Bloque de Control de Proceso).
En un monoprocesador multiprogramado, debe intercalarse en el tiempo, la ejecución de múltiples procesos. En un multiprocesador, no sólo puede intercalarse la ejecución sino que los procesos se pueden ejecutar simultáneamente. Ambos, intercalación y ejecución simultánea, son formas de concurrencia y llevan a una multitud de problemas complejos, tanto para el programador de aplicaciones como para el sistema operativo. El sistema operativo debe llevar a cabo la función de planificar y ofrecer mecanismos para compartir y sincronizar procesos.



2.1 Concepto de proceso.


Programas.- Colección de instrucciones que el procesador interpreta y ejecuta, se almacenan en sistemas no volátiles necesitando ser cargados en memoria principal para poder ser ejecutados, se considera un ente estático.
Procesos.-Programa en ejecución, el sistema operativo les asigna recursos, Se consideran un ente dinámico. El proceso es una abstracción creada por el SO, que se compone de:
Código de Programa: sección texto
Contexto de Ejecución: PC, registros del procesador y una pila para invocación de procedimientos Sección de Datos, que contiene variables globales Recursos del sistema.
Características
Permite modularizar y aislar errores de programas durante su ejecución
Soporta concurrencia de actividades, lo que permite un mejor aprovechamiento de los recursos
Denominaremos como procesos tanto a los trabajos (jobs) en sistemas de lotes, como a las tareas (task) en sistemas de tiempo compartido
Modelo
La diferencia entre un programa (conjunto de instrucciones) y un proceso (instrucciones ejecutándose) es obvia y crucial para entender el funcionamiento de los SO.
Imaginemos un mecánico de autos en un taller donde se reparan carros con averías complejas en las que se hace necesario consultar el manual de cada modelo, que contiene las instrucciones para reparar cada posible avería. Además, se permiten reparaciones rápidas a las que se les da mayor prioridad. Existe un almacén de refacciones y herramientas suficientes para las reparaciones. Comparando esta situación con un sistema de cómputo se pueden establecer las siguientes analogías:
El mecánico sería el CPU (procesador) que realizará el trabajo. El manual de cada reparación sería el programa. Las herramientas serían los recursos disponibles Las refacciones serían los datos.
La actividad de usar las herramientas para desmontar las piezas defectuosas sustituyéndolas por otras nuevas siguiendo las instrucciones del manual equivaldría al proceso.
Suponiendo que en un momento dado el mecánico está realizando una reparación compleja (de las que llevan tiempo) y aparece un carro que solicita una reparación de las rápidas (ha aparecido una interrupción). El mecánico suspende momentáneamente la reparación compleja anotando en qué situación se queda dicha reparación y qué operación estaba realizando en ese momento (guarda el estado del proceso). Asimismo, sustituye el manual que estaba realizando por el de la nueva reparación que se dispone a realizar (cambio de programa). Comienza la nueva reparación (cambio de proceso), en la que las herramientas no serán las mismas que antes (distintos recursos); las indicaciones del usuario, las refacciones (datos) y las indicaciones del manual (programa) llevarán a feliz término la reparación para que el mecánico regrese a la reparación inicial.
Con este ejemplo se resalta que un proceso es una actividad que se apoya en datos, recursos, un estado en cada momento y un programa.



















jueves, 8 de octubre de 2015

UNIDAD 1



1.1  INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS


El objetivo fundamental de los sistemas operativos es gestionar y administrar eficientemente los recursos hardware, permitiendo que se ejecuten concurrentemente varios programas, sin que haya conflictos en el acceso de cada uno de ellos a cada uno de los recursos que necesite, y sin que ningún programa monopolice alguno de ello.
Un sistema operativo es un programa (o conjunto de programas) de control que tiene por objeto  facilitar el uso de la computadora y conseguir que ésta se utilice eficientemente.
 Es un programa de control, ya que se encarga de gestionar y asignar los recursos hardware que requieren los programas. Pensemos en una computadora que es utilizada desde diversos terminales por varios usuarios. Los recursos hardware son: el procesador (CPU), la memoria principal, los discos, y otros periféricos. Obviamente, si varios usuarios están utilizando la misma Computadora, debe haber alguien o algo que asigne los recursos y evite los conflictos que puedan surgir cuando dos programas requieran los mismos elementos (la misma unidad de disco, o la impresora, por ejemplo). Esta es una de las funciones del sistema operativo. Además de esta función de asignar los recursos a cada programa, el sistema operativo se encarga de contabilizar de éstos, y de la seguridad (que un usuario no pueda acceder sin autorización a la información de  otro, por ejemplo)
El sistema operativo facilita el uso de la computadora. Veamos un ejemplo de cómo lo hace. Cada dispositivo de E/S, para ser utilizado, requiere varias instrucciones máquina que establezcan un dialogo entre las unidades centrales y el periférico, enviando o captando el dato de salida o de entrada, respectivamente. Estas instrucciones dependen considerablemente de las características concretas del periférico. Si se trata, por ejemplo, de una unidad de disco, hay que considerar el ancho de los buses, el tamaño de su memoria intermedia, el arranque (y parada) de los motores de la unidad, el código identificador de la posición a donde hay que acceder, etc. Por otra parte, un dispositivo dado, estas instrucciones u operaciones son comunes para grabar o leer cual tipo de información (programas o datos), sea cual sea su naturaleza. El sistema operativo, con objetivo de facilitar el trabajo de los programadores, contiene módulos de gestión de entradas / salidas que  evitan a los usuarios tener que incluir esas instrucciones cada vez que hacen una operación de  entrada o salida. Se puede decir que esos programas del sistema operativo hacen transparente al  usuario las características hardware concretas de los dispositivos.





1.2  FUNCIONES Y CARACTERÍSTICAS 


En general, se puede decir que un Sistema Operativo tiene las siguientes características:

* Conveniencia. Un Sistema Operativo hace mas conveniente el uso de una computadora.
* Eficiencia. Un Sistema Operativo permite que los recursos de la computadora se usen de la manera mas eficiente posible.
* Habilidad para evolucionar. Un Sistema Operativo deberá construirse de manera que permita el desarrollo, prueba o introducción efectiva de nuevas funciones del sistema sin interferir con el servicio.
* Encargado de administrar el hardware. El Sistema Operativo se encarga de manejar de una mejor manera los recursos de la computadora en cuanto a hardware se refiere, esto es, asignar a cada proceso una parte del procesador para poder compartir los recursos.

Relacionar dispositivos (gestionar a traves del kernel). El Sistema Operativo se debe encargar de comunicar a los dispositivos perifericos, cuando el usuario asi lo requiera.



 Organizar datos para acceso rapido y seguro.

Manejar las comunicaciones en red. El Sistema Operativo permite al usuario manejar con alta facilidad todo lo referente a la instalación y uso de las redes de computadoras.





Procesamiento por bytes de flujo a través del bus de datos.

Facilitar las entradas y salidas. Un Sistema Operativo debe hacerle fácil al usuario el acceso y manejo de los dispositivos de Entrada/Salida de la computadora.
     
de recuperación de errores.

Evita que otros usuarios interfieran. El Sistema Operativo evita que los usuarios se bloqueen entre ellos, informándoles si esa aplicación esta siendo ocupada por otro usuario.
     
Generación de estadísticas.
Permite que se puedan compartir el hardware y los datos entre los usuarios.
















El software de aplicación son programas que se utilizan para diseñar, tal como el procesador de palabras, lenguajes de programación, hojas de cálculo, etc.

El software de base sirve para interactuar el usuario con la máquina, son un conjunto de programas que facilitan el ambiente plataforma, y permite el diseño del mismo.

El Software de base está compuesto por :
     *Cargadores.
     *Compiladores.
     *Ensambladores.
     *Macros.





1.3   EVOLUCIÒN HISTORICA

Para tratar de comprender los requisitos de un Sistema Operativo y el significado de las principales caracteristicas de un Sistema Operativo contemporaneo, es util considerar como han ido evolucionando estos con el tiempo.
Existen diferentes enfoques o versiones de como han ido evolucionando los Sistemas Operativos     La primera de estas versiones podria ser esta: 
En los 40's, se introducen los programas bit a bit, por medio de interruptores mecanicos y despues se introdujo el lenguaje maquina que trabajaba por tarjetas perforadas. 
Con las primeras computadoras, desde finales de los años 40 hasta la mitad de los años 50, el programador interactuaba de manera directa con el hardware de la computadora, no existia realmente un Sistema Operativo; las primeras computadoras utilizaban bulbos, la entrada de datos y los programas se realizaban a traves del lenguaje maquina (bits) o a traves de interruptores.

Durante los años 50's y 60's.- A principio de los 50's, la compania General's Motors implanto el primer sistema operativo para su IBM 170. Empiezan a surgir las tarjetas perforadas las cuales permiten que los usuarios (que en ese tiempo eran programadores, disenadores, capturistas, etc.), se encarguen de modificar sus programas. Establecian o apartaban tiempo, metian o introducian sus programas, corregian y depuraban sus programas en su tiempo. A esto se le llamaba trabajo en serie. Todo esto se traducia en perdida de tiempo y tiempos de programas excesivos.

En los años 60's y 70's se genera el circuito integrado, se organizan los trabajos y se generan los procesos Batch (por lotes), lo cual consiste en determinar los trabajos comunes y realizarlos todos juntos de una sola vez. En esta epoca surgen las unidades de cinta y el cargador de programas, el cual se considera como el primer tipo de Sistema Operativo.

En los 80's, inicio el auge de la INTERNET en los Estados Unidos de America. A finales de los años 80's comienza el gran auge y evolucion de los Sistemas Operativos. Se descubre el concepto de multiprogramacion que consiste en tener cargados en memoria a varios trabajos al mismo tiempo, tema principal de los Sistemas Operativos actuales.

Los 90's y el futuro, entramos a la era de la computacion distribuida y del multiprocesamiento a traves de multiples redes de computadoras, aprovechando el ciclo del procesador.

Se tendra una configuracion dinamica con un reconocimiento inmediato de dispositivos y software que se anada o elimine de las redes a traves de procesos de registro y localizadores.

La conectividad se facilita gracias a estandares y protocolos de sistemas abiertos por organizaciones como la Organizacion Internacional de normas, fundacion de software abierto, todo estara mas controlado por los protocolos de comunicacion OSI y por la red de servicios digital ISDN.

     Se ha desarrollado otra version, la cual se ha hecho en base a etapas o generaciones: 
 1a. Etapa (1945-1955): Bulbos y conexiones. 












Despues de los infructuosos esfuerzos de Babbage, hubo poco progreso en la construccion de las computadoras digitales, hasta la Segunda Guerra Mundial. A mitad de la decada de los 40's, Howard Aiken (Harvard), John Von Newman (Instituto de Estudios Avanzados, Princeton), J. Prespe R. Eckert y Williams Mauchley (Universidad de Pennsylvania), asi como Conrad Zuse (Alemania), entre otros lograron construir maquinas de calculo mediante bulbos. Estas maquinas eran enormes y llenaban cuartos completos con decenas de miles de bulbos, pero eran mucho mas lentas que la computadora casera mas economica en nuestros dias. 
Toda la programacion se llevaba a cabo en lenguaje de maquina absoluto y con frecuencia se utilizaban conexiones para controlar las funciones basicas de la maquina. Los lenguajes de programacion eran desconocidos (incluso el lenguaje ensamblador). No se oia de los Sistemas Operativos el modo usual de operacion consistia en que el programador reservaba cierto periodo en una hoja de reservacion pegada a la pared, iba al cuarto de la maquina, insertaba su conexion a la computadora y pasaba unas horas esperando que ninguno de los 20,000 o mas bulbos se quemara durante la ejecucion. La inmensa mayoria de los problemas eran calculos numericos directos, por ejemplo, el calculo de valores para tablas de senos y cosenos. 
A principio de la decada de los 50's la rutina mejoro un poco con la introduccion de las tarjetas perforadas. Fue entonces posible escribir los programas y leerlas en vez de insertar conexiones, por lo demas el proceso era el mismo. 

2a. Etapa. (1955-1965): Transistores y Sistemas de Procesamiento por lotes.

La introduccion del transistor a mediados de los años 50's modifico en forma radical el panorama. Las computadoras se volvieron confiables de forma que podian fabricarse y venderse a clientes, con la esperanza de que ellas continuaran funcionando lo suficiente como para realizar un trabajo en forma. 

Dado el alto costo del equipo, no debe sorprender el hecho de que las personas buscaron en forma por demas rapidas vias para reducir el tiempo invertido. La solución que, por lo general se adopto, fue la del sistema de procesamiento por lotes. 

3ra Etapa (1965-1980): Circuitos integrados y multiprogramación.

La 360 de IBM fue la primera linea principal de computadoras que utilizo los circuitos integrados, lo que proporciono una gran ventaja en el precio y desempeño con respecto a las maquinas de la segunda generación, construidas a partir de transistores individuales. Se trabajo con un sistema operativo enorme y extraordinariamente complejo. A pesar de su enorme tamaño y sus problemas el sistema operativo de la linea IBM 360 y los sistemas operativos similares de esta generación producidos por otros fabricantes de computadoras realmente pudieron satisfacer, en forma razonable a la mayoría de sus clientes. También popularizaron varias técnicas fundamentales, ausentes de los sistemas operativos de la segunda generación, de las cuales la mas importante era la de multiprogramación.

Otra caracteristica era la capacidad de leer trabajos de las tarjetas al disco, tan pronto como llegara al cuarto de computo. Asi, siempre que concluyera un trabajo el sistema operativo podia cargar un nuevo trabajo del disco en la particion que quedara desocupada y ejecutarlo. 

 4ta Etapa (1980-Actualidad): Computadoras personales. 
Un interesante desarrollo que comenzó a llevarse a cabo a mediados de la década de los ochenta ha sido el crecimiento de las redes de computadoras personales, con sistemas operativos de red y sistemas operativos distribuidos. 
En los sistemas operativos de red, los usuarios estan conscientes de la existencia de varias computadoras y pueden conectarse con maquinas remotas y copiar archivos de una maquina a otra. Cada maquina ejecuta su propio sistema operativo local y tiene su propio usuario. 
Por el contrario, un sistema operativo distribuido es aquel que aparece ante sus usuarios como un sistema tradicional de un solo procesador, aun cuando esta compuesto por varios procesadores. En un sistema distribuido verdadero, los usuarios no deben ser conscientes del lugar donde su programa se ejecute o de lugar donde se encuentren sus archivos; eso debe ser manejado en forma automatica y eficaz por el sistema operativo.






1.4 CLASIFICACIÓN DE LOS SISTEMAS OPERATIVOS 


Administración de tareas


  • Monotarea: Solamente puede ejecutar un proceso (aparte de los procesos del propio S.O.) en un momento dado. Una vez que empieza a ejecutar un proceso, continuará haciéndolo hasta su finalización y/o interrupción.
  • Multitarea: Es capaz de ejecutar varios procesos al mismo tiempo. Este tipo de S.O. normalmente asigna los recursos disponibles (CPU, memoria, periféricos) de forma alternada a los procesos que los solicitan, de manera que el usuario percibe que todos funcionan a la vez, de forma concurrente.

 Administración de usuarios


  • Monousuario: Si sólo permite ejecutar los programas de un usuario al mismo tiempo.
  • Multiusuario: Si permite que varios usuarios ejecuten simultáneamente sus programas, accediendo a la vez a los recursos de la computadora. Normalmente estos sistemas operativos utilizan métodos de protección de datos, de manera que un programa no pueda usar o cambiar los datos de otro usuario.

Manejo de recursos


  • Centralizado: Si permite usar los recursos de una sola computadora.
  • Distribuido: Si permite utilizar los recursos (memoria, CPU, disco, periféricos... ) de más de una computadora al mismo tiempo




1.5 ESTRUCTURA: NIVELES O ESTRATOS DE DISEÑO 




El nucleo o kernel se divide en 5 capas o niveles: 
    Nivel 1. Gestion de Memoria:Proporciona las facilidades de bajo nivel para la gestion de memoria secundaria necesaria para la ejecucion de procesos. 
    Nivel 2. Procesador:  Se encarga de activar los cuantums de tiempo para cada uno de los procesos, creando interrupciones de hardware cuando no son respetadas. 
    Nivel 3. Entrada/Salida: Proporciona las facilidades para poder utilizar los dispositivos de E/S requeridos por los procesos. 
    Nivel 4. Informacion o Aplicacion o Interprete  de Lenguajes: Facilita la comunicacion con los lenguajes y el sistema operativo para aceptar las ordenes en cada una de las aplicaciones. Ejecutando un programa el software de este nivel crea el ambiente de trabajo e invoca a los procesos correspondientes. 
    Nivel 5. Control de Archivos: Proporciona la facilidad para el almacenamiento a largo plazo y manipulacion de archivos con nombre, va asignando espacio y acceso de datos en memoria.
El nucleo o kernel realiza diferentes funciones tales como:
  • Manejo de interrupciones.
  • Creacion y destruccion de procesos.
  • Cambio de estado de los procesos.
  • Despacho
  • Suspension y reanudacion de procesos.
  • Sincronizacion de procesos.
  • Comunicacion entre procesos.
  • Manipulacion de los bloques de control de procesos.
  • Apoyo para las actividades de entrada/salida.
  • Apoyo para asignacion y liberacion de memoria.
  • Apoyo para el sistema de archivos.
  • Apoyo para el mecanismo de llamada y retorno de un procedimiento.
  • Apoyo para ciertas funciones de contabilidad del sistema.
    El nucleo y los procesos
    Una definicion mas especifica de lo que es el nucleo ( Kernel ) de un sistema operativo es: un conjunto de rutinas cuya mision es la de gestionar el procesador, la memoria, la entrada/salida y el resto de procesos disponibles en la instalacion. Toda esta gestion la realiza para atender al funcionamiento y peticiones de los trabajos que se ejecutan en el sistema. 
    El esquema general de la gestion del procesador, es el siguiente:
  • Definicion y concepto de proceso.
  • El Bloque de Control de Proceso (PCB) como imagen donde el sistema operativo ve el estado del proceso.
  • Estados por los que pasa un proceso a lo largo de su existencia en la computadora.
  • Operaciones que se pueden realizar sobre un proceso.
  • Clasificacion de los procesos segun su forma de ejecucion, de carga, etc. 
    Por proceso debe entenderse: un programa en ejecucion junto con el entorno asociado (registros, variables ,etc.). 
















1.6  NÚCLEO



El Kernel consiste en la parte principal del codigo del sistema operativo, el cual se encargan de controlar y administrar los servicios y peticiones de recursos y de hardware con respecto a uno o varios procesos, en otras palabras, el kernel es el corazon del sistema operativo.














Cada sistema operativo tiene un tipo distinto de kernel: asi los Unix mas tradicionales como FreeBSD usan un kernel " monolitico" en el que esta todo compilado dentro, otros usan los llamados "microkernels" como el Darwin, Hurd e incluso Windows (krnl32.dll). GNU/Linux usa un kernel "modular" (vmlinuz); un nucleo bastante grande comparado con un
microkernel, pero que es capaz de delegar funciones en los llamados " modulos" , partes independientes del nucleo que pueden ser incorporadas dinamicamente si hacen falta y luego descargadas si molestan. Asi se pueden cargar "drivers" para hardware, firewall o funciones especiales de red (ppp, rdsi, etc) cuando se necesiten y cuando por ejemplo, se cierre la conexion a internet, liberar la memoria que usaba ese modulo.