Blog

Árboles binarios de búsqueda

Un árbol binario de búsqueda es una estructura ordenada de datos donde cada registro puede estar relacionado con otros dos registros. Vamos a prestar especial atención a los árboles binarios de búsqueda, ya que son muy populares y ampliamente utilizados en BBDD. Como ya adelantaba en el post anterior, los arboles binarios son de orden 2, es decir, sus nodos pueden tener un máximo de dos hijos. Y si además es de búsqueda, tiene que cumplir las siguientes condiciones para todos los nodos:

  • Si el nodo tiene un hijo izquierdo, este tiene que ser menor que él.
  • Si el nodo tiene un hijo derecho, este tiene que ser mayor que él.
Sigue leyendo Árboles binarios de búsqueda

Indexación por árboles

En los archivos indexados vistos hasta ahora, el recorrido de la tabla de índices es secuencial, con los inconvenientes que ya comentamos que este tipo de accesos tiene. No obstante, existe una técnica de indexación mucho más eficiente que la indexación secuencial, la indexación por árboles, que reduce el tiempo en las búsquedas de manera significativa. En este post voy a explicar la citada técnica.

Con acceso secuencial, cuando busquemos un dato, tendremos que recorrer el fichero de índices de manera secuencial hasta dar con el buscado, donde obtendremos la dirección de memoria de comienzo del registro en el archivo de datos. Como las tablas de índices son mucho menos pesadas que los ficheros con todos los datos, tenemos una mejora considerable usando los índices, aunque la búsqueda en la tabla de estos sea secuencial.

Cambiando la tabla de indices de acceso secuencial por una organización de los indices en un árbol de datos, vamos a conseguir acceder a nuestro indice mucho más rápidamente. Este tipo de estructuras están especialmente indicadas para acelerar las búsquedas, pero veamos como lo hace.

La estructura de árbol

En realidad, con las técnicas de indexación, estamos creando estructuras de datos que nos van a ayudar a trabajar con estos. Con la indexación secuencial creábamos pares clave – dirección que tenían una estructura lineal, uno detrás de otro, ordenados de acuerdo a algún criterio. Por ejemplo, en el caso del fichero proveedores de nuestro amigo Antonio, usábamos como clave el nombre del proveedor, y teníamos la estructura ordenada alfabéticamente en sentido creciente.

Pues bien, la principal característica de las estructuras de arboles, es que no son lineales. Es decir, después de un elemento no viene otro y luego otro y así sucesivamente, sino que a continuación de un elemento, pueden ir varios, uno o ninguno.

En la figura siguiente puedes apreciar la diferencia entre ambas estructuras de datos:

Estructura secuencial y equivalente de árbol
Estructura secuencial y equivalente de árbol

Algunos términos interesantes

Para explicar como funciona la estructura de árbol, resulta conveniente introducir una serie de términos comúnmente empleados. Además, casi seguro que toda la documentación que podéis encontrar sobre este tema, usará esta terminología.

  • Nodo: Cada elemento de la estructura de datos se le denomina nodo.
  • Nodo Padre: Como explicaba antes, y como se puede apreciar en la figura de más arriba, de un nodo pueden salir uno, varios o ningún nodo. Pues bien, un nodo padre es aquel del que sale al menos un nodo, sería el padre para ese nodo.
  • Nodo raíz: Es el primer nodo de la estructura, el único que no tiene un nodo Padre.
  • Nodo hoja: Aquel nodo que no tiene hijos

Después de esta breve explicación, creo que es fácilmente entendible porque a estas estructuras de datos se las denomina de árboles. Cada nodo es como un nudo del árbol, del que nacen ramas, hasta llegar a otro nudo, del que nacen más ramas, y así sucesivamente.

Así, para un nodo dado, este tendría un nodo padre que es el que apunta a nuestro nodo, y podría tener varios nodos hijos que serían aquellos a los que apunta.

¡¡Ojo!!, un nodo sólo puede tener un nodo padre (con la salvedad del nodo raíz que no tiene nodo padre), sino entraríamos en estructura cíclicas y esas ya no son estructuras de árboles.

Ahora, que ya sabemos lo que es una estructura de árbol, voy a aprovechar para introducir ciertos conceptos adicionales que nos va a hacer falta conocer, y que pueden apreciarse en la siguiente figura:

