martes, 17 de abril de 2012

ADMINISTRACIÓN DE ARCHIVOS



SISTEMAS DE ARCHIVOS

El “Sistema de Archivos” es la parte del sistema de administración del almacenamiento responsable, principalmente, de la administración de los archivos del almacenamiento secundario.
Los usuarios deben poder crear, modificar y borrar archivos. Se debe poder estructurar los archivos de la manera más apropiada a cada aplicación. Se deben proporcionar posibilidades de “respaldo” y “recuperación” para prevenirse contra: la pérdida accidental de información, la destrucción maliciosa de información.
Un “Archivo” es un conjunto de registros relacionados. El sistema de archivos está relacionado especialmente con la administración del espacio de almacenamiento secundario, fundamentalmente con el almacenamiento de disco.
Una forma de organización de un sistema de archivos puede ser la siguiente: Se utiliza una “raíz” para indicar en qué parte del disco comienza el “directorio raíz”. El “directorio raíz” apunta a los “directorios de usuarios”. Un “directorio de usuario” contiene una entrada para cada uno de los archivos del usuario.
Cada entrada de archivo apunta al lugar del disco donde está almacenado el archivo referenciado. Los nombres de archivos solo necesitan ser únicos dentro de un directorio de usuario dado. El nombre del sistema para un archivo dado debe ser único para el sistema de archivos. Algunos sistemas de archivos distinguen entre las letras mayúsculas y minúsculas, mientras que otros no. Muchos S. O. utilizan nombres de archivo con dos partes, separadas por un punto: la parte posterior al punto es la extensión de archivo y generalmente indica algo relativo al archivo, aunque las extensiones suelen ser meras convenciones.
Operaciones con Archivos
  1. Create (crear): el archivo se crea sin datos.
  2.  Delete (eliminar): si el archivo ya no es necesario debe eliminarse para liberar espacio en disco. 
  3. Open (abrir): antes de utilizar un archivo, un proceso debe abrirlo. La finalidad es permitir que el sistema traslade los atributos y la lista de direcciones en disco a la memoria principal para un rápido acceso en llamadas posteriores.
  4. Close (cerrar): cuando concluyen los accesos, los atributos y direcciones del disco ya no son necesarios, por lo que el archivo debe cerrarse y liberar la tabla de espacio interno.
  5.   Read (leer): los datos se leen del archivo; quien hace la llamada debe especificar la cantidad de datos necesarios y proporcionar un buffer para colocarlos.
  6.   Write (escribir): los datos se escriben en el archivo, en la posición actual. El tamaño del archivo puede aumentar (agregado de registros) o no (actualización de registros).
  7.       Append (añadir): es una forma restringida de “write”. Solo puede añadir datos al final del archivo.
  8.   Seek (buscar): especifica el punto donde posicionarse. Cambia la posición del apuntador a la posición activa en cierto lugar del archivo.
  9.  Get attributes (obtener atributos): permite a los procesos obtener los atributos del archivo.
  10.   Set attributes (establecer atributos): algunos atributos pueden ser determinados por el usuario y modificados luego de la creación del archivo. La información relativa al modo de protección y la mayoría de las banderas son un ejemplo obvio.


    Rename (cambiar de nombre): permite modificar el nombre de un archivo ya existente.

Directorios: Generalmente son utilizados por los S. O. para llevar un registro de los archivos. El directorio contiene un conjunto de datos por cada archivo referenciado. Una posibilidad es que el directorio contenga por cada archivo referenciado: El nombre, Sus atributos, Las direcciones en disco donde se almacenan los datos.
Operaciones con Directorios
  1.  Create (crear): se crea un directorio vacío.
  2.  Delete (eliminar): se elimina un directorio, que debe estar vacío.
  3.   Opendir (abrir directorio): se pueden leer los directorios: Antes de poder leer un directorio, éste debe ser abierto.
  4.    Closedir (cerrar directorio): cuando se ha leído un directorio, éste debe ser cerrado para liberar el espacio correspondiente de la tabla interna.
  5.  Readdir (leer directorio): regresa la siguiente entrada en un directorio abierto, sin importar el tipo de estructura de directorios que se utilice.
  6.  Rename (cambiar de nombre): cambia el nombre de un directorio de manera similar al cambio para archivos.
