SóProvas


ID
769300
Banca
CESPE / CEBRASPE
Órgão
Banco da Amazônia
Ano
2012
Provas
Disciplina
Sistemas Operacionais
Assuntos

Julgue os seguintes itens, relativos a programação nos sistemas operacionais Windows e Linux.


Dependendo da linguagem de programação, arquivos fontes podem ser compilados e executados sem erros tanto no Linux quanto no Windows, mas os arquivos binários executáveis resultantes da compilação somente podem ser executados em ambos os sistemas por meio de softwares de emulação.

Alternativas
Comentários
  • Certo.
    Os arquivos fontes podem ser criados em qualquer sistema operacional, porque durante o desenvolvimento eles serão executados dentro do compilador apenas. Já o arquivo gerado, que é a soma do arquivo fonte com as bibliotecas específicas do S.O. e relacionado até com o processador. Desta forma, o executável só poderá ser executado no sistema para o qual foi compilado.
  • correto:
    Os arquivos fontes-criados para rodar com compilador.
    arquivo binário gerado-depende de arquivo fonte,dll do sistm.op. e chipset,o que o faz rodar somente no sistema onde foi compilado.
  • É o caso da JVM. Basta compilar o fonte (*.java) para a JVM específica: Windows ou Linux
  • O que acho estranho nesta questão é o termo software de emulação, pois, depois que temos os arquivos binários gerados pela JVM, há, como diz a questão, a dependencia da plataforma, mas, no meu ver não há necessidade de um software de emulação.
  • Lendo os comentários acima tenho a certeza que ninguem dos 'comentaristas' entendeu a pergunta.
  • Sras e Srs,

    Um código fonte, em um mundo de Alice, está livre de contexto de plataforma, ou seja, é exatamente o que diz a questão. 

    Podendo ser usado para ser compilado tanto em Windows, quanto em Linux, FreeBSD, Minix, Unix, e até no SO que estou criando. 

    Pois, o código fonte tem por objetivo expressar como será realizado em tarefa no computador, mas de modo que o programador seja capaz de escrever/ler. Tomemos como exemplo a linguagem C:

    #include 
    int main() {

    printf("mensagem ao usuário\n");     

    return 0;

    }


    Note que o código acima não faz referência a nenhuma plataforma em específico, assim, ele poderá ser compilado em várias delas indistintamente. No entanto, temos uma chamada de linguagem, melhor de pre-processamento "#include", esta diretriz indica ao compilador que o código precisa de um conjunto de funcionalidades conhecidas para a plataforma alvo.

    Assim, se efetuarmos a compilação deste código em um ambiente MS Windows, o binário será direcionado para este MS Windows. Pois, o conjunto de libs disponibilizada para o binário recém criado é especifico para MS Windows.

    Por outro lado, se a compilação ocorrer em uma plataforma Linux-based, o conjunto de libs disponibilizada para o binário será específico para este tipo de Linuxs.

    Acredito que até este ponto desta explicação, você já tenha entendido que estamos respondendo até este ponto da questão:
    "Dependendo da linguagem de programação, arquivos fontes podem ser compilados e executados sem erros tanto no Linux quanto no Windows".

    Assim, temo dois binários: um para Windows outro para Linux. E os dois são incompatíveis entre si, mesmo sendo oriundos do mesmo código fonte.

    Se ambos são diferentes entre si, como fazer para um rodar na plataforma do outro? Resposta: Emulando a plataforma desejada.

    E como fazer isto? Usando um emulador( :) ) como Wine(Linux -> Windows), por exemplo. Mas se eu quiser rodar um programa Linux no Windows, tem como? Deve ter. ;)

    Mas eu poderia usar o virtualbox, certo? Errado. 

    O VBox é um virtualizador que tem a função de virtualizar um ambiente completo (hardware) para instalação de um SO completo. Ao usar o Wine, não precisamos deste aparato todo, basta instalá-lo no próprio linux e apontar para o arquivo executável e pronto.

    Com isto, respondemos a segunda parte da questão:
    "mas os arquivos binários executáveis resultantes da compilação somente podem ser executados em ambos os sistemas por meio de softwares de emulação."

    A resposta ficou um pouco grande, mas espero que te ajude nos estudos.

    Força e Foco!

  • Detalhes da questão: 
    - Ela fala de código compilado e não traduzido.
    - Quando a questão fala "arquivos binários executáveis" isso exclui por exemplo códigos em bytecode (como Java), pois não é um código executável e sim intermediário que irá ser interpretado numa máquina virtual.

    Considerando isso, códigos compilados em Windows para rodarem em Linux precisam ser emulados e vice-versa.

  • Resumundo em exemplo: Você não pode executar um arquivo com a extensão *.exe no Linux sem um emulador.Pois arquivos com esse tipo de extensão é nativo do Windows. Porém o mesmo código fonte com a extensão *.java por exemplo rodam(compila) em ambas as plataformas desde que tenham a JVM. Portanto a questão está correta. O arquivo executável do software em Linux não rodam em Windows se e somente se ultilizarem um emulador e ponto final.  Questão simples.