viernes, 9 de octubre de 2009

Estructura y Fundamentos

I
Estructura de computadores

1.1.- Arquitectura Von NeumannAsí se conoce la forma de estructuración utilizada en los ordenadores actuales; desde 1945 con UNIVAC, se utiliza la arquitectura diferenciadora entre hardware y software que él creó (Von Neumann es junto con Alan Turing padre de la informática moderna, y curiosamente el gran precursor de los virus informáticos en sus estudios sobre autómatas autorreproductores que John Conway continuó en 1970 con el juego "Life", antecesor a su vez de los algoritmos genéticos). Según esta arquitectura, una definición adecuada para un computador sería la siguiente:
Máquina programada de propósito general capaz de realizar una serie de operaciones básicas siguiendo un conjunto de instrucciones que le son proporcionadas a través de un programa encaminado a resolver un problema.
Los elementos básicos de un computador propuestos por Von Neumann y que se utilizan en la actualidad son los siguientes:
- Memoria: Su misión consiste en servir de almacenamiento de la información dentro del computador, sean programas o datos, y sin hacer distinción entre código y datos (no hay una memoria para datos y otra para código ejecutable, está unificada).
- Dispositivos de E/S (Entrada/Salida): Engloban todos aquellos periféricos como puedan ser ratones, monitores, teclados,... es decir, todo lo que proporcione datos al computador o a través de lo cual salgan de él.
- BUS de comunicaciones: Las operaciones de accesos a datos, de manejo de periféricos y otras, han de realizarse a través de un BUS (hilos de comunicación); su misión engloba por ejemplo la transferencia de datos entre memoria y procesador.
- CPU - Unidad Central de Proceso (Central Processing Unit): Es la encargada de controlar y ejecutar todas las funciones del computador. Es la que determina en qué condición se ejecuta el código y como han de mandarse los datos, generando además todas las señales de control que afectan al resto de las partes.


1.2.- Memoria


1.2.1.- Jerarquía de memoria

La memoria en un computador se organiza en varios niveles que se organizan en forma piramidal, en el pico aquello que es más rápido y también más escaso (registros) y en la base lo más lento pero al tiempo más abundante (discos):
Pirámide de memorias (según su velocidad y tamaño)

Los registros pertenecientes al microprocesador son los más rápidos (con un tiempo de acceso que suele estar entre 1 y 5 nanosegundos) aunque por su coste el tamaño es reducido (normalmente no más que 256 bytes). La memoria caché, más lenta, tarda entre 5 y 20 ns (tiempo de acceso) pero con un tamaño mayor que a pesar de todo pocas veces sobrepasa el megabyte. La memoria principal, lo que solemos conocer como RAM, tiene ya un tamaño bastante mayor - las configuraciones standard de PCs dificilmente bajan ya de los 128Mb - pero al tiempo un acceso más lento (entre 60 y 200 nanosegundos). Finalmente, con la memoria secundaria hacemos referencia normalmente al disco duro, que es utilizado por el ordenador como memoria virtual.
Entre los distintos niveles de la jerarquía, ha de haber una correspondencia en los datos. Un nivel superior, más pequeño que el inferior, contendrá información proveniente de este nivel más grande que él, información a la que quiere acceder más deprisa. Por ejemplo, cuando accedemos a una base de datos, esta se carga en memoria para que podamos accederla a más velocidad; sin embargo, si modificamos valores de estos datos en memoria, tendremos que hacer una actualización desde la memoria al disco duro para que los cambios sean permanentes; así pues, siempre que modifiquemos algo en un nivel de la jerarquía, tarde o temprano habrá que transferir estos cambios a los niveles inferiores hasta llegar a la base de la pirámide.
Del mismo modo sucede en la relación entre memorias caché y principal; en la memoria caché se van a cargar partes de la memoria principal que se supone van a ser más utilizadas que otras, con lo cual cuando se produzca una modificación de lo que contiene la caché, habrá que actualizar de alguna manera la memoria principal.
Podríamos decir lo mismo de la relación entre caché y registros del micro, pero estos registros han de ser descritos más adelante en detalle pues su importancia va a ser capital para la programación en lenguaje ensamblador.
Es ya cosa de la implementación de cada procesador, decidir cuales son las políticas de extracción (decidir qué información se sube al nivel superior y cuando) y de reemplazo (decidir qué porción de la información de ese nivel superior ha de ser eliminada).

1.2.2.- Memoria virtual

En un sistema dotado de memoria virtual, dos niveles de la jerarquía de memoria son tratados hasta cierto punto como si fueran uno sólo; esto es, las memorias principal y secundaria (memoria RAM y disco duro generalmente) se acceden mediante lo que denominamos direcciones virtuales (no olvidemos en cualquier caso que un programa ha de residir en memoria principal para ejecutarse, al igual que los datos para ser accedidos o modificados).
Para llevar a cabo esta labor, al ejecutarse un programa se asignará un espacio virtual a este, espacio que no va a compartir con ningún otro programa y gracias al cual tampoco va a ver a ningún otro programa más que al propio sistema operativo. Es decir, supongamos que tengo tres programas ejecutándose, P1, P2 y P3, y que nuestro sistema virtual maneja direcciones desde la 0x00000000 a la 0xFFFFFFFFh (en numeración hexadecimal). Cada uno de estos tres programas podrá ocupar la parte que quiera de esta memoria virtual, y aunque dos de ellos ocuparan la misma dirección virtual no se "pisarían" dado que son procesador y sistema operativo quienes mediante la MMU (Memory Management Unit) deciden a qué parte física de la memoria principal (o a qué zona de la memoria secundaria) corresponde la dirección virtual (ojo, el espacio virtual 0x00000000 a 0xFFFFFFFFFh es independiente en cada uno de los programas). Es por ello, que excepto por mecanismos que se implementen a través del sistema operativo, el código y datos de un programa no podrá ser accedido desde otro.
En cualquier caso, un programa no puede acceder a *todo* el espacio virtual, sino a la parte que le reserva el sistema operativo (volveremos a esto cuando hablemos sobre procesos en la parte dedicada a SSOO), ya que parte de él estará ocupado por código perteneciente al propio sistema operativo.
Por último, destacar que este espacio virtual se divide en páginas virtuales, cada una normalmente de 4Kb de tamaño; sobre estas se mantendrá una tabla de páginas, una estructura que contiene la información acerca de donde residen las páginas de un programa en ejecución. Si se intenta acceder en lectura o escritura sobre una página que está en la memoria principal no habrá problemas y la MMU traducirá la dirección virtual a la posición física en memoria. Sin embargo, si se intenta acceder a una página que resida en el disco duro, se generará un fallo de página y se cargarán esos 4Kb que estaban en el disco duro sobre la memoria principal, pudiendo, ahora sí, leer o escribir sobre la información contenida en ella.
En un modelo muy simplificado, 1 bit indica si la página pertenece al disco duro o a la memoria, y su dirección real (física)

La aplicación práctica la hemos visto todos en sistemas como Linux o Windows; se reserva un espacio de tamaño variable como "memoria virtual" (el término es en realidad incorrecto tal y como se utiliza en Windows, ya que la memoria virtual abarca la RAM que tenemos y lo que asignemos para disco duro), y esto nos va a permitir como gran ventaja cargar programas más grandes que la memoria que tenemos. Evidentemente, si arrancamos diez programas que ocupan 20Mb cada uno en memoria y nuestra memoria es tan sólo de 128Mb no vamos a poder tenerlos a la vez en memoria, con lo cual el sistema de memoria virtual se hace necesario. Lo mismo sucedería, si intentamos cargar un programa que necesita 140Mb de memoria.
Así pues, aquellos programas que estemos utilizando residirán en la memoria virtual, y aquellos que no, en el disco duro. Cuando utilicemos los otros, las partes menos utilizadas de la memoria principal pasarán al disco duro, y se cargarán desde él las que estemos utilizando.


1.3.- Dispositivos de E/S

Existen de entrada (ratón, teclado, scanner), de salida (monitor), y que cumplen ambas cosas (discos duros, disketeras, módems). Los conocemos más como "periféricos", y en realidad cualquier cosa, desde un detector de movimiento a una cámara de video, pueden utilizarse como dispositivos de E/S.
La tarea más compleja respecto a estos dispositivos, es su control mediante el microprocesador; por ejemplo un módem conectado al puerto serie de un PC ha de ponerse de acuerdo con el procesador respecto a la forma de intercambiar sus datos o la velocidad con la que lo hace. Se necesita que haya una coordinación entre ambos para que uno lea a la misma velocidad a la que el otro escribe, y para interpretar adecuadamente los datos transmitidos. Además, el procesador debe de mantener una jerarquía dando prioridad antes a unos periféricos que a otros (atender una petición del disco duro puede resultarnos más importante que atender una del teclado).

1.3.1.- Control de dispositivos de E/S