Implantación de Archivos
El aspecto clave de la implantación del almacenamiento de archivos es el registro de los bloques asociados a cada archivo. La principal función del sistema de directorios es asociar el nombre del archivo con la información necesaria para localizar los datos. Un aspecto íntimamente ligado con esto es la posición de almacenamiento de los atributos: Una posibilidad es almacenarlos en forma directa dentro del dato del directorio, otra posibilidad es almacenar los atributos en el nodo-i en vez de utilizar la entrada del directorio.

Confiabilidad del Sistema de Archivos
Es necesario proteger la información alojada en el sistema de archivos, efectuando los resguardos correspondientes.
De esta manera se evitan las consecuencias generalmente catastróficas de la pérdida de los sistemas de archivos. Las pérdidas se pueden deber a problemas de hardware, software, hechos externos, etc. Es muy importante respaldar los archivos con frecuencia. Los respaldos pueden consistir en efectuar copias completas del contenido de los discos (flexibles o rígidos).
Descriptor de Archivos : El descriptor de archivos o bloque de control de archivos es un bloque de control que contiene información que el sistema necesita para administrar un archivo. Los descriptores de archivos suelen mantenerse en el almacenamiento secundario; se pasan al almacenamiento primario al abrir el archivo. El descriptor de archivos es controlado por el sistema de archivos; el usuario puede no hacer referencia directa a él.
Seguridad: Se entenderá por seguridad a los problemas generales relativos a la garantía de que los archivos no sean leídos o modificados por personal no autorizado; esto incluye aspectos técnicos, de administración, legales y políticos. Se consideraran mecanismos de protección a los mecanismos específicos del sistema operativo utilizados para resguardar la información de la computadora.
Virus: Los virus computacionales: Constituyen una categoría especial de ataque, son un enorme problema para muchos usuarios. Son fragmentos de programas que se añaden a programas legítimos con la intención de infectar a otros.
Contraseñas: Son la forma de autentificación más utilizada. Son de fácil comprensión e implementación. Deben almacenarse cifradas (encriptadas). Se deben prever intentos de penetración consistentes en pruebas de combinaciones de nombres y contraseñas.

martes, 6 de marzo de 2012

Buses


Buses