Estructura de árbol de datos
Estructura de árbol de datos
  • Nivel: El nivel de un nodo será los padres que tiene por encima hasta llegar al nodo raíz, incluido este último. Es decir, los saltos que tendría que dar hasta llegar al inicio del árbol.
  • Profundidad del árbol: El máximo nivel del árbol.
  • Orden: Número máximo de hijos que puede tener un nodo.

La indexación por árboles

Ahora que conocemos la estructura de los árboles de datos, podemos entender como ayudan a acelerar las búsquedas.  En realidad, cada vez que llegamos a un nodo, tomaremos una decisión sobre a que nodo hijo movernos. De esta forma, no tenemos que recorrer todos los nodos del árbol hasta encontrar lo que buscamos.

El orden de un árbol es un factor crítico. Normalmente, vamos a querer que sea un número pequeño, para mantener la estructura sencilla, y hacer crecer el árbol en profundidad en lugar de a lo ancho. Los árboles de orden bajo muestran mejor comportamiento en las búsquedas, que es la principal aplicación de estas estructuras de datos. Los árboles binarios (orden 2) son ampliamente utilizados en BBDD obteniendo mejoras notables en los procesos de búsqueda.

NOTA:

Este post es parte de la colección “Sistemas de acceso y almacenamiento de datos”. Puedes ver el índice de esta colección aquí.

Acceso Indexado

Después de los archivos de acceso aleatorio que explicaba en otro post, aparece el acceso indexado para corregir los principales inconvenientes de aquellos. Los archivos de acceso aleatorio suponían una reducción considerable en el tiempo de búsqueda de un dato sobre los archivos de acceso secuencial. Sin embargo, había que conocer exactamente el número de registro del dato que querías buscar, lo cual es muy poco práctico, ya que normalmente querremos buscar por valores en los distintos campos.

Sigue leyendo Acceso Indexado

Archivos de acceso aleatorio

Los archivos de acceso aleatorio nos permiten ir directamente a recuperar el registro deseado, sin necesidad de leer antes todos los anteriores. Solucionan de esta manera la principal limitación de los archivos de acceso secuencial, que era precisamente su método de acceso a los datos, la necesidad de recorrer todo el fichero desde el principio hasta llegar al punto que nos interesaba. Esta limitación se hacia cada vez más grande, según aumentaba el tamaño de nuestro fichero. Con un alto número de registros, los tiempos de lectura podían extenderse demasiado, hasta el punto de ser muy poco operativos y propiciar la migración a un fichero de acceso aleatorio.

Sigue leyendo Archivos de acceso aleatorio

Archivos de acceso secuencial

La primera opción de almacenamiento digital que se empleo fueron los archivos de acceso secuencial, ficheros con una cierta estructura para almacenar los datos pero muy lejos todavía de las bases de datos.

Pongámonos al inicio de la segunda mitad del siglo XX, cuando nuestro protagonista Antonio comienza a pasar a formato digital los datos de su tienda SuperGades. La opción que por entonces tiene disponible es sencillamente pasar los datos de un fichero en papel a un fichero digital, empleando un procesador de textos muy sencillo con muy pocas funcionalidades, en el que escribiríamos los datos sin ningún tipo de formato. A este fichero, se le denomina también archivo, tomando el nombre de su antecedente analógico, un fichero físico con cajones donde guardábamos las fichas con los datos. Si estuviéramos almacenando los datos de los proveedores, el archivo podría tener un aspecto similar a:

Frutas Gutierrez
Antonio Gutierrez
607454545
Hortalizas del Sur
Guillermo Morales
652854874
Azucarera Sevillana
Rodrigo Mendez
622525885

En este archivo hemos escrito los datos de nuestros proveedores uno detrás de otro, como lo haríamos en un cuaderno. Hemos generado un archivo secuencial, que recibe este nombre porque los datos se almacenan uno detrás de otro, y el acceso a los mismos será de forma secuencial, es decir, tengo que recorrer el archivo desde el principio hasta llegar al dato que quiero recuperar.

La marca EOF (End of File)

Esta manera de trabajar obligaba a incluir algún tipo de marca que nos indicara que habíamos llegado al final del archivo, de otro modo, obtendríamos un error al intentar leer un dato más allá del final del archivo. Esta marca es el carácter de final de archivo EOF.

Cuando escribíamos datos en el archivo, al cerrar el mismo, se añadía de manera automática este carácter al final del archivo.