Existen tres modos básicos de realizar operaciones de E/S: programada, por interrupciones y por DMA (direct memory access):
* La E/S programada exige que el procesador esté pendiente de las operaciones realizadas por los periféricos; por ejemplo, en caso de controlar mediante este sistema un disco duro, la CPU tendría que ordenar la lectura de disco y estar pendiente mediante comprobaciones de si esta lectura ha sido realizada hasta que esto sea así; este es el método menos efectivo, puesto que mientras la CPU está haciendo estos chequeos para saber si la operación ha concluído no puede hacer otras cosas, lo cual reduce mucho su efectividad.
* Con un sistema de E/S por interrupciones, el procesador se "olvida" una vez mandada en nuestro ejemplo esa órden de lectura de disco, y sigue ejecutando las instrucciones del programa actual. Cuando esta operación haya terminado, y en general cuando un periférico tiene datos dispuestos para enviar o recibir, se generará lo que se conoce como "interrupción"; esto es, que la ejecución del programa por el procesador se detiene, y salta a una rutina de tratamiento de interrupción que hace lo que tenga que hacer con esos datos. Salta a la vista, que este sistema (utilizado con frecuencia) es mucho más efectivo que la E/S programada, puesto que libera al procesador de estar pendiente de la finalización de las operaciones de E/S.
* Finalmente, la E/S por DMA libera por completo al procesador no sólo de la tarea de control sobre estas operaciones como ya hacía el sistema por interrupciones, sino también del tener que preocuparse por la transferencia de los datos. Parte de la memoria virtual se "mapea" sobre el periférico; esto es, si por ejemplo tenemos una pantalla de 80x25 caracteres, en memoria se reservará una zona de 80x25 bytes tales que cada uno representará un carácter (que se halla en ese momento en la pantalla). Así pues, para escribir o leer lo que hay en pantalla en lugar de tener que estar el procesador enviando órdenes, se realizaría de forma transparente, de modo que leyendo de la memoria se leería diréctamente del monitor, y escribiendo en ella se modificaría lo que está escrito sobre él.


1.4.- Buses de comunicación

Todas las operaciones mencionadas, han de realizarse a través de un BUS. Básicamente, tendremos tres tipos de buses:
- BUS de datos: Transfiere información, como su propio nombre indica. Por ejemplo, un bus de datos une el procesador con los discos duros o la memoria, para que estos puedan ser accedidos y su información transferida de un lugar a otro.
- BUS de control: Transporta las señales que se utilizan para configuración y control; pueden ser por ejemplo señales que decidan qué periférico ha de transmitir en un determinado momento, indicaciones para la memoria RAM de si debe de leer o escribir, etc.
- BUS de direcciones: Su utilidad se hace patente en operaciones como accesos a memoria; transportaría la indicación acerca del lugar de donde hay que leer o escribir en la RAM, o en el acceso a un disco duro el lugar físico de este donde se quiere leer o escribir.
Estos buses se combinan constantemente para poder llevar a cabo satisfactoriamente las operaciones requeridas por el procesador central. En una lectura de memoria, la CPU mandaría señales para activar el proceso de lectura en la RAM, mientras que por el bus de direcciones viajaría aquella dirección de la que se quiere leer. Una vez llegados estos datos a la memoria, por el bus de datos viajaría hasta el procesador aquella información que se requirió en un principio.


1.5.- CPU

Se trata del "gran cerebro" del computador, encargada del control de todo lo que sucede y de la ejecución del código. Se compone de tres partes principales; la ALU (Arithmethic-Logic Unit), la Unidad de Control y la Unidad de Registros.
Modelo sencillo de un procesador relacionado con memoria y dispositivos de E/S

1.5.1.- La ALU (Unidad Aritmético-Lógica o Arithmethic-Logic Unit)

Su misión es la de realizar operaciones aritméticas. Dependen del diseño, aunque encontraremos como básicas suma y resta; puede que queramos disponer de otras más complejas como multiplicación y división (para ahorrar tiempo a la hora de hacer una suma reiterada en lugar de una multiplicación si no estuviera implementada, por ejemplo). Además, tendremos operaciones lógicas:
* AND: Un AND hecho a dos bits devuelve 1 sólo si los dos bits son 1 (por ejemplo, 011 AND 101 dará como resultado 001). Equivale al "Y" lógico (es decir, al resultado en lógica de algo como "se da X y se da Y", frase que sólo sería verdadera en caso de darse X e Y).
* OR: Un OR hecho a dos bits devuelve 1 si al menos uno de los dos bits implicado en la operación es 1 (un 011 OR 101 da como resultado 111). Equivale al "O" lógico (el resultado de algo como "se dan X, Y o ambos", sentencia cierta en caso de darse X, Y o ambos).
* XOR: Un XOR, (eXclusive OR, O exclusivo) da 1 operando sobre dos bits si uno de los dos bits es 1 y el otro 0 ( la operación 011 OR 101 resulta 010). Este "O exclusivo" en lógica es el que se daría en un "X está vivo o está muerto"; una de las dos condiciones ha de cumplirse para que esta sentencia sea cierta.
* NOT: Esta operación trabaja con un sólo bit; lo que hace es invertirlo (así, NOT 011 dará 100 como resultado).
Las operaciones con la ALU se pueden indicar mediante una señal de control con los bits suficientes como para diferenciar entre los tipos de operación existentes. Es decir, si tenemos 2 bits para la señal de control, las posibilidades de estos bits serán "00-01-10-11", lo cual da como resultado una ALU que pueda hacer cuatro funciones distintas. Con 3 bits, tendríamos "000-001-010-011-100-101-110-111", es decir, 8 operaciones posibles.
Además de esta señal de control, tendremos dos entradas de datos; esto es, los operandos de la función que se va a realizar. Así, si queremos hacer un AND entre dos números, meteremos cada uno de ellos por una entrada de datos y seleccionaremos el AND. Por supuesto, habrá al menos una salida conectada para el resultado de la operación:

1.5.2.- La Unidad de Control

Es la que realiza el secuenciamiento del programa que estoy ejecutando; esto es, la ejecución de la instrucción actual y la obtención de la siguiente. Su función es obtener las señales de temporización y control para ejecutar según los datos que entran, determinando el funcionamiento de la CPU y su comunicación interna.
Al ir a ejecutar una instrucción, la unidad de control pedirá que sea cargada y la analizará, viendo qué tiene que hacer en la CPU para que lo que la instrucción dice que ha de hacerse, llegue a buen término; por ejemplo, si esta instrucción es un AND de dos elementos, mandaría estos dos a la ALU y activaría las señales de control para que realizase un AND, para después transferir el resultado donde la propia instrucción indicase.

1.5.3.- La Unidad de Registros

Tiene una gran importancia, ya que la CPU usa estos registros para no tener que estar siempre accediendo a la memoria. Un registro no es más que un "pedazo" de memoria con una velocidad de acceso muy grande, normalmente de un tamaño que no supera los 64 bits (siempre una cifra tipo 16, 32, 64, 128...).
Sus usos, son diversos; mientras que por ejemplo cuando se ejecuta una instrucción esta se guarda en un registro mientras dura su procesamiento, pueden usarse también para almacenar datos con los que operar o hacer transferencias con la memoria, etc.
Hay dos tipos básicos de registros
A.- Registros de propósito general
Podemos darles cualquier uso. Son accesibles, visibles al programador, que puede utilizarlos. Sirven para volcado de datos, instrucciones... por ejemplo, en el MC68000 de Motorola, existen 16 registros de 32 bits de propósito general (A0-A7 y D0-D7, para almacenar direcciones y datos respectivamente). En otros como los 80x86 de Intel tenemos otra serie de registros de 32 bits con nombres como EAX, EBX, ECX, EDX, etc...
B.- Registros de propósito específico
Son registros que utilizan la unidad de control; el programador no puede utilizarlos, al menos diréctamente. Los principales (cuyo nombre cambia según cada implementación pero que por lo general se suelen encontrar en toda CPU) son:
- IR: Su misión es contener la instrucción que se está ejecutando por la CPU; es el Registro de Instrucción (o Instruction Register). Mientras la instrucción se esté ejecutando, se contendrá ahí.
- PC: Program Counter o Registro de Contador de Programa. Su misión es contener la dirección de la instrucción siguiente a la que estamos ejecutando. Por ello, permite ejecutar un programa de modo secuencial (línea a línea), tal y como ha sido programado.
- SR: Es el Registro de Estado, o Status Register. Su misión es reflejar en cada momento en qué situación se encuentran algunos detalles de la CPU (por ejemplo, almacena resultados de comparaciones) de cara a tomar decisiones, así como otros parámetros que pueden necesitar ser consultados. En la mayoría de las implementaciones este registro es, al menos, accesible.
- SP: Registro de Pila o Stack Pointer; la función de la "pila" será explicada ya más adelante, pero es necesario para poder hacer llamadas a funciones en programas y para muchas otras cosas.
- MAR: Registro de Dirección de Memoria (Memory Address Register): Es el que finalmente comunica la CPU con el bus externo. Concluída la instrucción, el PC se vuelca en el MAR, y el bus de direcciones localizará la siguiente instrucción según el contenido de este registro.
- MDR: Registro de Datos de Memoria (Data Address Register): Es el que pone en contacto la CPU y el bus de datos, que contiene la información para ser transferida por él o para recibirla.


