La programación de sistemas , o programación de sistemas , es la actividad de programar [1] software de sistemas informáticos . La característica distintiva principal 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, estén limitados por el rendimiento o ambos (por ejemplo, sistemas operativos , aplicaciones de ciencias computacionales , motores de juegos , automatización industrial y aplicaciones de software como servicio ). [1]
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í mismo es crítico para el rendimiento o porque incluso pequeñas mejoras de eficiencia se transforman directamente en ahorros significativos 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 en el que se ejecuta el programa y, a menudo, explotará esas propiedades, por ejemplo, utilizando un algoritmo que se sabe que es eficiente cuando se utiliza con hardware específico.
- Generalmente se utiliza un lenguaje de programación de bajo nivel o un dialecto de lenguaje de programación para que:
- Los programas pueden funcionar en entornos con recursos limitados
- Los programas pueden ser eficientes con poca sobrecarga de tiempo de ejecución , posiblemente con una pequeña biblioteca de tiempo de ejecución o ninguna.
- Los programas pueden utilizar un control directo y "sin procesar" sobre el acceso a la memoria y el flujo de control .
- El programador puede escribir partes del programa directamente en lenguaje ensamblador.
- A menudo, los programas de sistemas no se pueden ejecutar en un depurador . A veces, se puede utilizar la ejecución del programa en un entorno simulado para reducir este problema. [ dudoso – discutir ]
En la programación de sistemas, las posibilidades de programación suelen ser limitadas. El uso de recolección automática de basura no es común y la depuración a veces 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 la monitorización 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 invariablemente escribían en lenguaje ensamblador . Los experimentos con soporte de hardware en lenguajes de alto nivel a fines de la década de 1960 dieron lugar a lenguajes como PL/S , BLISS , BCPL y ALGOL extendido para sistemas grandes 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 . [2] Los ingenieros que trabajaban en Google crearon Go en 2007 para abordar la productividad del desarrollador en grandes sistemas distribuidos , con características enfocadas en el desarrollador como Concurrencia , Recolección de basura y una compilación de programas más rápida que C y C++. [3] En 2015 salió Rust , un lenguaje de programación de propósito general que se usa a menudo en la programación de sistemas. Rust fue diseñado teniendo en cuenta la seguridad de la memoria y para tener el mismo rendimiento que C y C++.
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 precisa llamarse administrador de sistemas . Esto es particularmente cierto en organizaciones cuyos recursos informáticos han estado históricamente dominados por mainframes , aunque el término incluso se utiliza para describir funciones laborales que no involucran mainframes. Este uso surgió porque la administración de 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 tenían contribuciones de código sustanciales del personal de programación del cliente. Este tipo de programación es progresivamente menos común y cada vez más se realiza en C en lugar de Assembly, pero el término programador de sistemas todavía se utiliza como el título de trabajo de facto para el personal que administra mainframes de IBM incluso en casos en los que no participan regularmente en actividades de programación de sistemas.
Véase también
- La dicotomía de Ousterhout
- Lenguaje de programación de sistemas
- Lenguaje de script
- Manejador de interrupciones
- Programación de computadoras
Referencias
- ^ ab "Panel: Programación de sistemas en 2014 y más allá". Microsoft . Consultado el 4 de diciembre de 2015 .
- ^ Apple Inc (14 de agosto de 2009). "Directrices de diseño de controladores de dispositivos del kit de E/S". developer.apple.com . Apple Inc . Consultado el 16 de septiembre de 2014 .
- ^ "Go en Google: diseño de lenguajes al servicio de la ingeniería de software: el lenguaje de programación Go". go.dev . Consultado el 11 de abril de 2024 .
Lectura adicional
- Programación de sistemas por John J. Donovan