Un sistema Pentium grande tiene en la actualidad ocho buses (caché, local, memoria, PCI, SCSI, USB, IDE e ISA), cada uno con una velocidad de transferencia y función diferente. Los dos principales buses son el bus ISA (Industry Standard Architecture; Arquitectura Estándar de la Industria) original del PC de IBM y su sucesor, el bus PCI (Peripheral Component Interface; Interfaz de Componentes Periféricos). 
El bus ISA, que fue originalmente el bus del PC/AT de IBM, opera a 8,33 MHz y puede transferir dos bytes a la vez, para dar una velocidad máxima de 16,67 MB/s. Puede operar a 66 MHz y transferir 8 bytes a la vez, para dar una tasa de datos de 528 MB/s. La mayoría de los dispositivos de E/S de alta velocidad utilizan ahora el bus PCI. Incluso algunos ordenadores que no son de Intel utilizan el bus PCI, debido al gran número de tarjetas de E/S disponibles para ese bus.
En esta configuración, la CPU se comunica por el bus local con el chip puente (bridge) PCI, y el chip puente PCI se comunica con la memoria a través de un bus de memoria dedicado, que a menudo opera a 100 MHz. Los sistemas Pentium tienen una caché de nivel 1 en el chip, y una caché de nivel 2 mucho más grande fuera del chip, conectada a la CPU por el bus de caché.
Además, este sistema contiene tres buses especializados: IDE, USB y SCSI. El bus IDE permite conectar dispositivos periféricos tales como discos y unidades de CD-ROM al sistema. El bus IDE es una expansión de la interfaz controladora de disco en el PC/AT y es ahora estándar en casi todos los sistemas basados en el Pentium para el disco duro y a menudo para el
CD-ROM.
El USB (Universal Serial Bus; Bus Serie Universal) se inventó para conectar al ordenador todos los dispositivos de E/S lentos, tales como el teclado y el ratón. Este bus utiliza un conector pequeño con cuatro contactos, dos de los cuales suministran energía eléctrica a los dispositivos USB. El USB es un bus centralizado en el que un dispositivo raíz consulta a los dispositivos de E/S cada milisegundo para ver si tienen algún tráfico. El bus puede manejar una carga agregada de 1,5 MB/s. Todos los dispositivos USB comparten un único driver de dispositivo USB, lo que hace innecesario instalar un nuevo driver para cada dispositivo USB nuevo.
El bus SCSI (Small Computer System Interface; pequeña interfaz para sistemas de ordenador) es un bus de alto rendimiento diseñado para discos rápidos, escáneres y otros dispositivos que necesitan un considerable ancho de banda. Puede operar hasta a 160 MB/s.
Otro bus más es el IEEE 1394, también conocido como FireWire, aunque estrictamente hablando FireWire es el nombre que Apple utiliza para su implementación del 1394. Al igual que el USB, el bus IEEE 1394 transmite bits en serie pero está diseñado para transferir paquetes a velocidades de hasta 50 MB/s, lo que lo hace muy útil para conectar al ordenador cámaras de vídeo digitales y dispositivos multimedia similares. A diferencia del USB, el IEEE 1394 no tiene un controlador central. SCSI e IEEE 1394 actualmente se enfrentan a la competencia de una versión más rápida del USB que está siendo desarrollada (USB 2.0).
El plug and play hace posible que el sistema pueda recoger automáticamente información sobre los dispositivos de E/S, asignando de forma centralizada los niveles de interrupción y las direcciones de E/S, para luego comunicar a cada tarjeta los valores concretos que le corresponden. Muy brevemente, esto funciona como sigue en el Pentium. Todo Pentium tiene una placa madre (motherboard) con un programa llamado el sistema BIOS (Basic Input Output System; Sistema Básico de Entrada/Salida). El BIOS contiene software de E/S de bajo nivel, incluyendo procedimientos para leer del teclado, escribir en la pantalla y realizar E/S de disco, entre otras cosas. Hoy en día, el BIOS reside en RAM de tipo flash, que no es volátil pero que puede ser actualizada por el sistema operativo cuando se detecten errores en el BIOS.
Cuando arranca el ordenador, comienza a ejecutarse el BIOS. Lo primero que hace es determinar cuanta RAM está instalada, y comprobar si el teclado y otros dispositivos básicos están instalados y responden correctamente. A continuación comienza a explorar los buses ISA y PCI para detectar todos los dispositivos conectados a ellos. Algunos de esos dispositivos suelen ser heredados (legacy, es decir, diseñados antes de inventarse el plug and play) y tienen niveles de interrupción y direcciones de E/S fijos (posiblemente establecidos por interruptores o puentes en la tarjeta de E/S, pero no por el sistema operativo). Estos dispositivos se registran, así como los de tipo plug and play. Si los dispositivos presentes no son los mismos que había la última vez que se arrancó el sistema, se configuran los nuevos dispositivos encontrados.
Luego el BIOS determina el dispositivo de arranque probando con una lista de dispositivos almacenados en la memoria CMOS. El usuario puede alterar esa lista entrando en el programa de configuración (setup) del BIOS inmediatamente después del arranque.
Normalmente, se intenta arrancar desde un disquete metido en la disquetera. Si eso falla, se prueba con el CD-ROM. Si no hay un disquete ni un CD-ROM, el sistema se arranca desde el disco duro. Se lee el primer sector del dispositivo de arranque, se almacena en la memoria y se ejecuta. Este sector contiene un programa que normalmente examina la tabla de particiones al final del sector de arranque para determinar cuál es la partición que está activa. Luego se lee un programa cargador de arranque secundario de esa partición. El cargador lee el sistema operativo de la partición activa y lo pone en marcha.
 Después, el sistema operativo consulta el BIOS para obtener la información de configuración. Luego comprueba para cada dispositivo si dispone del driver correspondiente. Si falta algún driver, pide al usuario que inserte un disquete o un CD-ROM con el driver del dispositivo (proporcionado por el fabricante del dispositivo). Una vez que el sistema operativo tiene todos los drivers de dispositivo, los carga en el núcleo. A continuación inicializa sus tablas internas, crea todos los procesos de fondo (background) necesarios y arranca un programa de inicio de sesión (login) o GUI en cada terminal. Al menos, esa es la forma en que se supone que funciona. 

