lunes, 21 de julio de 2014

MS-WINDOWS (Introducción al sistema operativo)

Introducción a los Sistemas Operativos

Información General

Un Sistema Operativo (SO) es una colección organizada de rutinas o extensiones de software del hardware. Consiste en rutinas de control que hacen funcionar una computadora y proporcionan un entorno para la ejecución de los programas. Existen otros programas que se apoyan en el SO para poder acceder a los recursos que necesitan. Esto se lleva a cabo a través de llamadas sistema operativo. También el SO debe brindar una forma de que el usuario se pueda comunicar con él a través de una interfaz que le brinde una vía de comunicación con el hardware del sistema informático.
El objetivo principal del SO es lograr que el sistema informático es el lograr que el hardware de la computadora se emplee de modo eficiente, y el objetivo secundario se use de manera cómoda.
El SO debe asegurar el correcto funcionamiento del sistema informático. Para lograr esto el hardware debe brindar algún mecanismo apropiado que impida que los usuarios intervengan en el funcionamiento del sistema y así mismo el SO debe poder utilizar este recurso de hardware de modo que esto se cumpla.
El SO debe ofrecer servicios a los programas y sus usuarios para facilitar la tarea de programación.

¿Qué es un sistema operativo?


Las clases de sistemas operativos en la que nos basaremos serán los denominados multiusuarios y de multiprogramación; es decir que varios usuarios podrán correr concurrentemente múltiples programas.
Un SO es una parte importante de casi cualquier sistema informático. Para entender mejor esto veremos que un sistema informático puede separar en cuatro partes:

  • El hardware
  • El SO
  • Los programas de aplicación
  • Los usuarios


Estas partes hacen de capas, cada una de las cuales acerca más al usuario a utilizar los recursos del hardware. El hardware (CPU, memoria y dispositivos) proporciona los recursos de computación básicos sobre los que se agregaran estas capas sucesivas. Los programas de aplicación como los compiladores, juegos, aplicaciones de negocios, etc. definen la forma en que estos recursos se emplearán para solucionar los problemas del usuario.
Puede haber varias clases de usuarios usando el sistema, como ser personas, programas y otras computadoras, tratando de resolver diversos problemas. El SO controla y coordina el uso del hardware entre los diversos programas de aplicación y los distintos usuarios, administrando todos los recursos como disco, memoria, impresoras, monitor, etc. El SO determina los tiempos en que un determinado programa utilizará un recurso dado.
Al comienzo de la era informática, los sistemas no utilizaban SO's. Estas computadoras de hace 40 años ejecutaban un programa a la vez que era cargado por un programador. Este cargaba el programa y lo ejecutaba. Si existía algún error que hiciera que el programa se detuviera antes de lo esperado, se tenía que comenzar de nuevo con todo el proceso. Recordemos que en esa época no había muchas computadoras en funcionamiento, así que el programador tenía que esperar de varios días hasta tener nuevamente su turno enfrente de la computadora. Los SO's existen porque son una solución razonable al problema de crear un sistema informático útil. El objetivo fundamental de los sistemas informáticos es ejecutar los programas de los usuarios y facilitar la resolución de sus problemas. Todo esto se hacía a través de tarjetas perforadas que una persona encargada cargaba en la computadora y luego de algunas horas devolvía la salida impresa al programador.
Al avanzar la tecnología informática, muchos de estos programas se cargaban en una sola cinta, otro programa residente en la memoria de la computadora, cargaba y manipulaba los programas de esa cinta. Este es el ancestro de los SO's de hoy en día. En la década del 60 la tecnología de SO's avanzo mucho y se podían tener múltiples programas al mismo tiempo en la memoria. Así surgió el concepto de multiprogramación. Si un programa necesitaba esperas a que ocurriera algún evento externo, como que una cinta se rebobinara, otro podría tener acceso a la CPU para así poder utilizar el 100% del poder de procesamiento con que contaba la computadora. Esto ahorraba mucho dinero ya que en aquel entonces todo en lo referente a cómputo (memoria, espacio en disco, etc) costaba cientos de miles de dólares. A finales de los 60's, en 1969, nació UNIX, SO que trataremos más adelante, y es la base de muchos de los SO's de hoy en día, aunque muchos no lo admitan.
Definir que forma parte de un SO y que no sería difícil, dada la gran variedad existente, pero una definición para los SO que nos compete en estos momentos seria que el SO es el programa que ejecuta todo el tiempo en la computadora (conocido usualmente como kernel o núcleo), siendo los programas de aplicación todo lo demás. En general un SO intenta incrementar la productividad de un recurso de proceso tal como el hardware de la computadora, o de los usuarios de los sistemas informáticos. Ahora bien, en lo referente a la utilización eficiente de un sistema informático no siempre se puede lograr que un SO lo logre. Casi siempre resulta contradictorio la comodidad y la eficiencia.

