
A existência de linker (para realizar a vinculação após compilação) e loader (para executar um arquivo executável) não depende de sistemas operacionais como o Linux? (Eu pensei no vinculador e no carregador no Linux como fornecidos pelo sistema operacional ou pelo software, assim como outros programas aplicativos. Agora acho que eles são muito especiais e diferentes. Eles podem ser iguais, independentemente de qual sistema operacional está instalado.)
O vinculador e o carregador existem na linguagem de máquina, ou seja, no nível ISA? (Nesse nível, não há sistema operacional.) Ou nível de linguagem assembly?
É correto pensar em um sistema operacional como uma biblioteca (bibliotecas) de programação, do ponto de vista do software de programação?
Obrigado.
Quero saber onde encaixar o vinculador e o carregador nos níveis/camadas de um sistema de computador.
Para camadas/níveis de um sistema de computador, consulte The Elements of Computer Systems de Nisan:
Para vincular e carregar, consulteSistemas de Computador: A Perspectiva dos Programadores
Responder1
A existência de linker (para realizar a vinculação após compilação) e loader (para executar um arquivo executável) não depende de sistemas operacionais como o Linux? (Eu pensei no vinculador e no carregador no Linux como fornecidos pelo sistema operacional ou pelo software, assim como outros programas aplicativos. Agora acho que eles são muito especiais e diferentes.)
O vinculador e o carregador têm finalidades específicas, como qualquer outro aplicativo. Eles são importantes para construir programas estáticos e construir e carregar programas dinâmicos, mas são aplicativos “normais” (ou bibliotecas, no caso do carregador de tempo de execução) —ou sejaembora sejam complexos, provavelmente não dependem de suporte especial do sistema operacional.
Assim, é possível vincular programas de um sistema operacional a outro (por exemploconstruir programas do Windows no Linux, ou vice-versa) e carregar programas vinculados dinamicamente construídos para um sistema em outro (veja Wine). Os principais requisitos impostos ao sistema operacional são que ele forneça alguma forma de carregar novo conteúdo executável (ou sejapermitir que um programa em execução adicione memória executável a si mesmo) e que permita controle suficiente sobre o espaço de endereço virtual para satisfazer os requisitos do programa (em particular, endereços base para carregar executáveis e bibliotecas).
O vinculador e o carregador existem na linguagem de máquina, ou seja, no nível ISA? (Nesse nível, não há sistema operacional.) Ou nível de linguagem assembly?
Não tenho certeza do que levou a essas questões, mas os linkers operam com base em símbolos e endereços. Eles trabalham com arquivos objeto que contêm tabelas de símbolos importados e exportados e entradas de realocação onde são preenchidos os valores calculados pelo vinculador.
É correto pensar em um sistema operacional como uma biblioteca (bibliotecas) de programação?
Isso é muito limitante. Um sistema operacional fornece alguns serviços para aplicativos executados nele, mas faz muito mais do que isso, mesmo no caso de sistemas operacionais realmente simples (micros de 8 bits, MS-DOS etc.); por exemplo, ele lida com interrupções de hardware, agenda processos (para sistemas multitarefa), controla permissões de acesso (para sistemas multiusuário com controle de acesso)...
Tenho a impressão de que o diagrama ao qual você está se referindo é mais útil como mapa de livro do que como forma de entender a arquitetura de computadores.