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 Israel y toda la gente que se está incorporando a DH, eso ayuda a que nos podamos centrar en temas de un interés compartido y sobre lo que dice Euge, es más o menos el punto de vista que tengo yo o quizás tenía después de que Toni me hiciese a volver a pensar en ello cuando siempre fui en mis inicios muy “Copyleft”.

    De todos modos, aquí el espíritu es muy “full disclosure” y con que (hablando de mi) uno sólo tenga una idea clara y haya dudas razonables o que vayan en contra de tus principios, para mi el camino está ya marcado. ¿En DaboBlog? quizás lo reconsidero, le daré una pensada porque actúo como tú Euge y lo sabes en los cursos, doy material en PDF y me jodería mucho que alguien pagase por ello.

  2. Yo me quito el sombrero ante la explicación de Eugenia de por qué no permite el uso comercial de su trabajo; me parece, ante todo, una razón coherente y de fuertes principios.

  3. Gracias por la explicación Eugenia y al resto por tomaros la molestia de debatir sobre el tema de licencias, libertad, gratuidad, ética y demás valores.

    Estoy de acuerdo con la cuestión principal del planteamiento de Eugenia y con sus principios, yo tampoco quiero que mi material educativo sea un objeto comercial. No sólo adopto el mismo punto de vista en mis clases sino que denuncio el opuesto. Por ejemplo colaboro con una universidad pública en la que algunos equipos docentes -no todos- sugieren varios textos que los alumnos deben adquirir, al margen de pagar su matrícula, como única posibilidad para seguir sus asignaturas.

    Lo que sigo preguntándome es si no habrá obras derivadas comerciales éticamente intachables, que por evitar que nuestras creaciones/escritos sean usadas como material didáctico de pago, estemos impidiendo que se generen.

    Para ver si puedo resolver a fondo esta duda he iniciado una pequeña investigación para profundizar en el tema. De hecho este debate ya es parte de ella, pero prometo traeros el resto de opiniones autorizadas que consiga reunir.

    Os propongo 2 escenarios donde me surgen dudas:

    1) Las creaciones CC-BY-NC-SA, ilustraciones, iconos, fotos o textos ¿pueden formar parte de un software libre licenciado por ejemplo con GPL?
    2) Como ejemplo ideal de obra comercial derivada que aporta un valor evidente me quiero imaginar el siguiente caso: Supongamos que una juguetera local toma los artículos de Eugenia, los de Dabo, los míos y los que otros tuviéramos con licencia CC-BY-SA y que diseña y pone a la venta un juego de mesa al estilo “Trivial Pursuit -hacker edition-“. Usa nuestros textos y fotos libres en varias partes de su producto y de forma evidente para redactar las preguntas y las respuestas que son el eje central del juego. Como respetan estrictamente los términos de la licencia, ellos venden una caja de cartón, con su tablero, las fichas de plástico, las tarjetas de preguntas, el tablero… listo para jugar, pero todo su material gráfico, sus diseños, los modelos 3D de sus fichas etc. están disponibles para ser descargados en formato digital. Puestos a imaginar, supongamos que además hasta recomiendan leer nuestros artículos originales animando a los jugadores a que luego midan sus conocimientos retando a sus amigos a una partida. ¿Os parecería bien este uso de vuestro trabajo?

    Espero no hacerme pesado con el tema, desde luego no pretendo haceros cambiar de licencia, igual al final tengo que cambiar yo, pero bueno así se aprende.

    Un saludo

  4. Hola de nuevo Toni -;)

    Curioso el ejemplo ;D, si te soy sincero, en el caso de que hubiese algo así te aseguro que estaría sobre mi mesa ! Pero no, la realidad es que muchas editoriales se aprovechan de un trabajo que libremente ofrecemos al resto, grandes lobbies que son auténticas “apisonadoras” en contra del libre conocimiento y en ocasiones, usan nuestros textos (ojo, de cualquiera de nosotros o sitios webs amigos que frecuento o en los que he participado) y si “abrimos la veda” podemos permitir que se hagan (por ponerte otro ejemplo vaya) una revista mensual con sólo dedicarse a hacer copy & paste de lo que más les interese con casi sólo maquetar / editar.

    Esto por un lado estaría genial ya que si se hace bien (ahí está el problema) ese conocimiento llega a más gente pero…¿De qué forma llega?, es decir, para mi por ejemplo no es lo mismo un artículo técnico que otro de opinión, en dónde hablo en primera persona y el contexto es vital. Luego las manipulaciones (que uno está harto) y los “fuera de contexto”, es decir, tú escribes por / para una gente y en un lugar en el cual todo está dentro de un contexto y con toda la información, e incluso los comentarios y opiniones tanto tuyas como de otros. Ojo, incluso tu opinión o enfoque inicial puede variar, también el post si comentes un error (ahí hablamos de algo técnico) o has podido tener un problema y tener que retirarlo (por lo que sea). Son supuestos ojo, nos ponemos en los extremos quizás para que los ejemplos se entiendan mejor.

    Pues bien, impidiendo el uso comercial, quizás evitas en parte eso, que esos contenidos salgan de un ámbito (el digital) que de alguna forma podemos “controlar” en cuanto a un posible desvío / uso de esos contenidos. Cuando el tema sale “de aquí” vete tú a saber qué y cómo usan esos contenidos o para qué fines. Eso es lo que me mosquea. Por lo que ante la duda, piensas “bueno, si alguien quiere saber algo aquí está todo, pero si respetan la licencia y te ponen un enlace, siempre se podrá por parte de usuario (lo hago a veces) ir a la fuente original y ver ese contexto”.

    Parece una chorrada, lo sé, pero en un PDF si sólo ponen la URL sin el enlace es como si ponen el link en un libro, poca gente irá a ver si es así o no, otro tema es que contacte conmigo (como han hecho) no sé, una asociación, revista o grupo determinado y te pidan permiso para un uso diferente e incluso comercial, ahí ya puedes decidir que hacer con tus textos, a ellos no les cuesta nada y la decisión final es tuya y de tu ética y / o motivaciones.

    Si no estuviésemos Toni siendo espectadores del mayor recorte de derechos en la red y fuera de ella y libertades civiles que jamás pude imaginar, todo sería imagino más fácil. Es triste e igual pagan “justos por pecadores” pero nadie te puede decir con la licencia actual un “hey, no puedo poner esto en mi blog”.

    Un abrazo !

  5. Yo no entiendo mucho de estas cosas, pero pienso que el ejemplo que pones de la juguetera es demasiado surrealista. Nadie puede apropiarse de tus diseños para fines comerciales. No estarás incurriendo en un delito a ojos del autor de los mismos sino de las entidades pertinentes.

    Yo doy clases de ajedrez a muchas personas. El material que entrego a mis alumnos lo copio de libros y bases de datos en Internet. Es evidente que les cobro a mis alumnos por mi enseñanza y para cubrir el costo del material empleado (papel, dvd’s y tiempo). En todo momento vienen reflejados los autores de dichos trabajos para hacerles saber de quien es la idea.
    Es evidente que no es ningún delito por mucho que se le parezca.

    La empresa de los juguetes que mencionas y mi caso, son totalmente diferentes.

    Eugenia está en su derecho de compartir sus trabajos de la forma que estime oportuno y yo la apoyo en todo. ¿Que podría sacar dinero a patadas? Pues claro que si, pero ella trata de facilitar a todos su conocimiento que muy posiblemente tuvo que adquirirlo de forma autodidacta y no todo el mundo tiene tanta destreza para ello.

    Saludines.

  6. Cierto, cierto, el ejemplo que he propuesto es extremo. Os sobra la razón.

    Tristemente es demasiado habitual que las operaciones comerciales se diseñen pensando en maximizar sólo el lucro. De este modo lo más habitual es que los trabajos culturales 100% libres sean usados sólo como una forma de reducir los costes de producción más que como una oportunidad para aportar verdadero valor, cobrando sólo por ese valor añadido y recompensando al creador mediante una justa difusión de su obra.

    Mi opinión es que los principios del saber libre hacen mucha falta hoy en día y por eso, creo que aunque sea de forma astuta, cuidando que no se vuelvan en contra, hay que trabajar para fomentarlos.

    ¡Joer Dabo! la solución que planteas de usar una licencia más restrictiva como filtro para descartar estos abusos y forzar a que contacten contigo para usos comerciales me parece más que interesante. De todos modos supongo que cuando se ha producido ese contacto siempre ha sido para pedirte permiso para hacer un uso comercial más restrictivo de tu trabajo, nunca para pedirte que licencies tu trabajo de forma todavía más libre.

    Como prometí he estado preguntando para aprender maś sobre el tema y querría compartir algunas reflexiones:

    – El debate no hace falta restringirlo a CC-BY-NC-SA vs CC-BY-SA, hay caminos intermedios, por ejemplo uno sería el que propone Dabo y que supone empezar incluyendo el NC y después según el caso y los principios de cada uno reservarse el derecho a modificar esa licencia.

    – Otra posibilidad es diseñarse una licencia a medida. Resulta caro, porque lo tiene que hacer una abogada con suficiente experiencia.

    – También se puede personalizar una licencia existente (CC contempla esta posibilidad sin problemas) de modo que se podría crear una CC-BY-SA-Uso-educativo-comercial-no-permitido o CC-BY-SA-Usos-comerciales-restringidos-a-obras-derivadas-en-internet. Sigue siendo necesaria la ayuda de una abogada. Pero para casos que verdaderamente lo necesiten, hay camino intermedio.

    – Supongo que ya lo sabíais pero las restricciones de las licencias de software libre como GPL no dejarían entrar en el “main” de Debian ningún paquete que incluyera algún elemento licenciado con la condición NC (de admitirse debería estar en “non-free”). Eso haría tristemente imposible que entrase en los repositorios de nuestra distro de referencia un juego de ordenador libre tipo “Trivial Pursuit – hackers edition” tal y como os he planteado… y eso ya no es una idea tan descabellada.

    De todos modos si lo programo y os pido permiso para usar vuestros escritos técnicos, visto lo visto, estoy seguro que me ibáis a autorizar su uso y que lo iba a poder licenciar bajo GPLv3 :-D

    Bueno, un verdadero placer este debate, os estoy sinceramente agradecido por haber compartido vuestra expediencia y opiniones.

  7. Buenas de nuevo Toni y gracias a ti y al resto por ayudar a buscar diferentes puntos de vista sobre el tema. En el caso que plantea Ivernalia hay algo que no me ha quedado claro cuando dices:

    # El material que entrego a mis alumnos lo copio de libros y bases de datos en Internet. Es evidente que les cobro a mis alumnos por mi enseñanza y para cubrir el costo del material empleado (papel, dvd’s y tiempo). En todo momento vienen reflejados los autores de dichos trabajos para hacerles saber de quien es la idea.

    En este caso, habría que decir a la gente que nos lee que ojo a cómo esté licenciado cada texto, libro (que pocos veo con CC), etc, ya que, aunque tú (y lo haces muy bien) pones las referencias a los autores, eso no sería lo suficiente frente a una licencia CC no comercial por ejemplo.

    Y Toni, en la práctica, a mi es la licencia que me resulta más cómoda (y menos costosa) para llegado el caso como bien planteas, alguien como tú me pide permiso para hacer un uso comercial (no tendría dudas) y más o menos es algo en plan Iptables (salvando las distancias). Cierras y vas abriendo o abres y dejas un “DROP” ahí “por si las moscas” pero te reservas el derecho a “dar paso”.

    Ojo, con el uso no comercial no hablo sólo de las editoriales, sino también de las redes de blogs comerciales que pagan una basura a los editores y se lucran con tus contenidos cuando tú no lo haces, un ejemplo que lamentablente vemos día a día y algo que SI va en contra de mis principios.

    Son enfoques y puntos de vista, cada uno a tener en cuenta (los de todos)

    Un abrazo !

  8. Lo de mis clases son recursos a modo de ejemplos a la hora de explicar (por ejemplo) la teoría de casillas conjugadas, la extracción, columnas abiertas etc. Las jugadas e información de las partidas del libro aparecen en bases de datos en Internet, pero la sintaxis que ofrece el GM (Gran Maestro) en cuestión, sólo la refleja el libro.

  9. Esta bien el post aunque yo añadiría en el apartado de la CPU la ALU y que el procesador manda los datos a la RAM y después van al disco duro. Después habría que hablar de la diferencia de S.O. Windows y Linux.

    Salu2,

Comments are closed.