Unix como base de sistemas operativos



Como dijimos antes, en 1969, algo maravilloso sucedió en el mundo de la informática: nació UNIX. En principio como un trabajo solitario de Ken Thompson, de Bell Labs, y luego en conjunto con Dennis Ritchie (quien junto a Brian Kerningan desarrollaron el lenguaje de programación C) y otros miembros del Bell Labs que se fueron incorporando. Ritchie ya tenia experiencia dado que había trabajado en otro proyecto llamado MULTICS, el cual fue de gran influencia sobre el nuevo SO, como por ejemplo en la organización básica del sistema de archivos, la idea de un intérprete de comando (el shell) como un proceso de usuario, etc.
La primera versión de UNIX estaba hecha íntegramente en ensamblador. Esto se cambió con la versión posterior, que fue escrita en lenguaje C lo que lo hizo sumamente portable; así mismo también se le agrego una característica por demás de importante, la multiprogramación. Esto y la entrega de licencias gratuitas con fines educativos extendieron su uso, desarrollo y la investigación en las universidades. El uso de UNIX se fue ampliando a medida que se le fueron adicionando herramientas de software y entornos de programación, apoyo a protocolos de red Internet (TCP/IP), mejoras en el editor de texto (Vi), compiladores de C, PASCAL y LISP, mejora en el control de congestionamiento de redes y el rendimiento de TCP/IP. Al crecer la popularidad de UNIX, se a transportado a distintas plataformas de hardware (PC, MAC, ALPHA) y se han creado una gran cantidad de SO's UNIX y parecidos a UNIX (XENIX de Microsoft, AIX de IBM, SOLARIS de SunSoft).
Las características principales de este SO es que se diseñó como un sistema de tiempo compartido. Esto quiere decir que varios usuarios estarán usando el sistema al mismo tiempo, sin notar la presencia de los demás en su ámbito de trabajo, lo que logra el SO asignándole un tiempo de atención para el CPU a cada usuario.
La interfaz estándar con el usuario (el shell) puede ser cambiada si se quiere. La mayoría del código fuente original está disponible por lo que los usuarios podrán ajustar el SO a sus requerimientos específicos. Es multitarea, es decir que permite que se puedan ejecutar varios procesos al mismo tiempo compartiendo el uso de la CPU.
Soporta el procesamiento en tiempo real (ejecución de procesos en intervalos de tiempo especificados sin retardo), el cual se utiliza en aplicaciones de robótica y base de datos.
Los sistemas UNIX son esenciales para la Internet.
Los sistemas de archivos con árboles multiniveles permiten que el SO trate tanto a directorios y archivos como simples secuencias de bytes.
Posee distintos niveles de seguridad: password's de ingreso y permisos de archivos y directorios.
Un proceso puede fácilmente generar otro, también es posible el manejo de procesos en determinado tiempo. Puede planearse la utilización de la CPU.
El kernel y biblioteca del SO están preparados para que el SO pueda extenderse y crecer, lo que permitió a UNIX mantenerse siempre a la cabeza de los SO's estando permanentemente actualizado.

Procesos


