El Kernel de Linux cambia partes de su código de Assembler a C

lenguaje de programacion c

Sabido por todos es que el lenguaje Assembler es el más rápido para algunas cuestiones y por ello es el más utilizado en el kernel de los diferentes sistemas operativos y lo propio ocurre para proyectos de tiempo real en donde se utiliza electrónica avanzada. El problema llega después, cuando ese código necesita ser mantenido y no lo es, y por ello en el caso del kernel de Linux los desarrolladores han optado por traducir ese código Assembler a C.

C es el lenguaje de programación más representativo de Linux (en realidad, de todas las plataformas *nix), fue desarrollado por Dennis Ritchie y Ken Thompson en 1972, fue realizado en un sistema Unix PDP-11 y formó parte de Unix versión 2. Dadas sus altas prestaciones y portabilidad fue comenzando a ser utilizado cada vez más en la implementación de sistemas operativos y por ello Linus Torvalds lo utilizó para su proyecto cuando allá por 1990 buscaba una alternativa libre y abierta a Minix.

Claro que a pesar de tantas fortalezas, Assembler tiene algunas ventajas respecto de C como mencionamos al comienzo, por ello esta decisión ha sorprendido pero de acuerdo a lo que comenta Andy Lutomirsky en las listas de correo del kernel su trabajo ya está bien encaminado y el kernel de Linux 4.1 será el primero en incorporar esta reescritura de código fuente de Assembler a C. En concreto, todo lo referido a las salidas hacia modo de usuario, que en la actualidad está compuesto de una mezcla de código de estos dos lenguajes de programación pero que dado su escaso mantenimiento se ve cada vez más complicado al momento de actualizar.

Es que el código en Assembler lleva mucho tiempo sin ser actualizado y eso redunda en que los nuevos desarrolladores no tengan del todo claro su funcionamiento, y lo que es peor aún, no resultaría fácil actualizarlo. Así las cosas, en lugar de intentar algún cambio parcial han optado por comenzar a cambiar todas esas rutinas de Assembler a C, y en lo personal pienso que aunque se pueda llegar a perder algo de velocidad de ejecución (que puede ser mínima si el código C nuevo es eficiente) siempre es preferible código nuevo y claro a tenerlo desactualizado y con posibilidades casi nulas de actualización debido a que no se entiende bien como fue implementado.


5 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: AB Internet Networks 2008 SL
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   Miguel Mayol Tur dijo

    En primer lugar es ENSAMBLADOR, en castellano.

    En segundo lugar todo lenguaje debe COMPILARSE (o interpretarse), así la bondad del resultado depende del COMPILADOR (o el intérprete)

    Como el compilador de C ha mejorado mucho y el de ensamblador muy poco (porque ya era muy bueno), hoy en día la diferencia de un programa compilado escrito en C respecto del mismo escrito en ensamblador es nimia o inexistente (antes no lo era).
    Incluso la diferencia entre programas compilados (C y otros) e interpretados (Java y otros) también se ha minimizado mucho.

    Así que siendo mucho maś sencillo mantener C que ensamblador, es una decisión muy cabal el hacer estos cambios en el kernel, al hacer un análisis coste beneficio debilidades amenazas fortalezas y oportunidades o cualquier otro que sirva
    para la toma de decisiones.

    1.    Chigüire Bipolar dijo

      A Miguel Mayol Tur: En primer lugar, todo programador que se precie de serlo dice ASSEMBLER y entiende inglés. Los demás usan Visual Basic y se hacen llamar programadores. Qué vergüenza. Y en segundo lugar el Assembler NO SE COMPILA. Lo que hacen los programas que lo tratan es convertir los mnemónicos a bytes directamente. Programar en Assembler es hablarle a la máquina en su mismo idioma, pero para facilitarlo un poco se usan mnemónicos en lugar de escribir directamente los bytes correspondientes. Hay una correspondencia biunívoca entre un conjunto de bytes y una instrucción en Assembler. Pero esto, como es de entender, sólo lo sabe un programador de verdad, de esos que dicen ASSEMBLER. En consecuencia, no existen mejoras al «convertidor» de assembler a opcodes porque el programador es quien se encarga de hacer esa mejora. Los compiladores de C (y de otros lenguajes) traducen instrucciones en representaciones macro ya pre-establecidas de assembler (o códgo máquina) y las mejoras vienen dadas por cómo sean esas conversiones.
      Por qué usar C? Porque es más fácil revisar y mantener algo que es más legible. La mayoría de la gente no entiende directamente los opcodes ni los mnemónicos del assembler. Así de simple.
      Ni siqiuera me molestaré en hablar de Java, que si bien se impuso como standard hace tiempo ahora es detestado por quienes sí entienden de código.
      Pero no me crean a mí, pregúntenle a Google si lo que dije acá es falso.
      Saludos

      1.    eriugihc dijo

        Hola Chigüire, se me caen los ojos de la cara pensando que no eres capaz de escribir en castellano sin usar términos de origen anglosajón: se dice «ensamblador».
        Eso sí, en una cosa coincido contigo, mejor no hables de java porque para decir tonterías mejor dejarlo. Tenía un amigo que era como tú pero carpintero (no un experto programador) y decía que lo mejor era el serrucho y de las demás herramientas mejor ni hablar hasta incluso apretaba los tornillos con él. ¡Qué ejemplo a seguir!

  2.   Luis Gerardo Marin dijo

    El idioma inglés siempre está en la raiz de todos los términos computacionales. Asi es aunque no lo queramos los hispanohablantes. Sumar a esto que existen términos que no se pueden traducir como «bit», «byte», «unix», «linux», «DOS» y muchos otros mas. Y hay algunos que se PODRIAN traducir pero ni caso tiene como «CMOS», «CSS», «RAM» porque quedan unas iniciales que nada tienen que ver con la tecnología y para rematar ni existen en Google. No tiene caso traducir cuando el mensaje producido es ilegible. Conclusión: Es preferible para cuestiones técnicas o computacionales usar términos técnicos en inglés. Por lo mismo: Prefiero escribir que uso «windows» a decir que uso el sistema operativo «ventanas». Y prefiero hablar de CSS y que uso type=»text/css que a intentar decir que uso «hojas de hojas de estilos con el tipo igual a texto diagonal hojas de estilos». Salud.

  3.   Roberto Gómez dijo

    Los programas escritos algún lenguaje ensamblador siempre se compilan, nunca se interpretan. Como sea, no tiene nada de malo usar español en vez de spanglish. Los nombres propios nunca se traducen, pero los términos técnicos sí cuando no son acrónimos populares. Como sea, cada quien puede hablar como le plazca mientras aún podamos entenderlo.