Los lenguajes de programación emplean el carácter EOF en los procesos de lectura de datos. Van recorriendo el archivo de forma secuencial, línea a línea, dentro de un bucle hasta leer la marca EOF.

Limitaciones de los archivos secuenciales

El uso de archivos secuenciales para el manejo de datos presenta muchas limitaciones:

Acceso secuencial: como ya he mencionado antes, el acceso a los datos era secuencial, teníamos que recorrer todo el fichero desde su primera línea hasta llegar al dato que queríamos recuperar. Esta era la única manera de movernos por el archivo, siempre se avanzaba a leer la línea siguiente, no se podía retroceder, si queríamos recuperar un dato que ya habíamos pasado, teníamos que comenzar la lectura secuencial desde la primera línea.

Modos de apertura: Al acceder al fichero para trabajar con él, lo tenemos que abrir en modo de escritura o lectura, dependiendo de la operación que queramos realizar. Para cambiar de operación tenemos que cerrar el fichero y abrirlo de nuevo en el modo correspondiente.

Las lecturas pueden ser parciales, sin embargo las escrituras tienen que se completas. Cuando abrimos un fichero secuencial en modo escritura estamos borrando todo su contenido anterior. Por ejemplo, cuando queremos borrar un registro, lo que hacemos es reescribir el fichero completo, salvo el registro que queremos eliminar.

Algunos lenguajes de programación, permiten escribir a continuación del final de fichero. Un comando muy habitual para realizar esta función es Append.

Acceso exclusivo: Solamente un usuario puede trabajar sobre el fichero en un determinado momento, para que un nuevo usuario pueda acceder al fichero, el usuario actual tendría que cerrarlo antes. En otras palabras, no es posible que varios usuarios accedan al fichero de manera simultanea.

Estructura fija de campos: El propio funcionamiento de este tipo de archivos, nos obliga a manejar una estructura fija de datos. En el archivo ejemplo de proveedores primero guardábamos el nombre de la empresa, luego el nombre de la persona de contacto y finalmente el número de teléfono.

Cuando recorremos el fichero, sencillamente leemos datos, pero no sabemos que dato estamos leyendo. De esta forma, si cambiáramos accidentalmente el orden de registro, por ejemplo colocando primero el contacto y luego el nombre de la empresa, el dato de contacto sería tomado como el nombre de la empresa y el dato del nombre de la empresa como contacto.

Campos y registros

La estructura de almacenamiento de datos, la podemos definir en campos y registros. Un campo sería un tipo de dato y un registro sería el conjunto de campos que definen un elemento. Siguiendo con el ejemplo del archivo de proveedores, los campos de nuestra estructura serían: nombre del proveedor, contacto en el proveedor y teléfono. Y un registro sería el conjunto de campos que definen un elemento, en nuestro caso, un proveedor.

Pues bien, nuestro amigo Antonio, para evitar errores con los datos, decide realizar algunas mejoras en sus archivos secuenciales. Básicamente, introduce una marca de sincronismo, que nos indica el final de un registro. Esta marca puede ser cualquiera que definamos, pero una comúnmente empleada era <FIN>.

Con esta mejora, el archivo de proveedores quedaría:

Frutas Gutierrez
Antonio Gutierrez
607454545
<FIN>
Hortalizas del Sur
Guillermo Morales
652854874
<FIN>
Azucarera Sevillana
Rodrigo Mendez
622525885
<FIN>

Lógicamente, esta marca no podía ser nunca el valor de un campo, ya que nos conduciría a error, interpretaríamos dicho campo como el final del registro.

Soporte físico

En aquellos tiempos, Antonio emplearía cintas magnéticas para almacenar sus datos. Una cinta que se enrollaba sobre un rodillo, y que contenía partículas magnéticas para almacenar los datos. La cinta se iba desenrollando y se hacia pasar por un cabezal para su lectura o escritura, el mismo sistema empleado para las famosas cassettes de música. El propio funcionamiento de este sistema forzaba a que el acceso fuera secuencial, recorriendo la cinta de principio a fin.

Sistema de almacenamiento en cintas magnéticas
Sistema de almacenamiento en cintas magnéticas

Ejemplo de fichero secuencial (con Visual Basic)

Para entender como funcionaban los archivos de acceso secuencial, lo mejor es experimentarlo en nuestras carnes. Y para ello, vamos a crear un fichero secuencial, a leer y escribir datos en él.

