domingo, 22 de mayo de 2011

Conceptos básicos de los sistemas operativos (Parte II)

Archivos

La información es almacenada por el ordenador en dispositivos, como por ejemplo los discos. Para que el usuario pueda ignorar la estructura física del disco, el sistema operativo debe presentar la información almacenada de una forma organizada, que permita acceder a ella de una manera lógica y sencilla.

En este contexto, se entenderá por archivo un conjunto de información relacionada (definida por el usuario o no). En él pueden estar contenidos datos o programas. Un sistema operativo debe gestionar los archivos de una forma eficiente; para ello son necesarias operaciones tales como la creación, modificación y borrado de archivos. El sistema operativo debe proporcionar estas operaciones, permitiendo al usuario referirse a los archivos mediante nombres simbólicos.

Al manipular los archivos, el computador puede acceder a ellos de dos modos, dependiendo del medio de almacenamiento en que reside el archivo, el acceso secuencial y el acceso directo.

  • Con acceso secuencial se recorren los elementos de un archivo uno tras otro, consecutivamente. Este método de acceso viene impuesto por ciertos medios de almacenamiento, tales como las cintas magnéticas, aunque también puede darse en otros dispositivos, como los discos magnéticos, cuando los archivos tienen esta organización. 
  • Con acceso directo, los diferentes elementos pueden localizarse directamente por su posición, sin necesidad de recorrer los anteriores para llegar hasta ellos. Éste es el modo de acceso típico de los discos magnéticos.

Cuando el número de archivos crece, resulta incómoda su localización y manipulación. Para facilitarla, el sistema operativo presenta al usuario la posibilidad de agruparlos en compartimentos, llamados directorios. El sistema operativo deberá manejar la organización de directorios, ocultando al usuario los detalles particulares de la localización física de los archivos y directorios, facilitándole en cambio operaciones para gestionar cómodamente el sistema de directorios.

La técnica más comúnmente utilizada es usar una estructura en árbol, en la que existe un directorio raíz que puede contener archivos y/o (sub)directorios; a su vez cada directorio puede contener más archivos y/o más (sub)directorios.

Una imagen visual bastante útil de un sistema de archivos con estructura de árbol se consigue al considerar un directorio como una carpeta que contiene un cierto número de documentos (los archivos). En principio nada nos impide que coloquemos una carpeta dentro de otra (salvo quizá la limitación de espacio).

Una operación fundamental en la gestión de un sistema de archivos es la búsqueda eficiente de un archivo determinado. Si el número de archivos es pequeño lo más simple y lo mejor es buscar secuencialmente archivo tras archivo, pero si el sistema contiene muchos archivos esta táctica llevará mucho tiempo y, como esto es lo habitual, se han ideado estrategias para hacer el acceso más eficiente.

Un sistema de archivos con estructura de árbol

La idea de directorio de trabajo permite agilizar la búsqueda de archivos en el sistema; para ello es fundamental la noción de camino (en inglés path) desde la raíz del árbol hasta una rama determinada; por ejemplo, en el árbol de directorios los juegos adictivos tienen el path \juegos\adictivos. Si el directorio de trabajo fuera \juegos entonces adictivos\tetris (camino relativo al directorio de trabajo) tiene el mismo significado que \juegos\adictivos\tetris (camino absoluto). Para la optimización de la búsqueda de archivos se suele buscar sólo en el directorio de trabajo y en algunos otros paths especificados por el usuario.

Otra prestación ofrecida por la mayoría de los grandes sistemas operativos es la protección de la información. Debido a la facilidad con que puede borrarse la información almacenada, los sistemas operativos ofrecen dos mecanismos principalmente para asegurar archivos y directorios contra los descuidos, propios o ajenos:

  • un sistema de copias de seguridad (backup), que se pone en marcha automáticamente ante cada modificación efectuada sobre cada archivo.
  • un sistema de atributos, que permite marcar los archivos que necesitan copia de seguridad, como imborrables, como no susceptibles de modificación, etc.

Otro aspecto de la protección, igualmente importante en sistemas multiusuario, consiste en permitir el acceso y garantizar que el trabajo de cada usuario es privado, ocultándolo a los demás. Este efecto se consigue por lo general mediante un sistema de marcas, que identifia al propietario de los distintos archivos y directorios, y de contraseñas, que permite reconocer el usuario concreto que se encuentra ante cada terminal.

Conceptos básicos de los sistemas operativos (Parte I)

Procesos

Es importante el concepto de proceso para entender cómo funcionan los sistemas operativos. Un proceso consiste, esencialmente, en una rutina de acciones del sistema que puede ser ejecutada independientemente de otro proceso e, incluso, en paralelo. Un programa de usuario en ejecución puede considerarse un proceso, aunque un proceso puede involucrar la ejecución de más de un programa y, recíprocamente, un programa o rutina de instrucciones puede estar involucrado en más de un proceso. Por esta razón es más útil el concepto de proceso que el de programa al referirnos al sistema operativo.

Todo proceso creado puede ser tratado como un seudorrecurso pues, al contrario que los recursos reales, los procesos son entidades efímeras que desaparecen una vez completada su misión. Podría argüirse que los procesos son consumidores de recursos en lugar de ser recursos por sí mismos; sin embargo, una vez que han entrado en el estado transitorio de ser procesos, pueden ser "manejados" por otros procesos.

La gestión de procesos es una tarea fundamental de los sistemas operativos; concretamente, la mayoría de los sistemas operativos deben soportar la ejecución concurrente de procesos y resolver los problemas que ésta plantea, ofreciendo medios para la sincronización de los procesos, controlando su exclusión mutua respecto de ciertos recursos, y evitando, en la medida de lo posible, las situaciones de bloqueo. Estos conceptos se explican a continuación.

Dos o más procesos se dicen concurrentes cuando se están ejecutando simultáneamente. Cuando existen más procesadores que procesos, cada proceso se ejecutará sin conflicto en un procesador (paralelismo); si, por el contrario, existen más procesos que procesadores puede obtenerse una "simultaneidad aparente" (concurrencia) haciendo que los procesadores alternen cortos períodos de tiempo de dedicación a los distintos procesos.

Si dos procesos concurrentes utilizan recursos distintos podrán convivir sin interferencias pero si, por el contrario, los procesos necesitan los mismos recursos puede surgir con°icto. Supóngase que ambos recursos pretenden acceder a una impresora: es absolutamente inviable conmutar la dedicación de la impresora entre ambos procesos ya que, en ese caso, el resultado sería caótico. Este es un caso típico de necesidad de exclusión mutua de dos procesos respecto a un recurso.

Dos procesos concurrentes pueden necesitar cooperar al realizar sus tareas; por ejemplo, un proceso que genera líneas de texto que envía a un bffer y otro que las consume, tomándolas del buffer de datos y enviándolas a la impresora. Cuando así ocurre, es necesario que exista una sincronización de ambos procesos. 

Por último, puede darse la circunstancia de que dos (o más) procesos en ejecución concurrente se bloqueen mutuamente, en el sentido de que cada uno de ellos necesita un recurso que el otro posee. Llegados a este punto la ejecución se detiene, ya que cada proceso espera que el otro libere la información (o el recurso) que necesita. Esta situación se llama bloqueo (en inglés deadlock).

