Para programar, primero entiende a tu ordenador

¿De verdad crees que conoces con exactitud la arquitectura de tu ordenador? Si quieres programar, lo mejor que puedes hacer, es conocer con precisión, como está formado tu ordenador y que función exacta cumple cada componente.

En este artículo, intentaremos “destripar” virtualmente nuestro ordenador, para poder entenderlo, ayudándonos del comando lshw, al cual podremos acceder como super-usuario.

Arquitectura de computadoras: conociendo el hardware

El hardware es todo elemento físico involucrado en una computadora o cualquier tipo de dispositivo electrónico inteligente.

Un ordenador, con respecto al hardware, se encuentra compuesto por una serie de dispositivos, clasificados según la función que éstos desempeñen. Dicha clasificación, se compone de:

  • Dispositivos de entrada
  • Dispositivos de salida
  • Dispositivos de comunicación
  • Dispositivos de almacenamiento
  • Dispositivos de cómputo

Los dispositivos de entrada son todos aquellos que permiten la entrada de datos a un ordenador. Estos dispositivos, son los que permiten al usuario interactuar con el ordenador. Ejemplos: teclado, mouse (ratón), micrófono, webcam, scanner, etc.

Los dispositivos de salida, son todos aquellos que permiten mostrar la información procesada por el ordenador. Ejemplos: monitor, impresora, auriculares, altavoces, etc.

Los dispositivos de comunicación son aquellos que permiten la comunicación entre dos o más ordenadores. Ejemplos: modem, router, placa de red, bluetooth, etc.

Los dispositivos de almacenamiento, son todos aquellos que permiten almacenar datos en el ordenador. Ejemplos: disco duro, pendrive, disket, CD, DVD, etc.

Los dispositivos de cómputo, son aquellos encargados de realizar las operaciones de control necesarias, sobre el resto de los dispositivos del ordenador. Estos dispositivos, se encuentran disponibles, en todos los ordenadores, y los mismos se describen a continuación.

CPU

La CPU (Central Processing Unit – Unidad Central de Procesamiento), también llamada procesador o microprocesador, es un circuito microscópico que interpreta y ejecuta instrucciones. La CPU se ocupa del control y del proceso de datos en las computadoras.