1.6.- Ejemplo de un procesador simple

Para poner en práctica lo explicado anteriormente, vamos a diseñar y programar un procesador muy simple, que pretende servir para acabar de comprender la forma de relacionarse de todos los elementos descritos.

1.6.1.- Estructura del procesador

Nuestro pequeño ordenador, tendrá las siguientes características:
- Una memoria de 64Kb (65536 bytes), que será direccionable con un registro MAR en el procesador de 16 bits (si se hace la operación, 2 elevado a 16 es 65536, el mayor número que un número binario de 16 cifras puede representar).
- Un registro de propósito general de 16 bits, llamado AC; además, un SR (estado), MAR y MDR (datos y direcciones) y PC.
- Una ALU en el procesador con 8 operaciones: AND, OR, NOT, XOR, ADD (suma), SUB (resta), INC (incrementa en uno) y DEC (resta uno).

1.6.2.- Juego de instrucciones

Las instrucciones que va a poder ejecutar la CPU son las siguientes:
- Aritmético-lógicas: las que realiza la ALU, es decir, AND, OR, NOT, XOR, ADD, SUB, INC y DEC.
- Para mover posiciones de memoria entre sí, al registro AC o desde el registro AC (todo ello reunido en la instrucción "MOV").
- Salto en ejecución (JMP)
- Comparación (CMP): Lo que hará será actualizar el registro de estado en la CPU dependiendo del resultado de la comparación, para permitir saltos condicionales a posteriori.
- Salto condicional (JE -> Salta si Igual (Jump if Equal), JNE -> Salta si no Igual (Jump if Not Equal)).
- Parada del procesador (STOP)
Algunos ejemplos de la implementación de estas instrucciones serían:
* AND [1214h],AC -> realizaría la operación lógica entre el registro AC y los 16 bits contenidos en la dirección de memoria 1214h (h significa que la notación del número es hexadecimal), almacenando en esa posición de memoria el resultado.
* OR [1263h], [1821h] -> haría un OR lógico entre los contenidos de memoria de 1263h y 1821h, almacenando en 1263h el resultado.
* MOV AC,[8241h] -> Movería el contenido de la dirección de memoria 8241h al registro AC.
* JMP 2222h -> Cambiaría el PC (Program Counter, es decir, la siguiente instrucción a ser ejecutada) a la dirección 2222h. La instrucción que se contenga en esa dirección será la siguiente a ser ejecutada.
* CMP AC, 12 -> Si el contenido del registro AC es 12, activaría en el registro de estado de la CPU un bit que indicaría que el resultado de la ultima comparación es "verdadero", con lo que un JE (Jump if Equal o Salta si Igual) se ejecutaría si siguiese a esa instrucción.
* JE 1111h -> En caso de que en una comparación (CMP) anterior el resultado fuera verdadero (por ejemplo, en el caso anterior AC vale 12), el PC cambiaría para contener 1111h como dirección de la siguiente instrucción a ejecutar. En caso de que la comparación hubiera resultado falsa - en el caso anterior que AC no valga 12 -, la instrucción sería ignorada y se ejecutaría la siguiente instrucción.

1.6.3.- Ejecución de una instrucción

Podemos distinguir dos fases:
Fase de Fetch: Al comienzo del procesado de una nueva instrucción, el registro específico PC de la CPU contiene la dirección de donde esta ha de obtenerse. El contenido de este registro se pasará al MAR (Memory Address Register) transfiriéndose a la memoria mediante el bus de direcciones, y se activará esta memoria para indicar que se desea realizar una lectura sobre ella enviando una señal adecuada a través del bus de control. Así, la instrucción llegará hasta el MDR, de donde se enviará a la Unidad de Control para su procesamiento.
Procesamiento: Una vez llega la instrucción a la Unidad de Control, ésta distinguirá según su codificación de qué tipo es y realizará las operaciones necesarias para ejecutarla. Si por ejemplo es un salto tipo JMP, enviará la dirección al PC y dará por terminada la ejecución de la instrucción. Por supuesto hay casos bastante más complejos, como podría ser un ADD AC, 215 (sumar 215 al registro AC). En esta en particular, el procesador enviará esta cifra (215) a una de las entradas de la ALU y el registro AC a la otra, indicando mediante señales de control a ésta que desea activar la operación de sumar, ADD. Una vez realizada la operación dentro de la ALU, su salida se enviará de nuevo al registro AC, con lo que ahora contendrá AC+215, acabando entonces la ejecución de esta instrucción y pasando de nuevo a la fase de fetch (por supuesto no sin antes sumarle al registro de contador de programa la longitud de la instrucción que se acaba de ejecutar, para que al acceder a memoria en el fetch se cargue la siguiente en la Unidad de Control).
Dado que los ejemplos nunca sobran, veamos una instrucción como CMP AC, 12. Una vez llegue tras la fase de fetch a la Unidad de Control, de nuevo se utilizará la ALU; en esta ocasión se la indicará mediante señales de control que realice la operación de resta (SUB), metiendo por un lado el 12 y por otro el registro AC. Sin embargo, la salida de la ALU se perderá pues lo único que no simporta es si el resultado de la operación es 0 (si el contenido de AC - 12 resulta cero, está claro que AC contiene un 12). En caso de ser por tanto AC = 12, se modificará el Registro de Estado para indicar que el resultado de la anterior operación fue cero, es decir, que AC vale efectivamente 12 (aunque no necesariamente AC, podríamos hacer algo como CMP [1212h],16, es decir, comparar 16 con el contenido de la posición de memoria 1212h). A posteriori, de nuevo se sumaría el tamaño de esta instrucción al registro PC y se haría el fetch de la siguiente instrucción.

1.6.4.- Un programa sencillo

Con lo que sabemos, ya podemos escribir un programa sencillo; en este caso y dado que nuestro pequeño ordenador no posee operación de multiplicar, lo que va a hacer la rutina siguiente es la multiplicación entre dos números contenidos en las direcciones de memoria [1000h] y [1002h], almacenando el resultado en [1004h]. MOV AC,[1000h] ; Cargamos en AC el primer operando
MOV [1004h],0 ; Ponemos a cero el resultado
Bucle: DEC AC ; Decrementamos AC en uno
ADD [1004h],[1002h] ; Añadimos al resultado el segundo operando
CMP AC,0
JNE Bucle
STOP
La ejecución de este programa es fácil de comprender; el algoritmo que utiliza para multiplicar los números contenidos en 1000h y 1002h es el de coger uno de ellos y sumarlo tantas veces como el otro indique (por ejemplo, 7*6 se convertiría en 7+7+7+7+7+7). Para ello lo que hace es ir restando uno (con el DEC) cada vez que hace una suma del primer operando sobre el resultado, y cuando este llega a cero, el JNE (Jump if Not Equal, salta si no es igual) no se ejecutará y por tanto llegará al STOP, es decir, que el programa habrá concluído y la operación habrá sido realizada.

1.6.5.- Lenguaje ensamblador

El trozo de código del apartado anterior está escrito en un lenguaje que el microprocesador entiende diréctamente gracias a su unidad de control. Aunque este varíe según el modelo (y tenemos por ejemplo procesadores con pocas instrucciones como son los RISC o con muchas como los CISC), la denominación de este lenguaje básico del procesador como lenguaje ensamblador se mantiene.
Más adelante, habrá que aprender el ensamblador (o ASM) propio del PC de cara a la programación de virus, pues es en este lenguaje en el que se escriben. En realidad, cuando escribimos un programa en cualquier otro lenguaje como pueda ser C, lo que está haciendo el compilador que traduce nuestro código a un formato ejecutable es traducirlo a ensamblador (lógicamente, una máquina no puede interpretar diréctamente el lenguaje C). Una vez el compilador ha realizado ese trabajo de traducción desde el lenguaje en que hemos programado a ensamblador, la máquina ya puede ejecutar nuestro programa. Es por esto, que programar diréctamente en ensamblador nos da grandes ventajas al estar controlando al detalle qué sucede en la máquina, qué está ejecutando el procesador, en lugar de delegar el trabajo a compiladores sobre los que no ejercemos un control directo.

Generalizacion Informatica

GENERALIZACION INFORMATICA

Ordenador o Computadora, dispositivo electrónico capaz de recibir un conjunto de instrucciones y ejecutarlas realizando cálculos sobre los datos numéricos, o bien compilando y correlacionando otros tipos de información.


El mundo de la alta tecnología nunca hubiera existido de no ser por el desarrollo del ordenador o computadora. Toda la sociedad utiliza estas máquinas, en distintos tipos y tamaños, para el almacenamiento y manipulación de datos. Los equipos informáticos han abierto una nueva era en la fabricación gracias a las técnicas de automatización, y han permitido mejorar los sistemas modernos de comunicación. Son herramientas esenciales prácticamente en todos los campos de investigación y en tecnología aplicada.