Formas de trabajo de los sistemas operativos

Los sistemas operativos han evolucionado para cubrir las distintas necesidades de proceso sobre máquinas de tamaño y potencia muy diversos. Aparecen así diferentes formas de trabajo y sistemas operativos especializados en cada una de ellas. Una de las principales distinciones se da entre los sistemas operativos de propósito general y los dedicados.

Los primeros, que son los más utilizados, se diseñan con una intención de polivalencia, de forma que sobre ellos puedan ejecutarse programas diversos: editores, compiladores y aplicaciones de todo tipo. Dentro de los sistemas operativos de propósito general puede distinguirse entre monousuario y multiusuario, dependiendo de si pueden atender o no a más de un proceso al mismo tiempo. Claramente, los sistemas multiusuario son más complejos pues, además de desempeñar todas las funciones propias de uno monousuario, deben atender a otros aspectos, tales como el reparto del tiempo de trabajo del (los) procesador(es) entre los distintos usuarios, la separación entre los datos de los mismos, etc.

En los sistemas operativos de propósito general, hay dos formas de trabajo básicas: el modo interactivo y el proceso por lotes. En el primero, el usuario tiene acceso a los recursos del sistema a través de su terminal (local o remoto), estableciendo un diálogo con el computador, donde las órdenes y las respuestas tienen lugar de un modo casi inmediato.

En un proceso por lotes, los diferentes trabajos junto con sus datos se suceden entre sí, de forma que su ejecución se realice automáticamente, sin ningún tipo de comunicación entre el usuario y el sistema, hasta la finalización del trabajo.

Dentro de los sistemas operativos dedicados, se suele distinguir entre los de control de procesos, de consulta de bases de datos y transaccionales. En el control de procesos, el computador recibe continuamente datos (realimentación) sobre el sistema bajo control, reaccionando en consecuencia. En la mayoría de estos procesos, la variable tiempo tiene una importancia relevante; por ejemplo, en un horno industrial, un retraso en la reducción de la temperatura puede tener funestas consecuencias.

En estos procesos, se dice que el sistema debe operar en tiempo real. Los sistemas de consulta deben permitir al usuario el acceso a una o varias bases de datos de una forma cómoda, sin tener que conocer los detalles internos de su organización y funcionamiento de su estructura. Se puede citar como ejemplo un sistema de consultas de historias clínicas en un hospital.

Por último, los sistemas transaccionales permiten la realización de operaciones sobre el contenido de bases de datos. Se han extendido enormemente en los últimos años. Por ejemplo, así se llevan a cabo los movimientos de cuentas en el sector bancario, la reserva y venta de billetes en agencias de viajes, etc.

Estos sistemas deben garantizar la opacidad de la información confidencial, actualizar rápidamente la base de datos y evitar ciertas operaciones simultáneas sobre los mismos datos (por ejemplo, dos personas que reservan el mismo asiento).

sábado, 21 de mayo de 2011

Funciones de los sistemas operativos

Si todo programador de aplicaciones tuviera que controlar "a mano" todos los componentes de la estructura interna del computador cuando hace sus programas, muy probablemente, no existirían tantos programas en el mercado. Por poner un ejemplo, emplear la instrucción escribir archivo es mucho ms simple que tener que preocuparse por mover las cabezas lectoras del disco hasta una posicion adecuada, esperar que se estabilicen, dirigir la información desde la memoria e ir escribiendo la información en el disco.

Conviene al programador de aplicaciones (o al mismo usuario) desentenderse de los complejos detalles del hardware. La idea fundamental para conseguirlo consiste en ocultar los escabrosos detalles del hardware puro con software (el sistema operativo) especialmente diseñado para permitir un uso más fácil y racional de todas las partes del sistema.

Del mismo modo, el sistema operativo presenta un interfaz simple entre el programador o usuario y otros aspectos del hardware, como son el manejo de interrupciones, relojes, gestión de memoria y otras características de bajo nivel.

Según este enfoque, el sistema operativo tiene la misión de presentar al usuario una máquina virtual que sea más fácil de programar que el hardware puro y, por lo tanto, aumente la efectividad del computador al evitar la necesidad de trabajar a bajo nivel. Por consiguiente, puede considerarse un sistema operativo como un interfaz adecuado entre el usuario y el hardware.

Un sistema operativo también tiene la función de controlar y administrar de forma ordenada el uso de todos los recursos del computador.

Esta función se hace especialmente necesaria cuando un computador está siendo compartido por varios usuarios simultáneamente; en este caso, la necesidad de distribuir convenientemente el tiempo de trabajo de la UCP, los espacios de memoria y los periféricos es evidente. Desde este punto de vista, la tarea del sistema operativo es llevar el control de quién está utilizando cada recurso y dirimir los posibles con°ictos entre varios procesos o usuarios que intenten acceder a la vez a un mismo recurso.

No existe acuerdo entre los diferentes textos al señalar cuáles son las funciones de un sistema operativo, ya que este concepto ha evolucionado con su desarrollo. En general, un sistema operativo debe poder desempeñar al menos las siguientes funciones:
  • Facilitar la comunicación hombre-máquina.
  • Gestionar los recursos: procesador(es), memoria(s) y periféricos, facilitando su manejo al usuario.
  • Gestionar la información (los archivos) contenida en los periféricos de almacenamiento y la organización de esa información (en directorios).
  • Controlar la ejecución de aplicaciones.

miércoles, 18 de mayo de 2011

Ejecución de una instrucción. Detalle

La ejecución de cada instrucción de máquina conlleva una serie de pasos elementales y transferencias de datos de unos órganos a otros de la UCP.

Estos pasos elementales se denominan microinstrucciones y son ejecutados por el secuenciador a partir del código de la instrucción de máquina.

La ejecución de una instrucción comienza cuando se actualiza el registro contador de programa. La UC envía esta dirección a los circuitos de selección de memoria a través del bus de direcciones y la señal de lectura a través del bus de control. La dirección queda almacenada en el registro de dirección de memoria y al recibir la señal de lectura, se lee la instrucción. La instrucción se envía a través del bus de datos y se recibe en el registro de instrucción de la UC. De esta forma, la UC tiene disponible la instrucción para ser decodificada y ejecutada.

Supongamos que la instrucción para ejecutar sea:
equivalente binario a:
La UC separa el código de operación (0100) de la dirección del operando (001111101000) y, a partir del código, genera las señales de control para enviar la dirección, a través del bus de direcciones, al registro de dirección de la MP, efectuar la operación de lectura y, finalmente, enviar el contenido de la dirección 1000 a un registro operativo de la UAL, a través del bus de datos.

A continuación se envía la señal de control correspondiente a la suma a la UAL, quien suma al contenido del acumulador el valor del registro operativo, quedando el resultado almacenado en el acumulador.

Ejemplo de un juego de instrucciones de máquina de una dirección

Maquina de una dirección simplificado. La notación M[d] representa el contenido de la dirección d de la memoria. La instrucción CARgar d deposita el contenido de la posición de memoria d en el  cumulador.

La instrucción ALMacenar d realiza el proceso contrario: guarda el contenido del acumulador en la dirección de memoria d. Las instrucciones IN d y OUT d se utilizan para E/S. La primera lee un dato de una posición de memoria destinada a un dispositivo externo y lo almacena en la dirección de memoria d; la segunda toma el contenido de la posición de memoria d y lo envía a la dirección de memoria destinada al dispositivo externo.


