o que exatamente é a programação do sistema?

26

Eu nunca entendi o que significa programação de sistema. A definição usual dada é "... fazer algo próximo aos recursos do sistema operacional ou estender o sistema operacional ...".

O uso da API do Windows diretamente, em vez de algumas bibliotecas, para dizer que a E / S de arquivo torna a programação do sistema? Estava escrevendo a programação do sistema Android OS? Se eu escrever algo que exponha o kernel do Linux através de um console como um aplicativo no Android, estou fazendo a programação do sistema? Se estou escrevendo um software para controlar uma máquina de lavar, estou escrevendo a programação do sistema?

Eu sou iniciante em programação e isso está me confundindo sem fim. Por favor, explique o contraste com "programação de aplicativos".

kentjh
fonte
2
Essa definição mudou e os próprios programadores de sistema não parecem ter certeza de uma definição única hoje. Este problema geralmente surge quando as pessoas debates sobre se a linguagem X é conveniente para a programação do sistema ...
Denys Séguret
@ Denys Séguret - Ironic se ninguém puder concordar com o que "programação do sistema" deve começar.
John

Respostas:

19

Pessoalmente, gosto da definição da Wikipedia :

A programação do sistema (ou programação de sistemas) é a atividade do software do sistema de programação. A principal característica distintiva da programação de sistemas quando comparada à programação de aplicativos é que a programação de aplicativos visa produzir software que fornece serviços ao usuário (por exemplo, processador de texto), enquanto a programação de sistemas visa produzir software que fornece serviços para o hardware do computador (por exemplo, desfragmentador de disco ) Requer um maior grau de conhecimento de hardware.

Nemanja Trifunovic
fonte
12

Há várias perguntas que você pode fazer para se exercitar ao decidir essa pergunta.

  • O sistema foi originalmente vendido sem este programa? O Angry Birds pode ser um "Killer App" para um telefone inteligente (a razão pela qual alguém o compra), mas ainda é um aplicativo de terceiros separado, escrito muito depois que o telefone foi introduzido. Escrevê-lo teria sido a programação de aplicativos. Mas o driver de vídeo do mesmo telefone inteligente é essencial para usá-lo, de modo que teria sido a programação de sistemas.
  • Você pode imaginar portando o código para outra plataforma sem reescrevê-lo? O TeX e trofffoi portado para praticamente qualquer sistema com poucas alterações, portanto, são aplicativos, mesmo estando localizados na parte inferior da cadeia de ferramentas que as pessoas normalmente usam. O sistema de arquivos no qual o TeX grava sua saída, por exemplo, UFS ou VFAT, é um caso limítrofe. Você pode portar um sistema de arquivos para um sistema operacional diferente, se for totalmente incrível, mas geralmente as pessoas assumem idéias incríveis e escrevem seu próprio sistema de arquivos para o próprio sistema operacional. Isso torna o software do sistema de sistemas de arquivos.
  • A funcionalidade foi implementada no kernel ou em binários separados? (Os sistemas de arquivos também ocupam um meio termo aqui. Muitas partes de muitos sistemas de arquivos são de fato código do kernel, mas muitas possuem partes substanciais no espaço do usuário.) no kernel ou pelo menos com acesso direto privilegiado ao kernel (ou mesmo ao hardware). Isso seria a programação de sistemas. Por outro lado, jogos de computador que usam a pilha de exibição gráfica são aplicativos.

Para suas perguntas, escrever o sistema operacional Android definitivamente era uma programação de sistemas. Escrever um programa que usa chamadas da API do Windows é programação de aplicativos. Não é tão portátil como seria se você usasse bibliotecas de plataforma cruzada, como SDL ou OpenGL, mas, em princípio, pode ser portado, é um código de terceiros e é executado no espaço do usuário. Um aplicativo de console que expõe o estado do kernel do Linux é um experimento interessante. Definitivamente, eu diria que isso envolve a programação de sistemas, já que você precisa saber muito sobre a estrutura do Linux (observe que "Linux" é propriamente apenas o kernel, não a distribuição) para escrever e provavelmente até usá-lo!

Kilian Foth
fonte
4

Resumindo: Escrever software que amplie ou aprimore o funcionamento de um sistema operacional, como drivers, utilitários de sistema atualize os sistemas operacionais ou até sistemas operacionais novos.

Envolve principalmente o gerenciamento de memória; Operações de E / S no sentido mais amplo da palavra, como rede, acesso a arquivos e gerenciamento de dispositivos; gerenciamento de processos (multitarefa, administração de processos etc.); métodos de interação do usuário <-> sistema (entrada e saída) e administração do usuário. Basicamente, tudo o que faz parte do sistema operacional que não é um aplicativo é a programação de sistemas.

Onno
fonte
3

O uso direto da API do Windows foi, a certa altura, uma maneira comum de escrever aplicativos para o Windows. Então não, isso não é programação de sistemas.

A programação de sistemas não é apenas "próxima ao SO" - é algo essencial para o funcionamento principal do sistema de computador. Então, escrever um SO é programação de sistemas. Escrever drivers de vídeo, drivers de sistema de arquivos e drivers de rede para esse sistema operacional é a programação de sistemas. Escrever um compilador para uma combinação específica de idioma / chipset é a programação de sistemas.

Console 80x24
fonte
1

Normalmente, refere-se a "coisas de baixo nível que os usuários finais não técnicos não existem ou não sabem muito claramente que estão usando ou o que fazem".

Alguns exemplos que geralmente seriam considerados como programação do sistema:

  • sistemas operacionais e drivers
  • compiladores
  • emuladores e virtualização
  • criação de distribuição, ou seja, a criação de imagens da terra do usuário.

    Isso normalmente envolve a seleção da biblioteca padrão C, do sistema init e dos componentes básicos da terra do usuário, como um shell.

Sistemas de programação é muitas vezes feito em linguagens de nível mais baixo compilados sem coleta de lixo automática como C ou montagem, e tendem a menos acesso sistema comum chama muitas vezes através de interfaces de POSIX C .

Estou mantendo um tutorial prático que aborda vários tópicos de programação do sistema aqui .

Ciro Santilli adicionou uma nova foto
fonte
0

Ao definir isso, evitaria todos os detalhes técnicos. Então fica fácil.

Um aplicativo permite que o usuário faça algo útil com alguma peça de tecnologia. Portanto, a programação de aplicativos tem como objetivo fornecer recursos diretamente ao usuário.

A programação do sistema, por outro lado, estabeleceria as bases para possibilitar a programação de aplicativos. Ele fornece recursos ao programador de aplicativos e não ao usuário.

Essa definição será válida, mas é uma questão de perspectiva, contexto e papéis. Para um programador de computador, ferramentas de programação são aplicativos. Para um usuário final, eles não têm sentido, estão apenas fora de cena.

Martin Maat
fonte
-3

Em resumo, a programação do sistema, quando comparada à programação de aplicativos, é que o SP lida com o software do SO para trabalhar com recursos de hardware e o AP lida com a atividade dos usuários finais.

TUSHAR
fonte
4
este não parece oferecer nada substancial sobre pontos feitos e explicado em anteriores 4 respostas
mosquito