1. TIPOS DE ORDENADORES


En la actualidad se utilizan dos tipos principales de ordenadores: analógicos y digitales. Sin embargo, el término ordenador o computadora suele utilizarse para referirse exclusivamente al tipo digital. Los ordenadores analógicos aprovechan la similitud matemática entre las interrelaciones físicas de determinados problemas y emplean circuitos electrónicos o hidráulicos para simular el problema físico. Los ordenadores digitales resuelven los problemas realizando cálculos y tratando cada número dígito por dígito.
Las instalaciones que contienen elementos de ordenadores digitales y analógicos se denominan ordenadores híbridos. Por lo general se utilizan para problemas en los que hay que calcular grandes cantidades de ecuaciones complejas, conocidas como integrales de tiempo. En un ordenador digital también pueden introducirse datos en forma analógica mediante un convertidor analógico digital, y viceversa (convertidor digital a analógico).


Ordenadores Analógicos

El ordenador analógico es un dispositivo electrónico o hidráulico diseñado para manipular la entrada de datos en términos de, por ejemplo, niveles de tensión o presiones hidráulicas, en lugar de hacerlo como datos numéricos. El dispositivo de cálculo analógico más sencillo es la regla de cálculo, que utiliza longitudes de escalas especialmente calibradas para facilitar la multiplicación, la división y otras funciones. En el típico ordenador analógico electrónico, las entradas se convierten en tensiones que pueden sumarse o multiplicarse empleando elementos de circuito de diseño especial. Las respuestas se generan continuamente para su visualización o para su conversión en otra forma deseada.

Ordenadores Digitales

Todo lo que hace un ordenador digital se basa en una operación: la capacidad de determinar si un conmutador, o ‘puerta’, está abierto o cerrado. Es decir, el ordenador puede reconocer sólo dos estados en cualquiera de sus circuitos microscópicos: abierto o cerrado, alta o baja tensión o, en el caso de números, 0 o 1. Sin embargo, es la velocidad con la cual el ordenador realiza este acto tan sencillo lo que lo convierte en una maravilla de la tecnología moderna. Las velocidades del ordenador se miden en megahercios (millones de ciclos por segundo), aunque en la actualidad se alcanzan velocidades del orden de los gigahercios (miles de millones de ciclo por segundo). Un ordenador con una velocidad de reloj de 1 gigahercio (GHz), velocidad bastante representativa de un microordenador o microcomputadora, es capaz de ejecutar 1.000 millones de operaciones discretas por segundo, mientras que las supercomputadoras utilizadas en aplicaciones de investigación y de defensa alcanzan velocidades de billones de ciclos por segundo.
La velocidad y la potencia de cálculo de los ordenadores digitales se incrementan aún más por la cantidad de datos manipulados durante cada ciclo. Si un ordenador verifica sólo un conmutador cada vez, dicho conmutador puede representar solamente dos comandos o números. Así, ON simbolizaría una operación o un número, mientras que OFF simbolizará otra u otro. Sin embargo, al verificar grupos de conmutadores enlazados como una sola unidad, el ordenador aumenta el número de operaciones que puede reconocer en cada ciclo. Por ejemplo, un ordenador que verifica dos conmutadores cada vez, puede representar cuatro números (del 0 al 3), o bien ejecutar en cada ciclo una de las cuatro operaciones, una para cada uno de los siguientes modelos de conmutador: OFF-OFF (0), OFF-ON (1), ON-OFF (2) u ON-ON (3). En general, los ordenadores de la década de 1970 eran capaces de verificar 8 conmutadores simultáneamente; es decir, podían verificar ocho dígitos binarios, de ahí el término bit de datos en cada ciclo. Un grupo de ocho bits se denomina byte y cada uno contiene 256 configuraciones posibles de ON y OFF (o 1 y 0). Cada configuración equivale a una instrucción, a una parte de una instrucción o a un determinado tipo de dato; estos últimos pueden ser un número, un carácter o un símbolo gráfico. Por ejemplo, la configuración 11010010 puede representar datos binarios, en este caso el número decimal 210 (véase Sistemas numéricos), o bien estar indicando al ordenador que compare los datos almacenados en estos conmutadores con los datos almacenados en determinada ubicación del chip de memoria. El desarrollo de procesadores capaces de manejar simultáneamente 16, 32 y 64 bits de datos permitió incrementar la velocidad de los ordenadores.

La colección completa de configuraciones reconocibles, es decir, la lista total de operaciones que una computadora es capaz de procesar, se denomina conjunto, o repertorio, de instrucciones. Ambos factores, el número de bits simultáneos y el tamaño de los conjuntos de instrucciones, continúa incrementándose a medida que avanza el desarrollo de los ordenadores digitales modernos.



2. HISTORIA


La primera máquina de calcular mecánica, un precursor del ordenador digital, fue inventada en 1642 por el matemático francés Blaise Pascal. Aquel dispositivo utilizaba una serie de ruedas de diez dientes en las que cada uno de los dientes representaba un dígito del 0 al 9. Las ruedas estaban conectadas de tal manera que podían sumarse números haciéndolas avanzar el número de dientes correcto. En 1670 el filósofo y matemático alemán Gottfried Wilhelm Leibniz perfeccionó esta máquina e inventó una que también podía multiplicar.
El inventor francés Joseph Marie Jacquard, al diseñar un telar automático, utilizó delgadas placas de madera perforadas para controlar el tejido utilizado en los diseños complejos. Durante la década de 1880 el estadístico estadounidense Herman Hollerith concibió la idea de utilizar tarjetas perforadas, similares a las placas de Jacquard, para procesar datos. Hollerith consiguió compilar la información estadística destinada al censo de población de 1890 de Estados Unidos mediante la utilización de un sistema que hacía pasar tarjetas perforadas sobre contactos eléctricos.

También en el siglo XIX el matemático e inventor británico Charles Babbage elaboró los principios de la computadora digital moderna. Inventó una serie de máquinas, como la máquina diferencial, diseñadas para solucionar problemas matemáticos complejos. Muchos historiadores consideran a Babbage y a su socia, la matemática británica Augusta Ada Byron (1815-1852), hija del poeta inglés lord Byron, como a los verdaderos inventores de la computadora digital moderna. La tecnología de aquella época no era capaz de trasladar a la práctica sus acertados conceptos; pero una de sus invenciones, la máquina analítica, ya tenía muchas de las características de un ordenador moderno. Incluía una corriente, o flujo de entrada en forma de paquete de tarjetas perforadas, una memoria para guardar los datos, un procesador para las operaciones matemáticas y una impresora para hacer permanente el registro.
Primeros Ordenadores
Los ordenadores analógicos comenzaron a construirse a principios del siglo XX. Los primeros modelos realizaban los cálculos mediante ejes y engranajes giratorios. Con estas máquinas se evaluaban las aproximaciones numéricas de ecuaciones demasiado difíciles como para poder ser resueltas mediante otros métodos. Durante las dos guerras mundiales se utilizaron sistemas informáticos analógicos, primero mecánicos y más tarde eléctricos, para predecir la trayectoria de los torpedos en los submarinos y para el manejo a distancia de las bombas en la aviación.


Ordenadores Electrónicos

Durante la II Guerra Mundial (1939-1945), un equipo de científicos y matemáticos que trabajaban en Bletchley Park, al norte de Londres, crearon lo que se consideró el primer ordenador digital totalmente electrónico: el Colossus. Hacia diciembre de 1943 el Colossus, que incorporaba 1.500 válvulas o tubos de vacío, era ya operativo. Fue utilizado por el equipo dirigido por Alan Turing para descodificar los mensajes de radio cifrados de los alemanes. En 1939 y con independencia de este proyecto, John Atanasoff y Clifford Berry ya habían construido un prototipo de máquina electrónica en el Iowa State College (EEUU). Este prototipo y las investigaciones posteriores se realizaron en el anonimato, y más tarde quedaron eclipsadas por el desarrollo del Calculador e integrador numérico electrónico (en inglés ENIAC, Electronic Numerical Integrator and Computer) en 1946. El ENIAC, que según se demostró se basaba en gran medida en el ordenador Atanasoff-Berry (en inglés ABC, Atanasoff-Berry Computer), obtuvo una patente que caducó en 1973, varias décadas más tarde.

El ENIAC contenía 18.000 válvulas de vacío y tenía una velocidad de varios cientos de multiplicaciones por minuto, pero su programa estaba conectado al procesador y debía ser modificado manualmente. Se construyó un sucesor del ENIAC con un almacenamiento de programa que estaba basado en los conceptos del matemático húngaro-estadounidense John von Neumann. Las instrucciones se almacenaban dentro de una llamada memoria, lo que liberaba al ordenador de las limitaciones de velocidad del lector de cinta de papel durante la ejecución y permitía resolver problemas sin necesidad de volver a conectarse al ordenador.