Dispositivos de E/S


Dispositivos de E/S

 Los dispositivos de E/S constan generalmente de dos partes: un controlador de dispositivo y el dispositivo en sí. El controlador del dispositivo es un chip o un conjunto de chips montados en una tarjeta insertable (denominada tarjeta controladora) que controla físicamente el dispositivo. Dicho controlador acepta comandos del sistema operativo, como por ejemplo leer datos del dispositivo, y los ejecuta.
El otro componente es el dispositivo en sí. Los dispositivos tienen interfaces relativamente simples, debido a que no hacen cosas complicadas y para poder estandarizarse. Lo último es necesario para que cualquier controladora de disco IDE pueda controlar cualquier disco IDE, por ejemplo. IDE son las siglas en inglés de Integrated Drive Electronics (electrónica integrada en la unidad) y es el tipo de disco estándar en el Pentium y en algunos otros ordenadores. Puesto que la interfaz real con el dispositivo está oculta tras el controlador, lo único que ve el sistema operativo es la interfaz con el controlador, que podría ser muy diferente de la interfaz con el dispositivo.
Puesto que cada tipo de controlador es distinto, se necesita diferente software para controlar cada uno. El software que se comunica con un controlador, enviándole comandos y aceptando sus respuestas, se denomina controlador (software) del dispositivo o driver del dispositivo. Para evitar confusiones entre el controlador (software) y el controlador (hardware) del dispositivo, nos referiremos en lo sucesivo al controlador (software) del dispositivo como el driver del dispositivo. En otros libros se evita esa ambigüedad simplemente refiriéndose (en femenino) al controlador (hardware) como la (tarjeta) controladora del dispositivo. Los fabricantes de controladores de dispositivos tienen que proporcionar los drivers del dispositivo para cada sistema operativo que lo soporte. De esta manera un escáner podría venir con drivers para Windows 98, Windows 2000 y UNIX, por ejemplo.
Antes de poder utilizar el dispositivo, es necesario incluir su driver en el sistema operativo para que pueda ejecutarse en modo núcleo. Teóricamente los drivers también podrían ejecutarse fuera del núcleo, pero pocos sistemas operativos actuales soportan esta posibilidad debido a que requiere la capacidad para permitir que un driver en el espacio de usuario pueda tener acceso al dispositivo de forma controlada, característica raramente soportada. Hay tres maneras de situar el driver dentro del núcleo. La primera consiste en volver a enlazar el núcleo con el nuevo driver y luego reiniciar el sistema. Muchos sistemas UNIX funcionan así. La segunda manera consiste en incluir una entrada en un fichero del sistema operativo para indicarle a éste que necesita el driver del dispositivo, y luego reiniciar el sistema. En el momento del arranque, el sistema operativo procede a buscar los drivers que necesita y los carga. Windows funciona así. La tercera manera es que el sistema operativo pueda aceptar nuevos drivers mientras se está ejecutando y los instale sobre la marcha sin tener que reiniciar el ordenador. Esta manera de integrar el driver se desarrolló para situaciones raras pero actualmente se ha convertido en algo habitual.
Todo controlador cuenta con un pequeño número de registros que sirven para comunicarse con él. Por ejemplo, un controlador de disco en su versión más sencilla podría tener registros para especificar la dirección en disco, la dirección en memoria, el número de sectores y el sentido de la transferencia (lectura o escritura). Para activar el controlador, el driver recibe un comando del sistema operativo y lo traduce a los valores apropiados que debe escribir en los registros del dispositivo.
En algunos ordenadores, los registros del dispositivo están mapeados en el espacio de direcciones del sistema operativo, de modo que pueden leerse y escribirse como si fueran palabras de memoria ordinarias. En tales ordenadores no se necesitan instrucciones de E/S especiales y es posible proteger el hardware del acceso indiscriminado por parte de los programas de usuario simplemente colocando fuera de su alcance esas direcciones de memoria (por ejemplo, utilizando registros de base y de límite). En otros ordenadores, los registros de dispositivo se colocan en un espacio de puertos de E/S especial, con cada registro teniendo una dirección de puerto. En estas máquinas se dispone en modo núcleo de instrucciones especiales IN y OUT que permiten a los drivers leer y escribir en los registros. El primer esquema elimina la necesidad de instrucciones de E/S especiales pero mantiene permanentemente ocupada alguna parte del espacio de direcciones. El segundo esquema no ocupa el espacio de direcciones para nada pero requiere instrucciones especiales en el repertorio de instrucciones del lenguaje máquina. 
Las operaciones de entrada y salida pueden realizarse de maneras distintas. En el método más sencillo, un programa de usuario realiza una llamada al sistema, que el núcleo traduce en una llamada a un procedimiento del driver apropiado. El driver pone en marcha 28 entonces la E/S y entra en un bucle de espera que consulta continuamente el dispositivo para ver si ya terminó (es usual que haya un bit que indique si el dispositivo sigue ocupado o no). Una vez terminada la E/S, el driver coloca los datos (si los hay) donde se necesitan y retorna. El sistema operativo devuelve entonces el control al programa que lo invocó a través de la llamada al sistema. Este método se denomina espera activa (busy waiting o polling) y tiene la desventaja de mantener ocupada a la CPU consultado el estado del dispositivo hasta que termina la E/S.
El segundo método consiste en que el driver pone en marcha el dispositivo y lo programa para que genere una interrupción cuando haya terminado. En ese momento el driver retorna devolviendo el control al sistema operativo. Entonces el sistema operativo si es necesario bloquea al programa que hizo la llamada al sistema y busca otras cosas útiles que hacer. Cuando el controlador (hardware) del dispositivo detecta el final de la transferencia, genera una interrupción para avisar de su terminación. Las interrupciones son muy importantes en los sistemas operativos, por lo que vamos a examinar la idea con más detenimiento.

