Las primeras computadoras que se construyeron tenian solamente hardware, eran maquinas muy grandes que se controlaban desde una consola. El pro gramador escribia un programa y luego lo operaba desde la consola del operador. El programa se cargaba de forma manual por medio de tarjetas perforadas o switches, conforme la ejecucion del programa fluia el pro gramador podia monitorearlo desde la consola y depurarlo en caso de que surgiera algun error. La salida era impresa o almacenada en tarjetas para su posterior impresion. Como se puede apreciar la maquina se podia utilizar por una persona a la vez, por lo que era comun tener una lista en la cual se distribuian las horas de computo y en la que el programa dor se anotaba para hacer uso de la computadora. Debido a que los pro gramadores no sabian la cantidad exacta de tiempo que utilizarian los recursos de computo, estos no eran aprovechados en su totalidad ya que si se apartaba una hora para trabajar en la computadora y se terminaba en 30 minutos, la computadora estaria sin ocupacion los siguientes 30 minutos. El caso opuesto tambien era frecuente, programadores que nece sitaban los recursos de computo por mas tiempo del que habian estimado. En el transcurso del tiempo nuevo hardware y software aparecio: lecto res de tarjetas, impresoras de linea, cinta magnetica. Tambien surgie ron herramientas para facilitar la tarea de la programacion como carga dores de programa, ensambladores y enlazadores, tambien aparecieron li brerias de funciones comunes que podian copiarse a los programas sin la necesidad de escribirse de nuevo.
Los primeros 'Sistemas Operativos' (si es que podían recibir ese nombre) no eran más que un conjunto de subrutinas que ayudaban al programador, ofreciéndole servicios básicos como lectura de caracteres desde un teletipo, escritura en tambor, disco, etc.
Sin embargo, pronto se vio la necesidad de un nuevo enfoque. Los ordenadores eran caros, y su mantenimiento también, por lo que solo algunas grandes empresas y universidades podían disponer de ellos. Para amortizarlos, se alquilaba tiempo de proceso, de modo que se podía ir allí con un programa, ejecutarlo, y pagar por el tiempo que le llevase hacerlo al ordenador.
El primer problema que había era que se tardaba mucho en cargar
cada programa. Cuando el ordenador terminaba de ejecutar uno, el operador
tenía que insertar el siguiente, lo cual era una tarea bastante
pesada y larga. Durante el tiempo que se hacía esto, el ordenador
estaba totalmente inactivo, se estaba desperdiciando tiempo. Fue entonces
cuando surgieron los sistemas de proceso por lotes (batch).
En los sistemas de proceso por lotes, los programas se almacenan en una cinta, todos seguidos. Cada vez que el ordenador terminaba de ejecutar un programa, leía el siguiente de dicha cinta. Si llegaba alguien con un programa, este se añadía a continuación del último que hubiese, mientras el ordenador iba ejecutando el que ya tenía en memoria. El coste de mantenimiento del nuevo sistema era ligeramente superior, pues había que añadir al sistema el lector de cintas en donde se escribían los programas; pero como podía ejecutar muchos más programas en el mismo tiempo (porque no se perdía parte de este en cargar los programas), el precio de alquiler bajó drásticamente, permitiendo que más gente tuviese acceso a los ordenadores.
Es en los sistemas de proceso por lotes donde empieza a aparecer realmente
lo que hoy conocemos como Sistema Operativo: un programa principal que
es el que va cargando los distintos programas desde la cinta, les cede
el control de la CPU pero ofreciéndoles una serie de servicios de
Entrada/Salida, y cuando terminan, recupera el control del ordenador.
Pronto los programadores se dieron cuenta de que había aún más tiempos muertos de los que parecía: si un ordenador tenía que leer algo de una cinta o una tarjeta con datos, como el sistema era mecánico tardaba mucho tiempo en encontrarlo (mucho tiempo de cara al ordenador, claro. Una décima de segundo es algo muy relativo). Así mismo, se empezaban a usar terminales para dar entrada de datos en tiempo real al ordenador, y el tiempo que éste esperaba a que el usuario pulsase cada tecla también era una eternidad. Entonces se empezó a pensar en los Sistemas Operativos multitarea.
La idea consistía en tener varios programas simultáneamente en memoria, si bien, como el ordenador es único, solo uno estaría activo en cada momento. Cuando dicho programa hace una operación de Entrada/Salida en la que se pierde tiempo de CPU (como leer una tarjeta, por ejemplo), mientras la mecánica realiza la operación de búsqueda y lectura, el ordenador conmuta al siguiente programa que tiene en memoria, el cual continuará ejecutándose hasta que haga una operación de Entrada/Salida. Cuando se llega al último, se vuelve a empezar. Para ese momento, la operación de Entrada/Salida pedida por el primer programa ya estará lista, con lo que podrá seguir su ejecución. De esta forma, hemos aprovechado un tiempo que antes perdíamos.
Finalmente, llegamos a los sistemas distribuidos. Generalmente, lo que
tenemos es una red de ordenadores (por ejemplo, en una universidad es normal
tener una gran cantidad de PC's) conectados entre sí. Si nos fijamos,
normalmente solo unos cuantos están en uso en cada momento, y el
resto simplemente se dedican a ejecutar un bonito salvapantallas, o peor
aún, a realizar la estética función de caro pisapapeles.
En otras palabras, estamos desperdiciando una vez más tiempo de
proceso. Para solucionarlo, se han ideado los Sistemas Operativos distribuidos.
Estos sistemas operativos son el siguiente paso en la evolución
de los Sistemas Operativos multitarea.
La idea consiste en que en los Sistemas Operativos multitarea los programas suelen estar divididos en varios Threads o hilos de ejecución. Cada uno de estos Threads se puede ver como un programa absolutamente independiente de los demás, si bien, trabajando todos en conjunto forman el programa completo. Dado que cada Thread es independiente de los demás, nada impediría, en principio, que se ejecutase cada uno en un procesador diferente. Esa es la base de los Sistemas Operativos distribuidos: cada nuevo Thread es ejecutado en una máquina distinta, de modo que la potencia de cálculo se halla distribuida por toda la red. De esta forma, los equipos que estaban inactivos son aprovechados al máximo. Por desgracia, esta idea resulta extremadamente compleja de implementar, por lo que esta clase de Sistemas Operativos se encuentran todavía poco extendidos.
Existen diferentes tipos de sistemas operativos , tales como:
Despues aparecieron los compiladores para Fortran, Cobol y nuevos len guajes de programacion con lo cual la operacion de la computadora se volvio mas compleja. Para preparar un programa en Fortran para ejecucion habia primero que cargar el compilador en la computadora, el cual normalmente estaba almacenado en una cinta magnetica, debido a lo que se tenia que montar la cinta correspondiente en el manejador de cinta de la computadora. El programa se tenia que leer de las tarjetas perfo radas y escribir en otra cinta magnetica. El compilador de Fortran pro ducia codigo en ensamblador el cual necesitaba ser ensamblado. El codigo resultante necesitaba ser enlazado a las librerias correspondientes para finalmente producir el codigo en binario listo para ejecutar. Este podia entonces cargarse en memoria y depurarse desde la consola como se explico anteriormente.
Como se puede ver se perdia mucho tiempo preparando la computadora para realizar cada una de los trabajos, cada trabajo consistia de varias tareas como cargar la cinta magnetica con el compilador, correr el com pilador desmontar la cinta del compilador, cargar la cinta con el ensam blador, correr el ensamblador, descargar la cinta del ensamblador, cargar el programa y ejecutarlo. En caso de que hubiese algun error en la realizacion de alguno de estos pasos, la operacion se tenia que comenzar de nuevo.
Mientras las cintas magneticas eran cargadas el procesador estaba sin
usarse y debido a los altos costos de los sistemas de computo de la epoca
esto significaba un desperdicio muy grande. Se buscaron entonces alternativas
para aprovechar al maximo los recursos disponibles. Lo primero que se hizo
fue contratar operadores para la computafora, a los cuales los programadores
les entregaban los programas para que ellos los ejecutaran y les entregaran
posteriormente los resultados. esto acelero un poco el proceso ya que los
operadores tenian practica en el intercambio de las cintas magneticas necesarias.
El siguiente paso fue agrupar los trabajos con necesidades similares y
ejecutarlos en forma de grupo, por ejemplo se agrupaban todos los trabajos
en Fortran y se operaban en grupo evitando el cambio de cinta entre trabajos.
Esto mejoro un poco el aprovechamiento de recursos, pero aun habia mucho
tiempo de desperdicio. Cuando un trabajo se detenia, el operador recibia
una señal en la consola, entonces se investigaba si la detencion
habia sido voluntaria o por algun error del programa, tomar un registro
de los componentes de la maquina si era necesario y cargar la lectora tarjetas
o papel con el siguiente trabajo y reinicializar la computa dora. En esta
transicion el procesador estaba sin uso una vez mas. Para reducir este
tiempo de desperdicio se introdujo el automatic job secquencing y con el
el primer sistema operativo rudimentario. Lo que se deseaba era un procedimiento
para transferir el control de manera automatica de un trabajo a otro. Para
este proposito se creo un resident monitor el cual siempre estaba en memoria.
Inicialmente (al prender la computadora) el control de la computadora
estaba en el monitor, el cual transferiria el control a un programa, cuando
el programa terminaba, regresaba el control al monitor el cual a su vez
transferiria el control al siguiente programa. A continuacion se presentan
algunos de los sistemas operativos mas influyentes y algunas de sus aportaciones.
Atlas.
El sistema operativo Atlas fue diseñado en la Universidad de Manchester en Inglaterra a finales de los años 50 y principios de los 60. Muchas de sus caracteristicas basicas, las cuales eran bastantes nuevas y muchas veces primerizas en su tiempo, se han vuelto un standard dentro de los sistemas operativos modernos. Contenia Device Drivers (maneja dores de perifericos), ademas fueron añadidas las llamadas a sistemas por medio de instrucciones especiales llamadas extra codes. Este era un sistema operativo por lotes (batch) con spooling. El spooling permitia al sistema programar los trabajos de acuerdo a la disponibilidad de los perifericos como unidades de cinta magnetica, lectores de tarjeta o impresoras. La caracteristica mas importante del sistema operativo era su manejo de memoria.
XDS-940.
Este sistema operativo fue diseñado en la Universidad de Berkeley en California y al igual que Atlas usaba pagineo para el manejo de memoria solo que el XDS-940 era un sistema operativo de tiempo compartido. Tambien se añadio un modo usuario/monitor y ciertas instrucciones como las de E/S y Halt fueron definidas como privilegiadas. Este sistema operativo tambien proveia llamadas al sistema que permitian a los pro cesos crear, comenzar, suspender y destruir subprocesos. Un usuario programador podia construir un sistema de procesos y procesos separados podian compartir memoria para comunicacion y sincronizacion. La creacion de un proceso tenia una estructura de arbol, donde la raiz es el proceso y los nodos debajo de el son sus subprocesos ademas cada subproceso podia a su vez crear nuevos subprocesos.
THE.
El sistema operativo THE fue desarrollado en la Technische Hogschool
en Eindoven, Holanda. Este sistema operativo fue diseñado para la
maquina alemana EL X8 y una de sus caracteristicas era su buen diseño,
de forma particular por su estructura en capas y el uso de un conjunto
de proce sos concurrentes utilizando semaforos para su sincronizacion.
De manera distinta al XDS-940 este sistema operativo tenia un conjunto
de proc esos estaticos. En si el sistema operativo estaba diseñado
como un conjunto de procesos que cooperaban entre si. Ademas eran creados
cinco procesos por usuario los cuales servian como agentes para compilar,
ejecutar, e imprimir programas de los usuarios, cuando un trabajo se terminaba
el proceso regresaba a la cola de entrada a seleccionar otro trabajo. Este
sistema operativo utilizaba un algoritmo de prioridad de cuerdo a la cantidad
de tiempo de CPU usado recientemente, de tal forma que se le daba una mayor
prioridad a nuevos procesos y de E/S. El manejo de memoria estaba restringido
por la falta de hardware. Otra de las caracteristicas de THE era su manejo
del deadlock, utilizaba el algoritmo del banquero para evitarlo.
RC4000.
Este sistema al igual que el THE era notable por sus conceptos de diseño.
El objetivo no era un sistema operativo por bloques o de tiempo compartido
o algun sistema en especifico, el objetivo era crear el nucleo de un sistema
operativo (kernel) del cual se podia partir para crear un sistema operativo
completo. De esta forma la estructura del sistema era por capas y solo
las capas mas bajas eran proporcionadas. El kernel soportaba un manejador
de CPU tipo round-robin. Aunque los procesos podian compartir memoria la
comunicacion primaria y el mecanismo de sincronizacion era a traves de
un sistema de mensajes que era proveido por el kernel. Los perifericos
de E/S tambien eran trata dos como procesos, los manejadores convertian
las interrupciones y los registros en mensajes. De esta manera un proceso
podia escribir en una terminal mandandole un mensaje. El RC 4000 fue diseñado
para una computadora danesa, especialmente por Brinch Hansen. Hansen continuo
su trabajo sobre sistemas operativos y creo el lenguaje Concurrent Pascal
para poder escribir sistemas operativos en un lenguaje de alto nivel. Este
lenguaje lo utilizo Hansen para escribir el sistema operativo Solo, el
cual consiste de una coleccion de procesos concu rrentes. El aspecto mas
importante de Solo es el del uso de un lenguaje de programacion de alto
nivel, ya que permitio que todo el sistema se escribiera en menos de un
año por solo dos personas.
CTSS
Este sistema se dise~o en el MIT como un sistema expermiental de tiempo
compartido. Se implemento en una computador IBM 7090 y podia soportar hasta
32 usuarios en forma simultanea, a los cuales se proveia con un conjunto
de comandos interactivos que les permitia manipular archivos y compilar
y ejecutar programas desde una terminal. El manejo del CPU estaba implementado
a traves de una cola multi-nivel con retroalimenta cion. Si un proceso
no terminaba en una unidad de tiempo de CPU se movia al siguiente nivel
de la cola, dandole el doble de tiempo la siguiente vez que era atendido
por el CPU. Este sistema fue muy exitoso y se siguio usando hasta alrededor
de 1972. Aunque era bastante limitado, tuvo exito al demostrar que el sistema
de tiempo compartido era practico y conveniente para realizar computo,
lo que llevo al desarrollo de mas sistemas de tiempo compartido. Otro resultado
mas de este sistema operativo fue el desarrollo de Multics.
MULTICS
Multics fue desarrollado en el MIT como una extension de CTSS. Debido
al exito de CTSS y otros sistemas de tiempo compartido hubo un deseo inmediato
por desarrollar sitemas mas grandes y mejores, ademas el equipo de computo
tambien crecio lo cual permitio que los diseñadores de CTSS crearan
un utileria de tiempo compartido. El objetivo era que los grandes sistemas
de computo se pudieran conectar via telefonica a terminales en casas y
oficinas a traves de una ciudad, y que el sistema operativo de tiempo compartido
estuviera ejecutandose de manera continua con un vasto sistema de archivos
de programas y datos compar tidos. El sistema de archivos tenia una estructura
de arbol multi niveles permitiendo a los usuarios crear sus propios subdirectorios.
El manejo del CPU se hizo de la misma forma que en CTSS, ademas se agregaron
sistemas de proteccion con una lista de accesos para cada archivo y un
conjunto de anillos de proteccion para procesos en ejecucion. Este sistema
se escribio casi de forma total en PL/1 con casi 300,000 lineas de codigo.
Posteriormente se porto a sistemas con procesadores multiples, permitiendo
que un CPU fuera retirado para mantenimiento sin interrumpir la ejecucion
del sistema operativo.
OS/360.
La linea mas grande en desarrollo es sin duda la de las computadoras IBM, los cuales fueron los primeros en incluir ejemplos de subrutinas comunes de E/S, monitores residentes, instrucciones privilegiadas y procesamiento en lote simple. Estos sistemas fueron desarrollados de forma separada lo cual provoco que IBM se encontrara con muchas computadoras distintas, con diferentes lenguajes y diferente software de sistemas. Para arreglar este problema se creo OS/360 la cual era una familia de sistemas que iban desde peque~as maquinas para negocios hasta grandes computadoras con propositos cientificos, estas maquinas solo necesitarian un tipo de software y un sistema operativo: OS/360. Esto se hizo para aminorar los problemas de mantenimiento y aumentar la portabilidad de software de un sistema a otro.
Desafortunadamente OS/360 trato de ser todas las cosas para toda la
gente, lo que resulto en que no hiciera ninguna especialmente bien. Ademas
debido a sus caracteristicas el sistema era demasiado grande (millones
de lineas) provocando un sobrecargo en el sistema de computo. Este sistema
evoluciono tratando de corregir errores y agregando nuevas habilidades,
algunos de estos sistemas fueron: OS/VS1, OS/VS2 (el cual se volvio MVS)
TSS/360 y VM. Parte del problema de estos sistemas operativos, al igual
que Multics, era su tamaño y complejidad haciendo que fueran muy
dificiles de entender. Otro problema fue la idea de que el poder de computo
se proveria de grandes computadoras remotas a por medio de tiempo compartido.
Ahora parece que la mayoria del computo se hara por peque~as maquinas independientes
(PCs), no por una computadora remota tratando de ser todas las cosas para
todos los usuarios.
Otros sistemas.
Existieron otros sistemas operativos con propiedades interesantes como el MCP. MCP fue el primero en ser escrito en un lenguaje de programa cion de sistemas, tambien fue el primero en soportar multiples CPUs. El sistema operativo SCOPE tambien soportaba CPUs multiples y su sincronizacion de procesos multiples estaba muy bien diseñada. CP/M es el sistema operativo mas comun para maquinas de 8 bits, mientras MS-DOS es el mas comun para maquinas de 16 bits.
FreeBSD
FreeBSD es un sistema operativo Unix basado en la versión 4.4 BSD-lite de la Universidad de Berkeley desarrollado para máquinas i386 (ordenadores personales con microprocesadores 386, 486 y Pentium). Originalmente, su desarrollo se basó en la versión Net/2, también conocida como 386BSD de William Jolitz, aunque en estos momentos no quede prácticamente nada del código original.
La primera versión de FreeBSD apareció en 1993, basada en el código Net/2 (4.3BSD). En noviembre de 1994 apareció la versión 2.0 basada ya en el código de BSD 4.4, lo que provocó un aumento muy sustancial en las características, posibilidades y estabilidad de este sistema, a partir de un nuevo sistema de gestión de memoria virtual y un nuevo sistema de gestión de ficheros. En estos momentos, la última versión es la 2.2.6 (abril de este año 1998).
FreeBSD es un sistema operativo totalmente libre, es decir, no hay que
pagar por usarlo además, disponemos de todo el código fuente
del kernel (módulo principal del sistema), lo que nos permite poder
realizar cualquier tipo de modificación o desarrollo sobre él,
compilarlo, y comprobar los resultados. Una de las grandes ventajas de
FreeBSD sobre otros sistemas como Linux (que cuenta con diferentes distribuciones
y cada una con sus propias características, versiones de kernel,
aplicaciones, etc), es que existe una sola distribución coordinada
por un grupo de trabajo dedicado a ello, haciendo el sistema más
homogéneo, controlado y estándar. Esto no quiere decir que
sea un sistema cerrado, ya que los grupos son totalmente abiertos, aceptándose
la colaboración de todo el mundo. Además de la versión
(también conocida como -stable) existe una rama en continuo desarrollo
llamada current sobre la que se realizan todas las modificaciones y actualizaciones
para la próxima versión. Tenemos la posibilidad de tener
nuestra máquina totalmente actualizada en la rama current mediante
un sistema de actualización online llamado cvsup (hay que tener
en cuenta que la rama current se basa en el continuo desarrollo del código
fuente del kernel y sus aplicaciones, por lo que solo debería trabajarse
con esta versión en sistemas de pruebas).
Características de FreeBSD
Algunas de las características principales de FreeBSD son:
* Sistema desarrollado totalmente en 32 bits.
* "Preemptive multitasking" con ajuste dinámico de prioridades
para asegurar un buen reparto de recursos entra aplicaciones y usuarios.
*Multiusuario. Diferentes usuarios pueden usar un mismo sistema FreeBSD
simultáneamente. El sistema comparte periféricos como impresoras,
disco, cintas, etc.
*Sistema TCP/IP completo, incluyendo SLIP, PPP, NFS, NIS, etc, que
nos permite usar FreeBSD como servidor de ficheros, servidor de red, servidor
de comunicaciones (http, ftp, nntp, smtp, pop3, imap, dns, routing, firewall,
etc) o estación de trabajo.
* Protección de memoria que evita que las aplicaciones o usuarios
pueden interferir entre ellas. Si una aplicación falla, no afecta
al resto de aplicaciones del sistema.
* X Window System (X11R6), como interface gráfico de usuario
(GUI).
* Compatibilidad de binarios con otros sistemas operativos como SCO,
BSD/OS, NetBSD, 386BSD, Linux, BSDi.
* Librerías compartidas.
* El sistema base incluye compiladores de C, C++ (cc y gcc), Fortran,
etc.
* Disposición de todo el código fuente tanto del kernel
como de las aplicaciones incluidas en la instalación base.
Todas esta características (y otras aquí no mencionadas),
hacen de FreeBSD uno de los más completos sistemas operativos Unix
libres que existen hoy en día.
SISTEMA OPERATIVO UNIX
Historia
El sistema Operativo Unix nacio entre 1965 y 1969 , elaborado por los Laboratorios Bell con General Electric (mas tarde Honeywell) y Proyect Mac (del Massachusetts Institute of Technology) en el desarrollo del sistema Multics. Este sistema diseñado para la computadora GE-645 , era demasiado grande y complejo. Los diseñadores de multics tenian en mente un programa de utilidad general que pudiera ser escencia “ todo para el mundo” .
Thompson llevo a la practica un sistema de archivos , un mecanismo de control de procesos , programas para el manejo general de archivos y un interprete de mandatos (comandos) . En 1970 Brian Kernighan acuño el nombre UNIX haciendo un juego de palabras con multics ; de hecho , en el sentido en que Multics era “multi” , los sistemas UNIX eran sin duda servicios de computacion “uni” , limitados.
Denis Ritchie se unio a la labor de desarrollo y ayudo a reescribir los sistemas UNIX en C en 1973, debido a que el sistema tendia a caerse con facilidad durante la prueba de un programa nuevo y la aplicacion principal era el procesamiento de textos y no habia proteccion de almacenamiento.
Las contribuciones de Thompson y Ritchie recibieron como reconocimiento el premio Tring , el de mas prestigio en la comunidad de computacion.
En 1975 los sistemas UNIX se habian popularizado muchisimo en las universidades asi aparecio una organizacion de usuarios que evoluciono hasta convertirse en el grupo llamado USENIX .
El sistema de tiempo compartido UNIX , septima edicion ,
editado en 1979 , hizo que los sistemas UNIX estuvieranmas cerca de convertirse
en productos comerciales validos . Los archivos podian llegar a un
tamaño de mil millones de bytes . El sistema se hizo todavia
mas portatil y se amplio en el lenguaje C . Se llevo a la practica
un shell (interprete de comandos del usuario) mas potente que incluia variables
de cadena, programacion estructurada , manejo de trampas y otras caracteristicas.
Características Generales:
Es un sistema operativo de tiempo compartido, controla los recursos de una computadora y los asigna entre los usuarios. Permite a los usuarios correr sus programas. Controla los dispositivos de periféricos conectados a la máquina.
Posee las siguientes características:
- Es un sistrema operativo multiusuario, con capacidad de simular multiprocesamiento
y procesamiento no interactivo.
- Está escrito en un lenguaje de alto nivel : C.
- Dispone de un lenguaje de control programable llamado SHELL.
- Ofrece facilidades para la creación de programas y sistemas
y el ambiente adecuado para las tareas de diseños de software.
- Emplea manejo dinámico de memoria por intercambio o paginación.
- Tiene capacidad de interconexión de procesos.
- Permite comunicación entre procesos.
- Emplea un sistema jerárquico de archivos, con facilidades
de protección de archivos, cuentas y procesos.
- Tiene facilidad para redireccionamiento de Entradas/Salidas.
- Garantiza un alto grado de portabilidad.
El sistema se basa en un Núcleo llamado Kernel, que reside permanentemente en la memoria, y que atiende a todas las llamadas del sistema, administra el acceso a los archivos y el inicio o la suspención de las tareas de los usuarios.
La comunación con el sistema UNIX se da mediante un programa de control llamado SHELL. Este es un lenguaje de control, un intérprete, y un lenguaje de programación, cuyas características lo hacen sumamente flexible para las tareas de un centro de cómputo. Como lenguaje de programación abarca los siguientes aspectos:
- Ofrece las estructuras de control normales: secuenciación,
iteración condicional, selección y otras.
- Paso de parámetros.
- Sustitución textual de variables y Cadenas.
- Comunicación bidireccional entre órdenes de shell.
El shell permite modificar en forma dinámica las características con que se ejecutan los programas en UNIX:
Las entradas y salidas pueden ser redireccionadas o redirigidas hacia archivos, procesos y dispositivos;Es posible interconectar procesos entre sí.
Diferentes usuarios pueden "ver" versiones distintas del sistema operativo debido a la capacidad del shell para configurar diversos ambientes de ejecución. Por ejemplo, se puede hacer que un usuario entre directamente a su sección, ejecute un programa en particular y salga automáticamente del sistema al terminar de usarlo.
El núcleo del sistema operativo Unix (llamado Kernel) es un programa escrito casi en su totalidad en lenguaje C, con excepción de una parte del manejo de interrupciones, expresada en el lenguaje ensamblador del procesador en el que opera.
Las funciones del núcleo son permitir la existencia de un ambiente en el que sea posible atender a varios usuarios y múltiples tareas en forma concurrente, repartiendo al procesador entre todos ellos, e intentando mantener en grado óptimo la atención individual.
El Kernel opera como asignador de recursos para cualquier proceso que necesite hacer uso de las facilidades de cómputo. Es el componente central de Unix y tiene las siguientes funciones:
- Creación de procesos, asignación de tiempos de atención
y sincronización.
- Asignación de la atención del procesador a los procesos
que lo requieren.
- Administración de espacio en el sistema de archivos, que incluye:
acceso, protección y administración de usuarios; comunicación
entre usuarios v entre procesos, y manipulación de E/S y administración
de periféricos.
- Supervisión de la transmisión de datos entre la memoria
principal y los dispositivos periféricos.
El Kernel reside siempre en la memoria central y tiene el control sobre la computadora, por lo que ningún otro proceso puede interrumpirlo; sólo pueden llamarlo para que proporcione algún servicio de los ya mencionados. Un proceso llama al Kernel mediante módulos especiales conocidos como llamadas al sistema.
El Kernel consta de dos artes principales: la sección de control de procesos y la de control de dispositivos. La primera asigna recursos, programas, procesos y atiende sus requerimientos de servicio; la segunda, supervisa la transferencia de datos entre la memoria principal y los dispositivos periféricos. En términos generales, cada vez que algún usuario oprime una tecla de una terminal, o que se debe leer o escribir información del disco magnético, se interrumpe al procesador central y el núcleo se encarga de efectuar la operación de transferencia.
Cuando se inicia la operación de la computadora, debe cargarse en la memoria una copia del núcleo, que reside en e] disco magnético (operación denominada bootstrap). Para ello, se deben inicializar algunas interfaces básicas de hardware; entre ellas, el reloj que proporciona interrupciones periódicas. El Kernel también prepara algunas estructuras de datos que abarcan una sección de almacenamiento temporal para transferencia de información entre terminales y procesos, una sección para almacenamiento de descriptores de archivos y una variable que indica la cantidad de memoria principal.
A continuación, el Kernel inicializa un proceso especial, llamado proceso 0. En general, los procesos se crean mediante una llamada a una rutina del sistema (fork), que funciona por un mecanismo de duplicación de procesos. Sin embargo, esto no es suficiente para crear el primero de ellos, por lo que el Kernel asigna una estructura de datos y establece apuntadores a una sección especial de la memoria, llamada tabla de procesos, que contendrá los descriptores de cada uno de los procesos existentes en el sistema.
Después de haber creado el proceso 0, se hace una copia del mismo, con lo que se crea el proceso 1; éste muy pronto se encargará de "dar vida" al sistema completo, mediante la activación de otros procesos que también forman parte del núcleo. Es decir, se inicia una cadena de activaciones de procesos, entre los cuales destaca el conocido como despachador, o scheduler, que es el responsable de decidir cuál proceso se ejecutará y cuáles van a entrar o salir de la memoria central. A partir de ese momento se conoce el número 1 como proceso de inicialización del sistema, init.
El proceso init es el responsable de establecer la estructura de procesos en Unix. Normalmente, es capaz de crear al menos dos estructuras distintas de procesos: el modo monousuario y el multiusuario. Comienza activando el intérprete del lenguaje de control (Shell) en la terminal principal, o consola, del sistema y proporcionándole privilegios de "superusuario". En la modalidad de un solo usuario la consola permite iniciar una primera sesión, con privilegios especiales, e impide que las otras líneas de comunicación acepten iniciar sesiones nuevas. Esta modalidad se usa con frecuencia para revisar y reparar sistemas de archivos, realizar pruebas de funciones básicas del sistema y para otras actividades que requieren uso exclusivo de la computadora.
Init crea otro proceso, que espera pacientemente a que alguien entre
en sesión en alguna línea de comunicación. Cuando
esto sucede, realiza ajustes en el protocolo de la línea y ejecuta
el programa login, que se encarga de atender inicialmente a los nuevos
usuarios. Si la clave del usuario, y la contraseña proporcionadas
son las correctas, entonces entra en operación el programa Shell,
que en lo sucesivo se encargará de la atención normal del
usuario que se dio de alta en esa terminal.
Administración de Archivos y Directorios
El sistema de archivos de Unix; esta basado en un modelo arborescente y recursivo, en el cual los nodos pueden ser tanto archivos como directorios, y estos últimos pueden contener a su vez directorios o subdirectorios. Debido a esta filosofía, se maneja al sistema con muy pocas órdenes, que permiten una gran gama de posibilidades. Todo archivo de Unix está controlado por múltiples niveles de protección, que especifican los permisos de acceso al mismo. La diferencia que existe entre un archivo de datos, un programa, un manejador de entrada/salida o una instrucción ejecutable se refleja en estos parámetros, de modo que el sistema operativo adquiere características de coherencia y elegancia que lo distinguen.
La raíz del sistema de archivos (conocida como root ) se denota con el símbolo "/", y de ahí se desprende un conjunto de directorios que contienen todos los archivos del sistema de cómputo. Cada directorio, a su vez, funciona como la subraíz de un nuevo árbol que depende de él y que también puede estar formado por directorios o subdirectorios y archivos. Un archivo siempre ocupará el nivel más bajo dentro del árbol, porque de un archivo no pueden depender otros; si así fuera, sería un directorio. Es decir, los archivos son como las hojas del árbol.
Se define en forma unívoca el nombre de todo archivo (o directorio)
mediante lo que se conoce como su trayectoria (path name): es decir, el
conjunto completo de directorios, a partir de root (/), por los que hay
que pasar para poder llegar al directorio o archivo deseado. Cada nombre
se separa de los otros con el símbolo /, aunque tan sólo
el primero de ellos se refiere a la raíz.
Manejo de archivos y de información
Como ya se describió, la estructura básica del sistema
de archivos es jerárquica, lo que significa que los archivos están
almacenados en varios niveles. Se puede tener acceso a cualquier archivo
mediante su trayectoria, que especifica su posición absoluta en
la jerarquía, y los usuarios pueden cambiar su directorio actual
a la posición deseada. Existe también un mecanismo de protección
para evitar accesos no autorizados. Los directorios contienen información
para cada archivo, que consiste en su nombre y en un número que
el Kernel utiliza para manejar la estructura interna del sistema de archivos,
conocido como el nodo-i. Hay un nodo-i para cada archivo, que
contiene información de su directorio en el disco, su longitud,
los modos y las fechas de acceso, el autor, etc. Existe, además,
una tabla de descriptores de archivo, que es una estructura de datos residente
en el disco magnético, a la que se tiene acceso mediante el sistema
mencionado de E/S por bloques.
El control del espacio libre en el disco se mantiene mediante una lista ligada de bloques disponibles. Cada bloque contiene la dirección en disco del siguiente bloque en la cadena. El espacio restante contiene las direcciones de grupos de bloques del disco que se encuentren libres. De esta forma, con una operación de E/S, el sistema obtiene un conjunto de bloques libres y un apuntador para conseguir más.
Las operaciones de E/S en archivos se llevan a cabo con la ayuda de la correspondiente entrada del nodo-i en la tabla de archivos del sistema. El usuario normalmente desconoce los nodos-i porque las referencias se hacen por el nombre simbólico de la trayectoria. Los procesos emplean internamente funciones primitivas (llamadas al sistema) para tener acceso a los archivos; las más comunes son open, creat, read, write, seek, close y unlink, aunque sólo son empleadas por los programadores, no por los usuarios finales del sistema.
Toda esta estructura física se maneja "desde afuera" mediante
la filosofía jerárquica de archivos y directorios ya mencionada,
y en forma totalmente transparente para el usuario. Además, desde
el punto de vista del sistema operativo, un archivo es muy parecido a un
dispositivo.
Las ventajas de tratar a los dispositivos de E/S en forma similar a
los archivos normales son múltiples: un archivo y un dispositivo
de E/S se tornan muy parecidos; los nombres de los archivos y de los dispositivos
tienen la misma sintaxis y significado, así que a un programa que
espera un nombre de archivo como parámetro puede dársele
un nombre de dispositivo (con esto se logra interacción rápida
y fácil entre procesos de alto nivel).
El sistema Unix ofrece varios niveles de protección para el sistema de archivos, que consisten en asignar a cada archivo el número único de identificación de su dueño, junto con nueve bits de protección, que especifican permisos de lectura, escritura y ejecución para el propietario, para otros miembros de su grupo (definido por el administrador del sistema) y para el resto de los usuarios. Antes de cualquier acceso se verifica su validez consultando estos bits, que residen en el nodo-i de todo archivo. Además, existen otros tres bits que se emplean para manejos especiales, relacionados con la clave del superusuario.
Otra característica de Unix es que no requiere que el conjunto
de sistemas de archivos resida en un mismo dispositivo.
Lenguaje de control del sistema operativo
Entre los rasgos distintivos de Unix está el lenguaje de control que emplea, llamado Shell. Es importante analizar dos funciones más de Shell, llamadas redireccionamiento e Interconexión.
Asociado con cada proceso hay un conjunto de descriptores de archivo numerados 0, I y 2, que se utilizan para todas las transacciones entre los procesos y el sistema operativo. El descriptor de archivo 0 se conoce como la entrada estándar; el descriptor de archivo 1, como la salida estándar, y el descriptor 2, como el error estándar. En general, todos están asociados con la terminal de vídeo, pero, debido a que inicialmente son establecidos por Shell, es posible reasignarlos.
Una parte de la orden que comience con el símbolo ? se considera como el nombre del archivo que será abierto por Shell y que se asociará con la entrada estándar; en su ausencia, la entrada estándar se asigna a la terminal. En forma similar, un archivo cuyo nombre está precedido por el símbolo > recibe la salida estándar de las operaciones.
Cuando Shell interpreta la orden califica < examen > resulta llama a ejecución al programa califica (que ya debe estar compilado y listo para ejecutar) y detecta la existencia de un archivo que toma el lugar de la entrada estándar y de otro que reemplaza a la salida estándar. Después, pasa como datos de lectura los contenidos del archivo examen recién abierto (que debe existir previamente) al programa ejecutable. Conforme el programa produce datos como salida, éstos se guardan en el archivo resulta que Shell crea en ese momento.
En la teoría de lenguajes formales desempeñan un importante papel las gramáticas llamadas de tipo 3 (también conocidas como regulares), que tienen múltiples aplicaciones en el manejo de lenguajes. Existen unas construcciones gramaticales conocidas como expresiones regulares, con las que se puede hacer referencia a un conjunto ilimitado de nombres con estructura lexicográfica similar; esto lo aprovecha Shell para dar al usuario facilidades expresivas adicionales en el manejo de los nombres de los archivos. Así, por ejemplo, el nombre carta * se refiere a todos los archivos que comiencen con el prefijo carta* y que sean seguidos por cualquier subcadena, incluyendo la cadena vacía; por ello, si se incluye el nombre carta* en alguna orden, Shell la aplicará a los archivos carta, carta1, carta2 y cualquier otro que cumpla con esa especificación abreviada. En general, en lugares donde se emplea un nombre o una trayectoria, Shell permite utilizar una expresión regular que sirve como abreviatura para toda una familia de ellos, y automáticamente repite el pedido de atención para los componentes.
Existen además otros caracteres especiales que Shell reconoce
y emplea para el manejo de expresiones regulares, lo que proporciona al
lenguaje de control de Unix mayor potencia y capacidad expresiva.
LINUX
Historia del Linux:
Linux fue creado originalmente por Linus Torvald en la Universidad de
Helsinki en Finlandia, siendo él estudiante de informática.
Pero ha continuado su desarrollado con la ayuda de muchos otros programadores
a través de Internet.
Linux originalmente inicio el desarrollo del núcleo como su
proyecto favorito, inspirado por su interés en Minix, un pequeño
sistema Unix desarrollado por Andy Tannenbaum. Él se propuso a crear
lo que en sus propias palabras seria un "mejor Minix que el Minix".
El 5 de octubre de 1991, Linux anuncio su primera versión "oficial" de Linux, versión 0.02. Desde entonces , muchos programadores han respondido a su llamada, y han ayudado a construir Linux como el sistema operativo completamente funcional que es hoy.
¿QUÉ ES LINUX?
Linux es un sistema operativo diseñado por cientos de programadores de todo el planeta, aunque el principal responsable del proyecto es Linus Tovalds. Su objetivo inicial es propulsar el software de libre distribución junto con su código fuente para que pueda ser modificado por cualquier persona, dando rienda suelta a la creatividad. El hecho de que el sistema operativo incluya su propio código fuente expande enormemente las posibilidades de este sistema. Este método también es aplicado en numerosas ocasiones a los programas que corren en el sistema, lo que hace que podamos encontrar muchisimos programas útiles totalmente gratuitos y con su código fuente.
Las funciones principales de este magnífico sistema operativo
son:
Linux no sacrifica en ningún momento la creatividad, tal y como lo hacen algunas compañías informáticas. Linux es una ventana abierta por la que es posible huir hacia un mundo donde la verdadera informática puede ser disfrutada sin limites ni monopolios.
Linux es distribuido mediante una serie de distribuciones como RedHat, Slackware, Debían ... las cuales se diferencian por su método de instalación y por los paquetes (software) que viene incluido.
Características de Linux
Cuando aparecieron los primeros ordenadores, la programación de estos era hecha íntegramente en código máquina, lo cual resultaba una tarea extremadamente pesada: cada vez que se escribía un nuevo programa, además de escribir el algoritmo adecuado era preciso añadir todo el código necesario para que el ordenador pudiese leer datos desde una cinta perforada, imprimir en un teletipo, etc. Dado que, en general, todas estas rutinas eran exactamente iguales para todos los programas que se hacían, pronto los programadores de aquellas máquinas aprendieron a organizarlas en bibliotecas de rutinas. Cada vez que había que escribir un nuevo programa, solo tenían que ir a su libreta y copiar las rutinas de Entrada/Salida que necesitaban, lo cual les simplificaba un poco el trabajo. Otro sistema era el que la propia empresa que fabricaba el ordenador incluyese un paquete de fichas perforadas con dichas rutinas, de modo que el programador solo tenía que coger las que le interesasen y añadirlas estratégicamente en su paquete.
El siguiente paso fue generalizar este conjunto de rutinas. La idea
era incluir juntas todas las rutinas necesarias para acceder al hardware,
y hacerlas accesibles a cualquier programador en forma de llamadas a subrutina.
De este modo, cada vez que se hacía un programa no era preciso incluir
en él todas esas rutinas. Había nacido el
Windows NT
Microsoft Windows NT Server es un sistema operativo diseñado para su uso en servidores de red de área local (LAN). Ofrece la potencia, la manejabilidad y la capacidad de ampliación de Windows NT en una plataforma de servidor e incluye características, como la administración centralizada de la seguridad y tolerancia a fallos más avanzada, que hacen de él un sistema operativo idóneo para servidores de red.
Windows NT Server es a la vez un sistema operativo para computadoras
(ordenadores) personales y un sistema operativo para red. Puesto que incorpora
funciones de red, las redes de Windows NT Server se integran de forma óptima
con el sistema operativo básico, facilitando el uso y la administración
de las funciones.
Internamente posee una arquitectura de 32 bits. Su modelo de memoria
lineal de 32 bits elimina los segmentos de memoria de 64 KB y la barrera
de 640 KB de MS-DOS. Posee múltiples threads (subprocesos) de ejecución,
lo que permite utilizar aplicaciones más potentes. La protección
de la memoria garantiza la estabilidad mediante la asignación de
áreas de memoria independientes para el sistema operativo y para
las aplicaciones, con el fin de impedir la alteración de los datos.
La capacidad de multitarea de asignación prioritaria permite al
sistema operativo asignar tiempo de proceso a cada aplicación de
forma eficaz. Windows NT Server incluye, asimismo, diversas funciones de
red, que se describen brevemente en las siguientes secciones y con más
detalle en capítulos posteriores de este manual.
Sistema Operativo MS-DOS
Qué es MS-DOS ?
Dos es un acrónimo de Disk Operating System, sistema operativo
creado por Microsoft, y que tienen instalado la mayoría de los ordenadores
PC.
Es DOS es a parte de un sistema operativo, un conjunto de programas
que nos permiten manipular información contenida en discos, de esta
forma podemos trabajar con facilidad, comodidad y rapidez con estos; a
demás, el DOS coordina el funcionamiento del microprocesador para
que todo funcione bien en el interior de nuestro ordenador.
A lo largo del tiempo Microsoft ha ido mejorando el DOS, desde su primera
versión el 1.981. Las versiones que puedan existir, sirven para
corregir errores detectados en la versión anterior o para mejorar
ciertas partes del programa; si la variación está en la primera
cifra, significa que se han introducido cambios importantes, fruto, por
ejemplo, de las prestaciones de los nuevos microprocesadores, en gran parte
para poder aprovechar sus ventajas.
Sistema Operativo Linux
Historia
Linux fue creado originalmente por Linus Torvald en la Universidad
de Helsinki en Finlandia, siendo él estudiante de informática.
Pero ha continuado su desarrollado con la ayuda de muchos otros programadores
a través de Internet.
Linux originalmente inicio el desarrollo del núcleo como su
proyecto favorito, inspirado por su interés en Minix, un pequeño
sistema Unix desarrollado por Andy Tannenbaum. Él se propuso a crear
lo que en sus propias palabras seria un "mejor Minix que el Minix".
El 5 de octubre de 1991, Linux anuncio su primera versión "oficial"
de Linux, versión 0.02. Desde entonces , muchos programadores han
respondido a su llamada, y han ayudado a construir Linux como el sistema
operativo completamente funcional que es hoy.
¿QUÉ ES LINUX?
Linux es un sistema operativo diseñado por cientos de programadores de todo el planeta, aunque el principal responsable del proyecto es Linus Tovalds. Su objetivo inicial es propulsar el software de libre distribución junto con su código fuente para que pueda ser modificado por cualquier persona, dando rienda suelta a la creatividad. El hecho de que el sistema operativo incluya su propio código fuente expande enormemente las posibilidades de este sistema. Este método también es aplicado en numerosas ocasiones a los programas que corren en el sistema, lo que hace que podamos encontrar muchisimos programas útiles totalmente gratuitos y con su código fuente.
Las funciones principales de este magnífico sistema operativo son:
? Sistema multitarea En Linux es posible ejecutar varios programas a
la vez sin necesidad de tener que parar la ejecución de cada aplicación.
? Sistema multiusuario Varios usuarios pueden acceder a las aplicaciones
y recursos del sistema Linux al mismo tiempo. Y, por supuesto, cada uno
de ellos puede ejecutar varios programas a la vez (multitarea).
? Shells programables Un shell conecta las ordenes de un usuario con
el Kernel de Linux (el núcleo del sistema), y al ser programables
se puede modificar para adaptarlo a tus necesidades. Por ejemplo, es muy
útil para realizar procesos en segundo plano.
? Independencia de dispositivos Linux admite cualquier tipo de dispositivo
(módems, impresoras) gracias a que cada una vez instalado uno nuevo,
se añade al Kernel el enlace o controlador necesario con el dispositivo,
haciendo que el Kernel y el enlace se fusionen. Linux posee una gran adaptabilidad
y no se encuentra limitado como otros sistemas operativos.
? Comunicaciones Linux es el sistema más flexible para poder
conectarse a cualquier ordenador del mundo. Internet se creó y desarrollo
dentro del mundo de Unix, y por lo tanto Linux tiene las mayores capacidades
para navegar, ya que Unix y Linux son sistemas prácticamente idénticos.
Con linux podrá montar un servidor en su propia casa sin tener que
pagar las enormes cantidades de dinero que piden otros sistemas.
Linux es distribuido mediante una serie de distribuciones como RedHat,
Slackware, Debían ... las cuales se diferencian por su método
de instalación y por los paquetes (software) que viene incluido.
Es posible que encuentre a la venta versiones de Linux y piense: "si, si....
decían que era gratis..." No se asuste, todo el software de Linux
esta regido por la licencia de GNU, con la cual cualquier persona puede
modificar un programa y venderlo según el desee, con la condición
que la persona que compra ese producto puede realizar la misma acción
o simplemente hacer copias para todos aquellos que lo quieran sin tener
que pagar más (por lo tanto no se extrañe si encuentra distribución
comerciales). Esta licencia es la garantía que afirma la absoluta
libertad de este sistema operativo. Si no desea ni siquiera pagar esa mísera
cantidad puede descargárselo de Internet totalmente gratis (bueno,
sólo tendrá que pagar la factura de teléfono ).