Las instrucciones SUMar d y REStar d, toman el contenido de la dirección de memoria d y lo suman y restan respectivamente con el contenido del acumulador, almacenando el resultado en dicho registro. El mismo proceso pero aplicando la multiplicación o la división es realizado por MULtiplicar d y DIVidir d

Las instrucciones OPuesto { y NOT { producen el cambio de signo (complemento a dos) o la complementación del contenido del acumulador. La dirección a la que se aplican no se utiliza.

Las instrucciones lógicas AND d y OR d toman el contenido de la dirección de memoria d y del acumulador, efectúan la operación and u or entre ambos operandos y almacenan el resultado en el acumulador. 

La instrucción GOTO d da un salto incondicional y actúa con independencia del valor del acumulador.

La instrucción CONDición d, toma el valor del acumulador, comprueba si es mayor que cero, y en caso afirmativo carga en el registro contador de programa la dirección d. En consecuencia, la siguiente instrucción que ejecutará el procesador será la contenida en la dirección d, produciéndose una ruptura de la secuencia de ejecución. Si no se cumple la condición prosigue la ejecución secuencial.

Por último, la instrucción END señala el final del programa.

Tipos de Instrucciones

Las instrucciones del juego de un procesador pueden ser divididas según su cometido en los siguientes grupos:

  1. De movimiento de datos. Este tipo de instrucciones transfieren datos entre la memoria principal y los registros. Combinando las distintas procedencias con los distintos destinos posibles obtenemos bastantes tipos de instrucciones de movimiento de datos. Puede tratarse de datos aislados, de bloques de datos o de cadenas de caracteres.
  2. Operaciones binarias. Estas instrucciones, aritméticas y lógicas, realizan una operación con dos argumentos como, por ejemplo, las operaciones aritméticas elementales y algunas operaciones lógicasbinarias tales como AND, OR y XOR.
  3. Operaciones monarias. Entre estas instrucciones podemos encontrar las que desplazan o rotan los bits de una palabra. Algunas operaciones binarias ocurren tan a menudo con un mismo argumento que, a veces, son incluidas como instrucciones de una sola dirección. Por ejemplo, tenemos la instrucción de borrar el contenido de una palabra de memoria, que es un caso particular de \mover una palabra formada por ceros a la dirección suministrada".
  4. Instrucciones de salto. Sirven para alterar el orden de ejecución de las instrucciones. Dentro de este grupo encontramos las instrucciones de salto condicional y las de salto incondicional: La ejecución de una instrucción de salto incondicional obliga al computador a "altarse" el orden secuencial para ejecutar la instrucción contenida en la dirección determinada por el argumento de la instrucción de salto, y el orden de ejecución sigue a partir de la instrucción sobre la que se saltó. Una instrucción de salto condicional necesita de instrucciones de comparación ya que es necesario realizar una o varias comparaciones para comprobar la condición. 
  5. Llamada a un subprograma. Un subprograma no es más que un grupo de  instrucciones que realiza operaciones útiles y necesarias en distintos puntos de un programa. Si, al ejecutar un programa, se encuentra una instrucción de llamada a subprograma, se ejecutan todas las instrucciones del subprograma y posteriormente se pasa a la siguiente instrucción del programa.
  6. Entrada y salida de datos. Es el tipo de instrucción que más cambia de un procesador a otro. Sirven para gestionar el intercambio de información entre el computador y el exterior.

Formato de las instrucciones

La elección del formato de las instrucciones de un procesador depende en buena parte de las especificaciones fijadas por el equipo de diseño del procesador y de otras consideraciones que veremos a continuación.

Entre las operaciones que se ejecutan en un procesador, algunas no tienen operandos, otras tienen uno, dos o a lo sumo tres. En muchos de los casos los operandos vienen expresados por sus direcciones de memoria, por lo que se suele hablar de instrucciones de una, dos o tres direcciones.

Pueden existir instrucciones sin operando, bien porque el operando no aparezca explícitamente, siendo uno de los registros del procesador, o porque la propia instrucción no lo necesite, como cuando se repite un proceso o se regresa de una llamada a un subprograma.

En el otro extremo se sitúan las operaciones binarias, que precisan tres direcciones para llevarse a cabo: las de sus dos argumentos y la de dónde ha de colocarse el resultado obtenido. 

Lo ideal en un juego de instrucciones es que todas tengan el mismo formato. Adoptar, por ejemplo, un juego de instrucciones de tres direcciones es sencillo: basta con ignorar los argumentos a~nadidos para igualar el formato.

También es posible elegir un juego de instrucciones con menos de tres operandos. Las operaciones de tres argumentos se traducen entonces como sigue (considerando una operación aritmética cualquiera): Si el juego de instrucciones es de dos direcciones, éstas representan a ambos argumentos, y el resultado de la ejecución se almacena en laprimera o segunda dirección suministrada.

En las instrucciones de una dirección sólo se especi¯ca la de uno de los argumentos. En el caso de que se trate de una instrucción binaria, se hace necesario usar el registro acumulador que se encuentra en la UAL.

Entonces, se toma como primer argumento el contenido del acumulador, como segundo argumento el contenido de la dirección de memoria dado por la instrucción, y el resultado de la instrucción se almacena en el registro acumulador.

Instrucciones en lenguaje de máquina

La información se representa dentro de un computador mediante ceros y unos. Cada procesador es capaz de distinguir si recibe una instrucción o un dato de una forma que depende de su marca y su modelo. El juego de instrucciones de un procesador recibe el nombre de lenguaje de máquina o código máquina. Una CPU sólo puede entender instrucciones expresadas en su lenguaje de máquina, y cada instrucción especifica una acción particular sobre algunos operandos. 

Una instrucción es una lista de ceros y unos: una parte de la lista es el código de la operación que ha de realizarse, el resto determina dónde se encuentran los argumentos de la instrucción (si los hubiera). Todo lo relacionado con la especificación de dónde están los argumentos de la instrucción recibe el nombre de direccionamiento. A las instrucciones de máquina se les asignan nombres nemotécnicos, más fáciles de recordar que listas de ceros y unos.

Estas instrucciones son muy elementales, por lo tanto es necesario realizar un gran esfuerzo de traducción entre el lenguaje natural y el código máquina.

Hay dos tendencias básicas en el diseño de juegos de instrucciones: pocas instrucciones (algunas decenas) simples pero de ejecución muy rápida o muchas instrucciones (unas 200) complejas, de ejecucián algo más lenta. La primera se conoce como RISC (del inglés, Reduced Instruction Set Computer: computador con juego de instrucciones reducido) y la segunda como CISC (Complex Instruction Set Computer: computador con juego de instrucciones complejo).

Periféricos

Damos en esta sección una visión general de los periféricos. Podemos considerar periféricos de entrada, de salida y de almacenamiento; asimismo podemos distinguir entre periféricos locales y periféricos remotos, según su conexión al computador. Un periférico local, como el ratón, se encuentra cerca de la UCP conectado mediante cables que hacen las veces de prolongador de los buses del computador. Para un periférico remoto, como una impresora láser del centro de cálculo, la conexión se realiza a través de una red de comunicaciones.

A continuación se enumeran algunos de los periféricos m
ás importantes:

De entrada de datos

  1. Teclado. Es similar al teclado de una máquina de escribir y cuenta además con algunas teclas de control.
  2. Ratón. Es un dispositivo que al ser desplazado sobre una superficie permite mover el cursor por la pantalla. Existen ratones de sistema mecánico y de sistema óptico.
  3. Sensores. Este tipo de periféricos incluye a las pantallas táctiles, capaces de seleccionar distintas opciones reconociendo el tacto sobre distintas zonas de la pantalla. También podemos encontrar otro tipo de sensores como: Lápiz óptico: cuando se posa en la pantalla reconoce la posición que ocupa mediante una medición de la luminosidad que recibe; Tableta gráfica: similar a una pizarra provista de un lápiz. Los trazos sobre la tableta aparecen en la pantalla del computador. cuando se posa en la pantalla reconoce la posici
  4. Escáner. Permite digitalizar imágenes planas (fotografías o texto) y archivarlas.

De salida de datos
  1. Pantalla o monitor. Es el principal instrumento de comunicación entre el computador y el usuario. Su constitución física es similar a la del tubo de imagen de un televisor. Es usual llamar consola al conjunto formado por un teclado y un monitor.
  2. Plotter. Permite realizar gráficos de alta precisión como mapas o diseños técnicos.
  3. Impresora. Su misión es proporcionar copias impresas en papel de la información guardada en el computador. Hay diversos tipos de impresora, entre los que destacan las impresoras de margarita (ya en desuso), de matriz de puntos, de chorro de tinta y las impresoras láser.

De entrada y salida de datos

  1. Módem. Es un dispositivo que permite la comunicación de un computador con otro a través de la línea telefónica (red conmutada) o a través de líneas destinadas exclusivamente a este fin (líneas punto a punto). Para ello convierte los datos binarios en señales moduladas de baja frecuencia. Existen diversos protocolos que determinan la forma de iniciar, efectuar y finalizar la transmisión, así como su velocidad y corrección de errores. Su nombre procede de su doble función: MOdulador, DEModulador. Su velocidad se mide en baudios, que equivalen aproximadamente a bits por segundo, al incluir las necesarias señales de control.
  2. Red. Las redes permiten la interconexión de varios computadores entre sí, la utilización conjunta de distintos dispositivos externos tales como un disco duro, una impresora, etc., y el uso compartido de programas y ficheros de datos. Cada computador conectado a la red contempla los distintos dispositivos disponibles como si fueran propios. Por lo general uno de los computadores se dedica en exclusiva a la gestión de la red, denominándose servidor de red. Las redes pueden ser locales, cuando se ubican en la misma habitación o edificio, o remotas. En general, tanto el sistema operativo como los programas de aplicación son específicos para el funcionamiento en red. 

Periféricos de almacenamiento

Aunque se trata en realidad de perif
éricos de entrada y salida, suelen estudiarse aparte. Los periféricos de almacenamiento son también conocidos como memorias secundarias y memorias auxiliares. La mayoría de estos dispositivos almacenan la información de forma magnética. El primero de todos los dispositivos de almacenamiento magnético fue la unidad (lectora y grabadora) de cinta magnética, y posteriormente se desarrollaron las unidades de discos fijos (también llamados discos duros) y las unidades de discos flexibles.

En una cinta magn
ética el acceso a la información es secuencial (tenemos que hacer correr la cinta hasta que aparezca la información que buscamos); esto hace que sea un medio muy lento. Generalmente las cintas magnéticas, debido a su gran capacidad, se utilizan para hacer periódicamente copias de seguridad (backup) de la información almacenada en los discos duros del computador. Recientemente se han desarrollado los streamers, que son dispositivos cuya única finalidad es hacer copias de seguridad de grandes volúmenes de información, generalmente contenida en un disco duro.

Los discos magn
éticos reciben este nombre por su forma y porque su superficie es magnética (ciertamente no es un nombre muy original, aunque sí autoexplicativo) y son dispositivos de acceso directo, esto es, no tenemos que recorrer toda la información que hay delante de la que necesitamos.

Los discos magn
éticos necesitan organizarse lógicamente para poder albergar información de un modo ordenado; dar formato a un disco magnético es dotarlo de la organización lógica necesaria para cada modelo de computador (no es lo mismo el formato del DOS, que usan los compatibles con IBM, que el formato usado por los computadores Macintosh).

La información se almacena siguiendo c
írculos conéntricos llamados pistas que a su vez se dividen en sectores que contienen un cierto número de palabras (celdas). Para indicar una dirección se especifica la pista y el sector donde comienza la información, por lo cual una transferencia de datos a un disco siempre empieza en la primera palabra de un sector.

Entre los distintos tipos de disco destacan los discos duros (hard disk ), que disponen de una gran capacidad de almacenamiento (de 20 a 800 Mb). Suelen ser  fijos (no se pueden extraer del  computador) y suelen contener el sistema operativo y los programas de uso m
ás común.

Los discos flexibles, diskettes o disquettes (en ingl
és, floppies), son extraíbles y por eso pueden ser usados para transferir información de un computador a otro (que pueda leer discos flexibles). Estos discos tienen una capacidad mucho menor que un disco duro (entre 360 Kb y 2'88 Mb) y el tiempo de acceso a la información almacenada es bastante grande. Últimamente se han desarrollado las unidades de discos duros extraíbles, que tienen las ventajas de los discos duros en cuanto a capacidad y a velocidad de acceso y además son intercambiables.

Unidad aritmética y lógica

La unidad aritmética y lógica ó ALU (Aritmetic Logic Unit) es el horno donde se cuece la información; su tarea consiste en recibir instrucciones junto con sus argumentos y ejecutarlas, dando a cambio el resultado de su operación.

Esta unidad consta de un(os) operador(es) que ejecuta(n) físicamente las instrucciones recibidas, una serie de registros para almacenar información mientras se ejecuta una instrucción (entre estos registros destaca el registro acumulador, al que se hará referencia de nuevo cuando estudiemos el direccionamiento de las instrucciones) y algunos señalizadores de estado que indican resultados interesantes obtenidos al realizar un cómputo (resultado cero, overflow o desbordamiento, : : : )



Los operadores son dispositivos físicos (circuitos electrónicos) que pueden realizar operaciones elementales sobre datos binarios. Las operaciones que son capaces de hacer estos dispositivos pueden ser de desplazamiento, lógicas o aritméticas.

Las operaciones de desplazamiento consisten en desplazar los bits de una palabra varios lugares hacia la izquierda o hacia la derecha. Dependiendo de la acción del desplazamiento sobre los extremos de la palabra podemos distinguir varios tipos de desplazamiento:

  1. Desplz. lógico: si el extremo de la palabra que queda vacío tras el desplazamiento se completa con ceros.
  2. Desplz. aritmético: es similar al anterior, pero se mantiene el bit de signo. Se utiliza para representar multiplicaciones y divisiones de una potencia de 2.
  3. Desplz. circular: los bits que quedan fuera tras el desplazamiento se emplean en llenar los huecos libres del otro extremo de la palabra.
  4. Desplz. concatenado: se desplaza conjuntamente el contenido de dos o más registros.
Las operaciones lógicas tales como NOT, AND y OR se realizan bit a bit. La primera de estas operaciones sólo depende de un argumento, mientras que las restantes necesitan dos argumentos.

Las operaciones aritméticas más importantes que se realizan en la UAL son las de suma, resta, multiplicación y división, la de cambio de signo y la de extensión de signo. Esta última operación se hace necesaria cuando se transmite información a un elemento con mayor longitud de palabra pues es necesario completar los bits restantes sin alterar la información. En general las operaciones de multiplicar y dividir se hacen usando sumas y restas mediante un algoritmo apropiado; sólo computadores muy potentes (y caros) disponen de operadores particulares que las realicen directamente.

Se puede mejorar la capacidad de cálculo numérico de algunos procesadores añadiendo un coprocesador matemático. Los dispositivos de este tipo complementan la UAL del procesador por otra más potente; con mayores y más numerosos registros operativos, con una representación interna de los datos de mayor precisión y con instrucciones numéricas más complejas (funciones exponenciales, logarítmicas y trigonométricas).

Para ello, comparten el flujo de instrucciones y datos del procesador y cuando detectan alguna instrucción numérica toman el control del programa, ejecutan la instrucción, calculan el resultado y devuelven el control al procesador.

Unidad de Control

La UC se encarga de clasificar las instrucciones que recibe, controlar su ejecución y leer las zonas de la memoria que almacenan los argumentos de estas instrucciones. La UC está dotada de unos cuantos registros internos de memoria que usa para almacenar datos elementales durante la ejecución de una instrucción elemental. Esta memoria dispone de un cierto número de registros con un cometido particular, entre los que destacan el registro de instrucción y el contador de programa. 

El registro de instrucción almacena aquélla que está siendo ejecutada y, por su parte, el contador de programa almacena la dirección de la siguiente instrucción que debe ser ejecutada. Existen, además, otros registros que almacenan los resultados parciales de la ejecución de una instrucción.

El funcionamiento de la UC está regido por los impulsos de un reloj que sincroniza la realización de las distintas operaciones y determina la velocidad del procesador. Su frecuencia se mide en MHz (megaherzios, millones de ciclos por segundo).

El trabajo desempeñado por la unidad de control al ejecutar una instrucción puede descomponerse en pequeños pasos como los descritos a continuación:

  1. Leer el contador de programa.
  2. Almacenar en el registro de instrucción el contenido de la dirección de memoria que aparece en el contador de programa.
  3. Averiguar si la instrucción necesita argumentos y, en su caso, determinar sus direcciones de memoria.
  4. Leer los argumentos y almacenarlos en los registros internos.
  5. Ordenar a la UAL que ejecute el cómputo necesario.
  6. Almacenar el resultado de la ejecución.
  7. Actualizar el contador de programa con la siguiente instrucción por ejecutar
La UC dispone de un dispositivo denominado secuenciador que efectúa esta  descomposición en pasos elementales.

Unidad central de proceso

La Unidad Central de Proceso ó CPU (Central Process Unit) representa el cerebro de la computadora y allí es donde se procesa la información recibida, por lo que casi siempre nos referiremos a ella como el procesador. El CPU está formada por la unidad de control (UC), que clasifica y organiza las instrucciones recibidas (encargado), y la unidad aritmética y lógica (UAL), que las ejecuta (donde se \amasa y cuece" la información).

Físicamente el procesador es un microchip y consta de unos circuitos electrónicos que permiten realizar operaciones elementales con la información. El procesador se conecta con el resto de los componentes de un computador mediante unas patillas metálicas, cada una de las cuales transporta información binaria, a través de los buses de comunicación que estudiaremos más adelante.

El cometido de la UC consiste en recibir la instrucción que se va a ejecutar, determinar su tipo (cálculo aritmético, lógico, : : : ), determinar si esa instrucción necesita argumentos almacenados en la memoria, leer (en su caso) las direcciones de memoria que contienen los argumentos de la instrucción y dar la orden correspondiente a la UAL. Por su parte, la labor de la UAL es la de ejecutar las instrucciones aritméticas y lógicas, una vez que la UC ha determinado su tipo y ha leído sus argumentos (si los hubiera). Las instrucciones que llegan a la UAL son muy sencillas, y se reducen a un cálculo aritmético elemental (según el tipo de procesador, \elemental" signifcará bien suma-resta o bien suma-resta-multiplicación-división), un cálculo lógico (and, or, : : : ), o una instrucción de salto o bifurcación.

Memoria Principal

Mencionábamos en el párrafo anterior que la memoria representa el almacén donde se guarda la información, en esta sección estudiaremos algunos detalles del almacenamiento de información en la memoria y de los tipos de memoria existentes.


En la memoria principal se guarda el conjunto de instrucciones (programa) que está siendo ejecutado, junto con los datos de entrada y de salida de la ejecución. Estudiaremos la memoria de un computador desde un punto de vista físico (distintos medios de almacenamiento) y desde un punto de vista lógico (de tratamiento de la información).


Podemos encontrar similitudes entre la organización física de la memoria y el almacén de la panadería ideal que introducíamos al principio del capítulo: en el almacén encontramos estanterías repletas de bandejas iguales, y cuando un trabajador entra en el almacén, bien trae o bien retira algunas de estas bandejas. La unidad mínima a la que se accede no es una barra de pan (bit) sino una bandeja completa (palabra). La longitud de palabra de memoria viene representada por la capacidad de cada bandeja.


No podemos acceder a cada bit de la memoria aisladamente; la mínima cantidad de memoria a la que podemos acceder estáformada por una palabra de memoria. Físicamente, la memoria está dividida en celdas (con una capacidad de información de un bit), agrupadas en palabras de memoria.

Componentes de un Computador

Para introducir los conceptos básicos que estudiaremos dentro de esta sección consideramos un computador como una unidad de producción. Una unidad de producción adquiere materia prima, la elabora y, finalmente, vende la materia elaborada. Esto mismo es lo que hace un computador: toma algunos datos, los procesa y, finalmente, devuelve el resultado obtenido al procesar la información.


Más concretamente, consideremos una panadería ideal. En esta panader ía se compra harina, levadura, : : : (entrada de datos) que posteriormente se elaboran (procesamiento) para producir pan que, finalmente, se vende (salida de datos). Para comprar y vender se necesitan personas que se relacionen con el exterior; en un computador esta labor se realiza mediante los periféricos. Dentro de la panadería podemos encontrar dos zonas bien diferenciadas e indispensables: la primera es la zona de amasado junto con el horno, y la segunda es el almacén.




En el computador el almacén lo representa la memoria y la zona de trabajo es la unidad central de proceso o UCP que, a su vez, consta de la unidad de control o UC (el encargado que controla los procesos de amasado y horneado) y la unidad aritmética y lógica o UAL (zona de amasado y horno). Naturalmente, entre las distintas zonas deben existir pasillos de comunicación para poder sincronizar las acciones de cada uno; en un computador esta información se envía y recibe a través de los buses.

Funcionamiento de la Memoria

Para acceder a cada palabra de memoria debemos poder referirnos a ellas. Esto se hace asignando una dirección numérica binaria a cada palabra a modo de "dirección postal". La dirección de memoria determina una palabra de memoria, que es la que contiene la información. Supongamos que tenemos un computador que tiene palabras de memoria de 1 byte (8 bits) y dispone de 1 Mb (220 bytes) de memoria principal.


Cada dirección de memoria tiene asignado un número en binario entre 0 y 220 -1. Para poder denotar todas las palabras de memoria disponibles necesitaremos al menos 20 díjtos ya que, en general, con d bits es posible direccionar 2d palabras de memoria. Téngase en cuenta que, en principio, la longitud de palabra de memoria no tiene relación con la longitud de las direcciones de memoria; en el apartado sobre optimización de memorias tendremos la oportunidad de profundizar algo más sobre ello.


En la memoria se realizan operaciones elementales de lectura y escritura, que escriben o leen la información contenida en una sola palabra de memoria. Tanto la UCP como la memoria se sirven de unas cuantas palabras de acceso muy rápido, llamadas registros. Para las operaciones de lectura y escritura, los dispositivos de memoria disponen de dos registros: el de dirección (RD) y el de intercambio de memoria (RIM).


El RD indica la dirección de memoria que se quiere leer o en la que se quiere escribir; puesto que debe tener capacidad para albergar cualquier dirección de memoria, es un registro de d bits siguiendo la notación anterior. Por su parte, el RIM alberga la palabra leída o que se va a escribir en la dirección dada por el RD y, por lo tanto, tiene tantos bits como la longitud de palabra de memoria. La memoria está conectada con la UCP y con los periféricos a través de los buses de direcciones, de datos y de control que describiremos más adelante.


El proceso de lectura o escritura se puede dividir en los siguientes pasos:
  1. A través del bus de direcciones llega un número de dirección de memoria que se almacena en el RD.
  2. Simultáneamente, por el bus de control, llega una se~nal que indica si la operación que debe realizarse es de lectura o de escritura.
  3. Si la operación es de escritura, por el bus de datos llega la palabra que se quiere escribir. Ésta se almacena en el RIM y se escribe donde indique RD. Si la operación es de lectura se lee la información que se encuentra en la dirección almacenada en el RD y se escribe en el RIM.
  4. La memoria genera, por el bus de control, una señal de control que indica el fin de la operación.

Clasificación de las Memorias

La memoria se encarga de intercambiar información con el procesador según las necesidades de éste. Con la tecnología actual los procesadores alcanzan velocidades de varios millones de computos por segundo, lo que obliga a la memoria a tener una velocidad semejante a fin de no menguar la eficiencia del computador. Por otra parte, la capacidad de memoria es otra característica interesante, ya que, en principio, no podríamos ejecutar programas que no pudieran ser cargados completamente en memoria. Las características de velocidad y capacidad están reñidas entre sí, por lo que es necesario alcanzar un compromiso entre ambas dependiendo de la finalidad. Según el nivel de compromiso alcanzado podemos destacar varios niveles jerárquicos de memoria: de más rápida y cara (por lo que suelen tener menor capacidad) a menos rápida y mayor capacidad:
  1. Memoria principal
  2. Memoria secundaria
  3. Memoria auxiliar
Los dos últimos tipos de memoria serán desarrollados en la sección de periféricos, pues pueden ser considerados como periféricos de almacenamiento. Hemos dicho anteriormente que las memorias son dispositivos de lectura y escritura, y esto es cierto cuando hablamos de la memoria principal de un computador. Sin embargo, existe otro tipo de memorias de sólo lectura que hace las veces de manual de comportamiento de la máquina que la contiene.


Las memorias de sólo lectura reciben el nombre genérico de memorias ROM (acrónimo del inglés Read Only Memory). Los computadores vienen dotados con una memoria de este tipo donde se almacena la rutina de arranque. Otras aplicaciones de este tipo de memoria las encontramos en las lavadoras automáticas (los programas de lavado se almacenan en una ROM) y en los juguetes electrónicos. En este tipo de memoria la información es almacenada de forma permanente.


Algunas variantes de la memoria ROM son la PROM (ROM programable), EPROM (PROM borrable, erasable PROM) y la EEPROM (PROM eléctricamente borrable). Estos tipos de memoria son útiles en la fase de desarrollo de un sistema, en la cual aún no se ha fijado el contenido ¯nal de la ROM.


Las memorias de lectura y escritura suelen llamarse memorias RAM (del inglés Random Access Memory). Dentro de este tipo de memorias podemos distinguir las RAM estaticas y las RAM dinámicas. Las estáticas se caracterizan por tener un tiempo de acceso2 igual a cada dirección de memoria (cada dirección tiene su propio camino de acceso dentro del microchip, generalmente construido con semiconductores). Por otra parte, son memorias volátiles en el sentido de que necesitan la alimentación eléctrica para conservar la información.


En las RAM dinámicas la información necesita ser recordada periódicamente, ya que se va descargando con el tiempo. Esta pérdida de información es debida a que están construidas usando pequeños condensadores. La razón de ser de este tipo de memorias es la economía, pues generalmente son más baratas que las estáticas.

miércoles, 11 de mayo de 2011

Optimización de Memorias

Sabiendo la necesidad de contar con memorias cada vez más rápidas y con más capacidad se han ideado métodos de optimización para la memoria principal. Dependiendo del aspecto por optimizar encontramos las memorias caché y la memoria virtual que, respectivamente, aumentan la rapidez y la capacidad de la memoria principal.

Las memorias caché son memorias hasta mil veces más rápidas que las usuales pero, debido a su alto coste, suelen tener una capacidad muy pequeña. La idea que define las memorias caché no puede ser más simple: se trata de guardar en registros los contenidos de las posiciones de memoria de uso más frecuente, de modo que sea mucho más rápido acceder a la información que hay en ellas.

El funcionamiento de la memoria caché ejerce una acción de fitro sobre las direcciones de memoria que solicita la UCP. La secuencia de acciones que se producen en las operaciones de lectura y escritura con memoria caché son las siguientes:

  1. La UCP genera una dirección de memoria que se envía a las memorias principal y caché.
  2. Si la dirección se encuentra en la caché, será ésta la que devuelva el dato e inhiba la salida de la memoria principal. De lo contrario, será la memoria principal la que dé el dato.
  3. Finalmente, se actualizan las direcciones y los datos contenidos en la caché.

Existen distintas estrategias para seleccionar las direcciones que se guardan en la memoria caché de modo que se mantengan en ella las direcciones más usadas (obsérvese que el conjunto de direcciones de memoria más utilizadas variará con la fase del programa que se esté ejecutando).

Una buena estrategia de selección puede conllevar una tasa de aciertos (la dirección requerida está en la caché) muy elevada, de donde la velocidad aparente de la memoria se asemejará mucho a la velocidad de la memoria caché.

La memoria virtual se desarrolla con el propósito de poder hacer uso de más memoria de la que físicamente se dispone. Si un programa es demasiado grande para la memoria disponible se solía dividir en módulos que cupieran en memoria mediante la técnica del solapamiento (overlay). Esta técnica tiene el serio inconveniente de que los programas no son transportables, puesto que, en general, no funcionarían en un computador
con menos memoria.

Para solventar estos problemas se desarrolló la memoria virtual como un método automático para realizar el solapamiento. La idea consiste en usar la memoria secundaria, generalmente un disco duro, como memoria principal. Un programador que dispone de memoria virtual tiene la impresión de estar trabajando con un mapa de direcciones de memoria (direcciones lógicas) mucho mayor del que físicamente dispone (direcciones físicas).

Existen otras técnicas para mejorar la utilización de la memoria como son la paginación y la segmentación. Estas técnicas utilizan programas de gestión de memoria que forman parte del sistema operativo.

Lenguaje de Programación

El computador dispone de un conjunto de instrucciones que son reconocidas y ejecutadas por el procesador. Estas instrucciones se expresan, al igual que los datos, en forma digital binaria, si bien para reconocerlas mejor y evitar errores se les asignan unos nombres mnemotécnicos que permiten recordar sus funciones. Estas instrucciones constituyen el lenguaje de máquina del computador, y suelen ser diferentes en función del fabricante del procesador.

El lenguaje de máquina es ejecutado a gran velocidad por el procesador, en los computadores actuales esta velocidad se mide en millones de operaciones por segundo; por otra parte, el lenguaje de máquina permite el acceso directo a todos los órganos del computador. Por estos motivos el lenguaje máquina es insustituible en aquellas aplicaciones donde sea necesaria una gran rapidez de ejecución, o el acceso directo a ciertos órganos del computador.

Las instrucciones del lenguaje de máquina son en general muy poco potentes, operan sobre datos de pequeño tamaño, y en muchos casos no incluyen ni multiplicaciones ni divisiones. Para poder operar sobre datos mayores o realizar operaciones más complejas, tales como potencias o logaritmos, hay que fraccionar los datos y aplicar sucesivamente las operaciones simples, siguiendo algoritmos específicos. Por este motivo, y por su estrecha relación con el hardware, a los lenguajes de máquina se les llama lenguajes de bajo nivel. En consecuencia, la tarea de escribir programas en lenguaje de máquina es tediosa y está sujeta a muchos errores.

Problema
                             diseño de algoritmo
Algoritmo
                      |  programación
Programa fuente
               |  traductor
Programa objeto
                  |  procesador
Programa en ejecución


Ante la necesidad de escribir programas cada vez más complejos y fiables, los informáticos desarrollaron lenguajes con niveles más elevados de abstracción, que incluían operaciones y datos más complejos a los que llamaron lenguajes de alto nivel. De esta forma se acorta el camino entre el algoritmo y su expresión en forma de programa, porque los lenguajes de alto nivel pueden expresar mejor las acciones y objetos que intervienen en los algoritmos.

Una de las grandes ventajas de estos lenguajes radica en que la traducción del programa escrito en lenguaje de alto nivel (programa fuente) al lenguaje de máquina (programa objeto) que, como recordamos, es el único que puede ser ejecutado por el computador, es automática y se realiza por un programa traductor. Para ello, junto con las especificaciones del lenguaje, reglas de sintaxis y semántica, se desarrollan los necesarios programas de traducción.

Durante el proceso de traducción se suelen detectar errores, debidos al incumplimiento de las reglas sintácticas del lenguaje o a causas más sutiles, que deben corregirse antes de poder ejecutar el programa. Si durantela ejecución de un programa se realizan operaciones no permitidas (tales como divisiones por cero, accesos fuera de límites, : : : ) se producen los llamados errores de ejecución.

Aunque un programa se haya traducido eliminando todos los errores sintácticos y de ejecución, aún puede no realizar correctamente la tarea para la que fue creado, por contener errores lógicos. Por lo tanto es necesario comprobar el funcionamiento del programa utilizando datos de prueba que permitan realizar los cálculos a mano y comprobar así las partes más con°ictivas del programa. Este proceso se conoce como depuración de los programas.

En la actualidad la mayoría de los programas se escriben en lenguajes de alto nivel, reservándose los lenguajes de bajo nivel para aquellas aplicaciones donde se necesite una elevada velocidad o un acceso directo a los órganos del computador; por ejemplo, en los programas traductores o en programas de gestión del computador.

Programación

Consideramos al computador como una herramienta que nos ayuda en la resolución de problemas; para ello es preciso conocer previamente un algoritmo que lleve a su solución. A continuación hay que expresar el algoritmo en un lenguaje de programación, que pueda ser comprendido y ejecutado por el computador, desarrollándose un programa. A este proceso se le llama programación. 

Una aportación sustancial para realizar este paso tan delicado con la corrección necesaria la constituyen:
  • El refinamiento por pasos, que permite aumentar el grado de detalleen la expresión del algoritmo según convenga, para adaptarlo a las necesidades del lenguaje.
  • La programación estructurada, que utiliza las estructuras de programación propias de los lenguajes evolucionados.
  • La programación modular que, al permitir el uso de módulos o subprogramas, facilita el empleo de otras técnicas de diseño de algoritmos y la depuración de los programas .
  • No debe olvidarse la importancia de la estructuración y abstracción de datos, presente también en los lenguajes evolucionados, que debe emplearse con todo su potencial en el diseño de algoritmos y, posteriormente, en los programas.

El desarrollo de aplicaciones cada vez más complejas y el crecimiento del sector de producción de software, ha hecho que se apliquen a la programación técnicas de ingeniería que garanticen la viabilidad y calidad de los grandes proyectos de aplicaciones, lo que se conoce como ingeniería del software.

Algoritmo

Una de las características de los seres humanos es su capacidad para plantearse y resolver problemas. Éstos pueden ser de naturaleza muy diversa, desde los problemas más inmediatos relacionados con la propia subsistencia, hasta los problemas más abstractos de naturaleza matemática o filosófica.

Un algoritmo es la descripción precisa de los pasos que nos permiten obtener la solución de un problema determinado. En general, los pasos son acciones u operaciones que se efectúan sobre ciertos objetos. Al comienzo del algoritmo, los objetos tienen unos valores iniciales (los datos) que varían como consecuencia del proceso descrito por el algoritmo, obteniéndose los valores de salida o resultados.

La informática estudia el procesamiento de la información mediante algoritmos, aunque el concepto de algoritmo, que proviene de las matemáticas, es muy anterior e independiente de la existencia de la informática y los computadores.

Nota: Se conoce un algoritmo para el cálculo del máximo común divisor de dos números naturales, debido a Euclides, que data del siglo IV a.C., al que se conoce como el "abuelo" de todos los algoritmos.

El concepto de algoritmo tiene una importancia fundamental dentro de la informática, por ser previo a la resolución del problema en el computador; si no se conoce el algoritmo para resolver un problema, no puede plantearse su resolución en el computador.

Aunque existen algoritmos registrados para la realización de tareas muy variadas, en general los algoritmos desarrollados resuelven sólo determinadas partes de un problema como, por ejemplo, la ordenación de una lista de valores, pero no un problema real completo. En consecuencia, habría que diseñaar un algoritmo para su resolución.

El diseño de algoritmos implica un análisis profundo del problema, de sus datos iniciales, del proceso que se les aplica y de los resultados esperados. A partir de este análisis debe establecerse cuál es la mejor estructura de datos para resolver el problema. De hecho, Niklaus Wirth, uno de los padres de la programación estructurada, titula una de sus obras fundamentales Algoritmos + Estructuras de Datos = Programas,mostrando la importancia que concede a dichas estructuras [Wir86b].

Existen técnicas que facilitan el dise~no de algoritmos, tales como la programación estructurada, la programación modular, el re¯namiento por pasos, el dise~no descendente y la estructuración y abstracción de los datos.

Para poder expresar algoritmos se utilizan lenguajes con la necesaria precisión, llamados lenguajes algorítmicos, que son independientes de los lenguajes de programación. Los más utilizados son el seudocódigo y los diagramas de flujo.

Dado un problema concreto y conocido el algoritmo que lo resuelve, para obtener la solución del problema tenemos que partir de los datos de entrada, y ejecutar las acciones descritas en el algoritmo. Al proceso de ejecutar un algoritmo concreto para unos datos determinados se le llama cómputo, de donde procede el término computador. El procesador es quien ejecuta materialmente el cómputo.

Aplicaciones

El software de aplicaciones está formado por aquellos programas que han sido desarrollados para realizar tareas concretas. Se llama así porque el computador "se aplica" a un trabajo determinado, facilitando su ejecución y resolución. Por ejemplo, un procesador de textos, una hoja de calculo, un gestor de bases de datos, un generador de gráficos, un programa de contabilidad, juegos, etc.

Entre las aplicaciones más utilizadas se encuentran las siguientes:
  • Los procesadores de textos son programas que facilitan la elaboración de textos en el computador, desde una carta hasta un libro. Permiten operar con márgenes, tabuladores, justificación, sangrado, tipos de letra, búsqueda y sustitución de palabras, paginación, separación de sílabas, sinónimos, ortografía, etc. Son probablemente los programas más usados.
  • Las hojas de cálculo son programas utilizados en la creación de tablas, con datos relacionados entre sí, inicialmente ideados para el análisis financiero. Tienen un formato matricial, en el que se pueden definir operaciones y funciones sobre las distintas componentes de la matriz. Al modificar algún dato, todas las operaciones que lo utilizan son actualizadas de forma automática.
  • Los gestores de bases de datos permiten gestionar la información referida a personas o artículos, realizando operaciones de edición, ordenación, búsqueda, etc.
  • Los generadores de gráficos facilitan la creación de distintos tipos de gráficos, a partir de datos de hojas de cálculo o bases de datos, o directamente introducidos por el usuario.

Existen muchas otras aplicaciones, de uso menos general, como son los programas matemáticos, estadísticos, de CAD (Diseño Asistido por Computador), aplicaciones contables y de gestión de empresas, comunicaciones, juegos, etc.

El desarrollo del software de aplicaciones ha sido muy grande (se calcula que para los computadores compatibles con IBM hay más de cien mil aplicaciones diferentes). A su vez, los distintos programas van evolucionando, y aparecen nuevas versiones con más posibilidades y mayor velocidad de ejecución, aunque también con mayor demanda de potencia y memoria.

En algunos casos, varios de estos programas se unen en uno solo, compartiendo datos e instrucciones, y constituyen un paquete integrado. En general suele integrarse una hoja de cálculo con un generador de gráficos y, a veces, con una base de datos y un procesador de textos.

Gran parte de los programas de aplicación pueden configurarse, en mayor o menor medida, de acuerdo con los gustos y necesidades del usuario; sin embargo, es posible que un programa concreto no pueda atender esas necesidades. En este caso, resulta muy difícil, por no decir imposible (e ilegal en muchos casos), modificar el programa para incluir una nueva tarea. Conscientes de esta falta de °exibilidad del software, muchos fabricantes están presentando programas de aplicación que a su vez pueden ser programados, mediante lenguajes de programación
propios o estándares.
 
Así pues, aunque la mayoría de las personas que utilizan los computadores trabajan con programas de aplicación y no necesitan recurrir a la programación, también hay un buen número de usuarios que, sin ser informáticos profesionales, pueden obtener un mayor rendimiento de estos programas a través de la programación. Por ejemplo, muchas hojas de cálculo, gestores de bases de datos y paquetes matemáticos, hoy en día, son programables.

sábado, 7 de mayo de 2011

Sistema Operativo

Cuando se pone en marcha el computador, el primer programa que entra en funcionamiento es el sistema operativo, que gestiona y coordina los dos aspectos, físico y lógico, del computador. Se trata de un conjunto de programas que se interrelacionan estrechamente con el hardware, gestionando los procesos en ejecución, las operaciones de entrada y salida y la memoria. Por ello, resulta imprescindible para el funcionamiento del computador.

Los demás programas funcionan sobre el sistema operativo, y son gestionados por él. Entre ellos, se encuentran las herramientas para el desarrollo de programas (tales como los editores y traductores de lenguajes), y también los programas de aplicaciones.

Un computador sin software es algo sencillamente inútil salvo, quizá, como elemento decorativo. Un sistema operativo constituye, probablemente, la parte más importante del conjunto de software que acompañaa a cualquier computador moderno. El sistema operativo controla todos los recursos del computador y ofrece la base sobre la cual pueden escribirse los programas de aplicación.

El Computador

Un computador es una máquina electrónica que procesa información siguiendo las instrucciones de un programa registrado. Para comunicarse con el exterior dispone de unos medios de entrada, a través de los que recibe la información, y unos medios de salida, por donde la envía. Tiene dispositivos que le permiten almacenar la información (los datos, los resultados y el propio programa) y procesarla
siguiendo las instrucciones del programa.

La información que se procesa en el computador (programas, datos y resultados) está expresada en forma digital binaria, combinando ceros y unos. En consecuencia, tanto los programas como los datos y resultados deben codificarse en este formato para poder ser procesados.

Una vez obtenidos los resultados, éstos tienen que ser decodificados para mostrarlos al usuario. Como hemos visto, un computador se compone de dos partes claramente diferenciadas: una física, que podemos tocar, constituida por circuitos electrónicos, teclado, pantalla, unidades de disco, etc., llamado
hardware, o en castellano soporte físico, y otra parte inmaterial, que nopodemos tocar, constituida por los programas y datos, llamada software en inglés y soporte lógico en castellano. Ambas partes están íntimamente relacionadas de forma que una no puede operar sin la otra y viceversa.

Informática

La informática es la ciencia que estudia el procesamiento automático de la información. Aunque la necesidad de razonar sobre este tipo de procesos existe desde tiempo atrás, la consolidación de la informática como ciencia sólo se produce con el desarrollo de los computadores, a partir de los a~nos cuarenta. Se trata, por lo tanto, de una ciencia muy joven, pero que ha evolucionado a gran velocidad.

La piedra maestra sobre la cual se ha podido desarrollar la informática la representa el computador, que es una herramienta de gran eficacia en muy diversos trabajos, y en particular en aquéllos que manejan un gran volumen de datos o de operaciones. Esta versatilidad tiene dos aspectos: por un lado, es posible usarlo como herramienta para aplicaciones concretas ya desarrolladas (1.4), y por otro se pueden diseñaar soluciones a la medida de problemas nuevos, mediante la programación (1.5).

El desarrollo de un programa nuevo para resolver un determinado problema requiere, por una parte, conocer algún procedimiento sistemático (algoritmo) que lleve a su solución, y por otra, la necesidad de expresarlo en un lenguaje de programación que el computador pueda comprender y ejecutar.