A finales de la década de 1950 el uso del transistor en los ordenadores marcó el advenimiento de elementos lógicos más pequeños, rápidos y versátiles de lo que permitían las máquinas con válvulas. Como los transistores utilizan mucha menos energía y tienen una vida útil más prolongada, a su desarrollo se debió el nacimiento de máquinas más perfeccionadas, que fueron llamadas ordenadores o computadoras de segunda generación. Los componentes se hicieron más pequeños, así como los espacios entre ellos, por lo que la fabricación del sistema resultaba más barata.


A finales de la década de 1960 apareció el circuito integrado (CI), que posibilitó la fabricación de varios transistores en un único sustrato de silicio en el que los cables de interconexión iban soldados. El circuito integrado permitió una posterior reducción del precio, el tamaño y los porcentajes de error. El microprocesador se convirtió en una realidad a mediados de la década de 1970, con la introducción del circuito de integración a gran escala (LSI, acrónimo de Large Scale Integrated) y, más tarde, con el circuito de integración a mayor escala (VLSI, acrónimo de Very Large Scale Integrated), con varios miles de transistores interconectados soldados sobre un único sustrato de silicio.

HARDWARE

Todos los ordenadores digitales modernos son similares conceptualmente con independencia de su tamaño. Sin embargo, pueden dividirse en varias categorías según su precio y rendimiento: el ordenador o computadora personal es una máquina de coste relativamente bajo y por lo general de tamaño adecuado para un escritorio (algunos de ellos, denominados portátiles, o laptops, son lo bastante pequeños como para caber en un maletín); la estación de trabajo, un microordenador con gráficos mejorados y capacidades de comunicaciones que lo hacen especialmente útil para el trabajo de oficina; el miniordenador o minicomputadora, un ordenador de mayor tamaño que por lo general es demasiado caro para el uso personal y que es apto para compañías, universidades o laboratorios; y el mainframe, una gran máquina de alto precio capaz de servir a las necesidades de grandes empresas, departamentos gubernamentales, instituciones de investigación científica y similares (las máquinas más grandes y más rápidas dentro de esta categoría se denominan superordenadores).

En realidad, un ordenador digital no es una única máquina, en el sentido en el que la mayoría de la gente considera a los ordenadores. Es un sistema compuesto de cinco elementos diferenciados: una CPU (unidad central de proceso); dispositivos de entrada; dispositivos de almacenamiento de memoria; dispositivos de salida y una red de comunicaciones, denominada bus, que enlaza todos los elementos del sistema y conecta a éste con el mundo exterior.

LA CPU – UNIDAD CENTRAL DE PROCESO

La CPU puede ser un único chip o una serie de chips que realizan cálculos aritméticos y lógicos y que temporizan y controlan las operaciones de los demás elementos del sistema. Las técnicas de miniaturización y de integración han posibilitado el desarrollo de un chip de CPU denominado microprocesador, que incorpora un sistema de circuitos y memoria adicionales. El resultado son unos ordenadores más pequeños y la reducción del sistema de circuitos de soporte. Los microprocesadores se utilizan en la mayoría de los ordenadores personales de la actualidad.
La mayoría de los chips de CPU y de los microprocesadores están compuestos de cuatro secciones funcionales: una unidad aritmética/lógica; unos registros; una sección de control y un bus interno. La unidad aritmética/lógica proporciona al chip su capacidad de cálculo y permite la realización de operaciones aritméticas y lógicas. Los registros son áreas de almacenamiento temporal que contienen datos, realizan un seguimiento de las instrucciones y conservan la ubicación y los resultados de dichas operaciones. La sección de control tiene tres tareas principales: temporiza y regula las operaciones de la totalidad del sistema informático; su descodificador de instrucciones lee las configuraciones de datos en un registro designado y las convierte en una actividad, como podría ser sumar o comparar, y su unidad interruptora indica en qué orden utilizará la CPU las operaciones individuales y regula la cantidad de tiempo de CPU que podrá consumir cada operación.

El último segmento de un chip de CPU o microprocesador es su bus interno, una red de líneas de comunicación que conecta los elementos internos del procesador y que también lleva hacia los conectores externos que enlazan al procesador con los demás elementos del sistema informático. Los tres tipos de bus de la CPU son: el bus de control que consiste en una línea que detecta las señales de entrada y de otra línea que genera señales de control desde el interior de la CPU; el bus de dirección, una línea unidireccional que sale desde el procesador y que gestiona la ubicación de los datos en las direcciones de la memoria; y el bus de datos, una línea de transmisión bidireccional que lee los datos de la memoria y escribe nuevos datos en ésta.


Dispositivos de Entrada

Estos dispositivos permiten al usuario del ordenador introducir datos, comandos y programas en la CPU. El dispositivo de entrada más común es un teclado similar al de las máquinas de escribir. La información introducida con el mismo, es transformada por el ordenador en modelos reconocibles. Otros dispositivos de entrada son los lápices ópticos, que transmiten información gráfica desde tabletas electrónicas hasta el ordenador; joysticks y el ratón o mouse, que convierte el movimiento físico en movimiento dentro de una pantalla de ordenador; los escáneres luminosos, que leen palabras o símbolos de una página impresa y los traducen a configuraciones electrónicas que el ordenador puede manipular y almacenar; y los módulos de reconocimiento de voz, que convierten la palabra hablada en señales digitales comprensibles para el ordenador. También es posible utilizar los dispositivos de almacenamiento para introducir datos en la unidad de proceso.

Dispositivos de Salida

Estos dispositivos permiten al usuario ver los resultados de los cálculos o de las manipulaciones de datos de la computadora. El dispositivo de salida más común es la unidad de visualización (VDU, acrónimo de Video Display Unit), que consiste en un monitor que presenta los caracteres y gráficos en una pantalla similar a la del televisor. Por lo general, las VDU tienen un tubo de rayos catódicos como el de cualquier televisor, aunque los ordenadores pequeños y portátiles utilizan hoy pantallas de cristal líquido (LCD, acrónimo de Liquid Crystal Displays) o electroluminiscentes. Otros dispositivos de salida más comunes son la impresora y el módem. Un módem enlaza dos ordenadores transformando las señales digitales en analógicas para que los datos puedan transmitirse a través de las telecomunicaciones.

Dispositivos de Almacenamiento


Los sistemas informáticos pueden almacenar los datos tanto interna (en la memoria) como externamente (en los dispositivos de almacenamiento). Internamente, las instrucciones o datos pueden almacenarse por un tiempo en los chips de silicio de la RAM (memoria de acceso aleatorio) montados directamente en la placa de circuitos principal de la computadora, o bien en chips montados en tarjetas periféricas conectadas a la placa de circuitos principal del ordenador. Estos chips de RAM constan de conmutadores sensibles a los cambios de la corriente eléctrica. Los chips de RAM estática conservan sus bits de datos mientras la corriente siga fluyendo a través del circuito, mientras que los chips de RAM dinámica (DRAM, acrónimo de Dynamic Random Access Memory) necesitan la aplicación de tensiones altas o bajas a intervalos regulares aproximadamente cada dos milisegundos para no perder su información.
Otro tipo de memoria interna son los chips de silicio en los que ya están instalados todos los conmutadores. Las configuraciones en este tipo de chips de ROM (memoria de sólo lectura) forman los comandos, los datos o los programas que el ordenador necesita para funcionar correctamente. Los chips de RAM son como pedazos de papel en los que se puede escribir, borrar y volver a utilizar; los chips de ROM son como un libro, con las palabras ya escritas en cada página. Tanto los primeros como los segundos están enlazados a la CPU a través de circuitos.
Los dispositivos de almacenamiento externos, que pueden residir físicamente dentro de la unidad de proceso principal del ordenador, están fuera de la placa de circuitos principal. Estos dispositivos almacenan los datos en forma de cargas sobre un medio magnéticamente sensible, por ejemplo una cinta de sonido o, lo que es más común, sobre un disco revestido de una fina capa de partículas metálicas. Los dispositivos de almacenamiento externo más frecuentes son los disquetes y los discos duros, aunque la mayoría de los grandes sistemas informáticos utiliza bancos de unidades de almacenamiento en cinta magnética. Los discos flexibles pueden contener, según sea el sistema, desde varios centenares de miles de bytes hasta bastante más de un millón de bytes de datos. Los discos duros no pueden extraerse de los receptáculos de la unidad de disco, que contienen los dispositivos electrónicos para leer y escribir datos sobre la superficie magnética de los discos y pueden almacenar miles de millones de bytes. La tecnología de CD-ROM, que emplea las mismas técnicas láser utilizadas para crear los discos compactos (CD) de audio, permiten capacidades de almacenamiento del orden de varios cientos de megabytes (millones de bytes) de datos.



Sistemas Operativos

Los sistemas operativos internos fueron desarrollados sobre todo para coordinar y trasladar estos flujos de datos que procedían de fuentes distintas, como las unidades de disco o los coprocesadores (chips de procesamiento que ejecutan operaciones simultáneamente con la unidad central, aunque son diferentes). Un sistema operativo es un programa de control principal, almacenado de forma permanente en la memoria, que interpreta los comandos del usuario que solicita diversos tipos de servicios, como visualización, impresión o copia de un archivo de datos; presenta una lista de todos los archivos existentes en un directorio o ejecuta un determinado programa.