Para poder entender bien el concepto de Proceso deberemos diferenciarlo en el lugar donde se encuentra. Un programa será un archivo cuando se encuentre en el disco rígido y será un proceso al encontrarse en memoria; de esta forma se comprenderá mejor que es un Proceso. Pero también es cierto que un proceso es mucho mas que un programa en memoria y sobre todo en la clase de SO que nos compete, con sus funciones de multiusuario y multitarea como lo son los SO Un*x.
Cada programa cuenta con un conjunto de datos que usa para hacer su trabajo y en la mayoría de los casos estos datos no forman parte del programa. Como ejemplo tomemos un programa de edición de textos. Los datos del archivos que el programa esta editando no forma parte del programa, pero si del proceso en memoria. Si alguna otra persona utilizara al mismo tiempo el mismo procesador de texto que se encuentra en ese sistema, los dos estarían utilizando el mismo programa, pero no el mismo proceso. Ambas tendrían una copia para cada uno del proceso del editor de texto. Es así que los programas podrán ser únicos para todos los usuarios, pero los procesos pertenecerán a cada usuario.
En Un*x varios usuarios podrán estar utilizando el sistema al mismo tiempo. Esto se traduce a que el sistema tendrá múltiples procesos cargados en la memoria, y cada uno de ellos requerirá de la atención de la CPU en algún momento. El sistema llevará un control de los procesos que están funcionando en ese momento, en que terminal y a que usuario pertenece además de otros datos. Todo ello estará apuntado en una tabla de procesos, en la cual el SO asignará el tiempo que tardará la CPU para atender cada proceso.
Cuando uno entra a un sistema Un*x, generalmente obtiene accesos a lo que se denomina intérprete de comandos. La gente que haya utilizado DOS sabrá que esto, ya que el C:> es el indicador de shell de su interprete de comando, el COMMAND.COM. En cambio, aquí el indicador será algo como $, # o %. Este shell es un proceso que esta corriendo y pertenece al usuario que esta corriéndolo en ese momento. En realidad es una copia del intérprete de comandos que esta corriendo en memoria.
Al cargarse un programa desde el intérprete de comando (shell), este no es reemplazado por dicho proceso, sino que queda a la espera de algún otro mandato. Mientras tanto, para correr el programa, se crea un nuevo proceso, el del programa, que será hijo del proceso del shell. Un proceso tiene un solo padre pero puede tener múltiples hijos.
Al iniciar una sesión en GNU/Linux el usuario será propietario de un único proceso, por ejemplo /bin/bash que es el intérprete de comandos mas usados y el que usaremos nosotros. Luego cada proceso que ejecute a partir del bash, se acomodará en el árbol de procesos como hijo del bash.
El bash permanecerá atento a que se le de un nuevo mandato, mientras tanto se dice que esta durmiendo. Como habíamos dicho antes, múltiples procesos podrán estar ejecutándose al mismo tiempo. Por ello se tendrá que asignar un tiempo a cada proceso para recibir la atención exclusiva la CPU. Es común que cada proceso tenga por 1/100 segundos la atención total de la CPU. Esto dará la ilusión al usuario de que es el único que tiene la atención del sistema, pero que ocurriría si el proceso se colgase. En un sistema monousuario como el Windows (no el NT) esto seguramente ocasionaría el cuelgue del sistema ya que el kernel no podría recuperarse dado que el proceso tiene control absoluto de la CPU. Esto no ocurre en GNU/Linux dado que todos los procesos responden al kernel y es el kernel quien les da permiso de usar la CPU en el momento necesario.
Supongamos que queremos guardar nuestro trabajo del editor de textos. Entonces, y con la combinación de teclas correctas, le damos la orden al proceso del editor de textos para que guarde el trabajo. Esto, para nosotros, se hace instantáneamente pero es solo otra ilusión. El proceso del editor de textos emite una petición al kernel para escritura del disco, el kernel entonces escribirá el disco en bloques, dependiendo de cuan libre este, mientras tanto guardara los datos en un espacio secundario de almacenamiento denominado "cache". Esto es beneficioso por varias razones. En caso de que los datos que estemos escribiendo en ese momento sean requeridos un momento después, estos estarían disponibles en el cache y se ahorraría un viaje al disco. También seria beneficioso por el lado de la eficiencia del sistema, ya que escribirá al disco solo cuando el procesador este ocioso, no ocasionando con el proceso de escritura que el sistema funcionara más lentamente. Suponiendo que alguna otra persona necesitara en ese momento un dato del disco, el proceso de lectura tendría que esperar su turno, entonces es puesto a dormir. El proceso tendrá que esperar a que se termine el tiempo asignado al proceso de escritura y luego se le despertara y podrá tomar su lugar para acceder al disco.
Existe también otro tipo de eventos en los que la CPU repara para poder detener a un proceso en curso, estos son las interrupciones. Se ocasionan cuándo un dispositivo, léase mouse o teclado, requiere la atención de la CPU, es asi que se genera una interrupción que la CPU atenderá, mandando a dormir al proceso en curso. Por supuesto hay mas complicaciones que las expuestas aquí, entre ellas las prioridades de los procesos que se verán cuando tomemos la parte de 6.7 de Tareas y Procesos. El tema de prioridades lo maneja el kernel de acuerdo a varios aspectos, como el dueño del proceso, si es de sistema o no, etc. Los procesos de sistemas son utilizados para la administración de memoria y la calendarización de turnos para la CPU, etc. Estos procesos se los conoce como daemon (DEMONIOS) o programas servidores. Funcionan sin la intervención del usuario y sin que este los vea y hacen su trabajo esperando su turno cuando les llega para actuar.

0 comentarios :

Publicar un comentario