¿Cómo es el conocimiento de LLP en la Universidad ITMO: el curso "Programación de bajo nivel"?

Los lenguajes de programación más populares son lenguajes de alto nivel. Por ejemplo, Java, Python o C #. Por supuesto, puede programar en ellos e imaginar mal cómo funcionan realmente los distintos niveles de abstracción. Pero para un buen especialista en TI, es importante comprender cómo se construye la plataforma con la que interactúa, cómo funciona el entorno de desarrollo, el compilador y la función de depuración. Esto nos lleva a hablar de programación de bajo nivel.

LLP (programación de bajo nivel) es una forma conveniente de descubrir cómo escribir programas confiables, rápidos, compactos y eficientes. Nuestros estudiantes aprenden ensamblador y C principalmente para tener una mejor idea de cómo funciona el software.

Foto Pablo BD CC BY-SA

¿Por qué necesitas saber


La industria de TI se está desarrollando rápidamente y está sujeta a una moda para la tecnología y los idiomas. Los conceptos fundamentales, por ejemplo, modelos computacionales, memoria virtual, compilación y ensamblaje de programas, cambian con mucha menos frecuencia. Comprender cómo se manifiestan los principios básicos de tales conceptos en un lenguaje de programación lo ayudará a aprender rápidamente un lenguaje similar si lo necesita para funcionar. LLP en este caso deja en claro cómo el programa del texto fuente se convierte en un conjunto de instrucciones de máquina y cómo se ejecutan en la computadora. A su vez, la familiaridad con los mecanismos de administración de memoria y los principios del compilador lo ayudarán a escribir código que requiera menos recursos informáticos.

Aclaración: a menudo tenemos que encontrar la tesis de que LLP solo está programando tareas de hierro y similares. Esto no es asi.

¿Dónde puedo encontrar LLP en la práctica:

  • Trading Operar en el intercambio crea programas con requisitos increíblemente altos para el tiempo de reacción a las fluctuaciones del mercado. Debido a la "lejanía" de los lenguajes de alto nivel del "hierro", es muy difícil predecir el tiempo de respuesta de un programa a un evento externo. Por lo tanto, LLP está involucrado aquí para proporcionar control sobre la velocidad de las transacciones.

  • Robótica Los recursos informáticos son limitados aquí, por lo que los requisitos de calidad de software y compacidad de código son altos. Los enfoques generalmente aceptados para crear software aquí no siempre funcionan y, a menudo, el desarrollo puede ir en C u otro lenguaje de sistema.

  • Software del sistema Estos son SO, compiladores (JIT, AOT), navegadores (hoy se han convertido en una plataforma para crear aplicaciones complejas). Su trabajo no siempre es notable para el profano, pero crea una infraestructura para el software de aplicación.

¿Cómo nos preparamos para esto?


Nuestros estudiantes de las instrucciones 09.03.01 "Informática e Ingeniería de Computación" y 09.03.04 "Ingeniería de Software" estudian una serie de disciplinas relacionadas con la programación de bajo nivel. Estos son sistemas operativos, software de sistema (incluido en Unix), desarrollo de compiladores, tecnologías de virtualización, etc.

Punto de partida - curso "Programación de bajo nivel". Aquí los estudiantes esperan trabajar con ensamblador y C. Paralelamente, estudian el proceso de compilación y ejecución de programas. El curso está en el formato "desde configurar la tarea hasta el programa terminado". El objetivo principal del curso es tener una idea de cómo cambia la presentación del programa durante las transiciones entre:

  • escribir código;
  • preprocesamiento y compilación;
  • vinculación
  • ejecución y depuración.


Foto hackNY.org CC BY-SA