3. Programacion

Un programa es una secuencia de instrucciones que indican al hardware de un ordenador qué operaciones debe realizar con los datos. Los programas pueden estar incorporados al propio hardware, o bien pueden existir de manera independiente en forma de software. En algunas computadoras especializadas las instrucciones operativas están incorporadas en el sistema de circuitos; entre los ejemplos más comunes pueden citarse los microordenadores de las calculadoras, relojes de pulsera, motores de coches y hornos microondas. Por otro lado, un ordenador universal, o de uso general, contiene algunos programas incorporados (en la ROM) o instrucciones (en el chip del procesador), pero depende de programas externos para ejecutar tareas útiles. Una vez programado, podrá hacer tanto o tan poco como le permita el software que lo controla en determinado momento. El software de uso más generalizado incluye una amplia variedad de programas de aplicaciones, es decir, instrucciones al ordenador acerca de cómo realizar diversas tareas.

Lenguajes

Aplicación de lenguajes

Las instrucciones deben darse en un lenguaje de programación, es decir, en una determinada configuración de información digital binaria. En las primeras computadoras, la programación era una tarea difícil y laboriosa ya que los conmutadores ON-OFF de las válvulas de vacío debían configurarse a mano. Programar tareas tan sencillas como ordenar una lista de nombres requería varios días de trabajo de equipos de programadores. Desde entonces se han inventado varios lenguajes informáticos, algunos orientados hacia funciones específicas y otros centrados en la facilidad de uso.

Lenguaje Maquina

El lenguaje propio del ordenador, basado en el sistema binario, o código máquina, resulta difícil de utilizar para las personas. El programador debe introducir todos y cada uno de los comandos y datos en forma binaria, y una operación sencilla como comparar el contenido de un registro con los datos situados en una ubicación del chip de memoria puede tener el siguiente formato: 11001010 00010111 11110101 00101011. La programación en lenguaje máquina es una tarea tan tediosa y consume tanto tiempo que muy raras veces lo que se ahorra en la ejecución del programa justifica los días o semanas que se han necesitado para escribir el mismo.


Lenguaje Ensamblador

Uno de los métodos inventados por los programadores para reducir y simplificar el proceso es la denominada programación con lenguaje ensamblador. Al asignar un código mnemotécnico (por lo general de tres letras) a cada comando en lenguaje máquina, es posible escribir y depurar o eliminar los errores lógicos y de datos en los programas escritos en lenguaje ensamblador, empleando para ello sólo una fracción del tiempo necesario para programar en lenguaje máquina. En el lenguaje ensamblador, cada comando mnemotécnico y sus operadores simbólicos equivalen a una instrucción de máquina. Un programa ensamblador traduce el código fuente, una lista de códigos de operación mnemotécnicos y de operadores simbólicos, a código objeto (es decir, a lenguaje máquina) y, a continuación, ejecuta el programa.
Sin embargo, el lenguaje ensamblador puede utilizarse con un solo tipo de chip de CPU o microprocesador. Los programadores, que dedicaron tanto tiempo y esfuerzo al aprendizaje de la programación de un ordenador, se veían obligados a aprender un nuevo estilo de programación cada vez que trabajaban con otra máquina. Lo que se necesitaba era un método abreviado en el que un enunciado simbólico pudiera representar una secuencia de numerosas instrucciones en lenguaje máquina, y un método que permitiera que el mismo programa pudiera ejecutarse en varios tipos de máquinas. Estas necesidades llevaron al desarrollo de lenguajes de alto nivel.
Lenguajes de Alto Nivel

Grace Hopper


Los lenguajes de alto nivel suelen utilizar términos ingleses del tipo LIST, PRINT u OPEN como comandos que representan una secuencia de decenas o de centenas de instrucciones en lenguaje máquina. Los comandos se introducen desde el teclado, desde un programa residente en la memoria o desde un dispositivo de almacenamiento, y son interceptados por un programa que los traduce a instrucciones en lenguaje máquina.
Los programas traductores son de dos tipos: intérpretes y compiladores. Con un intérprete, los programas que repiten un ciclo para volver a ejecutar parte de sus instrucciones, reinterpretan la misma instrucción cada vez que aparece. Por consiguiente, los programas interpretados se ejecutan con mucha mayor lentitud que los programas en lenguaje máquina. Por el contrario, los compiladores traducen un programa íntegro a lenguaje máquina antes de su ejecución, por lo cual se ejecutan con tanta rapidez como si hubiesen sido escritos directamente en lenguaje máquina.
Se considera que fue la estadounidense Grace Hopper quien implementó el primer lenguaje de ordenador orientado al uso comercial. Después de programar un ordenador experimental en la Universidad de Harvard, trabajó en los modelos UNIVAC I y UNIVAC II, desarrollando un lenguaje de alto nivel para uso comercial llamado FLOW-MATIC. Para facilitar el uso del ordenador en las aplicaciones científicas, IBM desarrolló un lenguaje que simplificaría el trabajo que implicaba el tratamiento de fórmulas matemáticas complejas. Iniciado en 1954 y terminado en 1957, el FORTRAN (acrónimo de Formula Translator) fue el primer lenguaje exhaustivo de alto nivel de uso generalizado.


Lenguajes de Programacion

En 1957 una asociación estadounidense, la Association for Computing Machinery comenzó a desarrollar un lenguaje universal que corrigiera algunos de los defectos del FORTRAN. Un año más tarde fue lanzado el ALGOL (acrónimo de Algorithmic Language), otro lenguaje de orientación científica. De gran difusión en Europa durante las décadas de 1960 y 1970, desde entonces ha sido sustituido por nuevos lenguajes, mientras que el FORTRAN continúa siendo utilizado debido a las gigantescas inversiones que se hicieron en los programas existentes. El COBOL (acrónimo de Common Business Oriented Language) es un lenguaje de programación para uso comercial y empresarial especializado en la organización de datos y manipulación de archivos, y hoy día está muy difundido en el mundo empresarial.
El lenguaje BASIC (acrónimo de Código de Instrucciones Simbólicas de Uso General para Principiantes) fue desarrollado en el Dartmouth College a principios de la década de 1960 y está dirigido a los usuarios de ordenador no profesionales. Este lenguaje se universalizó gracias a la popularización de los microordenadores en las décadas de 1970 y 1980. Calificado de lento, ineficaz y poco estético por sus detractores, BASIC es sencillo de aprender y fácil de utilizar. Como muchos de los primeros microordenadores se vendieron con BASIC incorporado en el hardware (en la memoria ROM), se generalizó el uso de este lenguaje.
Aunque existen centenares de lenguajes informáticos y de variantes, hay algunos dignos de mención, como el PASCAL, diseñado en un principio como herramienta de enseñanza, hoy es uno de los lenguajes de microordenador más populares; el Logo fue desarrollado para que los niños pudieran acceder al mundo de la informática; el C, un lenguaje de Bell Laboratories diseñado en la década de 1970, se utiliza ampliamente en el desarrollo de programas de sistemas, al igual que su sucesor, el C++. El LISP y el PROLOG han alcanzado amplia difusión en el campo de la inteligencia artificial.


Una tendencia constante en el desarrollo de los ordenadores es la microminiaturización, iniciativa que tiende a comprimir más elementos de circuitos en un espacio de chip cada vez más pequeño. Además, los investigadores intentan agilizar el funcionamiento de los circuitos mediante el uso de la superconductividad, un fenómeno de disminución de la resistencia eléctrica que se observa cuando se enfrían los objetos a temperaturas muy bajas.
Las redes informáticas se han vuelto cada vez más importantes en el desarrollo de la tecnología de computadoras. Las redes son grupos de computadoras interconectados mediante sistemas de comunicación. La red pública Internet es un ejemplo de red informática planetaria. Las redes permiten que las computadoras conectadas intercambien rápidamente información y, en algunos casos, compartan una carga de trabajo, con lo que muchas computadoras pueden cooperar en la realización de una tarea. Se están desarrollando nuevas tecnologías de equipo físico y soporte lógico que acelerarán los dos procesos mencionados.
Otra tendencia en el desarrollo de computadoras es el esfuerzo para crear computadoras de quinta generación, capaces de resolver problemas complejos en formas que pudieran llegar a considerarse creativas. Una vía que se está explorando activamente es el ordenador de proceso paralelo, que emplea muchos chips para realizar varias tareas diferentes al mismo tiempo. El proceso paralelo podría llegar a reproducir hasta cierto punto las complejas funciones de realimentación, aproximación y evaluación que caracterizan al pensamiento humano. Otra forma de proceso paralelo que se está investigando es el uso de computadoras moleculares. En estas computadoras, los símbolos lógicos se expresan por unidades químicas de ADN en vez de por el flujo de electrones habitual en las computadoras corrientes. Las computadoras moleculares podrían llegar a resolver problemas complicados mucho más rápidamente que las actuales supercomputadoras y consumir mucha menos energía.