Memoria


Memoria

El segundo componente importante de cualquier ordenador es la memoria. El sistema de memoria se construye mediante una jerarquía de capas:la capa superior consiste en los registros internos de la CPU. Éstos se componen del mismo material que la CPU por lo que son tan rápidos como ella. Consecuentemente no se produce ningún retraso al acceder a ellos. La capacidad de almacenamiento de estos registros suele ser de 32 × 32 bits en una CPU de 32 bits, y de 64 × 64 bits en una CPU de 64 bits. En ambos casos, menos de 1 KB. Los programas deben administrar los registros (es decir, decidir qué se coloca en ellos) por su cuenta, mediante el software.
Luego viene la memoria caché, que en su mayor parte está bajo el control del hardware. La memoria principal se divide en líneas de caché, normalmente de 64 bytes, con las direcciones de 0 a 63 en la línea de caché 0, las direcciones 64 a 127 en la línea 1, etc. Las líneas de la caché de uso más frecuente se mantienen en una caché de alta velocidad situada dentro de la CPU o muy cerca de ella. Cuando el programa necesita leer una palabra de memoria, el hardware de la caché determina si la línea necesaria está o no en la caché. Si está, lo que constituye un acierto de caché, se atiende la petición desde la caché y no se envía ninguna petición por el bus a la memoria principal. Normalmente los aciertos de caché tardan en completarse alrededor de dos ciclos de reloj. Los fallos de caché implican acceder a la memoria, con una considerable pérdida de tiempo.
A continuación viene la memoria principal. La memoria principal se conoce también como la RAM (Random Access Memory; memoria de acceso aleatorio). Actualmente las memorias tienen decenas o cientos de megabytes y siguen creciendo con rapidez. Todas las peticiones de la CPU que no pueden atenderse desde la caché se dirigen a la memoria principal.
En el siguiente escalón de la jerarquía está el disco magnético (disco duro). El almacenamiento en disco es dos órdenes de magnitud más barato por bit que la RAM y también suele ser dos órdenes de magnitud más grande. El único problema es que el tiempo necesario para acceder aleatoriamente a los datos que contiene es casi tres órdenes de magnitud más grande. Esta velocidad tan baja se debe al hecho de que un disco es un dispositivo mecánico,
Un disco consta de uno o más platos de metal que giran continuamente a 5.400, 7.200 o 10.000 rpm. Un brazo mecánico pivota sobre los platos desde una esquina, como lo haría el brazo de un tocadiscos de 33 rpm para reproducir discos musicales de vinilo. La información se graba en el disco en una serie de circunferencias concéntricas. En cualquier posición del brazo, cada una de sus cabezas puede leer una región anular llamada pista (track). Juntas, todas las pistas que quedan bajo una posición dada del brazo constituyen lo que se denomina un cilindro. Cada pista se divide en cierto número de sectores, que por lo general tienen 512 bytesmcada uno. En los discos modernos, los sectores exteriores contienen más sectores que los interiores. Desplazar el brazo de un cilindro al siguiente tarda aproximadamente
1 ms; desplazarlo a un cilindro al azar suele tardar entre 5 y 10 ms, dependiendo de la unidad. Una vez que el brazo está en la pista correcta, la unidad deberá esperar hasta que la rotación del disco deje el sector requerido bajo la cabeza, lo que implica un retraso adicional de 5 a 10 ms, dependiendo de la velocidad de rotación de la unidad. Una vez que el sector está bajo la cabeza, la lectura o escritura se efectúa a razón de 5 MB/s en los discos más económicos, y hasta 160 MB/s en los más rápidos.
La última capa de la jerarquía de memoria corresponde a la cinta magnética. Éste medio suele utilizarse como un backup (respaldo o copia de seguridad) de la memoria de disco y para guardar conjuntos de datos muy grandes. Para tener acceso a una cinta, primero hay que colocarla en un lector de cintas, acción que puede realizar una persona o un robot (el manejo automatizado de las cintas es común en instalaciones que tienen bases de datos enormes). Luego podría ser necesario hacer avanzar la cinta hasta llegar al bloque solicitado. En total, esto podría tardar minutos. La gran ventaja de la cinta es que es extremadamente barata y removible, lo cual es importante en el caso de cintas de backup que deben guardarse en otro lugar para que sobrevivan a incendios, inundaciones, terremotos, etc.
Además de los tipos de memoria mencionados, muchos ordenadores tienen una pequeña cantidad de memoria de acceso aleatorio no volátil. A diferencia de la RAM, la memoria novolátil no pierde su contenido cuando se corta el suministro de electricidad. La ROM (Read Only Memory; memoria de sólo lectura) se programa en la fábrica y no puede modificarse posteriormente. La ROM es rápida y económica. En algunos ordenadores el programa de
arranque del ordenador está almacenado en ROM. Además, algunas tarjetas de E/S llevan incorporada su propia ROM con rutinas que se encargan del control del dispositivo a bajo nivel.
La EEPROM (Electrically Erasable Programable ROM; ROM borrable y programable eléctricamente) y la flash RAM tampoco son volátiles, pero en contraste con la ROM, su contenido puede borrarse y volver a escribirse. Sin embargo, su escritura tarda varios órdenes de magnitud más que la escritura en RAM, por lo que se usan de la misma manera que la ROM,  con la única diferencia de que en su caso es posible corregir errores en los programas que contienen, y reescribirlos en el mismo lugar donde se encuentran.
Un tipo más de memoria es la CMOS, que es volátil. Muchos ordenadores emplean memoria CMOS para guardar la fecha y hora actuales. La memoria CMOS y el circuito de reloj que incrementa sus contenidos se alimentan con una pequeña batería para que la hora se siga actualizando de forma correcta aunque el ordenador esté apagado. La memoria CMOS también puede guardar los parámetros de configuración, entre los que está la unidad de disco desde la que se debe arrancar. Se utiliza CMOS porque consume tan poca electricidad que la batería original instalada en la fábrica puede durar varios años. 

