Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Fundamentos de Informática
1.2.3 Periféricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.5.3 Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Este tema tiene como principal objetivo ofrecer una visión general sobre la informática, su evolución
histórica y sus principales conceptos. La mayor parte del contenido se centra en introducir el
computador como máquina para procesar información. Durante esta introducción se analizarán los
5
principios del funcionamiento de los computadores, así como su arquitectura. Además, se conocerán
las distintas formas de representar la información en un computador y los conceptos básicos sobre
redes de ordenadores.
– “La disciplina informática es el cuerpo de conocimiento que trata del diseño, análisis, imple-
mentación, eficiencia, y aplicación de procesos que transforman la información” (Tucker et
al., 1994)
En casi todas las definiciones que podemos encontrar sobre informática se utilizan algunos
términos y conceptos que conviene definir para adquirir el vocabulario básico relacionado con esta
asignatura:
Información: es todo aquello capaz de aumentar nuestro nivel de conocimiento de algo. Los
ordenadores nos ayudan a tratar la información, ya que proporcionamos al computador una
cierta información (entrada) y nos devuelve otra información elaborada a partir de la primera
(salida).
6
de dicha información a la entrada (para hacerla comprensible al ordenador), y otra a la salida,
para hacerla de nuevo comprensible al ser humano.
Hardware: el computador junto con el conjunto de dispositivos que tenga conectados consti-
tuye lo que se conoce con el término de hardware. Por tanto, con hardware nos referimos a los
elementos físicos que constituyen un sistema informático (el propio ordenador, las impresoras,
los discos, los CDs, los pendrives, las tarjetas de sonido, el ratón, el teclado, etc.).
7
Figura 1.2: El computador como parte de una organización
que dotan al hardware de un sistema informático de capacidad para realizar algún tipo de
trabajo o tarea de manera automática. Los programas y aplicaciones informáticas son software
(sistemas operativos, procesadores de textos, programas de diseño gráfico, videojuegos, etc.).
Telecomunicaciones: rama de las ciencias que estudia los sistemas y medios de emitir,
transmitir y recibir información a distancia, a través de medios físicos electromagnéticos y
ópticos.
El término informática tiene su origen en una palabra francesa, Informatique, y está formado por
la unión de los vocablos INFORmación y autoMÁTICA. Según la historia de los ordenadores, el
dispositivo de cálculo más antiguo que se conoce es el ábaco. Creado por los egipcios dos mil años
antes de nuestra era, el ábaco permite sumar, restar, multiplicar y dividir. Se podía presentar de
dos maneras: una formada por 10 columnas, 2 bolas en la parte superior y 5 en la inferior (Figura
8
1.4), y otra formada por 20 columnas, 1 bola en la parte superior y 10 en la inferior. Posteriormente
fue mejorado por los chinos y japoneses.
En 1642, Blaise Pascal (filósofo y matemático francés) inventó la primera calculadora mecá-
nica que permitía sumar (Figura 1.5). Este dispositivo utilizaba una serie de rueda de 10 dientes en
la que cada diente representaba un dígito del 0 al 9. Posteriormente, a finales del S.XVII, Gottfried
Leibniz mejoró la máquina de Pascal, desarrollando una calculadora mecánica que permitía sumar,
restar, multiplicar, dividir y obtener raíces mecánicamente. Las desventajas de este dispositivo eran
que requería de la continua intervención del operador para efectuar maniobras, anotar resultados
intermedios y era propensa a errores. Más tarde, en el S.XVIII, Joseph-Marie Jacquard amplió la
funcionalidad de las calculadoras mecánicas creadas durante el siglo anterior, permitiendo que estas
almacenaran instrucciones (programas) en cartones perforados para controlar el estampado de las
telas (Figura 1.6).
Ya en el S.XIX, el matemático británico Charles Babbage creó la primera máquina analíti-
ca (Figura 1.7) que permitía almacenar información en tarjetas perforadas y seguir la ejecución
secuencial de las instrucciones de un programa (un principio actual en los ordenadores). En esta
primera máquina analítica ya se podía intuir la arquitectura funcional que hoy día tiene cualquier
computador: dispositivos de entrada (instrucciones para las operaciones y los datos de entrada),
memoria (para almacenar los datos introducidos y los resultados de las operaciones intermedias),
9
Figura 1.6: Calculadora mecánica que almacenaba instrucciones para controlar el estampado de
telas
Figura 1.7: Primera máquina analítica que permitía seguir la ejecución de un programa
unidad de control (para supervisar la ejecución de las operaciones según las secuencia adecuada),
unidad aritmético-lógica (que efectuaba las operaciones para las que la máquina estaba preparada)
y un dispositivo de salida (que transmitía los resultados de los cálculos).
Y es en 1890 cuando Herman Hollerith desarrolla lo que se puede considerar el primer or-
denador eléctrico, también conocido como máquina tabuladora (Figura 1.8). Además, Hollerith
desarrolló un sistema de tarjetas perforadas eléctricas basado en la lógica de Boole, aplicándolo a
la máquina tabuladora de su invención, lo que permitía leer y almacenar tarjetas. La máquina de
Hollerith se usó para tabular el censo de aquel año en los Estados Unidos. En 1896, Hollerith crea
la Tabulating Machine Company, con la que pretendía comercializar su máquina. La fusión de esta
empresa con otras tres (International Time Recording Company, la Computing Scale Corporation,
10
y la Bundy Manufacturing Company), dio lugar, en 1924, a la International Business Machines
Corporation (IBM).
En la máquina tabuladora de Hollerith, los equipos para el tratamiento de las tarjetas perforadas
(ver Figura 1.9) constaban de:
– Perforadora, con punzones que efectuaban diferentes taladros (como máquinas de escribir).
– Clasificadora, que seleccionaba las tarjetas mediante la lectura de las perforaciones de una
determinada columna.
11
Ya más recientemente, durante el S.XX, la fácil obtención de energía eléctrica implica el desa-
rrollo de máquinas electromecánicas (en lugar de las exclusivamente mecánicas), que utilizaban la
energía eléctrica para producir un movimiento mecánico. En los años cuarenta aparecen los pri-
meros ordenadores electromecánicos, que leían la información previamente perforada de cinta
de papel y tarjetas, y tenían como componentes básicos el relé y el solenoide. El primer ordenador
electromecánico conocido es el Mark I (1944), desarrollado por Howard Aïken e IBM (Figura
1.10). El Mark I multiplicaba dos números en tres segundos, recibía las instrucciones mediante
cintas de papel, recibía los datos mediante tarjetas perforadas, y escribía los resultados utilizando
un teletipo. Tenía 2.5 metros de alto y 17 metros de largo y constaba de 200.00 piezas conectadas
con 800.000 metros de cables. Disponía de unidades de E/S, memoria, Unidad Aritmético-Lógica
y Unidad de Control. En 1947 se crea el Mark II, que ya permitía multiplicar dos números en 0,25
segundos.
A mediados del S.XX es cuando arranca la era de los ordenadores electrónicos. El primer
ordenador electrónico, construido con válvulas de vacío, es el ENIAC (Electronic Numerical Inte-
grator and Computer), traducido como ordenador e integrador numérico electrónico (Figura 1.11).
Fue desarrollado en 1946 por J. Presper Eckert, John W. Mauchly y otros investigadores en la
Moore School of Engineering de la Universidad de Pennsylvania. En el ENIAC, las operaciones de
almacenamiento, cálculo y control eran efectuadas por circuitos electrónicos, teniendo que modi-
ficar los circuitos de la máquina para que realizara las operaciones requeridas, con 17.468 tubos
de vacío. Pesaba 30 toneladas, ocupaba una superficie de 160 m2, tenía 2.40 metros de alto y 30
metros de largo, y era capaz de almacenar programas distintos. Resolvía en 1 hora lo que Mark I
lo hacía en una semana.
12
Figura 1.11: ENIAC, el primer ordenador electrónico
Otro hecho fundamental durante la era de los ordenadores electrónicos tiene que ver con el
nacimiento de la arquitectura Von Neumann, ya que la mayoría de computadoras modernas
están basadas en esta arquitectura. Los principios de Von Neumann hacen referencia a la noción
de programa almacenado, ya que tanto datos como instrucciones se representan en código binario
y se almacenan juntos en la memoria del ordenador (en un mismo dispositivo), no haciendo el
ordenador distinciones entre datos e instrucciones. Otros aspectos importantes de esta arquitectura
tienen que ver con la transmisión de datos en paralelo (no en serie), los programas se encuentran
almacenados en memoria (no siendo necesario cambiar sus circuitos internos para cambiar el pro-
grama) y permite aplicar métodos de programación más complejos. Según Von Neumann, “...puesto
que el dispositivo final ha de ser una máquina computadora de propósito general, deberá contener
ciertos órganos fundamentales relacionados con la aritmética, la memoria de almacenamiento, el
control y la comunicación con el operador humano...”. Esos órganos a los que hace referencia Von
Neumann se corresponden con la Unidad Central de Proceso (UCP), compuesta por la Unidad
Aritmético-Lógica (ALU) y la Unidad de Control (UC), la Memoria Principal (MP), un dispositivo
de Entrada/Salida (E/S) y el bus de datos (Figura 1.12).
13
La primera máquina que se adaptó a la arquitectura Von Neumann fue EDVAC (Figura 1.13),
construida en 1947 en la Universidad de Cambridge. Es a partir de ese año cuando comienza
la primera generación de ordenadores electrónicos, siendo el Univac I (UNIVersal Automatic
Computer) en 1951 el primer ordenador electrónico digital producido en serie, y que se utilizó en
la oficina de censo de EEUU (Figura 1.14).
Figura 1.13: Ordenador electrónico EDVAC Figura 1.14: Ordenador electrónico Univac I
Primera Generación (1946-1958). Utilizan válvulas de vacío (Figura 1.15) para conmutar
la señal eléctrica, de modo que con +12V se representaba un valor 1 (verdadero) y con
-12V el valor 0 (falso). Consumían mucha energía, generaban mucho calor, ocupaban gran
volumen, sufrían frecuentes cuelgues y eran muy lentos. Estos ordenadores estaban orientados
a aplicaciones científico-militares. Entre los modelos más representativos estaban el Univac I
y las series 650 y 700 de IBM.
Segunda Generación (1959-1965). Se pasa del uso de la válvula de vacío al uso del tran-
sistor (Figura 1.16). El transistor era un conmutador de estado sólido o amplificador de
corriente, de pequeño tamaño y bajo consumo de energía, generaba poca calor y operaba
con pequeños voltajes. Estos ordenadores eran más baratos y fiables, efectuaban operaciones
lógicas más eficientes que los de válvulas de vacío y estaban orientados a aplicaciones como
14
Figura 1.15: Válvulas de vacío
reserva de líneas aéreas y control de tráfico aéreo. Es durante esta segunda generación cuando
aparecen los primeros lenguajes de programación (Algol, Cobol y Fortran). Entre los modelos
más representativos estaban el 1620, 1401 y 7094 de IBM.
15
Cuarta Generación (1971-1980). Aparece el microprocesador (Figura 1.18), con un alto
grado de integración (100.000 transistores en un mismo chip) y las conocidas microcompu-
tadoras PC (Personal Computer). También surgen los lenguajes de programación de alto nivel
como Basic y PL1 e Intel y AMD se comienzan a perfilar como los dos grandes fabricantes
de microprocesadores.
Quinta Generación (1981-?). El inicio teórico de esta generación se fija en el 1981 (debido
al impulso de la I+D por parte de Japón), si bien el inicio comercial se establece en 1991,
siendo el IBM PC uno de los que tuvo más auge (Figura 1.19). La quinta generación se basa
en pequeños ordenadores personales con aplicaciones en todo tipo de tareas, teniendo una
capacidad de cómputo cientos de veces superior a la anterior generación y con software que
permite manejar el ordenador sin apenas conocimientos informáticos.
¿Existirá sexta generación? Es una pregunta cuya respuesta podríamos obtener seguramente en
pocos años... Los futuros computadores de sexta generación podrían ser los llamados Network
Computers u ordenadores de red, siendo sus características el bajo coste, poca memoria (puede
que sin disco duro) y obtendrían todas las prestaciones de las redes a las que se conectasen... los
rápidos avances que se producen en las TIC apuntan a que el futuro de los computadores irá por
ese camino...
16
1.2 Soporte físico del computador: hardware
La arquitectura interna básica de un ordenador sigue el esquema fundamental establecido por Von
Neumann en 1945 (Figura 1.21). Entre los principales elementos de la arquitectura Von Neumann
se encuentran los siguientes componentes:
17
Figura 1.21: Arquitectura de Von Neumann
Reloj. Sistema generador de impulsos a ritmo constante. Cada pulso del reloj
marca el comienzo de la ejecución de una instrucción máquina. El número de
impulsos generados por segundo marca la velocidad del ordenador y se mide
18
en hertzios (200 Mhz equivale a 200 millones de instrucciones elementales por
segundo). Hoy día una velocidad habitual para el reloj oscila en torno a los 4.000
millones de pulsos por segundos, o lo que es lo mismo, una frecuencia del orden
de 4 GigaHertzios (4 GHz). Por ejemplo, el procesador Intel Core i7 tiene una
velocidad de reloj de 4,2 GHz.
◦ Unidad Aritmético Lógica (UAL o ALU, en inglés). Realiza las operaciones ele-
mentales de tipo aritmético y lógico (sumas, restas, comparaciones...). Los datos con
los que opera deben estar almacenados previamente en la memoria principal, desde
donde se transfieren a los registros de la unidad aritmético-lógica. Estos registros
son:
19
Figura 1.23: Módulos de memoria ROM Figura 1.24: Módulos DIMM de memoria RAM
Además de los dos tipos de memoria principal existe otro tipo de memoria de pequeño
tamaño y alta velocidad de acceso, conocida como memoria caché, que se encuentra
generalmente ubicada entre la memoria principal y la CPU, o en los propios dispositivos.
La misión de la memoria caché es acelerar los accesos a la información almacenada en
la memoria principal.
20
Buses. Sistemas digitales que permiten la transmisión de información entre los componentes
de un ordenador. Dicho de una forma más coloquial, un bus (en arquitectura de computadores)
es un cable dentro de un computador que transfiere información (un dato, una dirección, una
instrucción...) entre los componentes del mismo o entre varias computadoras. El ancho de
un bus es el número de hilos que tiene, es decir, el número de bits que puede transmitir
simultáneamente. Existen dos tipos de transferencia en los buses:
• Transferencia en serie, en la que los datos se transfieren bit a bit, es decir, el bus tiene
un único cable que transmite la información.
La tendencia en los últimos años es reemplazar los buses paralelos por buses serie (que sue-
len ser multicanal). Aunque estos son más difíciles de implementar, consiguen velocidades de
transferencia más elevadas y, además, permiten longitudes de cable mayores. En la arquitec-
tura básica de un computador podemos distinguir los siguientes tipos de buses (ver Figura
1.25):
• Bus de control: encargado de llevar las órdenes a todos los elementos del sistema.
• Bus de datos: transfiere los datos entre los diferentes componentes del sistema.
21
1.2.2 Ejecución de instrucciones por el procesador
1.2.3 Periféricos
Un computador procesa la información en forma de señales eléctricas digitales binarias. Para que
esta información sea útil a las personas, deberá ser tangible e inteligible. La representación eléctrica
digital binaria es adecuada para el ordenador, ya que sus circuitos funcionan así, pero no lo es
para las personas, ya que nuestros sentidos no pueden interpretarla (no estamos capacitados para
percibir la electricidad). Por esta razón, el computador se complementa con un conjunto de aparatos
llamados dispositivos periféricos, que convierten la información del mundo real en señales adecuadas
para el computador, y viceversa. Por tanto, se puede definir periférico como el dispositivo que
permite al ordenador comunicarse con el entorno para obtener, almacenar o transmitir datos.
Uno de los elementos base del computador es la placa base, también llamada placa ma-
dre (motherboard). En ella encontramos el soporte para los elementos principales del ordenador.
Consta de conectores para insertar la CPU, la memoria y los dispositivos que queramos conectar
directamente al bus, así como tomas de corriente, ventilación e indicadores luminosos variados. Los
dispositivos no se suelen conectar directamente al bus, sino que se hace a través de tarjetas adap-
tadoras que proporciona un conector (llamado puerto o bahía) al que se enchufan los cables de
los dispositivos. En este sentido se pueden considerar como extensiones del bus que proporcionan
acceso al mismo con una interfaz electrónica más adecuada. Todo esto (placa base, CPU, memoria,
22
tarjetas adaptadoras), junto con algunos dispositivos de almacenamiento, se guarda en el interior
de una caja protectora (torre), de manera que únicamente quedan accesibles los puertos de los
adaptadores de dispositivos, interruptores de encendido, etc. La Figura 1.26 muestra un ejemplo
de placa base y de la caja protectora donde normalmente se instala.
Figura 1.26: Ejemplo de placa base y de caja protectora (torre) donde normalmente se instala
De entrada. Sirven para que usuario envíe información al computador, para darle órde-
nes, seleccionar elementos, introducir información (datos de entrada), etc. Ejemplos: teclado,
ratón y algunas variantes de éste (trackball, tabletas gráficas, etc.), las pantallas táctiles,
adaptadores de sonido que permiten conectar micrófonos y otras fuentes de audio, escáner,
capturadoras de vídeo, cámaras, joystick, volantes, lectores ópticos, etc.
De salida. Sirven para mostrar el estado del computador y los resultados de los cálculos.
Ejemplos: monitor, altavoces, impresoras, etc. Con respecto a los monitores, existen dos
tipos fundamentales: de tubo de rayos catódicos (CRT) y pantallas de cristal de cuarzo líquido
(LCD). Con respecto a las impresoras, también existen varios tipos: de impacto (escriben
impactando un martillo sobre una cinta entintada y ésta sobre el papel, para formar un
carácter. Subtipos: margarita y matricial) y sin impacto (escriben utilizando técnicas basadas
en fenómenos térmicos, electrostáticos o químicos, usando tinta líquida o tóner. Son más
silenciosas y rápidas. Subtipos: chorro de tinta, térmicas y láser).
De comunicación. Sirven para comunicar distintos ordenadores entre sí, de manera que
puedan compartir la información. Ejemplos: tarjeta de red, módem, etc.
23
eléctrica. Permiten, por tanto, el almacenamiento masivo de información. Existen distintos
tipos de tecnologías de almacenamiento no volátil:
Al hablar de periféricos también se deben mencionar aquellos dispositivos que nos permiten
conectarnos o comunicarnos con el exterior y con los propios periféricos. Esta comunicación se
24
realiza a través de los puertos. Al igual que existen dos tipos de transferencia de información en
los buses, existen también dos tipos de puertos de comunicación en un computador:
Puerto paralelo, en el que los bits circulan simultáneamente por cables separados. Si se
establece como unidad de transmisión el byte, serían necesarias 8 líneas distintas para esta-
blecer la comunicación, más alguna otra línea de control del dispositivo, que indique si está
ocupado o libre. Actualmente este tipo de puerto está en desuso (Figura 1.28).
Puerto serie, en el que los datos se transmiten bit a bit, uno después de otro por el mismo
cable (Figura 1.29). Antes de comenzar la comunicación, se deben intercambiar entre el emisor
y receptor la siguiente información: velocidad (expresado en bits por segundo), número de
bits que componen el byte y comprobaciones de paridad (código redundante). Un ejemplo de
puerto serie es el puerto USB (Universal Serial Bus), que es una modificación del tradicional,
permitiendo alcanzar mayores velocidades y la conexión de todo tipo de dispositivos mediante
un solo tipo de conector físico (teclados, ratones, impresoras, cámaras, teléfonos, etc.). Existen
diferentes tipos de conectores USB (ver Figura 1.30), pudiendo alcanzar velocidades desde los
1,5 MB/seg. (USB 1.1) hasta los 600 MB/seg. (USB 3.0).
Figura 1.28: Conector de puerto paralelo Figura 1.29: Conector de puerto serie
25
1.3 Soporte lógico del computador: software
Shareware. Son aplicaciones comerciales (también conocidas como demos) que se distribu-
yen de forma más o menos libre, pero en versiones reducidas, con funcionalidad incompleta,
26
licencias con permisos reducidos, con funcionalidad por un tiempo limitado, sin soporte, etc.,
de manera que el usuario puede probar la aplicación, y si le interesa, adquirir la versión
comercial completa a posteriori.
Freeware. Son aplicaciones de libre distribución (también conocidas como de dominio público
o sin licencia) que pueden ser gratuitas o no (free significa libre, no gratuito). Una vez
adquirida la aplicación (suele ser gratuita) tenemos total libertad sobre la misma. Es posible
que el software acompañe una licencia que indica que efectivamente es de dominio público,
o que simplemente no acompañe ninguna licencia, con lo que podría tratarse de un software
licenciado distribuido ilegalmente (no acompaña la correspondiente licencia). Las licencias
freeware pueden ser a su vez de distintos tipos:
• OpenSource. Su traducción es código fuente libre, lo que significa que el código fuente
de la aplicación debe estar incluido obligatoriamente o poder obtenerse libremente. Una
aplicación OpenSource se puede copiar, vender e incluso se puede utilizar como parte de
una aplicación comercial.
• GPL (General Public License). Este tipo del licencia obliga a distribuir el código fuente,
y permite redistribuir el software, incluso modificado, pero obliga a seguir mantenien-
do la licencia GPL. Así, puede formar parte de otras aplicaciones mayores, pero estas
necesariamente deberán licenciarse bajo GPL.
• BSD (Berkeley Software Distribution). Similar a GPL pero menos restrictiva, permi-
tiendo el uso del código fuente en software comercial o propietario. Es menos frecuente.
El sistema operativo pertenece al software básico o software del sistema y se define como el
programa o conjunto de programas de control que sirve de intermediario entre los usuarios y el
hardware, facilitando el uso de la computadora para que se emplee de manera eficiente. El sistema
operativo es un software que se carga y ejecuta en el ordenador automáticamente cada vez que éste
27
se pone en funcionamiento, siendo un elemento fundamental del computador, ya que las aplicaciones
no funcionan sin él. Por lo tanto, es el primer programa que debemos instalar en el ordenador.
Como ya se ha comentado, el usuario no utiliza el computador directamente, sino que se co-
munica con el ordenador a través de las aplicaciones. Las aplicaciones solicitan servicios al sistema
operativo y este ejecuta las instrucciones adecuadas para explotar el computador y sus periféricos.
Así, el sistema operativo se considera una capa intermedia que presta, centraliza y unifica servicios.
La Figura 1.31 ilustra lo que se conoce como el modelo de capas, donde las capas de abajo
que se denominan de bajo nivel representan las cuestiones cercanas (fáciles) al ordenador y lejanas
(difíciles) a las usuarios. En cambio, las capas superiores, denominadas de alto nivel, representan
cuestiones cercanas a los usuarios pero alejadas (complejas) para el ordenador.
Coordinar y gestionar el acceso a todos los recursos del computador (pantalla, impre-
sora, teclado, memoria, ...), impidiendo conflictos entre ellos y con la mayor eficacia posible. A
nivel del sistema operativo deben establecerse unas políticas de funcionamiento y seguridad,
entre las que podemos destacar:
• Reparto de CPU: una CPU sólo puede ejecutar un programa por lo que, si hay que
ejecutar varios programas simultáneamente, la CPU debe ejecutar fragmentos de cada
programa por turnos y repartir el uso de la CPU.
28
llamado shell que se ejecuta automáticamente y cuya función es atender las órdenes del
usuario mediante comandos. Existen fundamentalmente dos tipos de shell:
• Interfaz gráfica de usuario (Graphic User Interface, GUI). Este tipo de shell utiliza
representaciones visuales en una pantalla (ventanas, botones, iconos, etc.) para referirse
a los programas y otros elementos del hardware y del software, de manera que el usuario
los selecciona visualmente mediante dispositivos apuntadores (ratón normalmente), de
forma intuitiva, sin necesidad de conocer ningún lenguaje (ver Figura 1.33). Todos los
sistemas operativos modernos utilizan interfaces gráficas, aunque también suelen pro-
porcionar algún intérprete de comandos para realizar operaciones específicas.
En el mundo de los computadores personales (PCs) han aparecido diferentes familias de sistemas
operativos a lo largo de la historia. Se pueden destacar las siguientes:
DOS (Disk Operating System), 1981. Formado por un conjunto de programas cuya ejecución
podía solicitar el usuario mediante órdenes sencillas a través de una consola de comandos en
modo texto. La mayoría de comandos servían para gestionar los dispositivos de almacena-
miento masivo (disquetes, discos duros, etc.). No disponía de interfaz gráfica. Tuvo múltiples
adaptaciones: MS-DOS, PC-DOS, DR-DOS, FreeDOS, PTS-DOS, ROM-DOS, etc.
MS DOS (Microsoft Disk Operating System), 1981. Fue la versión del DOS más popular y
extendida de Microsoft para PCs. Tuvo ocho versiones principales (hasta el año 2000), pero
fue siendo reemplazado de forma gradual por otros sistemas operativos que ofrecían interfaz
gráfica, en particular por varias generaciones del sistema operativo Microsoft Windows.
29
Figura 1.34: Ventana de MS-DOS o Símbolo del Sistema en Windows 98
Unix, 1969. Creado por los laboratorios Bell de AT&T, es un sistema operativo multiusua-
rio y multitarea escrito en lenguaje C. Dispone de un lenguaje ensamblador propio, varios
compiladores y un editor de texto. La interfaz gráfica mediante Sistema de Ventanas X se
incorporó a mediados de la década de los 80.
Figura 1.35: Sistema de Ventanas para UNIX (finales década de los 80)
30
Figura 1.36: Distribución Debian de Linux con interfaz Gnome 3.0
Mac OS (Macintosh Operating System), 1984. Creado por Apple para su línea de compu-
tadoras Macintosh. Fue el primer sistema dirigido al gran público porque contaba con una
interfaz gráfica compuesta por la interacción del ratón con ventanas, iconos y menús. Se man-
tuvo hasta 1999 (versión 9.0), dando paso después a Mac OS X que está basado en UNIX.
Microsoft Windows, 1985. Desarrollado por Microsoft desde 1985 (Windows 1.0) hasta
nuestros días (Windows 10). En sus orígenes era la interfaz gráfica de MS-DOS, desarrollada
propiamente por Microsoft. Surgió un gran éxito comercial con Windows 3.0 debido a la
aparición de multitud de paquetes de ofimática soportadas bajo el mismo sistema operativo.
Dispone de una interfaz gráfica y sencilla que ofrece ayuda permanente.
31
1.3.2 Lenguajes de programación
Antes de definir qué son los lenguajes de programación se debe conocer qué es un programa. En
el ámbito de la informática un programa es un conjunto de órdenes (instrucciones o sentencias)
que se le dan a un computador para que realice una determinada tarea. Dicho de otro modo, las
órdenes de un programa implementan un algoritmo para resolver un problema mediante el uso
del computador. Las órdenes de un programa deben ser escritas en un lenguaje que entienda el
computador, los llamados lenguajes de programación. La Figura 1.38 muestra la relación entre
los conceptos problema, algoritmo, programa y lenguajes de programación.
Figura 1.38: Relación entre los conceptos problema, algoritmo, programa y lenguajes de programa-
ción
Las instrucciones de un programa se construyen utilizando unos símbolos y unas reglas propias
del lenguaje de programación que se esté utilizando para implementar el algoritmo que resuelve el
problema. Existen tres tipos de lenguajes de programación (Figura 1.39):
Lenguaje máquina. También llamado código binario o código máquina, es el lenguaje que
puede ser interpretado directamente por el ordenador, es decir, el ordenador sólo puede eje-
cutar lenguaje máquina (órdenes codificadas en forma binaria). En este tipo de lenguaje las
instrucciones y los datos están compuestos por series de bits (0 o 1) que hacen referencia a
direcciones de memoria y ejecutan acciones con su contenido. Programar en lenguaje máquina
es muy difícil, debido a la facilidad con la que se pueden cometer errores y la dificultad en
localizarlos y corregirlos. El número de instrucciones es bastante reducido y dependen del pro-
cesador, es decir, un programa escrito en lenguaje máquina para una determinada máquina
no podría ejecutarse en otra distinta.
Lenguaje ensamblador. Es una evolución del lenguaje máquina en el que se sustituyen los
códigos binarios por nombres mnemotécnicos llamados etiquetas y el uso de identificadores.
Proporciona las mismas instrucciones que el lenguaje máquina y siguen dependiendo estre-
chamente del procesador en el que se ejecuta el programa. Ofrece al programador elementos
de muy bajo nivel que no facilitan la expresión de soluciones a problemas complejos y re-
quieren del uso de un programa traductor (ensamblador) que traduzca las instrucciones en
ensamblador a lenguaje máquina.
32
Lenguaje de alto nivel. En un lenguaje de alto nivel las órdenes están escritas de forma
similar al lenguaje natural, es decir, son fáciles de recordar. Además, se utilizan representa-
ciones más cercanas al lenguaje humano, lo que facilita la creación y comprensión del código
de los programas. El concepto de identificador se amplía y aparecen variables y estructuras de
datos complejas, de manera que no operamos con datos en direcciones de memoria sino con
objetos que almacenan valores (números, palabras, conjuntos, etc.) que ocupan varias posicio-
nes de memoria. En un lenguaje de alto nivel también es necesario traducir las instrucciones a
código máquina, utilizando para ello los programas traductores. A diferencia de los lenguajes
máquina y ensamblador, un programa escrito en un lenguaje de alto nivel no depende de la
estructura interna del procesador donde se va a ejecutar, por lo que es transportable de una
máquina a otra. No obstante, el programa traductor sí será diferente si se quiere ejecutar
en diferentes procesadores. Existen casi 300 lenguajes diferentes de alto nivel, algunos muy
conocidos como Fortran, C, C++, Java, Perl, Python, etc.
Figura 1.39: Ejemplos de instrucciones escritos en lenguaje máquina, ensamblador y alto nivel
Por último, según el grado de similitud del lenguaje de programación con el lenguaje natural,
los lenguajes de programación también se pueden clasificar en lenguajes de alto nivel (cerca del
lenguaje natural) y de bajo nivel (cerca de la máquina). En este caso, los lenguajes de bajo nivel
se clasifican a su vez en dos tipos: lenguaje máquina y lenguaje ensamblador.
33
Ensambladores. Transforman programas escritos en ensamblador a programas escritos en
lenguaje máquina, que son directamente ejecutables.
La Figura 1.40 muestra un esquema de la relación entre los tipos de lenguajes de programación
y los traductores de lenguajes.
Figura 1.40: Relación entre los tipos de lenguajes de programación y los traductores de lenguajes
34
1.4 Representación interna de la información
El computador es un aparato electrónico digital. Que sea electrónico significa que funciona
mediante señales eléctricas, es decir, que la información se representa mediante señales eléctricas
(interruptor abierto-cerrado, paso o no de corriente, magnetización en un sentido u otro, etc.). Que
sea digital significa que se utilizan magnitudes eléctricas discretas (un conjunto finito de valores
posible dentro del rango de funcionamiento). Habitualmente los sistemas digitales son sistemas
binarios, es decir, utilizan sólo 2 valores posibles (0 y 1, verdadero y falso, positivo y negativo,
etc.). Por tanto, para que la información sea procesada por un computador necesitamos traducir
cualquier dato a notación binaria, es decir, una combinación de 0 y 1 normalmente.
La representación escrita de números ha sido una inquietud humana desde los inicios de la
escritura. Existen multitud de sistemas de representación, con diferentes estrategias y reglas de
composición. Uno de los primeros y más extendidos fue el sistema romano, aún utilizado en deter-
minados usos, en el que los números se representan utilizando un conjunto de símbolos (las letras C,
D, I, L, M, V, y X) con unas reglas de composición más o menos complejas, y algunas deficiencias
importantes, por ejemplo la ausencia del número 0.
Actualmente se utiliza de forma generalizada el sistema arábigo, en el que utilizamos 10
símbolos (diferentes de los del alfabeto): 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9, y donde cada símbolo tiene un
valor. Componemos los números mediante sucesiones de cifras representadas con estos símbolos,
de manera que cada cifra multiplica el valor del símbolo por potencias de 10, dependiendo de la
posición que ocupa. Por ejemplo, el número 5.237 se interpreta como:
Es decir, cada cifra tiene un peso dependiendo de la posición que ocupa. Las cifras más a la izquierda
35
tienen mayor peso que las situadas a la derecha, teniendo la situada más a la derecha un peso de
1, es decir, 100. Así, el sistema arábigo se basa en el número 10 y sus potencias. Decimos que es un
sistema en base 10, o también conocido como sistema decimal.
En general podemos considerar un sistema en una base cualquiera, genéricamente en una base
B. En un sistema en base B utilizamos B símbolos distintos, desde 0 hasta B − 1 (por ejemplo para
base 8 utilizamos los símbolos 0 a 7). A la hora de componer números, cada cifra (que también
podemos llamar dígito) Di ocupará una posición i, donde i = 0 en el dígito más a la derecha. Así,
un número cualquiera Dn . . . D3 D2 D1 D0 lo interpretaremos de la siguiente forma:
Dn . . . D3 D2 D1 D0 = Dn × B n + . . . + D3 × B 3 + D2 × B 2 + D1 × B 1 + D0 × B 0 (1.1)
36
tar el sistema de unidades de información y cuando trabajamos con bytes el cambio de magnitud
se realiza también multiplicando por 1.000, de manera que un KiloByte (KB) son 1.000 bytes, 1
MegaByte (MB) son 1.000 KB, etc. A continuación se muestra la equivalencia entre las unidades
múltiplo del byte:
La B de bytes pude encontrarse escrita tanto en mayúsculas como en minúsculas, sin que esto afecte
a su significado: 1 MB es lo mismo que 1 Mb. Por otro lado, también es posible que la b pueda
utilizarse para precisar cantidades de información expresadas en bits (especialmente cuando la b es
minúscula). Lo normal es que las cantidades de información se expresen en bytes (no en bits), por
lo que si nos encontramos una b probablemente se refiera a bytes. No obstante el significado real
deberá confirmarse por el contexto donde aparezca escrito.
Siguiendo la fórmula de representación de un número en general (ver Ecuación 1.1) en base 2,
podemos fácilmente convertir un número binario a decimal. Para ello, se deberá multiplicar
cada bit por la potencia en base 2 en función de la posición de dicho bit. Así, por ejemplo, para el
número binario 1010011, su interpretación en decimal será:
1010011)2 =
1 × 26 + 0 × 25 + 1 × 24 + 0 × 23 + 0 × 22 + 1 × 21 + 1 × 20 =
1 × 64 + 0 × 32 + 1 × 16 + 0 × 8 + 0 × 4 + 1 × 2 + 1 × 1 =
64 + 0 + 16 + 0 + 0 + 2 + 1 = 83)10
Para convertir un número decimal a binario debemos tratar por separado la parte entera
de las divisiones y la parte fraccionaria (o resto) de las mismas. El equivalente binario a la parte
entera se obtiene dividiendo por 2 y tomando los sucesivos restos y el último cociente. El último
cociente corresponde al bit más significativo y el primer resto al menos significativo. En la Figura
1.41 se representa cómo se convierten a binario los números decimales 13 y 116.
37
Figura 1.41: Conversión a binario de los números 13 y 116 en decimal
Para convertir la parte fraccionaria de un número decimal a binario, se multiplica por dos
sucesivamente cada cifra de esa parte fraccionaria (si no resulta nulo). El número binario se forma
con las partes enteras que se van obteniendo. De esta forma, para el número en base decimal
116,1875 tendríamos como parte entera 116 y como parte fraccionaria 1875. La parte entera ya la
hemos calculado antes en binario (1110100). La parte fraccionaria se calcularía según se muestra
en la Figura 1.42.
Figura 1.42: Conversión a binario de la parte decimal del número 116,1875 en decimal
Por tanto tendríamos que 116, 1875)10 = 1110100, 0011)2 . También se observa como la repre-
sentación en base 2 de un número ocupa muchos más dígitos que en base 10. En general, cuando
menor sea la base, más dígitos necesitamos para representar los mismos valores. Es posible averi-
guar cuántos dígitos ocupa un número N en otra base B, mediante el logaritmo en base B
de N:
log10 N
Número de dígitos de N = dlogB N e = (1.2)
log10 B
38
Esta es una operación compleja que requiere de una calculadora (o al menos una tabla de
logaritmos). Para el caso del sistema binario, podemos construir fácilmente una tabla como la que
vemos en la Figura 1.43 que nos relacione el número de bits con el máximo valor decimal que
permite representar. Con N bits tenemos 2N combinaciones, es decir, podremos representar valores
decimales entre el 0 y el 2N − 1.
Figura 1.43: Relación entre número de bits y rango decimal en el sistema binario
Examinando la Figura 1.43 se observa que con 7 bits se representa hasta el número decimal
127 y que con 8 bits se puede representar hasta el 255. Por tanto, para representar el número
235 necesitaremos 8 bits porque con 7 no basta. De esta manera estamos representando números
exclusivamente positivos. Denominamos a esta representación binario natural o representación
binaria sin signo.
En ocasiones necesitamos representar en binario números que pueden tomar valores tanto positivos
como negativos. Como se puede intuir, en binario no se utiliza la estrategia que se usa en decimal
de poner el signo negativo delante del número. Para ello, existen tres métodos para realizar la
representación de los números negativos en binario:
−2N −1 + 1 ≤ X ≤ 2N −1 − 1
39
Así, por ejemplo, el número decimal 10 se representaría en binario como 00001010, y el valor
decimal -10 se representaría como 10001010.
−2N −1 + 1 ≤ X ≤ 2N −1 − 1
Con este método, el número decimal 10 se representaría en binario como 00001010, y el valor
decimal -10 se representaría como 11110101.
Complemento a dos (C2). Para realizar el complemento a dos de un número existen dos
formas. La primera es obteniendo el C1 del número y sumándole 1, es decir:
1. Se complementa el número positivo en todos sus bits incluido el bit de signo, es decir, se
realiza el C1 del número. Para el caso de representar -10, como hemos calculado antes,
su C1 sería 11110101.
−2N −1 ≤ X ≤ 2N −1 − 1
Por regla general se suele utilizar como convenio de representación para números negativos
en binario el método complemento a 2 (C2). Cuando interpretamos un número binario de
esta manera decimos que tenemos una representación binaria con signo. Por lo tanto, en una
representación con signo, si uno de los bits se dedica al signo, tenemos un bit menos para hacer
combinaciones, es decir, con N bits tendremos 2N −1 combinaciones positivas y 2N −1 combinaciones
negativas, que corresponderían con rangos desde +0 a +(2N −1 − 1), y desde -0 a −(2N −1 − 1).
Como +0 y -0 representan el mismo número, la combinación correspondiente al -0 se aprovecha
para aumentar el rango de los negativos. Este es el motivo por el que el rango de representación en
C2 se considera asimétrico. De este modo, se puede completar la tabla mostrada en la Figura 1.43
con esta nueva representación con signo, tal y como se muestra en la Figura 1.44.
40
Figura 1.44: Relación entre número de bits y rango decimal para representación binaria con y sin
signo
Todo lo visto hasta ahora en relación al sistema binario está relacionado con la representación de
números enteros. No obstante, también se pueden considerar números fraccionarios. A la hora de
representar números fraccionarios en binario se pueden utilizar dos estrategias:
Representación en punto fijo. Consiste en considerar que los números representan valores
en escala. A la hora de interpretarlos, dividimos su valor entre un factor fijo. Es como si para
representar un valor de 1,82 metros utilizáramos el valor entero 182, entendido como 182
centímetros, utilizando una escala de 100. Esta forma de representar los binarios fraccionarios
es muy poco utilizada. De hecho, el término punto fijo suele utilizarse para referirse a números
enteros (escala 1), mientras que los números fraccionarios se representan de forma generalizada
en punto flotante.
• El bit situado más a la izquierda se deja para representar el signo (1 para negativos, 0
para positivos).
41
• Las cifras más a la derecha del número constituyen lo que se denomina mantisa. Mientras
mayor sea la mantisa, mayor precisión tendrá la representación, ya que dedicamos más
bits a los dígitos del número.
• La posición de la coma viene dada por el exponente, que será positivo para desplazar
la coma a la derecha o negativo para desplazarla a la izquierda. Cuantos más bits se
dediquen a exponente, mayor rango de números se podrá representar, ya que la coma
decimal se podrá desplazar en un mayor rango de valores.
donde el exponente es un número entero positivo o negativo y la mantisa es un número positivo que
empieza siempre por 1, ya que contiene las primeras cifras en binario del valor. La coma decimal
está inicialmente detrás del primer 1 de la mantisa y se desplaza tantas posiciones como indique el
exponente.
Para entender mejor la representación en punto flotante, se puede comparar con la represen-
tación que utilizan normalmente las calculadoras científicas para mostrar números muy grandes o
fracciones muy pequeñas sólo que, en este caso, como la representación de la calculadora es en base
decimal, el exponente no se utiliza como potencia de 2, sino como potencia de 10. Por ejemplo,
1,34e − 5 equivale a 0,00001345.
42
Cada cifra hexadecimal equivale a cuatro cifras binarias (medio byte, cantidad de memoria
también conocida como nibble). Por tanto, un byte en hexadecimal se puede representar con
2 símbolos.
43
Un ejemplo de conversión de número octal fraccionario a binario se muestra a continuación:
234)10 = EA)16
Por último, para convertir entre hexadecimal y octal y viceversa, se utiliza la transforma-
ción intermedia a binario, es decir, se convierte cada cifra del número a binario y luego se transforma
a octal agrupando las cifras de 3 en 3 o a hexadecimal agrupando las cifras de 4 en 4 mediante la
tabla de conversión de la Figura 1.47. Ejemplos:
AF, 16C)16 = 1010 1111,0001 0110 1100)2 ⇒ 010 101 111,000 101 101 100)2 = 257, 0554)8
257, 0554)8 = 010 101 111,000 101 101 100)2 ⇒ 1010 1111,0001 0110 1100)2 = AF, 16C)16
Haciendo uso de estas tablas podemos calcular la suma y resta entre números binarios tal y
como se muestra en los ejemplos de la Figura 1.49.
Cuando la suma de dos dígitos excede los símbolos numéricos disponibles en la notación, se
lleva un 1 (acarreo) a la posición del dígito inmediatamente superior, tal y como se muestra en la
44
Figura 1.50.
Para realizar la resta se puede utilizar la tabla de la suma contando hacia atrás (descontando).
Cuando la resta de dos dígitos excede (por debajo) los símbolos numéricos disponibles en la notación,
se realiza un pedido o deuda de 1 a la posición del dígito inmediatamente superior, tal y como se
muestra en la Figura 1.51.
Otra técnica eficiente para realizar sustracciones (restas) en binario consiste en sumar al mi-
nuendo el complemento a 1 del sustraendo. El complemento a 1 de un número N, es el número
que resulta de restar cada una de las cifras de N a la base menos uno del sistema de numeración
que se esté utilizando. Dicho de otro modo, es equivalente a intercambiar unos y ceros. Así, el
complemento a 1 de 1011 es 0100. Por tanto, podemos restar dos números sumando al minuendo el
complemento a 1 del sustraendo. Si hubiera una cifra que se arrastra del resultado, se descarta y se
sumaría al resultado obtenido. Por ejemplo, si queremos restar 100011, 101 (minuendo) y 10101, 000
(sustraendo) se realizarían los siguientes pasos:
1. Como la cantidad de dígitos del sustraendo es menor que la del minuendo, se completa el
sustraendo con ceros a la izquierda de la parte entera, y a la derecha de la parte decimal.
45
3. Se suman el minuendo y el complemento del sustraendo. Si existiera acarreo, se elimina de
la izquierda y se suma con el dígito más a la derecha del resultado, sin importar la coma
decimal, tal y como se muestra en la Figura 1.52.
Por tanto, 100011, 101 − 10101, 000 = 1110, 101. Para verificar que el resultado es correcto
se podrían realizar varias comprobaciones como, por ejemplo, convertir a decimal las cifras del
minuendo y del sustraendo y realizar la respectiva resta; o sumar el resultado al sustraendo, con lo
que se debería obtener el minuendo.
Con respecto a las operaciones aritméticas de multiplicar y dividir en binario, estas se rigen
por las tablas de multiplicar y dividir en binario (ver Figura 1.53).
46
Por otro lado, la operación aritmética de sumar en los sistemas octal y hexadecimal se hace
teniendo en cuenta las tablas correspondientes para la suma en ambos sistemas (ver Figura 1.55).
Teniendo en cuenta dichas tablas, la Figura 1.56 muestra algunos ejemplos de suma en octal y
hexadecimal.
Una manera sencilla de realizar la suma en octal y hexadecimal es usando el método del reloj.
Consiste en ordenar todos los símbolos del sistema de numeración en un círculo de menor a mayor
(como en un reloj). Para realizar la suma se procede de la siguiente manera:
2. Desplazarse en el sentido de las agujas del reloj, avanzando tantas posiciones como lo indique
el segundo sumando.
3. El resultado de la suma será la última posición a la que se llegue. Cuando al sumar se supere
el valor del último dígito del sistema de numeración, se produce un acarreo y debe añadirse
una unidad a la posición inmediatamente superior.
La Figura 1.57 muestra un par de ejemplos de suma en hexadecimal utilizando el método del
reloj.
La operación aritmética de restar en los sistemas octal y hexadecimal se hace mediante la
técnica del complemento, tal y como se vio para el sistema binario. La resta hexadecimal sigue las
mismas reglas que la resta decimal y binaria, con la salvedad de que un pedido de 1 en la notación
47
Figura 1.57: Ejemplos de suma en hexadecimal mediante el método del reloj
hexadecimal representa el número decimal 16. Usando el método del reloj para la sustracción, se
procedería de la siguiente manera:
2. Desplazarse en el sentido contrario a las agujas del reloj la cantidad de veces indicada por el
sustraendo.
3. El resultado de la resta será la última posición a la que se llegue. Cuando al restar se llegue a un
valor inferior a 0, se realiza un pedido y se debe restar una unidad a la posición inmediatamente
superior.
La Figura 1.58 muestra un par de ejemplos de resta en hexadecimal utilizando el método del
reloj.
48
1.4.4 Codificación de caracteres alfanuméricos
Los caracteres son la representación habitual para el intercambio de información entre el ordenador
y los dispositivos de entrada y salida, de ahí que también se denominen códigos de entrada/salida.
Un carácter en general puede ser un símbolo alfanumérico (numérico o alfabético), especial o de
control. Los caracteres se suelen representar mediante un valor numérico que equivale a un símbolo
del alfabeto según una determinada tabla. Por tanto, los códigos de caracteres se pueden ver como
una correspondencia biunívoca entre un conjunto de caracteres y un conjunto de combinaciones de
bits (tabla).
La tabla de codificación de caracteres utilizada tradicionalmente en la mayoría de computadores
personales es la tabla ASCII (American Standard Code for Information Interchange). ASCII fue
desarrollado por ANSI (American National Standards Institute), por lo que a veces se conoce
también como tabla o código ANSI. En la tabla ASCII básica se emplean 7 bits (27 = 128 valores
posibles, desde el 0 al 127) para representar los siguientes caracteres:
Caracteres de control. Son los caracteres entre el 0 y el 31, y tienen asignados algunos
símbolos gráficos. Sin embargo, lo más normal es que se empleen como códigos especiales con
significados concretos para la pantalla o la impresora, como avance de línea, retorno de carro
(volver a la primera columna de texto), emitir un pitido, fin de página, etc.
Las combinaciones que ofrece ASCII resultan insuficientes para representar los símbolos habi-
tuales en los distintos idiomas, por lo que normalmente se utiliza la tabla ASCII extendida (ver
Figura 1.59), que contiene 256 posibles valores (8 bits, 28 = 256). Las posiciones desde la 0 a la 127
representan los mismos caracteres que en la tabla ASCII básica, y desde el carácter 128 hasta el
255 se incluyen diversos grupos de símbolos, entre los que destacan las letras con tilde, letras pro-
pias de alfabetos internacionales (como la ñ), elementos de dibujo (líneas, cuadros, etc.), símbolos
matemáticos, etc. Puesto que las necesidades de caracteres especiales (acentos, etc.) varían de unos
países a otros, la parte alta de la tabla ASCII (del carácter 128 en adelante) no es siempre igual.
Existen un conjunto de páginas internacionales de caracteres que definen el contenido de la parte
alta de la tabla ASCII para cada país o para usos concretos. Esto implica que un texto codificado
utilizando estos caracteres pueda tener apariencia diferente si se utiliza una página internacional
distinta. Esto es un problema importante cuando se comparten documentos en idiomas diferentes,
ya que los textos podrían resultar difícilmente legibles.
Para solucionar este problema, surge Unicode, una tabla estandarizada y universal, donde
cada carácter se representa con 16 bits. Esto da lugar a un máximo de 65.536 símbolos diferentes.
49
Figura 1.59: Tabla ASCII extendida (8 bits)
Todos ellos están dedicados a símbolos, no hay ningún código para caracteres de control como
en ASCII. En Unicode están contemplados todos los posibles caracteres conocidos, incluyendo los
miles de ideogramas de los lenguajes orientales. Unicode está ampliamente extendido, pero tiene el
hándicap de que cada carácter utiliza el doble de memoria que ASCII. Por ello surgió UTF-8, que
es una modificación de Unicode que pretende solucionar el problema del uso de memoria. UTF-8
tiene los mismos caracteres que Unicode, pero diferentes símbolos pueden tener distinto número de
bits: las letras más habituales, las de la tabla ASCII básica, ocupan 1 byte, y las menos habituales
puede ocupar 2, 3 o 4 bytes. Las reglas de composición de UTF-8 están diseñadas de forma que se
pueda convertir fácilmente de UTF-8 a otras versiones de Unicode y otros formatos, y viceversa.
Por último, comentar que el orden de los caracteres en las distintas tablas de caracteres (ASCII,
Unicode, etc.) se utiliza a menudo en informática para ordenar alfabéticamente cadenas de caracte-
res. Según este tipo de orden, y fijándonos, por ejemplo, en la tabla ASCII extendida, una palabra
que empiece por Á (A con tilde), estará ordenada después que otra que comience por B. De la
misma forma, una palabra en mayúsculas precederá a otra en minúsculas, independientemente de
la letra que sea. A este tipo de ordenación, en lugar de alfabética, se le conoce como ordenación
ASCII.
50
1.4.5 Tipos simples de dato, estructuras de datos y ficheros
La procedencia de los datos que deben ser procesados puede ser muy distinta y tener su origen en
unidades muy diferentes del computador. Así, un dato puede ser un carácter leído desde teclado,
estar almacenado en disco o ser un número que se encuentra en memoria principal. En cualquier
situación el dato tiene la misma representación y dicha representación dependerá de su naturaleza,
que podrá ser numérica (entero o real), lógica o alfanumérica. Esa naturaleza intrínseca de los datos
que pueden ser procesados en el computador permite hacer una primera clasificación de cuatro tipos
básicos de dato, conocida como tipos simples de dato o tipos de dato simples:
Entero o punto fijo. Es un tipo de dato que permite almacenar valores numéricos enteros
en un rango que depende del número de bytes que se dediquen a su almacenamiento y de si se
permiten o no números negativos. Pueden ser a su vez de dos subtipos: sin signo (sólo positivos,
representados en binario natural) o con signo (números positivos y negativos, representados
mediante el convenio de complemento a 2).
Real o punto flotante. Permite almacenar valores que pueden tener parte decimal en for-
mato de punto flotante, cuyo rango de valores y precisión depende del número de bytes que
ocupen: cuantos más bits se dediquen a la mantisa mayor precisión en las cifras decimales;
cuantos más bits se dediquen al exponente, mayor rango de valores, desde números muy gran-
des (lejanos al 0), hasta fracciones muy pequeñas (números muy cercanos al 0). Así, cuantos
más bits se dediquen a la representación completa, más precisión y más rango. Por ejemplo:
Los números en punto flotante de precisión simple utilizan 32 bits en total, mientras que los
números en punto flotante de precisión doble utilizan 64 bits.
Lógico o boolean. Almacena únicamente dos posibles valores: verdadero (true) o falso (false).
Por tanto, sólo necesita 1 bit para almacenar esta información, pero normalmente utiliza un
byte completo. Esto es debido a que la CPU tarda menos en manipular una palabra (1 byte),
que en separar de una palabra un byte o un bit suelto. Si todos los bits de la palabra son 0
el valor es falso, siendo verdadero en caso contrario.
Un dato de tipo simple no está compuesto de otras estructuras que no sean los bits y, por tanto,
su representación sobre el computador es directa, sin embargo existen unas operaciones propias de
cada tipo que en cierta manera los caracterizan. En la práctica, la mayor parte de la información útil
51
no aparece aislada en forma de datos simples, sino que lo hace de forma organizada y estructurada.
Además, tener estructurada la información supone ventajas adicionales al facilitar el acceso y el
manejo de los datos. Por ello, parece razonable desarrollar la idea de la agrupación de datos, que
tengan un cierto tipo de estructura y organización interna.
Una estructura de datos es, a grandes rasgos, una colección de datos (normalmente de tipo
simple) que se caracterizan por su organización y las operaciones que se definen en ellos, es decir,
permiten representar una información relacionada (distintos datos que están relacionados entre sí
de alguna manera). Por tanto, una estructura de datos vendrá caracterizada tanto por unas ciertas
relaciones entre los datos que la constituyen (por ejemplo el orden de las componentes de un vector
de enteros), como por las operaciones posibles que se pueden realizar con ella.
Las estructuras de datos se pueden clasificar en estáticas o dinámicas según la variabilidad
de su tamaño durante la ejecución del programa que las utiliza. Las estructuras estáticas son
aquellas en las que el tamaño ocupado en memoria se define con anterioridad a la ejecución del
programa (en tiempo de compilación), de forma que su dimensión no puede modificarse durante la
misma (por ejemplo, un vector de números). Por el contrario, ciertas estructuras de datos pueden
crecer o decrecer en tamaño durante la ejecución, dependiendo de las necesidades de la aplicación,
sin que el programador pueda o deba determinarlo previamente: son las llamadas estructuras
dinámicas. Las estructuras dinámicas no tienen limitaciones en su tamaño (teóricamente), salvo
la única restricción de la memoria disponible en el computador. En esta asignatura solamente se
verán estructuras de datos estáticas, que se clasifican en:
Arrays. El tipo array o vector o arreglo representa un conjunto de elementos donde todos son
del mismo tipo. Cada elemento individual del array se identifica mediante un índice (elemento
1 del array, elemento 2, etc.). Por ejemplo, podemos tener un array de enteros que almacena
el número de plazas de 5 autobuses (numerados del 1 al 5): número de plazas del autobús 1,
del autobús 2,... hasta el 5. También se pueden definir arrays cuyos elementos sean a su vez
otros arrays, dando lugar a lo que se conoce como arrays multidimensionales. En concreto, a
los arrays de dos dimensiones se les conoce también como matrices.
Cadenas. Algunos autores consideran el tipo cadena o string como una estructura de
datos diferente a los arrays, ya que muchos lenguajes de programación (como es el caso
de Python, por ejemplo) tienen definido el tipo String como un tipo propio del lenguaje.
Otros autores simplemente consideran que el tipo cadena es un tipo de array especial (un
array de caracteres exclusivamente, como es el caso del lenguaje C). Dependiendo del caso,
el tipo cadena se considerará entonces una estructura de datos estática o dinámica. Para los
lenguajes que tienen definido el tipo cadena como propio, este suele ser un tipo dinámico
(no es necesario establecer la longitud máxima de la cadena antes de ejecutar el programa,
52
en tiempo de compilación). Los lenguajes que no tienen un tipo cadena predefinido suelen
emplear un array de caracteres en su lugar y, por lo general, el tamaño de dicho array sí que
debe definirse en tiempo de compilación. En este caso estaríamos hablando de que las cadenas
son unas estructuras de datos estáticas para ese lenguaje. En esta asignatura se considerarán
estructuras de datos estáticas aparte de los arrays, aunque no será necesario especificar su
tamaño máximo.
Figura 1.60: Ejemplo de estructura de datos de tipo matriz cuyos elementos (píxeles) son registros
de 3 campos (rojo, verde y azul) para representar en memoria los datos de una imagen
Por último, los programas normalmente necesitan también guardar información en dispositivos
de almacenamiento no volátiles (discos, memorias externas, etc.) para que en cualquier momento
la información pueda estar disponible. Para guardar la información en estos dispositivos se utilizan
unas estructuras de datos llamadas ficheros (o archivos). Cada fichero tiene la misma estructura
que la memoria principal, en el sentido de que es una secuencia de bytes. La información de los
distintos tipos y estructuras de datos que se han explicado se guarda en un fichero conservando
la misma representación que tenían en memoria principal, de manera que el intercambio entre
53
memoria principal y el disco se hace copiando byte a byte las celdas de memoria a las celdas del
archivo y viceversa.
Habitualmente se construyen ficheros mediante la repetición de un mismo tipo de registro, o
también podemos tener ficheros en el que aparece una secuencia irregular de estructuras. A este
tipo de ficheros se les conoce como ficheros binarios. Además, existe un tipo de ficheros muy
utilizado, los ficheros de texto, que contienen únicamente secuencias de caracteres. No obstante,
los datos de un fichero no se pueden utilizar directamente en los programas, ya que deben estar
necesariamente en memoria principal, por lo que es necesario que se traspasen a estructuras de
datos en memoria. Como se explicará a lo largo de la asignatura, los lenguajes de programación
proporcionan instrucciones que permiten traspasar parte del contenido de un fichero a estructuras
de datos en memoria y viceversa.
Antes de hablar de redes de ordenadores hay que hacer una pequeña introducción a los conceptos
de comunicación y telecomunicación. Este último está formado por la palabra comunicación
y el prefijo tele (a distancia), luego se puede definir como comunicación a distancia. Más formal-
mente, se dice que se establece una telecomunicación cuando se produce una emisión, transmisión
y recepción de información de cualquier naturaleza a través de un medio capaz de propagar se-
ñales electromagnéticas. Los primeros sistemas que se utilizaron para realizar telecomunicaciones
surgieron durante el S.XIX: el telégrafo (escritura a distancia), el teléfono (sonido a distancia) y el
teletipo (permite utilizar un teclado y una impresora para enviar y recibir los mensajes).
La comunicación es la acción o efecto de hacer partícipe a otra persona del conocimiento o
información que uno tiene. A partir de esta definición se pueden identificar varios elementos básicos:
Desde el punto de vista de las telecomunicaciones, la señal que se transmite en una comu-
nicación se transforma en información (sonido, imagen, vídeo...), constituyendo así la fuente de
información. Tal y como se muestra en la Figura 1.61, esa información debe ser transformada en
señales adecuadas para su transmisión y puesta en el medio transmisor (canal) por el transmisor.
Ese proceso de transformación la realiza un codificador. La señal propagada por el canal llega al re-
ceptor y se transforma por el descodificador al mismo tipo de la información original, entregándose
posteriormente al destinatario de la información para que pueda ser entendida correctamente.
54
Figura 1.61: Transmisión de información desde el punto de vista de las telecomunicaciones
Desde hace varios años, con el nacimiento de la sociedad de la información, las telecomuni-
caciones se han convertido en uno de los principales motores del desarrollo económico de nuestra
sociedad. El avance de las Tecnologías de la Información (TI) se debe precisamente a la mejora en
la infraestructura de las telecomunicaciones, que permite transmitir mejor los grandes volúmenes
de información (voz, textos, datos, imágenes, vídeo) a cualquier punto. Específicamente, el gran
avance de las TI se debe principalmente a tres aspectos importantes:
Al explicar el funcionamiento del computador se introdujo el concepto de señal discreta. Las señales
discretas son aquellas cuya variación a lo largo del tiempo sólo toma valores de un conjunto finito.
Algunos casos se conocen como digitales porque tienen dos únicos valores lógicos 0 y 1 como,
por ejemplo, la comunicación entre ordenadores, en la que la información se transforma a dígitos
binarios. En cambio, las señales analógicas son aquellas cuya variación a lo largo del tiempo se
realiza de forma continua, es decir, para pasar de un valor a otro necesita tomar todos los valores
intermedios (por ejemplo el voltaje, la velocidad...).
Las principales desventajas de las señales analógicas con respecto a las digitales son la degrada-
ción de la señal con la distancia (atenuación), ya que se pierde calidad cuando la distancia es mayor,
y la influencia de los ruidos, ya que estos se superponen a las señales analógicas, distorsionándolas
la mayoría de veces. Por este motivo, la tendencia actual es ir sustituyendo progresivamente los
55
dispositivos de almacenamiento y transmisión de información de analógicos a digitales, ya que una
señal digital no pierde calidad por la distancia y por los ruidos y, si lo hace, puede ser restaurada.
En la comunicación de datos un elemento fundamental es la velocidad de transmisión. La
velocidad de transmisión de datos es el numero de bits por segundo que salen del ordenador hacia
el módem para que este los module y los transmita hacia el terminal de destino. Se suele medir en
bits por segundo (bps), Kilobits por segundo (Kbps, 1 Kbps = 1000 bps), o Megabits por segundo
(Mbps, 1 Mbps = 1.000.000 bps).
Otro elemento fundamental es el medio de transmisión (también conocido como canal, línea,
ruta, enlace o circuito para la transmisión de la información). La capacidad de un canal es el rango
de frecuencias que puede transmitir el medio que constituye dicho canal, es decir, es el margen entre
las frecuencias inferior y superior que pueden circular por el mismo. Habitualmente esta capacidad
se designa como ancho de banda del canal, e indica el volumen de tráfico que el medio puede
soportar, sin causar distorsión apreciable a la señal para la calidad de servicio establecida. Tres son
los medios de transmisión más utilizados hoy día:
Par trenzado. Es el más antiguo y todavía más usado medio de transmisión. Consiste en
dos hilos de cobre aislados de pequeño diámetro, usualmente 1mm, que se enrollan entre sí
de forma helicoidal (trenzada) para reducir las interferencias producidas por el acoplamiento
capacitivo entre los hilos. Su aplicación se encuentra en los sistemas telefónicos. Los cables
de pares pueden transmitir señales a varios kilómetros, sin embargo para grandes distancias
se precisan dispositivos como repetidores, que amplifican la señal. Se pueden emplear para
transmisión analógica o digital y llegan a alcanzar velocidades de unos pocos Mbps. Son fáciles
de instalar y se utilizan sobre todo en redes locales.
Cable coaxial. Consiste en un hilo de cobre, que constituye el núcleo del cable, rodeado por
un material aislante. Este conjunto está encapsulado por un conductor cilíndrico constituido
normalmente por una tupida malla también de cobre. Todo ello se recubre a su vez por un
plástico de protección. Soporta velocidades elevadas del orden de 10 Mbps o más. Existen dos
tipos principales de cable coaxial:
• Cable de 50 ohmios. Para transmisión digital y se denomina cable coaxial de banda base.
Puede llegar a una velocidad de 10 Mbps en 1 km. Se usan para redes de área local y
para largas distancias en los sistemas telefónicos. Los cables de banda base son los más
baratos y sencillos de instalar.
Fibra óptica. Se utiliza como medio físico la fibra de vidrio y como señal la luz, normalmente
56
emitida mediante un proyector de rayos láser, lográndose alcanzar grandes distancias sin
apenas pérdidas. Por convenio, un pulso luminoso representa un bit 1 y su ausencia representa
un bit 0. Transmite energía lumínica en vez de señales eléctricas. Tiene la ventaja de que la
comunicación no es afectada por el ruido y las radiaciones y entre sus inconvenientes figura su
elevado coste y que las conexiones requieren un complejo proceso de soldadura. Está teniendo
un creciente uso en las transmisiones telefónicas. Ha desplazado totalmente al par trenzado
y al cable coaxial en los tendidos submarinos. En la transmisión de redes de área local no
está tan extendido debido a la mayor complejidad de la tecnología que se necesita. Permite
velocidades de 100 Mbps.
Figura 1.62: Ancho de banda soportado por algunos medios de transmisión de datos
Una red de comunicación es un conjunto de nodos y los canales que los enlazan. En una red de
ordenadores el conjunto de nodos serían los propios ordenadores, aunque los canales y dispositivos
implicados en la comunicación son también computadores. En la actualidad se pueden realizar varias
clasificaciones de tipos de redes (por la distancia que cubren, por el tipo de medio de transmisión,
etc.). Según la distancia que cubren, las redes se clasifican en:
Redes de Área Local (Local Area Networks, LAN). Las redes locales son aquellas que están
instaladas en un dominio geográfico limitado, como puede ser el interior de una empresa u
organismo, con el objetivo de satisfacer las necesidades informáticas, integrando todos los
equipos existentes (ordenadores, impresoras, servidores de comunicaciones, etc.) para apro-
vechar al máximo sus capacidades de proceso. El alcance varía entre cientos de metros y
kilómetros y la velocidad de transmisión es elevada comparada con la que se alcanza con
las líneas telefónicas. Por ejemplo, Fast Ethernet varía entre 1 Mbps y 100 Mbps, la tec-
nología ATM alcanza 622 Mbps, y Gigabit Ethernet 1 Gbps. Las distintas configuraciones
geométricas que pueden adoptar los equipos que se conectan a un red LAN (topología, ver
Figura 1.63) son: en estrella, en bus o en anillo. Para interconectar redes LAN próximas se
emplean algunos dispositivos como repetidores (repeaters), puentes (bridges), encaminadores
(routers) y pasarelas (gateways). Además de los clásicos par trenzado, coaxial y fibra óptica,
57
se están implementando con éxito redes LAN sin cables, es decir, las conocidas como redes
inalámbricas.
Redes de Área Extendida (Wide Area Networks, WAN). Las redes de área extensa son
redes pertenecientes a grandes compañías u organismos oficiales, abiertas a la comunicación
de cualquier usuario que se conecte a ellas, normalmente mediante un contrato de alquiler,
asignándosele un identificativo que le permite intercambiar información con cualquier otro
abonado. Posibilitan la interconexión de LANs situadas a grandes distancias.
Redes Integrales de Servicios Digitales (RDSI). También conocidas como redes ISDN
(Integrated Services Digital Network), se definen como redes telefónicas digitales capaces de
58
proporcionar conectividad digital extremo a extremo, para transportar cualquier tipo de señal:
audio, datos, imágenes, vídeo, etc. RDSI supone la digitalización completa, de forma que toda
la comunicación que se establezca será en forma digital. RDSI ofrece una velocidad básica de
canal de 64 kbps.
Cableadas. Son redes que utilizan un medio cableado (coaxial, par trenzado o fibra) para
transmitir la información. Por lo general suelen ser redes cuya velocidad de transmisión es
más rápida. Típicos ejemplos de este tipo de redes son: red telefónica, red de televisión por
cable, red de acceso a Internet de banda ancha (ADSL, fibra)...
1.5.3 Internet
59
Un protocolo en general es un conjunto de reglas formuladas para controlar el intercambio de
datos entre dos partes de una comunicación. En redes de comunicación, los protocolos especifican
cómo una red debe mover los mensajes y gestionar los errores. Existen muchos tipos de protocolos
(de acceso al medio o enlace, de red, de transporte, de aplicación, de transferencia de ficheros,
de búsqueda y recuperación de información, de transferencia de correo, etc.). Los protocolos más
importantes en Internet son:
TCP y DNS son los protocolos utilizados a nivel de transporte. Entre las funciones del Pro-
tocolo de Control de Transporte (TCP) se encuentra el de controlar los errores del flujo de
transmisión, de establecer números de secuencia de los paquetes, retransmisión de paquetes
perdidos, etc. Por otro lado, los servidores DNS relacionan los nombres de dominio reservados
con direcciones IP, por lo que ayudan a que el transporte de la información llegue al desti-
natario correcto. Por ejemplo, el nombre de dominio www.unex.es equivale a la dirección IP
158.49.17.240.
A nivel de aplicación existen varios protocolos importantes: HTTP y HTTPS para páginas
web, FTP para transferencia de archivos, SMTP, IMAP y POP3 para correo electrónico.
60