Seguridad en Redes de Computadores



Auditoria aplicada a la seguridad en redes de computadores

1. Introducción



La organización en la parte de las redes de comunicaciones de computadores es un punto de viraje bastante importante; es por ello, que uno de los modelos de red más conocidos, es el modelo OSI.A grandes rasgos, el modelo OSI, dado por capas, está dividido en:
Capa física:Se encarga de garantizar la integridad de la información transmitida por la red; por ejemplo, si se envía un 0, que llegue un 0 .
Capa de enlace:Garantiza que la línea o canal de transmisión, esté libre de errores.
Capa de red:Determina como se encaminan los paquetes, de la fuente al destino.Igualmente, debe velar por el tráfico de la red, evitando al máximo las congestiones. Para ello, debe llevar un registro contable de los paquetes que transitan.
Capa de transporte:Divide los datos en unidades más pequeñas y garantiza que tal información transmitida, llegue correctamente a su destino.De igual forma, crea una conexión de red distinta para cada conexión de transporte requerida, regulando así el flujo de información.Analiza también, el tipo de servicio que proporcionará la capa de sesión y finalmente a los usuarios de red.
Capa de sesión:Maneja el sentido de transmisión de los datos y la sincronización de operaciones; es decir, si uno transmite, el otro se prepare para recibir y viceversa oSituaciones Commit, donde tras algún problema, se sigue tras ultimo punto de verificación.
Capa de presentación:Se encarga de analizar si el mensaje es semántica y sintácticamente correcto.
Capa de aplicación:Implementación de protocolos y transferencia de archivos.Lo anterior, nos permite describir 3 tipos de fallos en la seguridad de la red:
1. Alteración de bits: Se corrige por código de redundancia cíclico.
2. Ausencia de tramas: Las tramas se desaparecen por el ambiente o una sobrecarga del sistema; para ello, se debe tener un número de secuencia de tramas.
3. Alteración de la secuencia en la cual el receptor reconstruye mensaje.
Otro de los tipos de modelos de referencia más conocidos, es el TCP/IP, hoy día, con algunas variaciones, como el de encapsular varios protocolos, como el Netbios; el TCP/IP da replicación de los canales para posibles caídas del sistema.Bajo ésta política, entonces se ha definido como clases de redes:
· Intranet = Red interna de la empresa.
· Extranet = Red externa pero directamente relacionada a la empresa.
· Internet = La red de redes.

El problema de tales implementaciones, es que por los puertos de estandarización pública de TCP/IP, se puede entrar cualquier tercero para afectar la red de la compañía o su flujo de información Tal cuestión, es recurrente sobretodo en el acceso de la red interna de la compañía a la Internet, para lo cual, y como medida de protección, se usan Firewall ( cortafuegos ) que analizan todo tipo de información que entra por Internet a la compañía, activando una alarma, en caso de haber algún intruso o peligro por esa vía a la red.La compañía puede definir 2 tipos extremos de políticas de seguridad:
· Políticas paranoicas: Toda acción o proceso está prohibido en la red.
· Políticas promiscuas: No existe la más mínima protección o control a las acciones de los usuarios en la red.
No importa lo que haga la empresa, siempre va a haber un punto de fallo, para adelantarse a intrusos, entonces se han ideado algunas herramientas para probar la eficacia de las políticas de seguridad en red de la empresa, algunas de tales herramientas, son: SAFEsuite y COPS. Estas empiezan probando la fiabilidad de las contraseñas de usuario usando algunas técnicas de indagación como es el leer el tráfico de la red buscando en tal información sobre nombres de usuarios y contraseñas respectivas, probar la buena fé de los usuarios mandándoles mensajes de la administración solicitando su contraseña a una especificada por la herramienta o probando contraseñas comunes o por defecto en muchos sistemas.





2. Auditoria de comunicaciones:



Ha de verse:
· La gestión de red = los equipos y su conectividad.
· La monitorización de las comunicaciones.
· La revisión de costes y la asignación formal de proveedores.
· Creación y aplicabilidad de estándares.
Cumpliendo como objetivos de control:
· Tener una gerencia de comunicaciones con plena autoridad de voto y acción.
· Llevar un registro actualizado de módems, controladores, terminales, líneas y todo equipo relacionado con las comunicaciones.
· Mantener una vigilancia constante sobre cualquier acción en la red.
· Registrar un coste de comunicaciones y reparto a encargados.
· Mejorar el rendimiento y la resolución de problemas presentados en la red.
Para lo cual se debe comprobar:
· El nivel de acceso a diferentes funciones dentro de la red.
· Coordinación de la organización de comunicación de datos y voz.
· Han de existir normas de comunicación en:
o Tipos de equipamiento como adaptadores LAN.
o Autorización de nuevo equipamiento, tanto dentro, como fuera de las horas laborales.
o Uso de conexión digital con el exterior como Internet.
o Instalación de equipos de escucha como Sniffers (exploradores físicos) o Traceadores (exploradores lógicos).
· La responsabilidad en los contratos de proveedores.
· La creación de estrategias de comunicación a largo plazo.
· Los planes de comunicación a alta velocidad como fibra óptica y ATM ( técnica de conmutación de paquetes usada en redes MAN e ISDN).
· Planificación de cableado.
· Planificación de la recuperación de las comunicaciones en caso de desastre.
· Ha de tenerse documentación sobre el diagramado de la red.
· Se deben hacer pruebas sobre los nuevos equipos.
· Se han de establecer las tasas de rendimiento en tiempo de respuesta de las terminales y la tasa de errores.
· Vigilancia sobre toda actividad on-line.
· La facturación de los transportistas y vendedores ha de revisarse regularmente.





3. Auditoria De La Red Física



Se debe garantizar que exista:
· Áreas de equipo de comunicación con control de acceso.
· Protección y tendido adecuado de cables y líneas de comunicación para evitar accesos físicos.
· Control de utilización de equipos de prueba de comunicaciones para monitorizar la red y el trafico en ella.
· Prioridad de recuperación del sistema.
· Control de las líneas telefónicas.
Comprobando que:
· El equipo de comunicaciones ha de estar en un lugar cerrado y con acceso limitado.
· La seguridad física del equipo de comunicaciones sea adecuada.
· Se tomen medidas para separar las actividades de los electricistas y de cableado de líneas telefónicas.
· Las líneas de comunicación estén fuera de la vista.
· Se dé un código a cada línea, en vez de una descripción física de la misma.
· Haya procedimientos de protección de los cables y las bocas de conexión para evitar pinchazos a la red.
· Existan revisiones periódicas de la red buscando pinchazos a la misma.
· El equipo de prueba de comunicaciones ha de tener unos propósitos y funciones específicas.
· Existan alternativas de respaldo de las comunicaciones.
· Con respecto a las líneas telefónicas: No debe darse el número como público y tenerlas configuradas con retrollamada, código de conexión o interruptores.





4. Auditoria De La Red Lógica



En ésta, debe evitarse un daño interno, como por ejemplo, inhabilitar un equipo que empieza a enviar mensajes hasta que satura por completo la red.Para éste tipo de situaciones:
· Se deben dar contraseñas de acceso.
· Controlar los errores.
· Garantizar que en una transmisión, ésta solo sea recibida por el destinatario. Para esto, regularmente se cambia la ruta de acceso de la información a la red.
· Registrar las actividades de los usuarios en la red.
· Encriptar la información pertinente.
· Evitar la importación y exportación de datos.
Que se comprueban si:El sistema pidió el nombre de usuario y la contraseña para cada sesión:En cada sesión de usuario, se debe revisar que no acceda a ningún sistema sin autorización, ha de inhabilitarse al usuario que tras un número establecido de veces erra en dar correctamente su propia contraseña, se debe obligar a los usuarios a cambiar su contraseña regularmente, las contraseñas no deben ser mostradas en pantalla tras digitarlas, para cada usuario, se debe dar información sobre su última conexión a fin de evitar suplantaciones.
· Inhabilitar el software o hardware con acceso libre.
· Generar estadísticas de las tasas de errores y transmisión.
· Crear protocolos con detección de errores.
· Los mensajes lógicos de transmisión han de llevar origen, fecha, hora y receptor.
· El software de comunicación, ha de tener procedimientos correctivos y de control ante mensajes duplicados, fuera de orden, perdidos o retrasados.
· Los datos sensibles, solo pueden ser impresos en una impresora especificada y ser vistos desde una terminal debidamente autorizada.
· Se debe hacer un análisis del riesgo de aplicaciones en los procesos.
· Se debe hacer un análisis de la conveniencia de cifrar los canales de transmisión entre diferentes organizaciones.
· Asegurar que los datos que viajan por Internet vayan cifrados.
· Si en la LAN hay equipos con modem entonces se debe revisar el control de seguridad asociado para impedir el acceso de equipos foráneos a la red.
· Deben existir políticas que prohíban la instalación de programas o equipos personales en la red.
· Los accesos a servidores remotos han de estar inhabilitados.
· La propia empresa generará propios ataques para probar solidez de la red y encontrar posibles fallos en cada una de las siguientes facetas:
o Servidores = Desde dentro del servidor y de la red interna.
o Servidores web.
o Intranet = Desde dentro.
o Firewall = Desde dentro.
o Accesos del exterior y/o Internet.





