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.


Categorías

Kernel

Willy Klew

Ingeniero en Informática, soy un fanático de Linux, Android, la programación, redes y todo lo que tenga que ver con las nuevas tecnologías. Ex... Ver perfil ›

3 comentarios

  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!

Escribe un comentario