Programación de sistemas
Programación de sistemas, o programación de sistemas, es la actividad de programar software de sistemas informáticos. La principal característica distintiva de la programación de sistemas en comparación con la programación de aplicaciones es que la programación de aplicaciones tiene como objetivo producir software que proporcione servicios al usuario directamente (por ejemplo, procesador de textos), mientras que la programación de sistemas tiene como objetivo producir software y plataformas de software que proporcionen servicios a otro software. tienen un rendimiento limitado, o ambos (por ejemplo, sistemas operativos, aplicaciones de ciencia computacional, motores de juegos, automatización industrial y aplicaciones de software como servicio).
La programación de sistemas requiere un alto grado de conocimiento del hardware. Su objetivo es lograr un uso eficiente de los recursos disponibles, ya sea porque el software en sí es crítico para el rendimiento o porque incluso pequeñas mejoras de eficiencia se transforman directamente en importantes ahorros de tiempo o dinero.
Descripción general
Los siguientes atributos caracterizan la programación de sistemas:
- El programador puede hacer suposiciones sobre el hardware y otras propiedades del sistema que el programa funciona, y a menudo explotar esas propiedades, por ejemplo utilizando un algoritmo que se sabe que es eficiente cuando se utiliza con hardware específico.
- Normalmente se utiliza un lenguaje de programación de bajo nivel o un dialecto de lenguaje de programación para:
- Los programas pueden funcionar en entornos con limitaciones de recursos
- Los programas pueden ser eficientes con poco tiempo de ejecución, posiblemente teniendo una pequeña biblioteca de tiempo de ejecución o ninguno en absoluto
- Los programas pueden utilizar el control directo y "raw" sobre el acceso a la memoria y el flujo de control
- El programador puede escribir partes del programa directamente en el lenguaje de montaje
- A menudo los programas de sistemas no se pueden ejecutar en un depurador. Ejecutar el programa en un entorno simulado a veces se puede utilizar para reducir este problema.
La programación de sistemas es lo suficientemente diferente de la programación de aplicaciones que los programadores tienden a especializarse en una u otra.
En la programación de sistemas, a menudo se encuentran disponibles funciones de programación limitadas. El uso de la recolección automática de basura no es común y, a veces, la depuración es difícil de realizar. La biblioteca de tiempo de ejecución, si está disponible, suele ser mucho menos potente y realiza menos comprobaciones de errores. Debido a esas limitaciones, a menudo se utilizan el monitoreo y el registro; Los sistemas operativos pueden tener subsistemas de registro extremadamente elaborados.
La implementación de ciertas partes en sistemas operativos y redes requiere programación de sistemas, por ejemplo, implementar paginación (memoria virtual) o un controlador de dispositivo para un sistema operativo.
Historia
Originalmente, los programadores de sistemas escribían invariablemente en lenguaje ensamblador. Los experimentos con soporte de hardware en lenguajes de alto nivel a finales de la década de 1960 llevaron a lenguajes como PL/S, BLISS, BCPL y ALGOL extendido para los grandes sistemas de Burroughs. Forth también tiene aplicaciones como lenguaje de sistemas. En la década de 1970, C se generalizó, ayudado por el crecimiento de Unix. Más recientemente, un subconjunto de C++ llamado Embedded C++ ha tenido algún uso, por ejemplo, se usa en los controladores del kit de E/S de macOS. En 2015 salió Rust, un nuevo lenguaje de programación de sistemas con el mismo rendimiento que C y C++, pensando en la seguridad de la memoria.
Significado alternativo
Por razones históricas, algunas organizaciones utilizan el término programador de sistemas para describir una función laboral que sería más exactamente denominada administrador de sistemas. Esto es particularmente cierto en organizaciones cuyos recursos informáticos han estado históricamente dominados por mainframes, aunque el término se utiliza incluso para describir funciones laborales que no involucran mainframes. Este uso surgió porque la administración de los mainframes de IBM a menudo implicaba la escritura de código ensamblador personalizado (lenguaje ensamblador básico (BAL) de IBM), que se integraba con el sistema operativo como OS/MVS, DOS/VSE o VM/CMS. De hecho, algunos productos de software de IBM contaron con contribuciones sustanciales de código por parte del personal de programación del cliente. Este tipo de programación es cada vez menos común, pero el término programador de sistemas sigue siendo el título de trabajo de facto para el personal que administra directamente los mainframes de IBM.
Contenido relacionado
Precisión y exactitud
Evidencia empírica
Teoría del flogisto