Por simplicidad, para no tener que instalar ningún IDE de ningún lenguaje de programación, en las clases de Arquitectura de Datos, utilizamos VBA (Visual Basic Application) al que ya tenemos acceso en los ordenadores del aula, a través de Access del paquete de Microsoft Office Professional.

El ejercicio contempla 7 pasos:

Paso 1: Creamos una base de datos

Creamos una base de datos nueva, le ponemos el nombre que queramos, por ejemplo: BBDD

Paso 2: Creamos un modulo nuevo

Vamos a la pestaña “HERRAMIENTAS DE BASE DE DATOS” , pulsamos en “Visual Basic”.

A continuación, en el menú Inserta/Modulo, creamos un nuevo módulo. En mi caso, lo dejo con el nombre por defecto: “Módulo1”, ya que sólo lo vamos a usar para practicar.

Paso 3: Programamos un procedimiento para registro de datos

Lo primero que haremos será crear un archivo con los datos. Por ejemplo, con los datos de proveedores que manejaba Antonio. El procedimiento que realizaría esta tarea sería:

Sub RegistroEnArchivoSecuencial()

On Error GoTo e

ChDrive ("D")
ChDir "D:\pruebas"

Open "Proveedores.txt" For Output As #1

'Registro de proveedores
Print #1, "Frutas Gutierrez"
Print #1, "Antonio Gutierrez"
Print #1, "607454545"
Print #1, "<FIN>"
Print #1, "Hortalizas del Sur"
Print #1, "Guillermo Morales"
Print #1, "652854874"
Print #1, "<FIN>"
Print #1, "Azucarera Sevillana"
Print #1, "Rodrigo Mendez"
Print #1, "622525885"
Print #1, "<FIN>"

'Cerrar el archivo:
Close #1
MsgBox ("Guardados 3 registros de proveedores")
Exit Sub
e:
MsgBox (Err.Description)
End Sub

Sin explicar en profundidad como funciona el procedimiento, ya que este no es un curso de programación, sencillamente comentar que el procedimiento crea un fichero en la ruta especificada y luego vamos escribiendo los datos en él, de manera secuencial.

Vemos que tenemos que seguir un orden para los campos y acabar cada registro con la marca de sincronismo “<FIN>”.

Paso 4: Ejecutamos el procedimiento

Desde la ventana de Inmediato, ejecutamos el procedimiento.

Observamos el resulto, en la ruta indicada se ha generado el fichero Proveedores.txt. Si abrimos el fichero veremos como se han cargado los datos de forma secuencial.

Fichero proveedores
Fichero proveedores

Paso 5: Programamos un procedimiento para la lectura de los datos

En mi caso lo llamo leyendo y tendría el siguiente aspecto:

Sub Leyendo()

On Error GoTo e

ChDrive ("D")
ChDir "D:\pruebas"

Dim linea As String
Dim MyChar As String
Dim PintarLinea As Boolean

'Instrucción Open: https://docs.microsoft.com/es-es/office/vba/language/reference/user-interface-help/open-statement
Open "Proveedores.txt" For Input As #1

'Variable cadena donde guardo la linea que leo
linea = ""
'Variable booleana para saber si hay que pintar o no la linea.
'La linea se va construyendo caracter a caracter.
'Hago PintarLinea verdadero cuando llego a un final de linea
PintarLinea = False