5. Criptografia



La criptografía se define como " las técnicas de escrituras tales que la información esté oculta de intrusos no autorizados". Esto, no incluye el criptoanálisis que trata de reventar tales técnicas para descubrir el mensaje oculto.Existen 2 tipos de criptoanálisis:Diferencial:Con variaciones de un bit en cada intento, trata de averiguar la clave de descifrado del mensaje oculto.Lineal :Se apoya en variaciones XOR entre cada par de bits, hasta que se logre obtener un único bit, parte de la clave.Relacionado con esto, se ha desarrollado también la esteganografía, que bajo un camuflaje totalmente ajeno al mensaje a transmitir, se envía la información oculta.Aunque el cifrado de información es una excelente técnica para proteger los datos, no debería convertirse en el desvelo de la compañía, pues existen otros tipos de debilidades más importantes para tratar por la compañía, ello, además porque ya existen diferentes programas, hasta gratuitos, como algunas versiones de PGP, tales que toda la potencia informática del mundo, podría romperlos.
Algunos tipos de métodos de criptografía, son:Transposición :Invierte el orden de los caracteres en el mensaje. Por ejemplo, si se quiere cifrar "El perro de san Roque no tiene rabo " , colocándolo en un arreglo de columnas de tamaño n, con clave de descifrado k = n en secuencia con 5 columnas {3,2,5,1,4}, el mensaje cifrado quedaría = "osonea lr r ir ednu eo ere et p aqonb" Tal mecanismo, se criptoanaliza con estudios de factibilidad de cierto tipo de tuplas.DES:Utiliza una clave de 56 bits para codificar bloques de 64 bits, por su escasa longitud de clave de acceso, es fácil de romper.
IDEA:Surgió del DES, IDEA genera bloques de ciframiento de 64 bits con una clave de 128 bits, además usa diversas técnicas de confusión, como es el XOR, suma modulo 2^16 y producto (2^16)+1 .El problema de la criptografía de llave privada, es que en una red muy grande, en caso de que se decida cambiar la clave de desciframiento, hay que notificar a cada uno de los participantes en los procesos de transmisión de datos, corriéndose el peligro de que caiga la nueva clave en manos no autorizadas..Es por ello, que se ha desarrollado la criptografía de llave pública, que consta de 2 tipos de llaves:
· Una que es pública y conocida por todos los miembros autorizados de la red.
· Una segunda, que es privada y solo la conoce su dueño y el paquete cifrado.
De esa forma, si es necesario cambiar las claves, se notifica por un mensaje cifrado a todos los participantes de la transmisión usando la llave pública.RSA es un tipo común de transmisión encriptada por llave privada, opera por factorizaciones de los mensajes clave o registro por números primos de orden.
Consideraciones para Elaborar un Sistema de Seguridad IntegralComo hablamos de realizar la evaluación de la seguridad es importante también conocer como desarrollar y ejecutar el implantar un sistema de seguridad.Desarrollar un sistema de seguridad significa: "planear, organizar coordinar dirigir y controlar las actividades relacionadas a mantener y garantizar la integridad física de los recursos implicados en la función informática, así como el resguardo de los activos de la empresa."Por lo cual podemos ver las consideraciones de un sistema de integral de seguridad.
Sistema Integral de SeguridadUn sistema integral debe contemplar:
· Definir elementos administrativos
· Definir políticas de seguridad
· A nivel departamental
· A nivel institucional
· Organizar y dividir las responsabilidades
· Definir prácticas de seguridad para el personal:
o Plan de emergencia (plan de evacuación, uso de recursos de emergencia como extinguidores.
- Números telefónicos de emergencia
· Definir el tipo de pólizas de seguros
· Definir elementos técnicos de procedimientos
· Definir las necesidades de sistemas de seguridad para:
o Hardware y software
o Flujo de energía
o Cableados locales y externos.
· Aplicación de los sistemas de seguridad incluyendo datos y archivos.
· Planificación de los papeles de los auditores internos y externos
· Planificación de programas de desastre y sus pruebas (simulación)
· Planificación de equipos de contingencia con carácter periódico.
· Control de desechos de los nodos importantes del sistema:
· Política de destrucción de basura copias, fotocopias, etc.
· Consideración de las normas ISO 1400
Etapas para Implementar un Sistema de SeguridadPara dotar de medios necesarios para elaborar su sistema de seguridad se debe considerar los siguientes puntos: Sensibilizar a los ejecutivos de la organización en torno al tema de seguridad.Se debe realizar un diagnóstico de la situación de riesgo y seguridad de la información en la organización a nivel software, hardware, recursos humanos, y ambientales.Elaborar un plan para un programa de seguridad. El plan debe elaborarse contemplando:
Plan de Seguridad Ideal (o Normativo)Un plan de seguridad para un sistema de seguridad integral debe contemplar:- El plan de seguridad debe asegurar la integridad y exactitud de los datos- Debe permitir identificar la información que es confidencial- Debe contemplar áreas de uso exclusivo- Debe proteger y conservar los activos de desastres provocados por la mano del hombre y los actos abiertamente hostiles- Debe asegurar la capacidad de la organización para sobrevivir accidentes- Debe proteger a los empleados contra tentaciones o sospechas innecesarias
Donde:Riesgo (roles, fraudes, accidentes, terremotos, incendios, etc)Medidas pre.. (políticas, sistemas de seguridad, planes de emergencia, plan de resguardo, seguridad de personal, etc)
Consideraciones para con el PersonalEs de gran importancia la elaboración del plan considerando el personal, pues se debe llevar a una conciencia para obtener una autoevaluación de su comportamiento con respecto al sistema, que lleve a la persona a:Asumir riesgosCumplir promesasInnovar
Para apoyar estos objetivos se debe cumplir los siguientes pasos:MotivarSe debe desarrollar métodos de participación reflexionando sobre lo que significa la seguridad y el riesgo, así como su impacto a nivel empresarial, de cargo y individual. Capacitación General En un principio a los ejecutivos con el fin de que conozcan y entiendan la relación entre seguridad, riesgo y la información, y su impacto en la empresa. El objetivo de este punto es que se podrán detectar las debilidades y potencialidades de la organización frente al riesgo.Este proceso incluye como práctica necesaria la implantación la ejecución de planes de contingencia y la simulación de posibles delitos.
Capacitación de TécnicosSe debe formar técnicos encargados de mantener la seguridad como parte de su trabajo y que esté capacitado para capacitar a otras personas en lo que es la ejecución de medidas preventivas y correctivas.
Practica y CulturaSe debe establecer un método de educación estimulando el cultivo de elevados principios morales, que tengan repercusión a nivel personal e institucional.De ser posible realizar conferencias periódicas sobre: doctrina, familia, educación sexual, relaciones humanas, etc.
Etapas para Implantar un Sistema de Seguridad en MarchaPara hacer que el plan entre en vigor y los elementos empiecen a funcionar y se observen y acepten las nuevas instituciones, leyes y costumbres del nuevo sistema de seguridad se deben seguir los siguiente 8 pasos:
1. Introducir el tema de seguridad en la visión de la empresa.2. Definir los procesos de flujo de información y sus riesgos en cuanto a todos los recursos participantes.3. Capacitar a los gerentes y directivos, contemplando el enfoque global.4. Designar y capacitar supervisores de área.5. Definir y trabajar sobre todo las áreas donde se pueden lograr mejoras relativamente rápidas.6. Mejorar las comunicaciones internas.7. Identificar claramente las áreas de mayor riesgo corporativo y trabajar con ellas planteando soluciones de alto nivel.8. Capacitar a todos los trabajadores en los elementos básicos de seguridad y riesgo para el manejo del software, hardware y con respecto a la seguridad física.
Beneficios de un Sistema de SeguridadLos beneficios de un sistema de seguridad bien elaborado son inmediatos, ya que el la organización trabajará sobre una plataforma confiable, que se refleja en los siguientes puntos:Aumento de la productividad.Aumento de la motivación del personal.Compromiso con la misión de la compañía.Mejora de las relaciones laborales.Ayuda a formar equipos competentes.Mejora de los climas laborales para los RR.HH.

viernes, 2 de octubre de 2009

miércoles, 30 de septiembre de 2009

Presentacion




Hola a todos mi nombre es Angel Andres Chilo Menza.

Soy Técnico en Sistemas con especialidad en Mantenimiento y Redes informáticas. Egresado del Instituto Nacional de Sistemas Progres System Plus de Colombia.




En realidad me siento muy orgulloso y defiendo esta institucion porque me a formado con elementos claros que me han servido muchisimo en el campo laboral. Gracias a la formacion integral en informatica y a nivel comercial.

















Actualmente ofrezco el servicio técnico de Reparacion y Mantenimiento de computadores,
a quienes lo requieran.

Contactos: Cel - 3146416934