REVISIÓN DE ASPECTOS HARDWARE


REVISIÓN DE ASPECTOS HARDWARE

Un sistema operativo está íntimamente relacionado con el hardware del ordenador sobre el que se ejecuta pues extiende el conjunto de instrucciones del ordenador y administra sus recursos. Para poder realizar su trabajo debe conocer muy bien el hardware, o al menos la apariencia que el hardware presenta al programador. La CPU, la memoria y los dispositivos de E/S están todos conectados por el bus del sistema y se comunican entre sí a través de él. Los ordenadores personales modernos tienen una estructura más complicada en la que intervienen varios buses.
Procesadores
El “cerebro” del ordenador es la CPU, la cual toma instrucciones de la memoria y las ejecuta. El ciclo básico de toda CPU consiste en tomar la primera instrucción de la memoria, decodificarla para determinar su tipo y operandos, ejecutarla, y luego tomar, decodificar y ejecutar las instrucciones subsiguientes. Es así como se ejecutan los programas. Cada CPU ejecuta un repertorio de instrucciones específico. Por lo tanto, un Pentium no puede ejecutar programas para un SPARC, y un SPARC no puede ejecutar programas para un Pentium. Puesto que acceder a la memoria para extraer una instrucción o una palabra de datos tarda mucho más que la ejecución de una instrucción, todas las CPUs contienen algunos registros internos para guardar variables importantes y resultados temporales. El repertorio de instrucciones incluye por lo general instrucciones para cargar una palabra de la memoria en un registro, y para almacenar en la memoria una palabra que está en un registro. Otras instrucciones combinan dos operandos tomados de los registros, de la memoria o de ambos, para producir un resultado.
Otro registro es el puntero de pila, que apunta a la parte superior (cima) de la pila actual en la memoria. La pila contiene una trama (o registro de activación) por cada procedimiento al que se ha llamado pero del cual no se ha retornado todavía. La trama de pila de un procedimiento contiene los parámetros de entrada, las variables locales y variables temporales que no se guardan en registros.
Otro registro más es la PSW (Program Status Word; palabra de estado del programa) (también se le llama el registro de estado del procesador). Este registro contiene los bits de código de condición (también denominados indicadores o flags), que se activan cuando se ejecutan instrucciones de comparación, junto con la prioridad de ejecución de la CPU, el modo (usuario o supervisor (núcleo)) y otros bits de control. Los programas de usuario por lo general pueden leer la PSW entera, pero sólo pueden escribir en algunos de sus campos. La PSW desempeña un papel muy importante en las llamadas al sistema y la E/S.
Muchas CPUs modernas cuentan con los recursos necesarios para ejecutar más de una instrucción al mismo tiempo. Por ejemplo, una CPU podría tener unidades individuales para extraer, decodificar y ejecutar, de manera que mientras esté ejecutando la instrucción n, también puede estar decodificando la instrucción n+1 y extrayendo la instrucción n+2. Tal organización se denomina pipeline (o segmentación encauzada).En casi todos los diseños de pipelines, una vez que una instrucción entra en el pipeline, debe ejecutarse necesariamente, aunque la instrucción anterior haya sido un salto condicional que haya dado lugar a una ruptura de secuencia. Los pipelines provocan grandes dolores de cabeza a quienes escriben compiladores y sistemas operativos, porque les obligan a tener en cuenta aspectos muy complejos de la máquina en cuestión.
Un diseño todavía más avanzado que el pipeline es una CPU superescalar. Cuenta con varias unidades de ejecución, por ejemplo, una para aritmética de enteros, una para aritmética de punto flotante y una para operaciones booleanas. Se extraen dos o más instrucciones a la vez, se decodifican y se dejan en un búfer de retención hasta que puedan ejecutarse. Cuando queda libre una unidad de ejecución, se busca en el búfer de retención una instrucción que pueda ejecutarse en ella y, si la hay, se la saca del búfer y se ejecuta. Una implicación de este diseño es que las instrucciones del programa a menudo se ejecutan desordenadas.
La mayoría de las CPUs, salvo las más simples que se utilizan en los sistemas empotrados, tienen dos modos de operación: modo núcleo y modo usuario, como se mencionó antes. Por lo regular, un bit de la PSW controla el modo. Cuando la CPU opera en modo núcleo puede ejecutar cualquiera de las instrucciones que componen su repertorio de instrucciones y realizar todas las funciones del hardware. El sistema operativo se ejecuta en modo núcleo, y eso le permite acceder a todo el hardware.
En contraste, los programas de usuario se ejecutan en modo usuario, que sólo permite ejecutar un subconjunto del repertorio de instrucciones y tener acceso a un subconjunto de las funciones del hardware. En general, todas las instrucciones que implican E/S y protección de memoria están deshabilitadas en modo usuario. Desde luego, también está prohibido cambiar el bit de modo de la PSW para pasar de modo usuario a modo núcleo.