' Bucle hasta llegar al final del fichero
Do While Not EOF(1)
    MyChar = Input(1, #1)
    If MyChar = Chr(13) Then
        PintarLinea = True
    ElseIf (MyChar <> Chr(10)) Then
        linea = linea + MyChar
    Else
    End If
    If PintarLinea Then
        Debug.Print linea
        linea = ""
        PintarLinea = False
    End If
Loop

Close #1

Exit Sub
e:
MsgBox (Err.Description)

End Sub

Si ejecutamos el procedimiento en la pantalla de Inmediato, veremos que se nos imprimen en pantalla todos los datos del fichero. Los hemos ido leyendo carácter a carácter de forma secuencial, y dibujando en pantalla cada línea del fichero.

Paso 6: Programamos un procedimiento para buscar un registro, para recuperar los datos de un proveedor

Llamo al procedimiento BuscandoProveedor, y su código sería:

Sub BuscandoProveedor()

ChDrive ("D")
ChDir "D:\pruebas"

Dim linea, MyChar, proveedor As String
Dim PintarLinea, encontrado As Boolean
Dim numCamposPintados As Integer

'guardo en la variable proveedor el nombre del proveedor
'que introduce el usuario
proveedor = InputBox("Introduce el nombre del proveedor que quieres buscar", "Busqueda")

Open "Proveedores.txt" For Input As #1

linea = ""
PintarLinea = False
encontrado = False
numCamposPintados = 0

'Recorro todo el fichero hasta la marca final de fichero EOF
Do While Not EOF(1)
    MyChar = Input(1, #1)
    If MyChar = Chr(13) Then
        PintarLinea = True
    ElseIf (MyChar <> Chr(10)) Then
        linea = linea + MyChar
    Else
    End If
'Comprobación para ver si he encontrado al proveedor
    If linea = proveedor Then
        encontrado = True
    End If
'Si tengo una linea completa para pintar, PintarLinea es true
'Si he encontrado el proveedor, encontrado es true
'Una vez encontrado, pinto la linea leida y las dos siguientes. 
'El registro tiene tres campos, tres lineas.
    If PintarLinea Then
        If encontrado Then
            Debug.Print linea
            numCamposPintados = numCamposPintados + 1
        End If
        If numCamposPintados = 3 Then
            encontrado = False
        End If
        linea = ""
        PintarLinea = False
    End If
Loop

Close #1

'Si no encontramos el proveedor que buscaba el usuario, 
'lo indico con un mensaje
If numCamposPintados = 0 Then
    MsgBox "Proveedor no encontrado"
End If

End Sub

Si lo ejecutamos, veremos que nos aparece un cuadro de dialogo para que introduzcamos el nombre del proveedor que vamos a buscar.

El funcionamiento es similar al anterior procedimiento en el que leíamos las líneas del fichero, sólo que en este caso voy comparando las líneas leídas con el nombre del proveedor introducido por el usuario, y en el caso de que coincidan, escribo en pantalla esa línea y las dos siguientes, ya que el registro completo del proveedor tiene tres campos.

Si por ejemplo buscamos el proveedor: Azucarera Sevillana, el resultado sería:

Resultado de la búsqueda de un proveedor
Resultado de la búsqueda de un proveedor

Paso 7: Forzando un error

Como ya he comentado, la estructura de los ficheros secuenciales es muy estricta, muy fija. En este ejemplo, si nos equivocáramos e introdujéramos “Rodrigo Mendez” como proveedor,  en lugar de “Azucarera Sevillana”, obtendríamos los campos siguientes, típico del acceso secuencial, no estaríamos obteniendo el registro completo:

Error forzado
Error forzado

Tras completar los 7 pasos de este ejercicio, estoy seguro de que te has hecho una idea del funcionamiento de los archivos de acceso secuencial, pero esto fue la primera solución para digitalización de datos, cuyas limitaciones fueron superadas por los archivos de acceso aleatorio, pero esto será tema para otro post.

NOTA:

Este post es parte de la colección “Sistemas de acceso y almacenamiento de datos”. Puedes ver el índice de esta colección aquí.

Organización de los datos

Desde siempre, las organizaciones han tenido que guardar y procesar distintos tipos de datos para su funcionamiento. La organización física de los datos para su posterior explotación, ha constituido una de las prioridades de las citadas organizaciones. Cuando no contábamos con ordenadores, hace ya bastantes años, registrábamos los datos en papeles que almacenábamos en archivadores. Armarios con cajones, los cuales consultábamos cuando necesitábamos recuperar alguno de dichos datos.

Esta organización de los datos, nos obligaba a disponer de grandes espacios para su almacenamiento y requería de un gran esfuerzo de registro. Además presentaba otros muchos inconvenientes. Cada vez que queríamos acceder a un dato, teníamos que emplear un tiempo considerable para localizarlo. El acceso era exclusivo, de tal manera que si alguien estaba consultando un dato, este no estaba disponible para nadie más. Todo esto sin mencionar las escasas posibilidades con las que se contaba para el tratamiento de los datos.

La digitalización de los datos

Posteriormente, con la llegada de la electrónica digital y los ordenadores, comenzamos a guardar estos datos en formato digital, lo cual facilitaba enormemente el almacenamiento, distribución y recuperación de los datos. Primero en un archivo digital, posteriormente en una base de datos y finalmente en varias bases de datos de distintos tipos. En estos últimos años, la disponibilidad y las capacidades de almacenamiento y tratamiento de los datos, se han visto sensiblemente aumentadas, dando lugar a lo que ha venido a denominarse “Big Data”.

Primera digitalización: del papel a los ficheros digitales
Primera Digitalización

Empezaremos nuestro recorrido con las primeras técnicas digitales de almacenamiento y tratamiento de datos, posteriormente profundizaremos en los distintos tipos de bases de datos y su gestión, para terminar, presentando el entorno Big Data. Para recorrer este camino, me apoyare en un ejemplo ficticio de una empresa para así mejor mostrar la evolución de las distintas arquitecturas de datos que han ido dando respuestas a las crecientes necesidades de almacenamiento y manejo de datos.

Mi ejemplo es una tienda de ultramarinos que fue fundada por Antonio, empresario gaditano, a mediados del siglo pasado. Iremos viendo la evolución de las necesidades de manejo de datos de la empresa, desde su fundación hasta hoy en día, convertida en un próspero supermercado con varias tiendas en toda España.

Supermercados SuperGades
SuperGades

Pongamos que la tienda se llama SuperGades. En sus primeros años de vida, Antonio maneja muy poquitos datos, únicamente un cuaderno con datos de sus proveedores y otro con los datos de venta, todo ello, por supuesto, en papel. En seguida crecen las necesidades de manejo de datos para Antonio, quiere incluir información de Clientes, y quiere poder ordenar toda la información para luego poder encontrarla cuando la necesite. Comienza a plantearse el empleo de un ordenador, la migración de los datos a un soporte digital. La primera solución disponible para Antonio será el uso de archivos digitales de acceso secuencial.

NOTA:

Este post es parte de la colección “Sistemas de acceso y almacenamiento de datos”. Puedes ver el índice de esta colección aquí.

La fuente de alimentación

Todos los dispositivos que se encuentran en la placa madre o conectados a esta, necesitan ser alimentados con corriente eléctrica para su funcionamiento. La fuente de alimentación es el componente del ordenador que cumple esta función.

La corriente eléctrica la tomamos de la red eléctrica, a la que enchufamos la Fuente de Alimentación del PC, que transforma la electricidad alterna en continua, y en un voltaje adecuado para los dispositivos del ordenador. Por tanto, aunque normalmente nos refiramos a la Fuente de Alimentación con dicho nombre, esta no genera electricidad, no es una fuente, sino un transformador de corriente alterna a continua, y de alto voltaje a bajo voltaje.

Sigue leyendo La fuente de alimentación

La placa base

Cuando abrimos un ordenador y vemos su interior, es inevitable sorprenderse con la placa base, también conocida como placa madre. La cantidad y variedad de componentes de la misma puede asustarnos un poco, pero en este post, vamos a analizarla y a quedarnos con algunas ideas básicas que nos ayuden a entender para que sirve. Pero lo primero de todo es entender que es la placa base y para que sirve.

Placa base
Placa base

La placa base es el circuito integrado que conecta todos los componentes del ordenador. Algunos de ellos, estarán directamente soldados a la placa. Otros, como la CPU o la memoria RAM, se conectan a través de conectores dedicados. Y el resto lo hacen a través de los llamados buses de expansion (puertos internos) o a través de los puertos externos.

Sigue leyendo La placa base

Componentes de un ordenador

En anteriores posts, he dado una pequeña introducción sobre el ordenador y su evolución, como una máquina de propósito general, y unas pinceladas básicas sobre la arquitectura del ordenador. Los próximos posts trataran en detalle los distintos componentes del ordenador, pero antes de ello, creo que servirá de ayuda hacer una pequeña lista con estos componentes, de forma que el alumno pueda hacerse una idea de lo que está por venir.

Sigue leyendo Componentes de un ordenador

La arquitectura de los ordenadores

Cuando hablamos de arquitectura de ordenadores, nos referimos al conjunto de todos los bloques (uno o varios componentes) y las comunicaciones entre estos, que hacen que el ordenador funcione de forma coordinada, sirviendo a un propósito común. Cada bloque cumple una o varias tareas, cuya contribución ordenada y coordinada hace que el equipo cumpla con la función para la que fue diseñado.

Sigue leyendo La arquitectura de los ordenadores