De los estudiantes que vienen al curso, esperamos una experiencia mínima de programación en lenguajes de alto nivel (por ejemplo, Java o C #). Recomendamos los siguientes cursos en línea:


El curso "Programación de bajo nivel" se imparte principalmente a partir de un libro escrito específicamente para nuestros estudiantes. El libro se publica en inglés y se traduce al japonés y al portugués. También trabajamos a menudo con el manual del desarrollador de software Intel64 y System V AMD64 ABI.

¿Qué hay dentro del curso?


En palabras simples, este curso se puede detallar de la siguiente manera (con respecto a los temas que se han identificado anteriormente):

  • Código de ortografía Asuma un lenguaje de ensamblaje gratuito para Intel 64 (NASM, Linux) y C11. Aquí estudiamos modelos computacionales, damos recomendaciones avanzadas sobre el estilo de escribir código.

  • Preprocesamiento y compilación . Se estudian los preprocesadores NASM y C, el compilador estudia las gramáticas formales, las optimizaciones de código comunes y la mecánica de una implementación típica de construcciones de lenguaje C a nivel de ensamblador (en otras palabras, una demostración de la idea de "C es un ensamblador de alto nivel").

  • Vinculación (vinculación) . Estática y dinámica. En la práctica, se está estudiando el formato ELF: los estudiantes están explorando lo que hacen el enlazador y el cargador dinámico. Por cierto, se dedicó un mini curso separado a esto.

  • Ejecutar y depurar un programa . Aquí entendemos cómo estas tareas están relacionadas con la arquitectura de la computadora, el dispositivo de memoria virtual y el modo privilegiado, las interrupciones y el mecanismo de llamada del sistema. Además, consideramos cómo se usa gdb (un poderoso depurador que le permite "mirar debajo del capó" de cualquier programa).

Matices organizacionales importantes


Rompemos las conferencias co-escribiendo código y estudiando archivos compilados usando herramientas de binutils (objdump, readelf) o gdb. Durante la conferencia (y no solo), los estudiantes hacen preguntas tanto verbalmente como en el canal del curso en un conocido mensajero, y los maestros las responden lo antes posible.

Como una lección práctica, los estudiantes realizan trabajos de laboratorio. A veces, los estudiantes en el proceso de aprendizaje quieren desarrollar algo propio que les interese personalmente (un juego, un programa para controlar un robot, un compilador, etc.).

Por lo tanto, como sustituto del examen, los estudiantes pueden hacer un proyecto individual sobre un tema acordado con el maestro. Después de pasar por una revisión de código y publicar en GitHub, graban un video con una demostración del proyecto (este canal contiene proyectos implementados desde 2014, los enlaces a GitHub están en la descripción).

Un ejemplo del trabajo de un estudiante: levitron analógico (una historia detallada sobre el proyecto en Habr )

Algunos otros proyectos completados al final del curso:



Sobre el profesor


En el curso, todo un equipo de maestros interactúa con estudiantes que imparten conferencias, realizan trabajos de laboratorio y asesoran a los estudiantes. Los estudiantes de último año participan en debates y ayudan a los estudiantes del curso actual a comprender las complejidades de la programación de bajo nivel.

El trabajo principal en la preparación de materiales para el curso fue realizado por Igor Zhirkov, autor de un libro de texto sobre el mismo. Igor estudió en la Universidad ITMO y la Universidad Académica, recibió una maestría en ITMO en 2016. Su área de interés es la teoría de tipos, la lógica matemática, los lenguajes de programación y la programación de bajo nivel. Su principal proyecto actual está relacionado con la verificación formal de la refactorización del lenguaje C usando Coq y el compilador verificado de CompCert para C.



Este curso lo ayuda a aprender a ver un problema desde un nivel adecuado de abstracción y, digamos, condicionalmente, a no tratar de "escribir aplicaciones web en ensamblador". Estamos tratando de abordar el estudio de C y ensamblador en términos de comprensión de los conceptos asociados con estas "herramientas" y su entorno: sistemas operativos y CPU.

Por cierto, aquí puede encontrar un libro, cuya escritura se inspiró en la enseñanza de este curso (fue publicado en inglés, japonés y portugués).

Source: https://habr.com/ru/post/es425249/


All Articles