Geral
Sistemas Computacionais
Semana 1 4
#1
A arquitetura de Von Neumann é a base dos computadores modernos e descreve como os dados e as instruções são armazenados e manipulados. Imagine que você está projetando um novo sistema de computação para uma empresa que desenvolve software financeiro.
Assinala a alternativa que descreve os componentes principais da arquitetura de Von Neumann e como eles podem ser aplicados no desenvolvimento de um sistema de computação para software financeiro.
Assinala a alternativa que descreve os componentes principais da arquitetura de Von Neumann e como eles podem ser aplicados no desenvolvimento de um sistema de computação para software financeiro.
#2
A evolução dos modelos de computador reflete as mudanças tecnológicas e teóricas na ciência da computação. Desde a criação da Máquina de Turing, que estabeleceu os fundamentos teóricos da computação, até as arquiteturas modernas, como a de Von Neumann, que introduziu a ideia de armazenar programas na memória, o desenvolvimento dos computadores tem sido marcado por avanços significativos. Esses modelos não apenas transformaram a maneira como os computadores funcionam, mas também influenciaram profundamente a pesquisa e o desenvolvimento na área da computação. Considere um seminário em que você deve apresentar a trajetória histórica desses modelos para um público de estudantes do ensino médio.
Sobre a evolução dos modelos de computador desde a Máquina de Turing até as arquiteturas modernas, destacando os principais avanços e mudanças.
I. A Máquina de Turing foi o primeiro modelo teórico de um computador, desenvolvido por Alan Turing em 1936.
II. O modelo de Von Neumann introduziu o conceito de armazenar programas na memória , ao lado dos dados.
III. Os computadores modernos ainda utilizam princípios da Máquina de Turing e do modelo de Von Neumann.
Está correto o que se afirma em:
Sobre a evolução dos modelos de computador desde a Máquina de Turing até as arquiteturas modernas, destacando os principais avanços e mudanças.
I. A Máquina de Turing foi o primeiro modelo teórico de um computador, desenvolvido por Alan Turing em 1936.
II. O modelo de Von Neumann introduziu o conceito de armazenar programas na memória , ao lado dos dados.
III. Os computadores modernos ainda utilizam princípios da Máquina de Turing e do modelo de Von Neumann.
Está correto o que se afirma em:
#3
Imagine que você é um desenvolvedor de sistemas responsável por otimizar o desempenho de uma aplicação complexa que processa grandes volumes de dados em tempo real. Durante o seu trabalho, é importante entender como os diferentes tipos de memória do computador interagem para maximizar a eficiência do sistema. Para isso, você assistiu a uma videoaula que explicou detalhadamente os diversos tipos de memória e suas funções no sistema de um computador.
Analise as afirmativas a seguir sobre os tipos de memórias:
I. A memória principal é usada para armazenar dados de forma rápida e temporária.
II. A memória auxiliar é utilizada para armazenamento permanente e de grande capacidade.
III. Ambas as memórias são igualmente rápidas e servem ao mesmo propósito.
Está correto o que se afirma em:
Analise as afirmativas a seguir sobre os tipos de memórias:
I. A memória principal é usada para armazenar dados de forma rápida e temporária.
II. A memória auxiliar é utilizada para armazenamento permanente e de grande capacidade.
III. Ambas as memórias são igualmente rápidas e servem ao mesmo propósito.
Está correto o que se afirma em:
#4
O modelo de Von Neumann é um dos conceitos mais importantes na arquitetura dos computadores modernos. Ele define como os dados e as instruções são armazenados e processados, influenciando diretamente a eficiência e o desempenho dos sistemas computacionais.
Selecione a alternativa que descreve como o modelo de Von Neumann processa os dados e as instruções.
Selecione a alternativa que descreve como o modelo de Von Neumann processa os dados e as instruções.
Semana 2 5
#1
Ao planejar a instalação de memórias em um sistema computacional, é essencial considerar a hierarquia de memória para otimizar o desempenho e o custo. A hierarquia de memória ajuda a organizar diferentes tipos de memória com base na velocidade e custo.
Use o conceito de hierarquia de memória para planejar a instalação de memórias em um sistema que requer alta velocidade e grande capacidade de armazenamento.
Use o conceito de hierarquia de memória para planejar a instalação de memórias em um sistema que requer alta velocidade e grande capacidade de armazenamento.
#2
Compreender os componentes principais de um computador é essencial para qualquer profissional de TI, pois eles formam a base de qualquer sistema computacional. Esses componentes desempenham funções específicas que permitem ao computador realizar suas tarefas. O conhecimento desses componentes e suas funções facilita o diagnóstico e a resolução de problemas de hardware.
Sobre os componentes principais de um computador, assinale a alternativa correta:
Sobre os componentes principais de um computador, assinale a alternativa correta:
#3
Os princípios básicos da organização e arquitetura de computadores são fundamentais para entender como os computadores são estruturados e operam de maneira eficiente. Esses princípios formam a base para o desenvolvimento e a inovação em tecnologia da informação.
Assinale a alternativa que identifica corretamente os princípios básicos da organização e arquitetura de computadores.
Assinale a alternativa que identifica corretamente os princípios básicos da organização e arquitetura de computadores.
#4
Você está participando de uma reunião para decidir sobre a implementação de um sistema RAID em um servidor de alto desempenho. É crucial avaliar a eficácia dos diferentes níveis de RAID em termos de redundância e desempenho. Durante a videoaula, foram apresentados vários níveis de RAID, cada um com suas próprias vantagens e desvantagens.
Identifique a eficácia dos diferentes níveis de RAID em termos de redundância e desempenho.
Identifique a eficácia dos diferentes níveis de RAID em termos de redundância e desempenho.
#5
Analisar os fatores que influenciam o desempenho de um computador é essencial para otimizar a performance de sistemas computacionais. Entre os principais fatores que impactam a eficiência de um sistema, destacam-se a velocidade do processador, a quantidade de memória disponível e a eficiência dos dispositivos de entrada/saída. Cada um desses elementos desempenha um papel crucial na determinação da rapidez e eficácia com que um computador pode executar tarefas, processar dados e comunicar-se com seus componentes internos e periféricos.
Escolha a alternativa que analisa corretamente os principais fatores que influenciam o desempenho de um computador.
Escolha a alternativa que analisa corretamente os principais fatores que influenciam o desempenho de um computador.
Semana 4 10
#1
O conceito de pipeline de instruções em sistemas de computação é semelhante ao de uma linha de montagem numa planta industrial. Como numa linha de montagem esse processo aumenta a eficiência ao permitir a execução de várias instruções em paralelo, dividindo o processamento em diferentes estágios.
Nesse sentido, assinale a alternativa correta.
Nesse sentido, assinale a alternativa correta.
#2
Leia o excerto:
As arquiteturas paralelas proporcionam diversas vantagens importantes que aumentam o desempenho e a eficiência dos sistemas computacionais contemporâneos. Entre essas vantagens estão a habilidade de executar múltiplas tarefas ao mesmo tempo, a otimização do uso dos recursos e a aceleração da velocidade de processamento. Com base nisso, uma das principais vantagens do uso de arquiteturas paralelas: [Preencher 1] por meio da execução simultânea de múltiplas tarefas.
O termo [preencher 1] é corretamente substituído por:
As arquiteturas paralelas proporcionam diversas vantagens importantes que aumentam o desempenho e a eficiência dos sistemas computacionais contemporâneos. Entre essas vantagens estão a habilidade de executar múltiplas tarefas ao mesmo tempo, a otimização do uso dos recursos e a aceleração da velocidade de processamento. Com base nisso, uma das principais vantagens do uso de arquiteturas paralelas: [Preencher 1] por meio da execução simultânea de múltiplas tarefas.
O termo [preencher 1] é corretamente substituído por:
#3
Leia o excerto:
Um programa inspeciona uma imagem de mapa de bits e lista objetos encontrados. Cada uma das 16 CPUs analisa a imagem inteira, essencial para identificar objetos em várias seções. Se um objeto se estende além de uma seção, o processo continua na próxima. A coordenação final é necessária para contar objetos repetidos. Todas as CPUs compartilham a mesma memória e sistema operacional, com um único mapa de páginas e tabela de processos. Quando um processo bloqueia, a CPU salva seu estado. Em um sistema multiprocessador, [Preencher 1] CPUs devem ter acesso à [Preencher 2] inteira para processar objetos que ocupam várias seções.
Os termos [preencher 1] e [preencher 2] são corretamente substituídos por:
Um programa inspeciona uma imagem de mapa de bits e lista objetos encontrados. Cada uma das 16 CPUs analisa a imagem inteira, essencial para identificar objetos em várias seções. Se um objeto se estende além de uma seção, o processo continua na próxima. A coordenação final é necessária para contar objetos repetidos. Todas as CPUs compartilham a mesma memória e sistema operacional, com um único mapa de páginas e tabela de processos. Quando um processo bloqueia, a CPU salva seu estado. Em um sistema multiprocessador, [Preencher 1] CPUs devem ter acesso à [Preencher 2] inteira para processar objetos que ocupam várias seções.
Os termos [preencher 1] e [preencher 2] são corretamente substituídos por:
#4
O conceito de pipeline em processadores é fundamental para aumentar a eficiência e o desempenho em sistemas computacionais. Pipeline permite que as instruções sejam executadas simultaneamente, utilizando estágios diferentes de execução dentro do processador.
É correto afirmar que o conceito de pipeline e sua aplicação em processadores:
É correto afirmar que o conceito de pipeline e sua aplicação em processadores:
#5
As arquiteturas paralelas são categorizadas de acordo com várias características, como o tipo de memória e o método de comunicação entre processadores. Duas categorias principais são os multiprocessadores de memória compartilhada e os multicomputadores de memória distribuída.
Com base no texto, avalie as afirmativas a seguir sobre as características das arquiteturas de multiprocessadores de memória compartilhada e multicomputadores de memória distribuída.
Com base no texto, avalie as afirmativas a seguir sobre as características das arquiteturas de multiprocessadores de memória compartilhada e multicomputadores de memória distribuída.
- Todos os multiprocessadores compartilham a mesma memória, já os multicomputadores cada processador tem sua própria memória independente.
- Cada multiprocessador tem sua própria memória local, já em multicomputadores todos os processadores compartilham um único espaço de memória.
- Clusters de workstations conectadas por uma rede local são exemplos de multicomputadores de memória distribuída.
- Os multicomputadores dependem de uma rede de alta velocidade para comunicação entre processadores.
- O acesso direto e uniforme à memória para todos os processadores é uma característica dos multiprocessadores de memória compartilhada.
#6
Os sistemas multiprocessadores e multicomputadores possuem arquiteturas distintas que influenciam diretamente no desempenho e na comunicação entre seus componentes. A escolha entre essas arquiteturas depende das necessidades específicas de desempenho e das características das aplicações a serem executadas.
Os multiprocessadores tem uma arquitetura de memória compartilhada. Logo, uma das características dos multicomputadores é que:
Os multiprocessadores tem uma arquitetura de memória compartilhada. Logo, uma das características dos multicomputadores é que:
#7
As arquiteturas de multiprocessadores e multicomputadores são amplamente utilizadas em sistemas computacionais avançados. Enquanto os multiprocessadores têm uma abordagem específica em relação ao uso da memória, os multicomputadores adotam uma estratégia diferente. Essas diferenças impactam diretamente no desempenho e na forma como as tarefas são gerenciadas.
Assinale a alternativa que descreve a diferença entre multiprocessadores de memória compartilhada e multicomputadores de memória distribuída.
Assinale a alternativa que descreve a diferença entre multiprocessadores de memória compartilhada e multicomputadores de memória distribuída.
#8
As arquiteturas paralelas oferecem várias vantagens significativas que contribuem para o desempenho e eficiência dos sistemas computacionais modernos. Essas vantagens incluem a capacidade de processar múltiplas tarefas simultaneamente, melhor utilização dos recursos e maior velocidade de processamento. Com base nisso, assinale a alternativa que descreve uma das principais vantagens do uso de arquiteturas paralelas.
Assinale a alternativa que descreve uma das principais vantagens do uso de arquiteturas paralelas:
Assinale a alternativa que descreve uma das principais vantagens do uso de arquiteturas paralelas:
#9
As arquiteturas paralelas são essenciais na computação moderna, permitindo a execução de muitas tarefas. Elas podem ser implementadas tanto via software quanto hardware, otimizando a utilização dos recursos do processador. Diferentes tipos de arquiteturas paralelas, como SISD, SIMD, MISD e MIMD, possuem características e aplicações específicas que impactam diretamente na eficiência computacional.
Avalie a importância das arquiteturas paralelas na otimização do desempenho computacional, considerando suas diferentes classificações e aplicações.
Avalie a importância das arquiteturas paralelas na otimização do desempenho computacional, considerando suas diferentes classificações e aplicações.
#10
Os sistemas computacionais modernos evoluíram significativamente, sendo compostos por diversos componentes essenciais que trabalham em conjunto para garantir seu funcionamento adequado. Entre esses componentes, a CPU (Unidade Central de Processamento) destaca-se como o cérebro do computador, executando instruções e coordenando operações. Dentro desse contexto, o contador de programa (Program Counter) desempenha um papel fundamental.
Assinale a alternativa que descreve a função do contador de programa (Program Counter) em um sistema computacional.
Assinale a alternativa que descreve a função do contador de programa (Program Counter) em um sistema computacional.
Semana 5 10
#1
Em um programa de C, um desenvolvedor precisa manipular um array de inteiros utilizando ponteiros para realizar operações específicas. O código a seguir é um exemplo simplificado onde são realizadas algumas dessas operações. Compreender como ponteiros interagem com arrays é crucial para operações eficientes de manipulação de dados.
Considere o seguinte trecho de código em C:
Quais serão os valores impressos pelo programa após a execução do código?
Considere o seguinte trecho de código em C:
| #include <stdio.h> void manipulaArray(int *arr, int tamanho) { int *p = arr; for(int i = 0; i < tamanho; i++) { *p = *p + 1; p++; } } int main() { int array[] = {1, 2, 3, 4, 5}; int tamanho = 5; manipulaArray(array, tamanho); for(int i = 0; i < tamanho; i++) { printf("%d ", array[i]); } return 0; } |
Quais serão os valores impressos pelo programa após a execução do código?
- 1 2 3 4 5
- 2 3 4 5 6
- 0 1 2 3 4
- 1 1 1 1 1
- 2 2 2 2 2
#2
O conceito de paginação é uma técnica de memória virtual que quebra processos em páginas mapeadas em frames na memória principal. Essa técnica é implementada por unidades dedicadas de hardware, permitindo uma utilização mais eficiente da memória ao eliminar a fragmentação externa. A página é a menor unidade de alocação de memória, e cada processo tem sua própria tabela de páginas, onde endereços virtuais correspondem a endereços físicos.
Com base no texto acima sobre paginação na memória virtual, identifique a alternativa que melhor descreve o funcionamento dessa técnica e sua implementação na linguagem C utilizando structs.
Com base no texto acima sobre paginação na memória virtual, identifique a alternativa que melhor descreve o funcionamento dessa técnica e sua implementação na linguagem C utilizando structs.
#3
Na linguagem C, é possível realizar operações aritméticas com ponteiros, como incremento e decremento, para percorrer sequências de endereços de memória. Este recurso é frequentemente utilizado em manipulações de arrays e estruturas de dados. Por exemplo, ao trabalhar com arrays, podemos usar ponteiros para iterar eficientemente pelos elementos sem a necessidade de utilizar índices explícitos.
Considere o seguinte trecho de código em C:
Os valores apontados por *p e por *(p - 1) após a execução do código são:
Considere o seguinte trecho de código em C:
| int arr[] = {10, 20, 30, 40, 50}; int *p = arr; p = p + 3; |
Os valores apontados por *p e por *(p - 1) após a execução do código são:
#4
Sobre memória virtual, a técnica de paginação é utilizada para gerenciar a memória de forma eficiente. A paginação envolve a divisão da memória em unidades menores. Esse processo é essencial para o funcionamento de sistemas modernos e é implementado com o auxílio do MMU (Unidade de Gerenciamento de Memória).
Analise as afirmações abaixo sobre a implementação de tabelas de páginas na memória virtual. Qual delas está correta?
Analise as afirmações abaixo sobre a implementação de tabelas de páginas na memória virtual. Qual delas está correta?
#5
A linguagem C é amplamente utilizada para desenvolvimento de sistemas e aplicações devido à sua eficiência e controle de baixo nível. Um dos conceitos fundamentais nessa linguagem é o uso de ponteiros, que permitem o gerenciamento direto da memória. Compreender a função e a declaração de ponteiros é essencial para a manipulação eficiente da memória.
Selecione a alternativa a seguir que descreve corretamente a função de um ponteiro em C e sua declaração.
Selecione a alternativa a seguir que descreve corretamente a função de um ponteiro em C e sua declaração.
#6
Um desenvolvedor está criando um sistema de gerenciamento de biblioteca em linguagem C. Para organizar as informações sobre os livros, ele decide utilizar estruturas e typedef. Ele quer definir um tipo para os livros que inclui título, autor, ano de publicação e número de páginas. Além disso, ele precisa de uma função para atualizar o ano de publicação de um livro.
Analise o seguinte cenário:
A biblioteca utiliza um sistema em C que gerencia os dados dos livros através de uma estrutura Book. A estrutura contém os seguintes campos: título (char[100]), autor (char[50]), ano de publicação (int) e número de páginas (int). A função updateYear atualiza o ano de publicação de um livro.
Baseado neste cenário, identifique as afirmativas corretas sobre a implementação e a utilização da função updateYear:
Analise o seguinte cenário:
A biblioteca utiliza um sistema em C que gerencia os dados dos livros através de uma estrutura Book. A estrutura contém os seguintes campos: título (char[100]), autor (char[50]), ano de publicação (int) e número de páginas (int). A função updateYear atualiza o ano de publicação de um livro.
Baseado neste cenário, identifique as afirmativas corretas sobre a implementação e a utilização da função updateYear:
- A função updateYear deve receber um ponteiro para Book e o novo ano, e deve atualizar diretamente o campo ano de publicação.
- A função updateYear deve receber uma cópia da estrutura Book e o novo ano, atualizar a cópia e retornar a estrutura atualizada.
- A função updateYear deve receber um ponteiro para Book e o novo ano, criar uma nova estrutura Book com o novo ano e retornar essa nova estrutura.
- A função updateYear deve receber o título do livro e o novo ano, e deve procurar o livro pelo título e atualizar o ano de publicação.
- A função updateYear deve receber uma cópia da estrutura Book e o novo ano, e deve retornar um ponteiro para a estrutura atualizada.
#7
Os operadores utilizados com ponteiros na linguagem C, como o & (e comercial) e o * (asterisco), são fundamentais para a manipulação de endereços de memória e valores apontados por esses endereços. Esses operadores são essenciais para o gerenciamento eficiente de memória e manipulação direta de dados.
O operador * é usado para [Preencher 1] o valor armazenado no endereço apontado pelo ponteiro. Já o operador & é usado para [Preencher 2] o endereço de memória de uma variável.
Os termos [preencher 1] e [preencher 2] são corretamente substituídos por:
O operador * é usado para [Preencher 1] o valor armazenado no endereço apontado pelo ponteiro. Já o operador & é usado para [Preencher 2] o endereço de memória de uma variável.
Os termos [preencher 1] e [preencher 2] são corretamente substituídos por:
#8
Os ponteiros são elementos essenciais na programação, pois possibilitam a manipulação direta dos valores das variáveis na memória do computador. Essa capacidade de manipulação direta é extremamente versátil, permitindo realizar diversas operações complexas e acessar diferentes partes do programa de forma eficiente.
Considere as seguintes declarações em C:
Após a execução desse código, assinale qual resposta está correta.
Considere as seguintes declarações em C:
| int x = 10; int *p; p = &x; *p = 20; |
Após a execução desse código, assinale qual resposta está correta.
#9
Na linguagem C, o uso de typedef permite a definição de novos nomes para tipos existentes, facilitando a legibilidade e a manutenção do código. As estruturas (structs) permitem a organização de diferentes tipos de dados em um único conjunto. Compreender como essas funcionalidades são usadas é crucial para a manipulação eficiente de dados em C.
Considere o seguinte trecho de código em C:
Quais serão os valores impressos pelo programa após a execução do código?
Considere o seguinte trecho de código em C:
#include <stdio.h> typedef struct { int x; char y; } MyStruct; int main() { MyStruct a = {10, 'A'}; MyStruct b = a; b.x = b.x * 2; printf("%d %c\n", b.x, b.y); return 0; } |
Quais serão os valores impressos pelo programa após a execução do código?
#10
Na programação em linguagem C, os ponteiros são essenciais para manipulação de memória e otimização de processos. Eles permitem acessar e modificar o valor de variáveis através de seus endereços de memória. Entender como declarar e utilizar ponteiros é fundamental para um desenvolvimento eficiente e otimizado em C.
Como se declara um ponteiro em C e qual é a sua função principal?
Como se declara um ponteiro em C e qual é a sua função principal?
Semana 6 12
#1
Em sistemas embarcados, a eficiência e o controle detalhado do hardware são cruciais. A escolha entre linguagens de montagem e linguagens de alto nível pode impactar significativamente o desempenho e a complexidade do desenvolvimento, pois há necessidade de conhecimento prévio das linguagens.
Analise as implicações do uso de linguagens de montagem em sistemas embarcados e escolha a alternativa que representa corretamente essas implicações.
Analise as implicações do uso de linguagens de montagem em sistemas embarcados e escolha a alternativa que representa corretamente essas implicações.
#2
A programação em linguagem de montagem é reconhecida por sua dificuldade, tanto no desenvolvimento quanto na manutenção dos programas. No entanto, há situações em que seu uso é indispensável, especialmente quando se busca alto desempenho e acesso direto ao hardware. Além disso, estudar essa linguagem é fundamental para entender o funcionamento dos compiladores e a interação com a máquina.
Com base no texto acima, leia as asserções a seguir e a relação proposta entre elas:
I. Estudar a linguagem de montagem é essencial para compreender o funcionamento dos compiladores e a interação direta com o hardware.
PORQUE
II. A linguagem de montagem permite um controle detalhado e eficiente do hardware, sendo indispensável para obter alto desempenho em aplicações críticas.
A respeito dessas asserções, assinale a alternativa correta:
Com base no texto acima, leia as asserções a seguir e a relação proposta entre elas:
I. Estudar a linguagem de montagem é essencial para compreender o funcionamento dos compiladores e a interação direta com o hardware.
PORQUE
II. A linguagem de montagem permite um controle detalhado e eficiente do hardware, sendo indispensável para obter alto desempenho em aplicações críticas.
A respeito dessas asserções, assinale a alternativa correta:
#3
Linguagens de montagem e de máquina são fundamentais para a operação direta dos computadores. Elas utilizam códigos específicos que o hardware pode interpretar. A compreensão dessas linguagens é essencial para entender o funcionamento interno dos sistemas computacionais. A linguagem de montagem usa nomes simbólicos, ou mnemônicos, para instruções e memória.
"A linguagem de montagem usa [Preencher 1] para representar as instruções, enquanto a linguagem de máquina é composta por [Preencher 2] que são diretamente executados pelo processador."
Os termos [preencher 1] e [preencher 2] são corretamente substituídos por:
"A linguagem de montagem usa [Preencher 1] para representar as instruções, enquanto a linguagem de máquina é composta por [Preencher 2] que são diretamente executados pelo processador."
Os termos [preencher 1] e [preencher 2] são corretamente substituídos por:
#4
O processo de conversão de código-fonte em uma linguagem de alto nível para código de máquina envolve várias etapas. Essas etapas incluem a compilação do código-fonte em código objeto e a montagem do código objeto em código de máquina. Compreender essas etapas é fundamental para entender como os programas são executados pelos computadores.
Marque a opção correta sobre as etapas envolvidas na conversão de código-fonte para código de máquina.
Marque a opção correta sobre as etapas envolvidas na conversão de código-fonte para código de máquina.
#5
Um engenheiro de software está desenvolvendo um sistema embarcado para um dispositivo médico. Esse sistema precisa ser extremamente eficiente e ter acesso direto ao hardware para monitorar sinais vitais em tempo real. Além disso, o sistema deve ser capaz de operar com recursos limitados de memória e processamento.
Com base no cenário descrito, avalie as afirmativas a seguir:
I. Utilizar mnemônicos para representar instruções de baixo nível e facilitar a leitura do código.
II. Desenvolver todo o sistema em uma linguagem de alto nível como Python para maior simplicidade.
III. Otimizar o código para reduzir o uso de memória e aumentar a velocidade de execução do programa.
IV. Implementar rotinas críticas em linguagem de montagem para maior controle sobre o hardware.
V. Ignorar a linguagem de montagem e usar exclusivamente linguagens de alto nível por serem mais fáceis de depurar.
Com base nas afirmativas, assinale a alternativa correta:
Com base no cenário descrito, avalie as afirmativas a seguir:
I. Utilizar mnemônicos para representar instruções de baixo nível e facilitar a leitura do código.
II. Desenvolver todo o sistema em uma linguagem de alto nível como Python para maior simplicidade.
III. Otimizar o código para reduzir o uso de memória e aumentar a velocidade de execução do programa.
IV. Implementar rotinas críticas em linguagem de montagem para maior controle sobre o hardware.
V. Ignorar a linguagem de montagem e usar exclusivamente linguagens de alto nível por serem mais fáceis de depurar.
Com base nas afirmativas, assinale a alternativa correta:
#6
Na programação, temos três níveis de tradução de linguagens em computadores contemporâneos: microarquitetura, linguagem de montagem (assembly) e a máquina do sistema operacional. A ênfase está na distinção entre linguagem-fonte e linguagem-alvo, e na importância de tradutores que convertem programas de uma linguagem para outra.
Qual das seguintes afirmações está correta sobre a tradução de linguagens conforme descrito no texto?
Qual das seguintes afirmações está correta sobre a tradução de linguagens conforme descrito no texto?
#7
Um programador está trabalhando em um software de controle de drones que requer execução em tempo real para realizar cálculos de navegação complexos. O sistema precisa garantir a máxima eficiência e responder rapidamente às mudanças nas condições de voo. O programador decide usar linguagem de montagem para partes críticas do código que exigem alta performance.
Com base no cenário descrito, marque a melhor prática que o programador deve adotar ao utilizar linguagem de montagem para otimizar o desempenho do software de controle de drones.
Com base no cenário descrito, marque a melhor prática que o programador deve adotar ao utilizar linguagem de montagem para otimizar o desempenho do software de controle de drones.
#8
Um desenvolvedor está trabalhando em um sistema de segurança residencial que deve processar dados de sensores em tempo real para detectar intrusões. A eficiência do sistema é crucial para garantir uma resposta rápida e precisa. O desenvolvedor decide otimizar partes do código usando linguagem de montagem para melhorar o desempenho.
Com base no cenário descrito, avalie as afirmativas a seguir:
I. Implementar toda a lógica do sistema em linguagem de montagem para garantir máximo desempenho.
II. Usar linguagem de montagem apenas para rotinas de processamento de dados dos sensores que requerem alta velocidade.
III. Desenvolver o sistema inteiro em uma linguagem de alto nível e não usar linguagem de montagem.
IV. Usar linguagem de montagem para rotinas de interface gráfica que necessitam alto desempenho.
V. Implementar linguagem de montagem nas funções de teste e depuração que exigem mais rapidez.
Com base nas afirmativas, assinale a alternativa correta:
Com base no cenário descrito, avalie as afirmativas a seguir:
I. Implementar toda a lógica do sistema em linguagem de montagem para garantir máximo desempenho.
II. Usar linguagem de montagem apenas para rotinas de processamento de dados dos sensores que requerem alta velocidade.
III. Desenvolver o sistema inteiro em uma linguagem de alto nível e não usar linguagem de montagem.
IV. Usar linguagem de montagem para rotinas de interface gráfica que necessitam alto desempenho.
V. Implementar linguagem de montagem nas funções de teste e depuração que exigem mais rapidez.
Com base nas afirmativas, assinale a alternativa correta:
#9
As linguagens de programação podem ser traduzidas de formas diferentes para que os computadores as compreendam. Compiladores e interpretadores desempenham papéis cruciais nesse processo, convertendo o código fonte em linguagem de máquina. Compiladores traduzem todo o código de uma vez, gerando um executável.
Selecione a alternativa a seguir que descreve corretamente a função de um compilador em linguagens de programação.
Selecione a alternativa a seguir que descreve corretamente a função de um compilador em linguagens de programação.
#10
Interrupções e tratadores de interrupção são mecanismos essenciais em sistemas computacionais modernos, pois auxiliam no tratamento das erros e interrupções. A capacidade de gerenciar essas interrupções de maneira eficaz é crucial para manter o desempenho e a confiabilidade do sistema.
Analise as seguintes afirmações sobre o uso de interrupções e tratadores de interrupção na programação de sistemas computacionais e escolha a alternativa que descreve corretamente sua importância e impacto.
Analise as seguintes afirmações sobre o uso de interrupções e tratadores de interrupção na programação de sistemas computacionais e escolha a alternativa que descreve corretamente sua importância e impacto.
#11
Linguagens de montagem permitem um controle detalhado sobre o hardware, oferecendo benefícios significativos em termos de desempenho e eficiência. No entanto, também apresentam desafios e limitações que devem ser cuidadosamente considerados em comparação com linguagens de alto nível.
Com base no cenário descrito, avalie as afirmativas a seguir:
I. As linguagens de montagem são sempre superiores às linguagens de alto nível devido ao seu desempenho otimizado e controle detalhado do hardware.
II. As linguagens de montagem permitem um controle preciso do hardware e podem criar programas melhores, mas são mais difíceis de programar e depurar que as de alto nível.
III. As linguagens de alto nível são sempre preferíveis devido à sua simplicidade e facilidade de uso, eliminando a necessidade de linguagens de montagem.
IV. As linguagens de montagem são mais fáceis de aprender e usar, tornando-as ideais para todos os tipos de desenvolvimento de software.
V. As linguagens de montagem não oferecem nenhuma vantagem significativa em relação às linguagens de alto nível e são amplamente obsoletas.
Com base nas afirmativas, assinale a alternativa correta:
Com base no cenário descrito, avalie as afirmativas a seguir:
I. As linguagens de montagem são sempre superiores às linguagens de alto nível devido ao seu desempenho otimizado e controle detalhado do hardware.
II. As linguagens de montagem permitem um controle preciso do hardware e podem criar programas melhores, mas são mais difíceis de programar e depurar que as de alto nível.
III. As linguagens de alto nível são sempre preferíveis devido à sua simplicidade e facilidade de uso, eliminando a necessidade de linguagens de montagem.
IV. As linguagens de montagem são mais fáceis de aprender e usar, tornando-as ideais para todos os tipos de desenvolvimento de software.
V. As linguagens de montagem não oferecem nenhuma vantagem significativa em relação às linguagens de alto nível e são amplamente obsoletas.
Com base nas afirmativas, assinale a alternativa correta:
#12
As linguagens de montagem são usadas em contextos diversos dentro dos sistemas computacionais, especialmente quando é necessária a otimização de código para melhorar a eficiência na execução. Elas também são aplicadas para obter acesso direto ao hardware, permitindo maior controle sobre os recursos do sistema.
Qual das seguintes alternativas é um exemplo típico do uso de linguagens de montagem?
Qual das seguintes alternativas é um exemplo típico do uso de linguagens de montagem?
Semana 7 9
#1
A linguagem Assembly, utilizada desde os primórdios da computação, é conhecida por sua capacidade de permitir uma interação direta com o hardware do computador. Ela é fundamental em contextos onde o controle preciso sobre os recursos do sistema e o desempenho máximo são cruciais. Ao programar em Assembly, os desenvolvedores podem ajustar o código para utilizar ao máximo as capacidades do hardware, algo que não é tão facilmente alcançável com linguagens de alto nível.
Leia o trecho a seguir:
Assembly permite a escrita de código altamente [preencher 1] e [preencher 2], diretamente adaptado ao [preencher 3].
Os termos [preencher 1], [preencher 2] e [preencher 3] são corretamente substituídos por:
Leia o trecho a seguir:
Assembly permite a escrita de código altamente [preencher 1] e [preencher 2], diretamente adaptado ao [preencher 3].
Os termos [preencher 1], [preencher 2] e [preencher 3] são corretamente substituídos por:
#2
A linguagem de montagem (assembly) representa simbolicamente a arquitetura do conjunto de instruções (ISA) dos computadores, substituindo números binários por nomes simbólicos como ADD e MUL. Este texto aborda a importância do assembly na programação de baixo nível e a necessidade de compreender a arquitetura do chip utilizado.
Com relação à linguagem de montagem e sua utilização, observe as afirmativas a seguir:
I. A linguagem de montagem é uma representação simbólica da ISA que facilita a programação.
II. A linguagem de montagem é usada exclusivamente para máquinas modernas, como o Core i7.
III. O uso da linguagem de montagem elimina a necessidade de conhecer a arquitetura do conjunto de instruções.
IV. A linguagem de montagem permite programar tanto máquinas antigas quanto modernas.
V. Programar diretamente com números binários é considerado complexo e impraticável.
Está correto o que se afirma em:
Com relação à linguagem de montagem e sua utilização, observe as afirmativas a seguir:
I. A linguagem de montagem é uma representação simbólica da ISA que facilita a programação.
II. A linguagem de montagem é usada exclusivamente para máquinas modernas, como o Core i7.
III. O uso da linguagem de montagem elimina a necessidade de conhecer a arquitetura do conjunto de instruções.
IV. A linguagem de montagem permite programar tanto máquinas antigas quanto modernas.
V. Programar diretamente com números binários é considerado complexo e impraticável.
Está correto o que se afirma em:
#3
O uso de registradores no inline Assembly é fundamental para a eficiência das operações de baixo nível. Entender como especificar e utilizar esses registradores corretamente é crucial para o desenvolvimento de programas otimizados em C com Assembly.
Dado o seguinte código C com inline Assembly, observe a função correta dos registradores utilizados:
Com relação a função dos registradores utilizados, observe as afirmativas a seguir:
I. O registrador %%eax é usado para armazenar temporariamente o valor de result antes de movê-lo para a variável C.
II. O registrador %%eax é usado para adicionar os valores de a e b, armazenando o resultado em result.
III. O registrador %%eax é usado para dividir os valores de a e b, armazenando o resultado em result.
IV. O registrador %%eax é usado para multiplicar os valores de a e b, armazenando o resultado em result.
V. O registrador %%eax armazena temporariamente o valor de a, multiplica pelo valor de b e, em seguida, armazena o resultado em result.
Está correto o que se afirma em:
Dado o seguinte código C com inline Assembly, observe a função correta dos registradores utilizados:
#include <stdio.h> int main() { int a = 5, b = 3, result; asm("movl %1, %%eax; imull %2, %%eax; movl %%eax, %0;" : "=r" (result) : "r" (a), "r" (b) : "%eax"); printf("Resultado: %d\n", result); return 0; } |
Com relação a função dos registradores utilizados, observe as afirmativas a seguir:
I. O registrador %%eax é usado para armazenar temporariamente o valor de result antes de movê-lo para a variável C.
II. O registrador %%eax é usado para adicionar os valores de a e b, armazenando o resultado em result.
III. O registrador %%eax é usado para dividir os valores de a e b, armazenando o resultado em result.
IV. O registrador %%eax é usado para multiplicar os valores de a e b, armazenando o resultado em result.
V. O registrador %%eax armazena temporariamente o valor de a, multiplica pelo valor de b e, em seguida, armazena o resultado em result.
Está correto o que se afirma em:
#4
O especificador inline em C permite que funções Assembly sejam integradas diretamente no código C, combinando o desempenho do Assembly com a flexibilidade do C. Esta prática é utilizada para otimizar partes críticas do código e obter maior controle sobre o hardware. A capacidade de embutir código Assembly dentro de funções C usando o especificador inline é particularmente valiosa em situações que exigem otimização de desempenho e controle detalhado do hardware.
Selecione a alternativa a seguir que compreende corretamente a função do especificador inline no contexto da integração de comandos Assembly em C:
Selecione a alternativa a seguir que compreende corretamente a função do especificador inline no contexto da integração de comandos Assembly em C:
#5
Na linguagem Assembly, há um conjunto de instruções básicas essenciais para a manipulação de dados e o controle de fluxo do programa. Entre essas instruções, destaca-se a "MOV", que desempenha um papel crucial nas operações de movimentação de dados. A utilização correta dessas instruções é fundamental para a construção eficiente e funcional de programas em Assembly, garantindo o controle preciso sobre os recursos do sistema.
Selecione a alternativa que identifica corretamente a função da instrução "MOV" na linguagem Assembly:
Selecione a alternativa que identifica corretamente a função da instrução "MOV" na linguagem Assembly:
#6
A linguagem Assembly é uma linguagem utilizada para programar diretamente o hardware de um computador. Ela proporciona um controle detalhado sobre as operações da CPU, sendo crucial para a programação de sistemas embarcados e aplicações que exigem alta performance.
Selecione a alternativa a seguir reconhece corretamente a linguagem Assembly:
Selecione a alternativa a seguir reconhece corretamente a linguagem Assembly:
#7
A manipulação de registradores e o uso de interrupções são componentes essenciais para a execução de operações de entrada/saída em Assembly. Compreender como esses elementos interagem no código é fundamental para a otimização e correto funcionamento dos programas.
Observe o seguinte trecho de código Assembly:
Analise como os registradores e interrupções são utilizados para realizar operações de entrada/saída e assinale a alternativa que apresenta corretamente objetivo do código:
Observe o seguinte trecho de código Assembly:
section .data input db 0 section .bss buffer resb 1 section .text global _start _start: mov eax, 3 ; syscall number for sys_read mov ebx, 0 ; file descriptor 0 (stdin) mov ecx, buffer ; buffer to store input mov edx, 1 ; number of bytes to read int 0x80 ; make syscall mov eax, 4 ; syscall number for sys_write mov ebx, 1 ; file descriptor 1 (stdout) mov ecx, buffer ; buffer with input data mov edx, 1 ; number of bytes to write int 0x80 ; make syscall mov eax, 1 ; syscall number for sys_exit xor ebx, ebx ; exit status 0 int 0x80 ; make syscall |
Analise como os registradores e interrupções são utilizados para realizar operações de entrada/saída e assinale a alternativa que apresenta corretamente objetivo do código:
#8
A integração de Assembly em programas C é uma técnica avançada utilizada para otimizar o desempenho, especialmente em partes críticas do código. Para utilizar essa técnica eficazmente, é necessário compreender como combinar as instruções Assembly com a lógica de alto nível do C.
Dado o seguinte código C com inline Assembly:
Avalie as afirmativas abaixo sobre a estratégia para otimizar o desempenho do programa utilizando Assembly inline dentro de um código C:
I. Reescrever todo o programa em Assembly para garantir máximo desempenho e eficiência.
II. Usar Assembly inline para operações críticas de desempenho e manter a lógica geral em C.
III. Eliminar todas as instruções Assembly e confiar apenas em otimizações automáticas do compilador C.
IV. Utilizar Assembly inline para otimizar operações matemáticas intensivas e deixar a lógica geral em C.
V. Converter as instruções Assembly em macros para facilitar a manutenção e reutilização do código.
Está correto o que se afirma em:
Dado o seguinte código C com inline Assembly:
#include <stdio.h> int main() { int a = 8, b = 4, result = 0; asm("movl %1, %%eax; shll $2, %%eax; subl %2, %%eax; movl %%eax, %0;" : "=r" (result) : "r" (a), "r" (b) : "%eax"); printf("Resultado: %d\n", result); return 0; } |
Avalie as afirmativas abaixo sobre a estratégia para otimizar o desempenho do programa utilizando Assembly inline dentro de um código C:
I. Reescrever todo o programa em Assembly para garantir máximo desempenho e eficiência.
II. Usar Assembly inline para operações críticas de desempenho e manter a lógica geral em C.
III. Eliminar todas as instruções Assembly e confiar apenas em otimizações automáticas do compilador C.
IV. Utilizar Assembly inline para otimizar operações matemáticas intensivas e deixar a lógica geral em C.
V. Converter as instruções Assembly em macros para facilitar a manutenção e reutilização do código.
Está correto o que se afirma em:
#9
Você está desenvolvendo um programa em C que precisa realizar cálculos matemáticos complexos de maneira eficiente. Para isso, você decide usar inline Assembly para otimizar a execução de certas operações críticas. O programa utiliza um compilador GCC e você está familiarizado com as instruções Assembly básicas.
Observe o seguinte código C com inline Assembly:
Selecione a alternativa que descreve corretamente a operação realizada pela instrução Assembly:
Observe o seguinte código C com inline Assembly:
#include <stdio.h> int main() { int a = 5, b = 10, result; asm("movl %1, %%eax; addl %2, %%eax; movl %%eax, %0;" : "=r" (result) : "r" (a), "r" (b) : "%eax"); printf("Resultado: %d\n", result); return 0; } |
Selecione a alternativa que descreve corretamente a operação realizada pela instrução Assembly: