Un sistema operativo es un programa, es decir, un software, que se ejecuta continuamente en la computadora mientras ella se está utilizando. Un sistema operativo no brinda ninguna funcionalidad directa para un usuario, pero lo que sí hace es proporcionar un entorno en el que otros programas con aplicación directa puedan ser utilizados. Para ello, el sistema operativo se encarga de controlar y coordinar la utilización del hardware por parte de los distintos programas de aplicación.
La percepción que se tiene de un sistema operativo varía de acuerdo a si se ve desde el punto de vista del usuario o si se ve desde el punto de vista del sistema. Desde el punto de vista del usuario, un sistema operativo podría diseñarse para que sea de fácil uso y para que el usuario pueda maximizar la cantidad de trabajos que realiza en él, pero otros sistemas operativos no sólo tienen que encargarse de eso sino también de distribuir equitativamente los trabajos hacia los diversos usuarios ya que, por ejemplo, en las estaciones de trabajo conectadas en red hay recursos que son compartidos por diversos ordenadores, como la red y los servidores (servidores de archivos, de cálculo y de impresión). Además, cuando el sistema operativo está diseñado para un dispositivo de mano, su rendimiento se evalúa según la duración de la batería. También se pueden clasificar de acuerdo a si tienen mucha o escasa interacción con el usuario. Por ejemplo, las computadoras incorporadas en automóviles o en electrodomésticos a veces disponen de teclados numéricos o indicadores luminosos para mostrar el estado, pero están diseñadas para funcionar mayormente sin la intervención del usuario. Ahora bien, no hay que pensar que el sistema operativo es la interfaz gráfica de ventanas que percibimos al utilizar la computadora; dicha interfaz es un programa aparte y a través de ella se facilita aun más la utilización del sistema operativo, pero éste existe independientemente de ella.
Por su parte, desde el punto de vista del sistema, el sistema operativo puede verse como un programa asignador de recursos. Debe decidir cómo asignar los recursos a los distintos programas y también a los distintos usuarios de manera que la computadora pueda trabajar de manera eficiente y equitativa. También puede verse como un programa de control, ya que debe gestionar la ejecución de los programas para evitar errores. Esto tiene que ver más que todo con el control de los dispositivos de E/S.
Hasta ahora hemos mencionado los términos "programas de aplicación" y "recursos", pero sin aclarar a qué nos referimos con ellos.
Son ejemplos de programas de aplicación:
- exploradores web
- compiladores
- procesadores de texto
- hojas de cálculo
Son ejemplos de recursos:
- tiempo de CPU
- espacio de memoria
- espacio de almacenamiento de archivos
- dispositivos de E/S
- ancho de banda de red
- consumo de energía
El tema de organización de un computador ya fue abordado en un curso previo, por lo que aquí sólo resalto los puntos que se me podrían olvidar o los que son más importantes para entender la funcionalidad de un sistema operativo.
El sistema operativo no hace nada a menos que ocurra algún suceso, y dicho suceso viene dado por una excepción. A las excepciones que provienen del hardware se les conoce como interrupciones, las cuales son asíncronas porque no se sabe en qué momento van a ocurrir. Las interrupciones son señales que se envían a la CPU normalmente a través del bus del sistema. Las excepciones que provienen del software (del programa que está en ejecución) son conocidas como trampas, y ellas son síncronas porque si el programa fuera ejecutado varias veces, siempre generaría la misma trampa en el mismo punto. Las trampas pueden ser hechas intencionalmente con la finalidad de realizar una solicitud al sistema operativo, y en este caso se conocen como llamadas al sistema o llamadas de monitor, pero también hay trampas que provienen de un error de programa, que son por ejemplo cuando hay un desbordamiento aritmético, una división por cero o un acceso a memoria no válido.
Las llamadas al sistema son en buena medida las que hacen posible la compatibilidad de código de un sistema operativo en distintas arquitecturas hardware.
2.1) Estructura de almacenamiento
La mayoría de las computadoras de hoy en día son sistemas Von Neumann, lo cual significa que el código fuente de un programa tiene que estar almacenado en memoria principal para poder ser ejecutado, así como también sus datos.
Esto genera el cuello de botella de Von Neumann, lo cual es la limitación de la velocidad del procesador. Este cuello de botella se debe a que el procesador tiene que comunicarse primero con la memoria principal, y la velocidad de comunicación entre ambos suele ser mucho menor que la velocidad a la que puede trabajar el procesador.
Sin embargo, un sistema de Von Neumann tiene la ventaja de que es más simple de implementar arquitectónicamente puesto que en un disco duro un programa no necesariamente está almacenado en un solo bloque sino que puede estar fragmentado en distintas partes, por lo que habría que tener sumo cuidado cuando se intentara buscar la siguiente instrucción a ejecutar. Por su parte, en un sistema de Von Neumann normalmente la siguiente instrucción a ejecutar es la siguiente que está almacenada en memoria salvo en casos especiales, como por ejemplo cuando una instrucción señala un salto hacia otra específica. Por ello, sería ideal que todos los programas y los datos residieran en memoria principal de forma permanente, pero esto no es posible debido a las siguientes razones.
1.- La memoria principal suele ser demasiado pequeña como para almacenar por siempre todos los datos y programas.
2.- La memoria principal es un dispositivo de almacenamiento volátil que pierde su contenido cuando se quita la alimentación.
Esto crea la necesidad de disponer de dispositivos de almacenamiento secundario que permitan almacenar grandes cantidades de información de manera permanente. Tenemos así una jerarquía de dispositivos que varían de acuerdo a la velocidad, el coste, el tamaño y la volatilidad:
Los niveles superiores son rápidos y caros, y a medida que se desciende, el coste por bit disminuye y el tiempo de acceso aumenta. El hecho de que los dispositivos que permiten almacenar mayor cantidad de información sean más lentos no es algo que no se pudiera evitar, pero lo que sucede es que saldría extremadamente caro tener un dispositivo tan grande y tan rápido. De hecho, si un dispositivo fuera a su vez más lento y más caro que otro, no habría razón para usarlo, y es por eso que algunos han desaparecido, como las cintas de papel y las memorias de núcleo.
2.2) Estructura de E/S
Una computadora de propósito general (la que no está diseñada para una única actividad específica) normalmente consta de una o más CPU y de múltiples controladoras de dispositivo que se conectan a través de un bus común.
Cada controladora (controller) es un hardware que se encarga de uno o varios tipos de dispositivos. Un dispositivo no podría ser instalado en una computadora si ésta de por sí no incluyera una controladora que lo soportara. Además, cada controladora puede tener más de un dispositivo conectado. La controladora mantiene algunos búferes locales y registros de propósito especial, y es responsable de transferir los datos entre los dispositivos periféricos que controla y sus búferes locales.
Normalmente, para poder usar un dispositivo es necesario instalar también un controlador (driver) específico para ese dispositivo, el cual es un software que le permite al sistema operativo reconocer y comunicarse con dicho dispositivo. El controlador del dispositivo es el que se encarga de interpretar la información que está almacenada en los registros internos de la controladora para determinar qué acción ella debe realizar. La controladora le envía una interrupción al controlador cuando ha terminado su operación, y allí el controlador se encarga de devolverle el control al sistema operativo, y además devuelve los datos obtenidos, si es que la operación ha sido de lectura, o un puntero a los datos. Para otras operaciones, el controlador devuelve información de estado. (Recordar que procesar una interrupción requiere el uso de la CPU.)
Si la cantidad de información que hubiese que adquirir del dispositivo fuera demasiado grande, sería un desperdicio de procesador tener que interrumpir por cada byte de información. Por ello, para estas situaciones suele usarse el acceso directo a memoria, mediante el cual la controladora transfiere datos directamente desde su propio búfer a la memoria principal sin que actúe la CPU. La controladora sólo interrumpe al controlador cuando ha transferido un bloque entero para indicarle que ha finalizado. Sin embargo, esto no significa que mientras se está transfiriendo un bloque no se vea afectada la ejecución de algún otro programa, puesto que tanto el CPU como la controladora pueden requerir acceder a memoria al mismo tiempo, y para eso tienen que competir por la utilización del bus de memoria, lo cual disminuye la velocidad de la CPU.
Puede haber un subsistema de E/S que oculte la mayor parte de las peculiaridades de los dispositivos de E/S al sistema operativo. Este subsistema es implementado en UNIX, y consta de varios componentes:
- Un componente de gestión de memoria que incluye almacenamiento en búfer, gestión de caché y gestión de colas.
- Una interfaz general para controladores de dispositivo.
- Controladores para dispositivos hardware específicos.
2.3) Arquitectura de un sistema informático
Los componentes que no se pueden referenciar directamente se comunican a través de canales (buses). Generalmente, se tiene un conjunto de chips (chipset), que a su vez consta de dos puentes: el puente norte y el puente sur.
El puente norte está conectado directamente a la CPU y se encarga de los buses de alta velocidad y de los dispositivos fundamentales para el inicio del sistema, como lo son la memoria, y tarjetas de video.
El puente sur conecta el resto de dispositivos periféricos.
Además, un sistema puede tener uno o más procesadores. Cada controladora de dispositivo puede incluir un procesador de propósito especial al cual se le conoce como microprocesador, el cual implementa su propia cola de disco y su algoritmo de programación de tareas. Este método libera a la CPU principal del trabajo de planificar las tareas del disco. Pero la existencia de microprocesadores no convierte a un sistema en multiprocesador; un sistema es considerado monoprocesador a menos que posea más de una CPU de propósito general.
En un sistema multiprocesador, los procesadores comparten el bus del sistema y, en ocasiones, el reloj, la memoria y los dispositivos periféricos. Las principales ventajas de un sistema multiprocesador son las siguientes.
1) Mayor rendimiento, aunque no hay que pensar que si se tienen N procesadores iguales, el rendimiento será N veces el que se obtendría si se tuviera un solo procesador, ya que hay tiempo que se desperdicia sincronizándolos y asignando sus tareas.
2) Economía de escala. Es más barato tener un solo sistema de N procesadores que N sistemas de un solo procesador, ya que los procesadores pueden compartir los dispositivos periféricos, los sistemas de almacenamiento masivo y las fuentes de alimentación.
3) Mayor fiabilidad. Al dañarse un procesador, el trabajo se ralentizará pero no dejará de funcionar.
El multiprocesamiento puede ser de dos tipos: asimétrico y simétrico.



No hay comentarios:
Publicar un comentario