TIPOS DE SISTEMAS OPERATIVOS


TIPOS DE SISTEMAS OPERATIVOS 

Sistemas Operativos de Mainframe
Tales máquinas se distinguen de los ordenadores personales por su capacidad de E/S. Los mainframes están renaciendo ahora pero como servidores web avanzados, servidores para sitios de comercio electrónico a gran escala y servidores para transacciones de negocio a negocio. Los servicios que ofrecen suelen ser de tres tipos: procesamiento por lotes, procesamiento de transacciones y tiempo compartido. Estas funciones están íntimamente relacionadas; muchos sistemas operativos de mainframe las realizan todas. Un ejemplo de sistema operativo de mainframe es el OS/390, un descendiente del OS/360.
Sistemas Operativos de Servidor
Éstos se ejecutan en servidores, que son los ordenadores personales muy grandes, o estaciones de trabajo o incluso mainframes. Dan servicio a múltiples usuarios a través de una red, permitiéndoles compartir recursos de hardware y software. Los servidores pueden prestar servicios de impresión, servicios de ficheros o servicios web. Entre los sistemas operativos de servidor típicos están UNIX y Windows 2000. Linux también está ganando terreno en los servidores.

Sistemas Operativos Multiprocesador
Dependiendo de la forma exacta de la conexión y de qué recursos se compartan,estos sistemas se llaman ordenadores paralelos, multicomputadores o multiprocesadores. Necesitan sistemas operativos especiales, pero con frecuencia éstos son variaciones de los sistemas operativos de servidor, con características especiales para la comunicación y su conectividad.

