¿Qué es exactamente la programación del sistema?

26

Nunca he entendido lo que significaba la programación del sistema. La definición habitual dada es "... hacer algo cercano al Os o extender las características del Os ...".

¿Usar la API de Windows directamente en lugar de algunas bibliotecas para decir que la E / S de archivos hace que sea programación del sistema? ¿Estaba escribiendo programación del sistema operativo Android? Si escribo algo que expondría el kernel de Linux a través de una consola como una aplicación en Android, ¿estoy haciendo programación del sistema? Si estoy escribiendo software para controlar una lavadora, ¿estoy escribiendo programación del sistema?

Soy un principiante en programación y esto me confunde sin fin. Por favor explique contrastando con "programación de aplicaciones"

kentjh
fuente
2
Esta definición ha cambiado y los programadores del sistema no parecen estar seguros de una definición única hoy. Este problema generalmente surge cuando la gente debate si el lenguaje X es conveniente para la programación del sistema ...
Denys Séguret
@Denys Séguret - Irónico si nadie puede ponerse de acuerdo sobre qué "programación del sistema" es para comenzar.
John

Respuestas:

19

Personalmente me gusta la definición de Wikipedia :

La programación del sistema (o programación de sistemas) es la actividad del software del sistema de programación. 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 (por ejemplo, procesador de textos), mientras que la programación de sistemas tiene como objetivo producir software que proporcione servicios al hardware de la computadora (por ejemplo, desfragmentador de disco ) Requiere un mayor grado de conocimiento del hardware.

Nemanja Trifunovic
fuente
12

Hay varias preguntas que puede hacerse para practicar al decidir esa pregunta.

  • ¿El sistema se vendió originalmente sin este programa? Angry Birds puede ser una "aplicación asesina" para un teléfono inteligente (la razón por la que alguien lo compra), pero sigue siendo una aplicación de terceros separada escrita mucho después de la presentación del teléfono. Escribirlo habría sido la programación de aplicaciones. Pero el controlador de pantalla del mismo teléfono inteligente es esencial para usarlo, por lo que habría sido la programación de sistemas.
  • ¿Te imaginas portar el código a otra plataforma sin reescribirlo en gran medida? TeX y troffhan sido portados a prácticamente cualquier sistema con pocos cambios, por lo que son aplicaciones, a pesar de que están ubicadas en la parte inferior de la cadena de herramientas que la gente suele usar. El sistema de archivos en el que TeX escribe su salida, por ejemplo, UFS o VFAT, es un caso límite. Usted pudo puerto de un sistema de archivos de un sistema operativo diferente si era totalmente impresionante, pero por lo general la gente simplemente se apoderan de ideas impresionantes y escribir su propio sistema de archivos para su propio sistema operativo. Eso hace que el software del sistema de sistemas de archivos.
  • ¿La funcionalidad está implementada en el kernel o en binarios separados? (Los sistemas de archivos ocupan un punto medio aquí también. Muchas partes de muchos sistemas de archivos son, de hecho, código de núcleo, pero muchas tienen partes sustanciales en el espacio del usuario). Los controladores de visualización de gráficos pueden en principio ser componentes externos conectables, pero a menudo se implementan en el kernel o al menos con acceso directo privilegiado al kernel (o incluso al hardware). Eso sería la programación de sistemas. Por otro lado, los juegos de computadora que utilizan la pila de visualización de gráficos son aplicaciones.

Para sus preguntas, escribir el sistema operativo Android fue definitivamente una programación de sistemas. Escribir un programa que use llamadas API de Windows es la programación de aplicaciones. No es tan portátil como lo sería si usara bibliotecas multiplataforma como SDL u OpenGL, pero en principio se puede portar, es un código de terceros y se ejecuta en el espacio del usuario. Una aplicación de consola que expone el estado del kernel de Linux es un experimento mental interesante. Definitivamente diría que involucra la programación de sistemas, ya que tendrías que saber mucho sobre la estructura de Linux (ten en cuenta que "Linux" es propiamente solo el núcleo, no la distribución) para escribir, ¡y probablemente incluso para usarlo!

Kilian Foth
fuente
4

En resumen: escribir software que amplíe o mejore el funcionamiento de un sistema operativo, como controladores, actualizaciones de utilidades del sistema para sistemas operativos o incluso sistemas operativos nuevos.

Principalmente implica la gestión de la memoria; Operaciones de E / S en el sentido más amplio de la palabra, como redes, acceso a archivos y administración de dispositivos; gestión de procesos (multitarea, administración de procesos, etc.); métodos de interacción del sistema de usuario <-> (tanto dentro como fuera) y administración de usuarios. Básicamente, todo lo que forma parte del sistema operativo que no es una aplicación es la programación de sistemas.

En ningún
fuente
3

Usar la API de Windows directamente fue, en un momento, una forma común de escribir aplicaciones para Windows. Entonces no, eso no es programación de sistemas.

La programación de sistemas no es solo "cercana al sistema operativo", es algo esencial para el funcionamiento central del sistema informático. Así que escribir un sistema operativo es programación de sistemas. Escribir controladores de video, controladores de sistema de archivos, controladores de red para ese sistema operativo es la programación de sistemas. Escribir un compilador para una combinación particular de lenguaje / chipset es la programación de sistemas.

Consola 80x24
fuente
1

Normalmente, se refiere a "cosas de bajo nivel que los usuarios finales no técnicos no saben que existen o no saben muy claramente que están usando o qué hacen".

Algunos ejemplos que a menudo se considerarían programación del sistema:

  • sistemas operativos y controladores
  • compiladores
  • emuladores y virtualización
  • creación de distribución, es decir, creación de imágenes de usuario.

    Esto normalmente implica la selección de la biblioteca estándar C, el sistema init y los componentes básicos del usuario como un shell.

Sistemas de programación se hace a menudo en lenguajes compilados nivel más bajo sin recolección de basura automática como C o montaje, y tienden a un acceso menos sistema común llama a menudo a través de las interfaces POSIX C .

Estoy manteniendo un tutorial práctico que cubre varios temas de programación del sistema aquí .

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
0

Al definir esto, me mantendría alejado de cualquier detalle técnico por completo. Entonces se vuelve fácil.

Una aplicación permite al usuario hacer algo útil con alguna pieza de tecnología. Por lo tanto, la programación de aplicaciones está dirigida a proporcionar funciones a un usuario, de forma bastante directa.

La programación del sistema, por otro lado, sentaría las bases para hacer posible la programación de aplicaciones. Ofrece funciones para el programador de aplicaciones en lugar de para el usuario.

Esta definición se mantendrá, pero es una cuestión de perspectiva, contexto y roles. Para un programador de computadoras, las herramientas de programación son aplicaciones. Para un usuario final no tienen sentido, solo están fuera de la imagen.

Martin Maat
fuente
-3

En resumen, la programación del sistema en comparación con la programación de aplicaciones es que el SP maneja el software del sistema operativo para trabajar con recursos de hardware y el AP maneja la actividad de los usuarios finales.

TUSHAR
fuente
44
esto no parece ofrecer nada sustancial sobre los puntos hechos y explicados en las 4 respuestas anteriores
mosquito