domingo, 7 de agosto de 2011

Resumen del capítulo 1 del libro Operating System Principles (Per Brinch Hansen).

Un Resumen de los Sistemas operativos.

El propósito de un sistema operativo.

Los computadores aquí son descritos no como personales, sino más bien como equipos diseñados para que muchas personas compartan la información y programas instalados en una misma máquina. El papel de los sistemas operativos en esta época (la década de los 70`s) es repartir adecuadamente entre todos los usuarios los recursos y datos que maneja el computador, además de llevar una contabilidad del tiempo de uso de cada uno de los recursos que más se usan. Otra tarea del sistema operativo es proteger la información y a los usuarios de programas u otros usuarios mal intencionados.
Se define varios lenguajes dentro del sistema operativo, uno de estos es el lenguaje “Job Control”, para que el usuario se identifique y diga que datos y recursos utilizará. Otro lenguaje es “Virtual Machine”, el cual sirve para que el usuario final interactúe con el computador sin afectar directamente la máquina física, así cada persona trabajará sin afectar a los otros. En aquella época los sistemas operativos eran más complicados en su manejo, poco confiables y muy difíciles de modificar (cosa que no ha cambiado mucho con los sistemas por los que se paga).

Los sistemas operativos son programas de gran tamaño, cuya tarea consiste en manejar los recursos de la máquina física y actuar como una máquina virtual para los usuarios que trabajan en el computador. El desarrollo de los programas de software se vio influenciado por los métodos de programación utilizados en el crecimiento de los sistemas operativos en varios aspectos, por ejemplo, en la asignación de almacenamiento de los datos, la planificación de tareas específicas en determinado tiempo, la multi-programación y la protección de los datos para que otro programa, o el mismo que usa el computador en este momento en otra parte del proceso, no los dañara. El autor del libro explica este evento como una máquina virtual dentro de otra máquina virtual dentro de una máquina física.

Antecedentes tecnológicos.

El autor empieza los antecedentes al principio de los años 50, suponiendo que los procesadores solo utilizan procedimientos secuenciales y la forma más eficiente de entrada/salida de información es por medio de casetes. Se define como ''jobs'' las operaciones del computador pedidas por los usuarios. El rendimiento de un computador se mide por el tiempo de respuesta de estos “jobs”. Cuando los programadores interactuaban directamente en la máquina y con el programa que estaban trabajando, se desperdiciaba mucho tiempo y maquinaria, ya que no había ningún tipo de organización o planeación y todo dependía de los operadores.
Para quitar parte del compromiso de los operadores en el proceso que realiza el computador, se empezó a trabajar con tarjetas perforadas, pero en el tiempo que se demoraba el computador en leer toda la información y dar los resultados se perdía tiempo de la máquina que podía ser utilizado por otro usuario; en este momento se pensó en el procesamiento por lotes, este consistía en que en un computador “pequeño” se leían las tarjetas y se guardaban en casetes, luego se llevaban al computador que procesaba la información y devolvía los resultados en otros casetes, estos últimos eran llevados a otro computador “pequeño”, el cual se encargaba de imprimir los resultados del usuario, en resumen, los “jobs” entraban a los cassetes como lotes, estos lotes los procesaba el computador y luego se daban los resultados de los lotes completos.
Esta metodología incrementó el rendimiento del procesador, pero muchas veces reducía el tiempo de respuesta del usuario, dependiendo de la cantidad de “jobs” en cada lote y de lo que se tardaran las personas en pasar las cintas de un lugar a otro, al final se tenía el mismo problema que al principio y lo que demorara el proceso dependía de los operadores.
En los 60`s hubieron algunos cambios en los procesadores, más que todo gracias a que no debía ejercer todo el tiempo control sobre los periféricos. Éstos se comunicaban con el procesador central por medio de las interrupciones, parando el proceso que estaba realizando en ese momento, atendiendo la interrupción y retomando el proceso anterior donde lo había dejado. A esto se le llamó multiprogramación. Los programadores pronto se dieron cuenta de que esto se le podía aplicar para que varios programas simultáneamente, pudieran trabajar en el mismo procesador, dando la oportunidad a diferentes usuarios trabajar en la misma máquina, pensando en este modo surgió en los sistemas operativos los sistemas “Spooling”, o sea en colas.
Por la cantidad de cálculos en los cuales trabajaba el procesador, era muy difícil saber las direcciones en las cuales los datos estaban siendo procesados y protegerlos de otros usuarios se convirtió en el siguiente reto. Se crearon 2 tipos de estado para las personas que trabajaran en un computador, uno era el Estado Privilegiado, el cual tenía acceso a todas las direcciones de memoria y control sobre todos los periféricos, es decir, tenía control sobre la máquina. El otro tipo era el Estado Usuario, el cual solo tenía acceso a una parte de direcciones de memoria para trabajar, estos espacios eran vigilados por el sistema operativo y cuando los usuarios se salían de él, se encargaba de controlarlos.
Otro avance en esta época fueron los discos duros de mayor capacidad, ya que se podía tener en el computador los programas y el sistema operativo funcionando “al mismo tiempo”.
En comparación con los sistemas que trabajaban por lotes, los de “Spooling” eran más rápidos; el uso de cintas ya no era necesario y lo que más demoraba al programador eran los procesos de entrada (lectura de tarjetas) y salida (impresión de los resultados) ya que los “jobs” se procesaban al tiempo que los demás y sin muchas prioridades sobre la hora de llegada.
Otro tipo de sistema operativo en el que se trabajó por esa época, eran los sistemas interactivos; con estos se buscaba incrementar el tiempo de respuesta entre un usuario y un computador, pensando en la posibilidad de que el computador respondiera en el mismo tiempo que una persona responde una pregunta. Pensando en estos se hizo que el procesador atendiera un programa en una rebanada de tiempo, luego lo pusiera al final de la cola y pasara al siguiente programa para realizar el mismo proceso una y otra vez hasta que finalizara con todos estos.
Como no se podía mantener todos los datos de los programas de todos los usuarios listos en el momento se recurrió a 2 niveles de acceso para traerlos y llevarlos cuando los necesitara, en la operación del traslado de la información se perdía tiempo, en el cual el procesador estaba inactivo, por esta razón los sistemas interactivos se consideraban solo apropiados para tareas que no requerían mucho tiempo de procesador, tales como programas de edición, sistemas de reservación de tiquetes, programas de enseñanza. Otro uso en el que fueron empleados era el control en tiempo real de procesos industriales, pero el sistema debía saber manejar los datos apenas llegaran, ya que si no lo hacían se perdía la información.
El autor dice que, tal vez la conclusión más válida sobre este tema es, que en aquella época, aunque los computadores podían realizar varios procedimientos al tiempo, al final terminaban siendo secuenciales en el fondo.

Similitudes en los sistemas operativos.

Entre los sistemas operativos vistos antes hay cierta simetría, aparte de que sirven para que el usuario y la máquina no se relacionen directamente, todos tienen más cosas en común, por ejemplo:
- Todos los sistemas debían tratar con actividades simultáneas, en el de lote los usuarios llevan juntos sus tarjetas y hacen una fila para entregarlas o los operadores lo organizan en determinado orden. En los otros, el proceso de elegir que “job” es primero depende de la máquina.
- El intercambio de información de los sistemas interactivos con el usuario y con el sistema de almacenamiento, se puede comparar con el intercambio que realizan los otros sistemas con sus respectivos dispositivos de almacenamiento, dando cierto retraso de todos, aunque más evidente en el primero.
Todos estos sistemas operativos tenían sus diferencias, sobre todo por el entorno y tipos de usuario, pero los programadores y desarrolladores, más que acentuarlas debían reconocer y entender las similitudes para solucionar cualquier problema que se presentara con ellos.

Objetivos de diseño

Según el autor la clave para triunfar programando es tener una meta realista y bien definida. Según esto define 2 clases de sistemas operativos, los de propósito específico y los de propósito general.
Los primeros son más eficientes con cálculos y operaciones, estos son los computadores interactivos los cuales responden de manera inmediata al usuario, aunque se pierde parte del rendimiento de su procesador; los computadores para vigilar y manejar procesos industriales, también entre los computadores no interactivos están los que se entran datos por tarjetas donde se planifican muchos procesos que tienen poco tiempo de respuesta y por último, computadores en centros científicos donde no hay interacción con el usuario y los operaciones son mucho más largas.
Los sistemas de propósito general no eran tan eficientes, eran demasiado grandes comparándolos con los de propósito específico. Debían contener compiladores, programas, utilidades de estos y recursos para manejarlos a todos; además, no cumplían con el objetivo principal de los sistemas operativos, el cual es repartir adecuadamente los recursos del computador.
Actualmente los sistemas operativos que utilizamos, Windows o Linux, son de propósito general y se siguen desarrollando según el hardware y solucionando los nuevos problemas a los que se enfrentan los sistemas operativos.  

No hay comentarios:

Publicar un comentario