Sistemas Operativos de Ordenador Personal
Su cometido consiste en presentar una buena interfaz a un único usuario. Se les utiliza ampliamente para procesamiento de texto, hojas de cálculo y acceso a Internet. Ejemplos comunes son Windows 98, Windows 2000, el sistema operativo Macintosh y Linux.

Sistemas Operativos de Tiempo Real
Estos sistemas se caracterizan por tener al tiempo como su principal parámetro. Por ejemplo, en los sistemas de control de procesos industriales, los ordenadores de tiempo real tienen que recoger datos acerca del proceso de producción y utilizarlos para controlar las máquinas de la fábrica. Con frecuencia existen ciertos plazos que deben cumplirse estrictamente. Si es absolutamente indispensable que la acción se efectúe en cierto momento (o dentro de cierto intervalo), tenemos un sistema de tiempo real riguroso (hard real-time system).
Otro tipo de sistema de tiempo real es el sistema de tiempo real moderado (soft realtime system), en el cual es aceptable dejar de cumplir ocasionalmente algún plazo. Los sistemas de audio digital o multimedia pertenecen a esta categoría. VxWorks y QNX son sistemas operativos de tiempo real muy conocidos.

Sistemas Operativos Empotrados
Un ordenador de bolsillo o PDA (Personal Digital Assistant; Asistente Personal Digital) es un pequeño ordenador que cabe en el bolsillo de la camisa y realiza unas cuantas funciones tales como agenda de direcciones 18 electrónica y bloc de notas. Los sistemas empotrados operan en los ordenadores que controlan dispositivos que por lo general no se consideran ordenadores, como televisores, hornos microondas y teléfonos móviles. Algunos ejemplos de tales sistemas operativos son PalmOS y Windows CE (Consumer Electronics; Electrónica de Consumo).

Sistemas Operativos de Tarjeta Inteligente
Los sistemas operativos más pequeños se ejecutan en tarjetas inteligentes, que son dispositivos del tamaño de una tarjeta de crédito que contienen un chip de CPU. Sus limitaciones son muy severas en cuanto a potencia de procesamiento y memoria. Algunos de ellos sólo pueden desempeñar una función, como el pago electrónico, pero otros pueden realizar varias funciones en la misma tarjeta inteligente. Algunas tarjetas inteligentes están orientadas a Java. Eso quiere decir que la ROM de la tarjeta inteligente contiene un intérprete de la Máquina Virtual de Java (JVM). Los applets (pequeños programas) de Java se descargan a la tarjeta y son interpretados por el intérprete JVM.