Generalmente, la CPU es un microprocesador fabricado en un chip, un único trozo de silicio que contiene millones de componentes electrónicos. El microprocesador de la CPU está formado por una unidad aritmético-lógica que realiza cálculos y comparaciones y toma decisiones lógicas (determinando si una afirmación es cierta o falsa mediante las reglas del álgebra de Boole.

Para aceptar órdenes del usuario, acceder a los datos y presentar los resultados, la CPU se comunica a través de un conjunto de circuitos o conexiones llamado bus. El bus conecta la CPU a los dispositivos de almacenamiento (por ejemplo un disco duro), los dispositivos de entrada (por ejemplo un teclado o un mouse) y los dispositivos de salida (por ejemplo un monitor o una impresora).

Cuando se ejecuta un programa, el registro de la CPU, llamado contador de programa, lleva la cuenta de la siguiente instrucción del programa, para garantizar que las instrucciones se ejecuten en la secuencia adecuada. La unidad de control de la CPU coordina y temporiza las funciones de la CPU, tras lo cual recupera la siguiente instrucción desde la memoria.

En una secuencia típica, la CPU localiza la instrucción en el dispositivo de almacenamiento correspondiente. La instrucción viaja por el bus desde la memoria hasta la CPU, donde se almacena en el registro de instrucción. Entretanto, el contador de programa se incrementa en uno para prepararse para la siguiente instrucción.

A continuación, la instrucción actual es analizada por un decodificador, que determina lo que hará la instrucción. Cualquier dato requerido por la instrucción es recuperado desde el dispositivo de almacenamiento correspondiente y se almacena en el registro de datos de la CPU. A continuación, la CPU ejecuta la instrucción y, los resultados se almacenan en otro registro o se copian en una dirección de memoria determinada[0].

Memoria
La memoria es la encargada de almacenar toda la información que el ordenador se encuentra utilizando. Existen tres tipos de memoria: memoria RAM, memoria ROM y memoria caché.

Listando componentes de memoria

Memoria RAM

La memoria RAM (Random Access Memory), es la memoria desde la cual, el procesador recibe las instrucciones y guarda los resultados. Se utiliza como memoria de trabajo para el sistema operativo, los programas y la mayoría del software. Es allí donde se cargan todas las instrucciones que ejecutan el procesador y otras unidades de cómputo. Se denominan “de acceso aleatorio” (random access) porque se puede leer o escribir en una posición de memoria con un tiempo de espera igual para cualquier posición, no siendo necesario seguir un orden para acceder a la información de la manera más rápida posible.

Durante el encendido del ordenador, la rutina POST verifica que los módulos de memoria RAM estén conectados de manera correcta. En el caso que no existan o no se detecten los módulos, la mayoría de tarjetas madres (motherboard) emiten una serie de pitidos que indican la ausencia de memoria principal. Terminado ese proceso, la memoria BIOS[1] (memoria ROM) puede realizar un test básico sobre la memoria RAM indicando fallos mayores en la misma[2].

Filtrando la memoria RAM

Memoria ROM

La memoria ROM (Read Only Memory), es permanente, ya que lo que permanece en la ROM no se pierde aunque el ordenador se apague. Su función principal es guardar información inicial que el ordenador necesita para colocarse en marcha una vez que se enciende. Permite solo la lectura de la información y no su escritura, independientemente de la presencia o no de una fuente de energía. Los datos almacenados en la ROM no se pueden modificar, o al menos no de manera rápida o fácil. Se utiliza principalmente para contener el firmware (programa que está estrechamente ligado a hardware específico, y es poco probable que requiera actualizaciones frecuentes) u otro contenido vital para el funcionamiento del dispositivo, como los programas que ponen en marcha el ordenador y realizan los diagnósticos[3].

Filtrando la memoria ROM (también llamada BIOS)

Memoria caché

La memoria caché es aquella que se usa como puente entre el CPU y la memoria RAM para evitar demoras en el procesamiento de los datos. Existen varios núcleos de esta memoria (denominados con la letra L y un número, por ejemplo L1). Cuanto menor el número más rápida es la memoria. Por proximidad a la CPU, es mucho más rápida que la memoria RAM y también, mucho mas pequeña.

Filtrando la memoria caché

Bus de datos
El bus de datos (o canal de datos) es un sistema digital que transfiere datos entre los componentes de una computadora o entre computadoras. Está formado por cables o pistas en un circuito impreso, dispositivos como resistores y condensadores además de circuitos integrados.

Notas adicionales sobre el comando lshw
Como hemos podido notar, el comando lshw nos permite listar el hardware de nuestro equipo. En este artículo, hemos utilizado el comando lshw con las siguientes opciones:

  • -short
    Utilizada para listar el hardware en formato compacto.
  • -C tipo_de_componente
    Utilizada para filtrar la salida, por el tipo de componente indicado.

Otras opciones pueden conocerse mediante man lshw.

También hemos concatenado (con |) el comando lshw con el comando grep patrón a fin de que la salida de lshw sea a la vez, filtrada por el patrón indicado. Cuando utilizamos la opción -i del comando grep, lo hicimos para que la búsqueda no distinga entre mayúsculas y minúsculas.

[0] Fuente: http://es.wikiversity.org/wiki/Estructura_del_computador
[1] En este caso, el término BIOS hace referencia a la memoria ROM (descripta anteriormente), y NO, al Sistema Básico de Entrada y Salida.
[2] Fuente: http://es.wikipedia.org/wiki/Memoria_RAM
[3] Fuente: http://es.wikipedia.org/wiki/Memoria_ROM

eugeniabahit

GLAMP Hacker espcializada en Ingeniería Inversa de Código sobre entornos GNU/Linux. Programadora eXtrema con enfoque en TDD, Python, PHP y Shell Scripting. Miembro de la Free Software Foundation, de la Linux Foundation y parte del equipo de Debian Hackers.

31 thoughts on “Para programar, primero entiende a tu ordenador

  1. Gracias @debish! Siempre es bueno repasar lo más básico, sobre todo para quienes programamos, ya que de tan básico, generalmente nos olvidamos que existe! (y me hago cargo!) :D

  2. Y para los que no programamos (o lo hacemos poco o no profesionalmente) también, y para los que empiezan, y para los que ya saben algo pero no lo tienen claro, y para cualquiera, porque el lenguaje y la forma en que lo explicas lo hacen “multiarch” xD

  3. Sin duda, muy completo, ya me estoy acostumbrando a tus Post’s Eugenia, siempre tan apegados a los detalles, y mira que aprendí bastante hoy con los combos del comando “lshw”.

  4. Ya se lo he dicho a Euge por Twitter pero vaya, está poniendo el listón tan alto que mi siguiente post en fin, me lo pensaré muy mucho !! Qué grande…

  5. Enhorabuena por el post. Repasar las bases nunca está de más. Aunque cuando escribes algo así puedes pensar “… pero si ésto es el ABC, además ya lo han explicado miles de personas…” pero la propia experiencia me ha demostrado que siempre supone una buena aportación, sobretodo si lo explicas con un enfoque tan claro y práctico como el que has adoptado.

    Ya que en los comentarios ha aparecido el tema y sin ánimo de flame. Querría preguntar al equipo de DebianHackers si hay alguna razón para incluir el NC (no comercial) en vuestra licencia de contenidos ¿No os cuadra más CC-BY-SA?

    Os explico mi modesto punto de vista sobre ésto. CC-BY-NC-SA, impide que alguien use vuestros posts o parte de ellos en una obra derivada con fines comerciales. Pero aunque vuestra intención inicial no es comercial, a mí meparece bien permitirlo. Me explico:

    Primero, si de verdad consigue hacer algo comercializable, aparte de apoyarse en vuestro trabajo, seguro que se lo va a tener que currar y eso también es una aportación.

    Segundo, conjuga libertad sin excluir negocio. Una de las críticas que los que no lo comprenden bien suelen achacar a lo libre como el software.

    Tercero, como la obra derivada estaría de todos modos ligada por CC-BY-SA, aunque tuviera fines comerciales, debería reconocer vuestra autoría y además otros (incluso vosotros) también podrían usarla para derivar otras obras comerciales o no.

    Si lo pensáis bien CC-BY-SA es la única versión de éstas licencias completamente libre en los mismos términos que entendemos el Software Libre. Ya os digo, es una reflexión/opinión hecha con ánimo de preguntaros si hay alguna razón que se me escape y que os haya hecho decidiros por limitar el derecho a hacer usos comerciales de vuestro trabajo.

    Os sigo con interés, ánimo y que no decaiga.

  6. Hola Toni, gracias por la aportación y por tenernos tan en cuenta, viniendo de ti es todo un honor, además de un “hey !! no bajéis la guardia” ;D. Sobre el post de Euge en fin, ya se ve cómo elabora los contenidos y cómo lo vive tan de cerca, es todo un ejemplo y sobre la licencia, ahí es algo de n1mh y mío, cuando se incorporaron Euge y Debish “ya estaba ahí y así”, pero no dudes que lo tendremos en cuenta.

    Quizás hasta me lo replanteo para DaboBlog, reconozco que algún palo me he llevado y de ahí que que tenga el “No comercial”, pero lo pensaré, un abrazo y si tienes alguna vez ganas de contar algo, no dudes en hacerlo llegar y nos haremos eco, gracias !!

  7. Y que decir, que esta muy bien explicado todo, y que como dice Dabo estas poniendo el listón muy alto, algo que es muy bueno para todos ya que cada nuevo articulo se hace casi de obligada lectura, tanto como para aprender algo nuevo como para poder recordar.
    Genial Eugenia, cada día me tenéis mas pendiente de lo que publicáis todos los integrantes de este fantástico Blog.
    ¡¡¡¡DebianHackers Rules¡¡¡¡¡¡

  8. @Toni Serna, si bien yo llegué luego de que ya estuviese planteado lo de las licencias, te cuento que con respecto a los libros y todo material de lectura, no soy partidaria de permitir el uso comercial (al menos de mis escritos), por una cuestión de principios.

    Con el Software es diferente, por el hecho de que quien quiera hacer uso comercial de una aplicación libre, tiene la obligación de distribuirla en forma conjunta con el código fuente, y la libertad de hacer uso comercial de la misma, obliga a la vez a quien haga uso de ese derecho, a aportar un valor agregado (ya sea un binario que solo se instale y así, evitar la tarea al usuario de tener que compilarlo hasta un servicio adicional de soporte técnico, etc.)

    En el caso del material educativo esto no sucede ¿te vendo un libro electrónico y además te envío dos archivos porque uno es gratis? Es ridículo. Es decir, quien quiera lucrar con lo que hayas escrito, simplemente lucra y ya, sin valor agregado de ningún tipo. De hecho, esto que escribo, está también publicado en PDF, ya que es el material que utilizo para dar clases y también entrego con licencia CC-BY-NC.

    Por otro lado, está el tema de como funcionan comercialmente los derechos a participar de las regalías obtenidas del material publicado. No comparto la metodología de las editoriales así como tampoco comparto las de las compañías discográficas, ya que así como me dedico a la informática, en algún momento de mi juventud, también me he tenido que someter a editoras y discográficas y sé positivamente la lacra que son y como se manejan.

    Todo lo anterior, sumado a una cuestión personal, de adoptar como valor fundamental en mi vida, el acceso no solo libre, sino además GRATUITO a la educación, ya que vengo de un país que a pesar de ser económicamente subdesarrollado, aún cuenta con bibliotecas, escuelas y universidades laicas, libres y gratuitas. De allí, que por cuestiones netamente personales, considero que todo el material educativo, no solo debe ser libre, sino además gratuito. Si permitiese que se lucrara con material educativo (escrito por mi, al menos, no hablo por el resto), estaría yendo en contra de mis principios y no tendría forma de asegurarme que la persona que acceda a ese material pagando, sepa que puede acceder a él, sin pagar un centavo.

    Personalmente, no admito bajo ningún concepto, que se lucre con el material educativo de mi autoría. De hecho, mis alumnos me pagan por dedicarles 4 horas semanales de mi tiempo, en darles clases, pero no por recibir el material, el cual lo entrego de manera gratuita SIEMPRE independientemente de si la persona toma o no, clases conmigo (postearlo aquí y permitir que quienes tengan el material, lo distribuyan libremente, es prueba de ello).

    Espero que se entienda mi punto de vista, ya que reconozco que es muy personal :)

    Saludos!!

Comments are closed.