Baixe o app para aproveitar ainda mais
Prévia do material em texto
02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 1/30 MÓDULO 1 : MÁQUINAS MULTINÍVEIS - Introdução Um computador é uma máquina que pode realizar um determinado conjunto de funções. As pessoas que utilizam estes computadores desejam fazer certas atividades que não correspondem diretamente a este conjunto de funções. Porque as funções implementadas na máquina não correspondem à linguagem humana. Para que seja possível que os usuários consigam executar as funções que necessitam, é necessário um processo denominado tradução. Os primeiros computadores que foram construídos só podiam ser utilizados pelos engenheiros que os construíram. Era necessário saber exatamente o como os circuitos eletrônicos (ou eletromecânicos) se interligavam para que se conseguisse realizar as atividades mais simples. Para realizar qualquer tarefa era necessario saber programar o computador. E para programar, era necessário conhecer a arquitetura da máquina. À medida que surgiu a necessidade de expandir a utilização dos computadores, foi necessário criar mecanismos que possibilitassem aos usuários realizar atividades sem que fosse necessário um conhecimento profundo da arquitetura destes mecanismos. Imaginemos que o computador possa realizar uma quantidade limitada de instruções ou comandos. Chamemos este conjunto de linguagem de máquina, ou de linguagem de baixo nível. Figura 1 - Máquina com dois níveis de linguagens A linguagem que os usuários utilizam não pode se limitar à linguagem de máquina, ela precisa se aproximar da linguagem humana para atender problemas do mundo real, chamemos esta segunda linguagem de linguagem de alto nível. Por estar mais próxima da linguagem humana, uma linguagem de alto nível é assimilada pelo usuário com maior facilidade. Entretanto, para que possa haver uma correspondência entre as duas linguagens, é necessário que o segundo conjunto seja traduzido para o conjunto inicial. 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 2/30 Tradução e Interpretação Existem duas formas de converter um programa de uma linguagem de alto para uma linguagem de baixo nível. Através do processo conhecido como tradução, todo o código de alto nível é convertido antes de entrar em execução. Nesse processo, o código de alto nível não é executado. Já no processo conhecido como interpretação, o código de alto nível é executado por um software denominado interpretador porque é convertido para a linguagem de máquina durante a execução do programa. Um algoritmo escrito em um código interpretado é processado mais lentamente do que o mesmo código após ser traduzido. Porque, na tradução, o código de máquina já está convertido, necessitando apenas ser executado. Já no processo de interpretação, o código roda mais lentamente, porque é convertido em tempo de execução. Ou seja, na interpretação o código sempre é convertido e executado, enquanto o código que sofreu o processo de tradução já está pronto para apenas ser executado. Porque a conversão precisa ocorrer uma única vez. Este processo ocorre diversas vezes dentro de um computador. A história da evolução dos computadores é um processo de adição de níveis de tradução ou de interpretação. Se os primeiros computadores só podiam ser utilizados pelos engenheiros que os construíram, os computadores atuais podem ser utilizados por pessoas com um mínomo de conhecimento técnico. Isto só é possível porque as necessidades destes usuários são submetidas a vários níveis de conversão até chegar até uma instrução que o computador consiga efetivamente executar através de impulsos elétricos. Este processo de evolução nos levou ao computador contemporâneo, que possui diversos níveis, por isso o denominamos máquina multiníveis. A interação entre cada um dos níveis corresponde a um tipo de tradução ou de interpretação. Os computadores atuais são máquinas multiníveis, possuindo ao menos os 6 níveis descritos abaixo: O nível 0 chamado lógico digital, corresponde aos circuitos eletrônicos que efetivamente realizam o processamento de informações na forma de impulsos elétricos dentro do processador. Os circuitos eletrônicos estão já implementados na forma de portas lógicas, que implementam as operações lógicas elementares. O nível 1 corresponde à microarquitetura do processador, que são elementos internos do processador: registradores (que são a memória de alta velocidade interna do processador) e a ULA (unidade lógica aritmética) que é o elemento do processador que realiza operações aritméticas simples. Estes registradores são conectados à ULA para formar um caminho de dados, através do qual os dados transitam para dentro e fora do processador. Uma operação normal do caminho de dados consiste em selecionar o conteúdo de um ou dois registradores e submetê- los à ULA e movimentar o resultado para outro registrador. Quando a microarquitetura é implementada por um interpretador que converte as instruções de máquina do nível superior ( nível ISA ) para microinstruções 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 3/30 implementadas diretamente no hardware do microprocessador, temos um computador CISC ( Complex Instruction Set Computer - Computador com um Conjunto Complexo de Instruções ). Nesse caso, cada instrução de máquina do nível ISA é na verdade um microprograma, composto por uma sequência de microinstruções, que podem ser executadas pelo harware do processador. Essa tecnologia é usada para fazer um processador ser capaz de executar instruções complexas por um custo baixo, porque o hardware do processador apenas precisa ser projetado para executar poucas microinstruções simples. Já quando as instruções do nível superior ( nível ISA ) implementam apenas operações simples executadas diretamente pelo hardware do processador, temos um microprocessador que usa a tecnologia RISC ( Reduced Instruction Set Computer ). Enquanto no passado ( anos 1970 e 1980 ) houve prevalência da tecnologia CISC, depois passou a haver uma preferência pela tecnologia RISC, que possui algumas vantagens na otimização do processamento de instruções. Atualmente, muitos microprocessadores ainda possuem tecnologia CISC para haver compatibilidade com os softwares já existentes. Os microprocessadores de dispositivos móveis, como celulares e tablets geralmente usam a tecnologia RISC. E em sua maioria, são usados os processadores da família ARM ( Advanced Risc Machine ). O nível 2 corresponde ao conjunto de instruções suportado pelo processador. Também é denominado nível ISA ( Instruction Set Architecture - Arquitetura do Conjunto de Instruções ). O conjunto de instruções corresponde aos comandos que o processador pode receber de fontes externas. Este conjunto de instruções é determinado pelo projeto do processador e normalmente não pode ser alterado. O conjunto de instruções também é comum entre os processadores de uma mesma família, permitindo assim a interoperabilidade de programas e sistemas operacionais dentro desta família. É possível produzir uma família de microprocessadores com diferentes custos e capacidades ( quantidade de memória cache, por exemplo ), tendo todos a mesma arquitetura no que se refere ao conjunto de instruções. Como um programa executável pelo processador é uma sequência dessas instruções, diferentes processadores de uma mesma família podem todos executar o mesmo programa, sendo que a diferença está na performance. Um exemplo clássico é o Pentium e o Celeron, dois processadores da mesma família, tendo portanto níveis ISA iguais. Porém, o Pentium era dotado de mais memória cache do que o Celeron, tendo performance maior do que esse. O nível 3 corresponde ao sistema operacional.O SO fornece uma plataforma que possibilita que programas não tenham que interagir diretamente com o hardware. Aliás, isto é mandatório em se tratando de sistemas multitarefa. Não é possível existir um sistema multitarefa sem que exista um elemento arbitrando o acesso ao hardware essa função é do sistema operacional. Em sistemas computacionais modernos, todo acesso ao hardware é feito através do sistema operacional. As funções do sistema operacional são: funcionar como interface entre o software e os periféricos por meio de drivers que estabelecem as regras de comunicação, gerenciar o funcionamento de diversos processos concorrentes ( multitarefa ), interrompendo a execução de um processo para prosseguir com a execução de outro processo, impedindo que um processo acesse endereços de memória reservados a outro processo ( o que poderia levar a travamentos, ou a códigos maliciosos ), funcionar como um ambiente de interface amigável ao usuário leigo, gerenciar um sistema de arquivos, entre outros atributos. Exemplos de Sistemas Operacionais são o Windows, o MS-DOS, e os baseados no Sistema Operacional Unix: o Linux, Android, MacOS-X e iOS. 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 4/30 A interface do S.O. com o usuário pode ser por meio de um shell de comandos escritos ou por uma interface gráfica ( GUI - Graphic User Interface - Interface Gráfica com o Usuário ). O nível 4 corresponde à linguagem de montagem também conhecida como Assembly Language. A linguagem de montagem ou assembly é uma linguagem altamente dependente da plataforma, ou seja, processadores diferentes ou de famílias diferentes possuem linguagens de montagem diferentes incompatíveis entre si. Ela também contém códigos para acessar chamadas do Sistema Operacional. Um programa escrito em linguagem de montagem só pode ser usado em uma determinada plataforma ou família de processadores, funcionando no mesmo S.O.. Entretanto, a grande maioria das linhas de um código fonte escrito em assembly são simplesmente instruções do nível ISA descrito na forma de texto ao invés de um código binário. Os opcodes do nível ISA quando descritos em linguagem assembly são denominados mnemônicos, porque são abreviações das operações, mais fáceis de um ser humano lembrar do que uma sequência de bits. O nível 5 corresponde à linguagem orientada a problemas ou linguagem de alto nível. Este tipo de linguagem é de assimilação mais fácil e menos dependente da plataforma em for usada, ela deve ser traduzida (compilada) para um formato que o sistema operacional consiga interpretar e enviar para os níveis mais baixos da máquina multiníveis. Quanto mais alto o nível de uma linguagem, maior será a produtividade, pois é mais fácil implementar algoritmos complexos. O desenvolvedor pode ficar mais focado no algoritmo em si, do que nos detalhes da arquitetura da máquina, o que melhora a produtividade e a facilidade de manutenção do código. 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 5/30 A conversão entre níveis abaixo do sistema operacional são necessariamente interpretados. Enquanto os níveis superiores geralmente são traduzidos ( embora também possam ser interpretados ). A tradução da linguagem de montagem ( assembly ) para um programa executável pelo sistema operacional é denominada montagem. E é realizada por um programa chamado montador ( assembler ). Já o processo de tradução de uma linguagem de alto nível ( orientada ao problema ) para linguagem assembly é realizada por um software denominado compilador. Existem compiladores linguagens como C, C++, Pascal e outras linguagens de alto nível. O código compilado pode ser ligado a outros códigos compilados que podem inclusive já existir na forma de bibliotecas. O software que realiza essa ligação é denominado ligador ( linker ou link-editor ). Já o programa existente no pacote de aplicativos do sistema operacional cuja função é possibilitar a execução do código de um programa executável armazenado em arquivo é denominado carregador ( loader ). ESTRUTURA DE UM COMPUTADOR Em primeiro lugar, vamos definir quais devem ser os componentes básicos que definem um computador. Um computador é uma máquina de processar informações, para tanto, precisa de um processador lógico, cuja função é realizar operações funcionais sobre dados de entrada, devolvendo dados de saída. De nada adiantaria haver capacidade de processamento sem uma memória que armazena dados. Porque não é possível haver processamento sem uma memória para armazenar os dados de entrada, os dados de saída, ou os dados que estão sendo processados. Também é necessário haver comunicação com o mundo externo, por onde os dados de entrada são inseridos, ou por onde os dados de saída podem ser exibidos ao operador humano ou ainda enviados a outro dispositivo. Tais componentes constituem os periféricos de E/S ( E/S = Entrada e Saída, ou I/O = Input/Output ). Os periféricos podem servir de interface com o usuário ( monitor, mouse e teclado, por exemplo ), de interface com linhas de comunicação ( uma placa de rede, módulo Wi-Fi ou módulo bluetooth, por exemplo ), periféricos de armazenamento ( o drive do HD - disco rígido, SSDs - drives de estado sólido, flash-drives, ou drives de mídia óptica como DVDs ou CDs ). Processador, Memórias e Periféricos precisam naturalmente comunicar-se entre si, permitindo que dados sejam enviados, por exemplo, da memória para o processador ou vice-versa. Essa comunicação interna é realizada por um sistema de barramentos. Qualquer dispositivo programável cuja estrutura seja a da figura abaixo pode ser considerado um computador. Desde um supercomputador de milhões de dólares a um chip microcontrolador que custa centavos de dólar. 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 6/30 MÁQUINAS MULTINÍVEIS - APROFUNDANDO OS CONCEITOS Os computadores atuais são compostos por circuitos eletrônicos digitais. Tais circuitos baseiam-se em um componente eletrônico relativamente simples chamado transistor. O transistor opera basicamente como uma chave digital, por onde uma corrente elétrica pode passar ou não. Com esses dois estados possíveis é pode-se implementar circuitos que realizam operações lógicas binárias. É natural pensar que, quanto mais complexas as operações realizadas pelo processador de um computador, mais complexos devem ser seus circuitos internos. Complexidade geralmente significa alto custo ( elevado número de componentes que aumenta o custo de produção ) e baixa confiabilidade ( elevado número de pontos onde falhas podem ocorrer ). Portanto, as operações que as instruções que uma CPU pode realizar geralmente são bem simples. Operações elementares como "some dois números" ou "carregar um dado presente na memória". Ou seja, a linguagem da máquina é compostas por instruções bem elementares. Um programa de computador, por mais complexa seja a tarefa que realiza, é composto por um número elevado dessas instruções simples na sequência apropriada. O programa nada mais é do que uma sequência de passos elementares que, implementados de uma forma correta, levam à execução das tarefas muitas vezes bem complexas.. É claro que, se a tarefa a ser realizada é complexa e as instruções disponíveis são bem simples, um programa acaba possuindo um grande número de instruções. Isso torna o fato de se programar em tais linguagens uma tarefa razoavelmente 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 7/30 penosa para programadores humanos. Além é claro do fato de os dados estarem representados na forma digital binária. A maioria dos microprocessadores possui um "vocabulário" bemrestrito de instruções. Ao contrário da linguagem humana, que possui um amplo vocabulário. Já que um programa é constutuído por uma grande sequência de instruções simples, e as instruções estão na forma binária, a programação em linguagem de máquina é trabalhosa, complexa e propensa a erros. Criar um computador cujo hardware é capaz de processar instruções mais complexas ( uma linguagem mais próxima da humana ), por outro lado, é economicamente inviável. A solução encontrada pelos projetistas foi criar uma estrutura de camadas ou níveis de linguagens. Em que os níveis mais baixos possuem uma linguagem mais próxima da máquina, e os níveis mais altos, uma linguagem mais apropriada para seres humanos. A tarefa de programar torna-se então mais fácil, e mais produtiva, e os programas criados em linguagens de alto nível são traduzidos ou interpretados para a linguagem do nível inferior. Cada nível possui sua linguagem própria, que deve ser traduzida ou interpretada para o nível inferior, até que no nível mais baixo temos as operações que são realizadas diretamente pelo hardware baseado em eletrônica digital. A grande maioria dos computadores atuais é constituída de dois ou mais níveis, podendo atingir até seis níveis, como apresentado na figura 1. Figura 1 – Computador com seis níveis 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 8/30 NÍVEL DE LÓGICA DIGITAL O nível mais baixo (nível 0), ou nível de lógica digital é composto pelo hardware da máquina. Seus circuitos executam programas na linguagem do nível 1. Os elementos de interesse desse nível são conhecidos como portas lógicas. Apesar de constituídas por elementos analógicos tais como transistores, as portas lógicas podem ser modeladas como dispositivos digitais. Cada porta lógica tem uma ou mais entradas digitais (sinais que representam os valores lógicos 0 ou 1) e calcula algumas funções bastante simples sobre essas entradas, como AND (E) e OR (OU) e NOT ( NEGAÇÃO ). Ou seja, as operações básicas da álgebra booleana. Cada porta lógica é construída a partir de um conjunto de transistores. Certa quantidade destas portas pode ser combinada de modo a formar, por exemplo, uma memória de 1 bit, dispositivo capaz de armazenar o valor 0 ou o valor 1. Tais dispositivos com capacidade de armazenar um bit de informação, é muitas vezes denominado latch ou flip-flop. Memórias de 1 bit podem ser combinadas em grupos de maneira a formar, por exemplo, registradores de 16, 32 ou 64 bits. Cada registrador pode guardar uma única sequência de bits, até um dado valor máximo. Em resumo, as portas lógicas podem ser combinadas para formar o principal dispositivo de um sistema computacional, o processador. Obs.: Quando dizemos que um dado processador é de 8, 16, 32 ou 64 bits geralmente estamos nos referindo ao número de flip-flops de seus registradores internos. O nível de lógica digital é o mais primitivo. Como constitui o hardware básico de qualquer computador digital, mesmo os primeiros computadores possuíam esse nível. É a eletrônica que compõe a máquina física. Existe um nível ainda mais baixo, quando consideramos os transistores que compõem as portas lógicas. Portanto, o nível inferior à lógica digital é a a Microeletrônica. Um nível ainda mais baixo, estuda como os transistores dos microcircuitos funcionam. Esse nível é a Física do Estado Sólido. NÍVEL DE MICROARQUITETURA No nível de microarquitetura encontra-se um conjunto de 8 a 32 registradores que formam a memória local, e também um circuito denominado ULA ( Unidade Lógica e Aritmética ) que é capaz de realizar operações aritméticas simples. Os registradores são conectados à ULA formando o caminho de dados, por onde os dados transitam. Tais caminhos de dados são os barramentos internos do processador. Este nível também define se as instruções em linguagem de máquina são interpretadas como microprogramas ( processadores CISC ), ou se são executadas diretamente pelo hardware ( processadores RISC ). O nível de microarquitetura também estuda os registradores necessários para a operação do processador. Muitos desses registradores são invisíveis ou transparentes para o nível ISA. O programador não possui acesso a eles. Por exemplo, é necessário um registrador para endereçar as instruções que são buscadas na memória durante a execução dos programas. Um outro registrador é necessário para armazenar a instrução que foi buscada na memória, para que seja decodificada e em seguida, executada. Essas operações devem ocorrer independentemente do que é programado nas instruções da máquina. Fazem parte do projeto do microprocessador e funcionam da mesmas maneira qualquer que seja a instrução executada. 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 9/30 NÍVEL DO CONJUNTO DE INSTRUÇÕES DA MÁQUINA ( ISA ) O nível 2 é denominado nível da arquitetura do conjunto de instruções ( ou nível ISA – Instruction Set Architecture). Este nível contém o conjunto de instruções que são executadas por meio de microprogramação ( no caso de processadores CISC ) ou diretamente pelo hardware da máquina ( processadores RISC ). O nível ISA estabelece o formato e tamanho em bits das instruções, o número de ciclos de clock que cada instrução consome, e o número de instruções presentes no processador, bem como o tamanho em bits e os tipos de dados manipulados pelas instruções. Define por exemplo, se um processador possui uma instrução de divisão, ou se será necessário desenvolver uma rotina com instruções de subtração criada por um programador para realizar uma operação de divisão. NÍVEL DO SISTEMA OPERACIONAL ( S.O. ) O nível 3 é denominado nível do sistema operacional. Um sistema operacional é um programa que adiciona um conjunto de novas instruções e funcionalidades, além daquelas suportadas pelo nível ISA. O conjunto de instruções do nível do sistema operacional é aquele que está disponível para os programadores de aplicações. Nele estão presentes praticamente todas as instruções do nível ISA, bem como um novo conjunto de instruções que o sistema operacional adiciona, conhecidas como chamadas de sistema. Uma chamada de sistema ativa um determinado serviço prestado pelo sistema operacional ao nível da aplicação, como por exemplo, a leitura de um dado de um arquivo. O nível do sistema operacional é sempre interpretado, ou seja, quando um programa do usuário executa uma instrução desse nível, o sistema operacional executa essa instrução passo a passo. Outra funcionalidade importante do nível do sistema operacional é a abstração do hardware. A parte física de uma máquina ( hardware ) pode ser bem diferente do de outra máquina. Os sinais digitais necessários para executar uma mesma tarefa podem ser radicalmente diferentes de um modelo de computador para, ou seja, cada dispositivo pode trabalhar com uma linguagem específica. Entretanto, deve ser possível que um mesmo programa rode adequadamente em dois computadores com diferentes estruturas de hardware. É aí que entra o Sistema Operacional. Ele é um programa especial capaz de gerenciar o funcionamento de todos os outros, realizando a interpretação entre a linguagem genérica do software para a linguagem mais específica do hardware. Por exemplo, todos os programas compatíveis com um dado sistema operacional podem invocar as mesmas instruções na forma de chamadas de sistema para escrever um arquivo em um disco. Cabe ao sistema operacional interpretar essa chamada de sistema e executá-la, comunicando-se com o hardware onde o arquivo será gravado. Esse hardware pode ser um disco rígido ou um pen-drive, por exemplo. Ambos possuem uma tecnologia totalmente diferente, e cabe ao sistema operacional ser capaz de se comunicar adequadamente com o dispositivo em questão. Por exemplo, no caso de dispositivos plug and play com interface de comunicaçãoUSB como um pen-drive ou HD externo, quando são plugados em um computador pela primeira vez, surge uma mensagem de instalação do driver do dispositivo. Instalar o driver de um novo periférico é a maneira do sistema operacional "aprender" uma nova linguagem, para comunicar-se com um novo dispositivo. 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 10/30 O sistema operacional também encarrega-se do gerenciamento de processos e a hierarquia de acesso dos processos em execução. Pode-se ter um sistema operacional multitarefa, com cada processo em execução por uma fatia de tempo, determinado pelo s.o.. Os processos também não podem ter acesso a qualquer endereço de memória, pois dessa maneira poderiam provocar pane em outros processos ou no funcionamento do próprio sistema operacional. O acesso à memória é restrito, pois processos comuns são executados com o microprocessador no modo protegido. Aspectos importantes relativos aos sistemas operacionais: memória virtual, entrada/saída de arquivos e processamento paralelo. Memória virtual é uma técnica implementada na maioria dos sistemas operacionais para fazer com que a máquina pareça ter mais memória do que na verdade ela tem. Uma maneira de se organizar a memória virtual é usar uma abstração denominada arquivo. Para o sistema operacional um arquivo nada mais é do que uma sequência de bytes. A E/S de arquivos é feita por chamadas do sistema operacional para abertura, leitura, escrita e fechamento de arquivos. Em um sistema computacional com mais de um processador, cada um dos vários processos cooperantes que rodam nele poderá ter seu próprio processador, de modo a permitir que esses processos avancem simultaneamente. Por outro lado, se houver apenas um processador disponível, o efeito do processamento paralelo poderá ser simulado, fazendo com que o processador se dedique a um processo de cada vez, por curto espaço de tempo, ou seja, o processador pode ser compartilhado por vários processos. O Sistema Operacional ( S.O. ) é um software cuja função é controlar a execução de programas em execução, gerenciar os recursos do computador. No que se refere ao controle de execução de programas, uma das funções mais importantes do S.O. é o escalonamento de processos ou tarefas. Nesse caso, o S.O. determina qual dos processos em andamento deve estar em execução em um determinado momento. O hardware do computador possui timers que geram interrupções ao processador periodicamente. E, a cada interrupção, uma rotina do S.O. é processada para realizar a decisão de qual processo estará em execução na CPU. Um processo é basicamente, um programa carregado na memória e em execução. Um computador tipicamente possui muitos processos em andamento simultaneamente. Entretanto, um computador geralmente possui um único processador ou poucos processadores. Em um sistema multitarefa, cada processo possui um tempo limitado de execução sendo interrompido pelo S.O., e depois dando lugar a um outro processo cuja execução continua de onde havia parado quando fora interrompido. O escalonamento de processos é realizado rapidamente, de modo que o usuário possui a ilusão de que mais de um programa esteja sendo executado simultaneamente em um sistema multitarefa. Já o gerenciamento de recursos controla o acesso de programas à memória, e dispositivos periféricos de E/S ( I/O ). Por exemplo, se existem diversos processos em andamento, deve haver setores da memória reservados para cada processo. Isso impede que um processo acesse a área de memória usada por outro processo ( seja por acidente ou de forma proposital ), causando consequências imprevisíveis ou falhas de segurança. Já o acesso a dispositivos periféricos deve estar, do ponto de vista do programador de aplicativos, em um nível de abstração tal que oculte os detalhes complexos do hardware, além de impossibilitar que um código mal escrito provoque pane, ou até danos aos periféricos. Portanto, o programa aplicativo comum, que roda em um determinado sistema operacional, não pode ter acesso a todos os recursos do computador. A maneira de os sitemas de computação atuais impedirem 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 11/30 os acessos indevidos encontra-se na propriedade de o microprocessador funcionar em mais de um modo. Por exemplo, os programas aplicativos comuns rodam com o processador em modo usuário, em que não há disponibilidade a todas as instruções do nível ISA. Já o código do kernel do sistema operacional roda com o processador no modo supervisor, possuindo acesso a todo o set de instruções do microprocessador e a todos os endereços da memória. Um bit no microprocessador determina se este está operando no modo usuário ou no modo supervisor. A ideia, é que ao acessar um dispositivo de I/O, por exemplo, o programa em modo usuário envie uma chamada de sistema ao S.O. que, rodando em modo supervisor, decide se irá ou não atendê-la, quando atendê-la e como se comunicar corretamente com o disposivo. Os detalhes sobre como a comunicação é realizada são implementados pelo código do driver associado ao dispositivo em questão. O Sistema Operacional encontra-se entre os níveis de linguagem de máquina ( nível ISA ) e a linguagem de montagem ( assembly ). A diferença entre essas duas linguagens consiste no fato de a linguagem de montagem possuir instruções especiais denominadas chamadas de sistema ( system calls ). As chamadas de sistema consistem em sub-rotinas implementadas no sistema operacional que realizam a abstração com o hardware. Por exemplo, se um software é escrito para abrir e editar um arquivo no disco rígido, é preferível que exista uma abstração para deixar os detalhes da comunicação com o controlador do disco transparentes ao programador. Cada tipo de disco pode ter sinais de controle distintos, além de detalhes, como o controle do posicionamento a cabeça de leitura do disco, ou ainda o setor e a trilha em que se encontra determinada parte do arquivo. Se o programador tivesse que se preocupar com detalhes desse tipo, o desenvolvimento de programas teria um custo muito elevado, já que esses seriam muito mais difíceis de ser escritos, e com muito mais trabalho. Portanto, o programa, ao comunicar-se com o hardware utiliza como interface de abstração as chamadas de sistema, que oculta do programador os detalhes e as peculiaridades de cada diferente dispositivo de hardware. Sendo assim, as chamadas de sistema são sub-rotinas implementadas no sistema operacional, que executam tarefas de baixo nível ( comunicação com o hardware da máquina ). A maioria dos programadores, utilizando linguagens de alto nível, nunca vê esse nível de detalhe. Normalmente, os desenvolvedores de aplicações projetam programas de acordo com uma interface de programação de aplicações ( API - Appliacation programming interface ). A API especifica um conjunto de funções que estão disponíveis ao programador de aplicações. O S.O. também oferece um ambiente ao usuário final para interagir com o sistema. Essa interface entre o usuário e o kernel é denominada Shell. Nos sistemas mais antigos, como no UNIX e no MS-DOS, bem como nas primeiras versões do Linux, a interface com o usuário era por meio de uma linha de comando ( CLI - Command Line Interface ). Atualmente, a maioria dos sistemas possui uma interface gráfica e interativa com o usuário, ou seja, uma GUI - Graphic User Interface, como é o caso do Mac OS e do Windows. Podemos então perceber, que uma das principais funções de um sistema operacional, é realizar a interface entre o usuário/programador com o computador, por meio de abstrações. Graças ao sistema operacional, a máquina aparenta ser mais simples do que realmente é, tanto do ponto de vista do programador de aplicações quanto do usuário, Portanto, o S.O. é uma espécie de máquina virtual, que oferece um ambiente convenienteao programador/usuário e eficiente quanto à utilização dos recursos do sistema. 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 12/30 O sistema operacional geralmente oferece funcionalidades de suporte para as seguntes tarefas: - Execução de programas: para um programa ser executado, várias tarefas têm de ser realizadas. Como o programa é armazenado no computador na forma de um arquivo, para a execução ser realizada, o sistema operacional deve oferecer uma interface com o usuário para que este possa colocar o programa em execução ( seja por uma linha de commando ou por uma interface gráfica ); o S.O. deve ser capaz de localizar o arquivo no disco, realizar a carga ( load ) do programa ( que é copiar o conteúdo do arquivo do arquivo em disco para a memória do computador ), e colocar esse programa em execução. Essa última tarefa, colocar o programa em execução, significa transferir o controle do computador do sistema operacional para o programa. Já a tarefa de carga ( load ), significa executar um programa utilitário do sistema chamado loader. - Acesso a disposistivos de E/S: cada dispositivo de E/S ( I/O ) possui seu próprio conjunto peculiar de instruções ou sinais de controle para operação. Por exemplo, apesar de arquivos poderem ser armazenados tanto no disco rígido (HD ), quanto em uma mídia óptica, ou um flash-drive ( como uma unidade SSD ou um pen-drive ), os sinais de controle são diferentes para cada tipo de drive. Além do fato de o barramento para a comunicação de cada dispositivo com o sistema também poder ser diferente ( IDE, SATA, USB, etc. ), cada um com um diferente protocolo de comunicação. O sistema operacional é que cuida dos detalhes de comunicação e controle do hardware, deixando usuários e programadores de aplicação em um nível de abstração mais alto. Para o usuário o acesso ao arquivo pode se dar por meio de um simples ícone, por exemplo. Já para o programador, o acesso ao arquivo se dá por funções oferecidas pela linguagem de programação ( como por exemplo fopen(), fclose() da linguagem C ), ou pelas chamadas de sistema,invocadas pelas funções das APIs. A parte mais complexa de como operar com o hardware fica por conta do sistema operacional, evitando que o desenvolvedeor de aplicações precise adquirir um conhecimento muito profundo sobre cada dispositivo de hardware, e dimuindo a complexidade em programas ( e consequentemente o custo de desenvolvimento e a probabilidade de erros ). Além disso, no caso de sistemas utilizados por mais de um usuário simultaneamente, o sistema operacional deve fornecer controle de acesso aos arquivos ( impedindo que um mesmo arquivo seja editado por mais de um usuário ao mesmo tempo, gerando resultados imprevisíveis ). - Detecção e reação aos erros: durante a execução de um programa, é possível ocorrerem erros não previstos pelo programador. Tais como erros de divisão por zero ou por overflow em operações aritméticas, tentativa de endereçar uma área da memória não permitida ( restrita ao sistema operacional ou a outro programa ), a impossibilidade de o sistema atender a uma requisição do programa. Nesses casos o sistema operacional deve responder eliminando a condição de erro, com o menor impacto possível pobre as outras aplicações em execução. Essa resposta pode ir desde terminar a execução do programa que causou o erro até tentar executar novamente a operação, ou simplesmente relatar a ocorrência do erro à aplicação. Em situações como essa pode-se dizer que o sistema operacional gera uma exceção. Exemplos de eventos que geram exceções são: divisão por zero, tentativa de executar uma instrução com opcode não existente, tentativa de acesso a uma região 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 13/30 protegida da memória e falta de página. Exceções ocorrem devido a condições incomuns. Por exemplo, ao invés de ser realizada antes uma verificação do valor do divisor, executando a divisão somente se o divisor for diferente de zero, o programa simplesmente executa a instrução de divisão, gerando automaticamente uma exceção caso o divisor possua valor zero. Nesse caso a rotina que trata a exceção é executada. Histórico Os primeiros sistemas de processamento em lotes ( batch ) funcionavam da seguinte maneira: havia uma fila de tarefas ( programas ) a serem executadas. Cada programa era colocado para funcionar até devolver o resultado do processamento ou o tempo reservado para ele terminar. O programa seguinte iniciava seu processamento após o término do anterior. Os sistemas batch não possuíam interação com o usuário durante o processamento de programas. Em um sistema desse tipo, também chamado monitor, o usuário não tem mais acesso à máquina a partir do início do processamento. O monitor residente é o software que controla a sequência de eventos para o processamento em lotes, portanto o monitor deve estar residente na memória. Além do monitor residente, o monitor também é composto de programas utilitários e de funções de uso comum. Entretanto, dispositivos de I/O são mais lentos do que a CPU. Sendo assim, é comum existirem situações em que a tarefa em processamento depende da resposta de algum dispositivo, deixando a CPU aguardando. Ou seja, nos primeiros sistemas em lotes, a CPU permanecia ociosa pela maior parte do tempo, desperdiçando sua capacidade de processamento. A solução para esse problema surgiu com os sistemas que faziam uso de multiprogramação. Nesses sistemas, enquanto um processo aguarda pela I/O, a CPU começa a executar a tarefa seguinte. E dessa maneira, o tempo em que ela fica ociosa diminui substancialmente. Entretanto, tais sistemas devem ter características que possibilitam essa implementação, tais como: proteção de memória - enquanto o programa 1 aguarda I/O, o programa 2 está em execução. O que significa que o programa 1 encontra-se suspenso. Nesse caso, a memória do sistema possui os dados em processamento de mais de um programa. Sendo assim, deve haver uma política que impede que um programa acesse endereços de memória reservados para outros programas, gerando resultados imprevisíveis. O mecanismo de proteção de acesso à memória também deve proteger o próprio núcleo ( kernel ) do sistema operacional, residente na memória principal. Porque há a possibilidade de um programa com erro ou um código mal-intencionado tentar acessar essa área de memória provocando sérios prejuízos. temporização: já que as tarefas compartilham uma mesma CPU, sendo uma executada de cada vez, por meio de uma multiplexação no tempo, cada tarefa possui um tempo limitado de controle sobre o processador. Dessa maneira impede-se que uma tarefa use a CPU sozinha impedindo que outras tarefas usem a CPU ( como em um caso de loop infinito, por exemplo ). Quando uma tarefa é inicializada, o sistema operacional determina um tempo limite dentro do qual ela possui o controle da CPU. Quando o timer do sistema chega a um valor limite, esse tempo expira e o controle da CPU retorna ao sistema operacional. Esse pode então passar o controle a uma outra tarefa em execução, por exemplo. interrupções: o processador é informado sobre o tempo-limite do timer ou sobre um dispositivo de I/O ter a resposta pronta devido a requisições de interrupção. Quando uma 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 14/30 requisição de interrupção é atendida, a CPU literalmente interrompe a tarefa em processamento, para executar a rotina de tratamento de interrupção adequada.São as interrupções que viabilizam que a CPU não fique constantemente lendo o estado de um dispositivo de I/O para determinar se já está pronto ou não para uma transação de dados com a CPU. Por exemplo, o mouse faz uso de interrupções para que o sistema operacionalatualize a posição do cursor na tela, quando o usuário digita algo no teclado, ou ainda quando a impressora está pronta para receber novos dados. A diferença fundamental entre exceção e interrupção é que a exceção é gerada por um evento síncrono ( quando é resultado direto da execução do programa corrente, sendo gerada pelo próprio processador ), e a interrupção é gerada por eventos assíncronos ( quando ocorre independentemente da execução do programa corrente, sendo gerada por dispositivos externos ao processador ). Requisições de interrupções podem ocorrer a qualquer momento durante a execução de um programa, sendo gerada por timers dispositivos de I/O. Já exceções são geradas por condições incomuns que podem surgir com a execução das instruções do programa, como, por exemplo, uma divisão por zero. O tratamento de uma interrupção é realizado da seguinte maneira: - O processador salva o contexto: O valor dos registradores da CPU, para que, ao retornar da rotina de tratamento de interrupção, as condições sejam as mesmas de quando ela foi chamada, e a execução do programa corrente possa prosseguir normalmente. O principal registrador a ser salvo é o PC ( program counter ), cuja função é apontar para o endereço da instrução seguinte a ser buscada na memória. O valor corrente do PC é salvo em uma área especial da memória chamada pilha. - Desvia a execução para a rotina de tratamento de interrupção: O processador altera o valor do PC para o endereço da primeira instrução da rotina de tratamento de interrupção. Tipicamente, o endereço do tratador de interrupção é armazenado no vetor de interrupções. - Após a execução da rotina de interrupção, é executada uma instrução de retorno de interrupção. Essa instrução é similar à instrução RETURN, a ser processada no final de uma sub-rotina, porém, além de recuperar o valor do PC da pilha, também recupera o conteúdo do registrador de STATUS, onde estão armazenados os flags de status da última instrução executada antes da interrupção. Já o tratamento de uma exceção é similar ao tratamento de uma interrupção. O processador salva o contexto, executa o tratador de exceção ( tipicamente, o endereço do tratador da exceção no vetor de interrupções ), e, após executar a exceção, o tratador pode retornar ou abortar o programa. instruções privilegiadas: Para que programas não realizem acessos a dispositivos de I/O ou a certos endereços da memória de maneira indevida, o processador possui instruções privilegiadas que apenas são executadas pelo sistema operacional. A CPU deve possui pelo menos dois modos de execução: o modo monitor que executa todas as instruções da máquina, incluindo as privilegiadas, e o modo usuário para os demais programas. Um programa de usuário deve então solicitar um acesso a dispositivos de I/O ao sistema operacional, por meio de chamadas de sistema. NÍVEL DE LINGUAGEM DE MONTAGEM ( ASSEMBLY ) 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 15/30 O nível 4 é denominado nível de linguagem de montagem ( assembly language ). Neste nível ocorre a tradução do programa original, expresso na linguagem fonte para uma outra linguagem denominada linguagem alvo. Dependendo da relação entre a linguagem fonte e a linguagem alvo, os tradutores podem ser divididos em dois grupos. Quando a linguagem fonte for essencialmente uma representação simbólica para uma linguagem de máquina numérica, o tradutor é chamado de montador ( assembler ) e a linguagem fonte é chamada de linguagem de montagem ( assembly ). Por outro lado, quando a linguagem fonte for uma linguagem de alto nível e a linguagem alvo for uma linguagem de máquina numérica ou uma representação simbólica desta linguagem, o tradutor é chamado de compilador. Uma linguagem de montagem pura é aquela na qual cada comando produz exatamente uma instrução de máquina, ou seja, existe uma correspondência um para um entre as instruções de máquina e os comandos de um programa expresso em linguagem do montador. NÍVEL DE LINGUAGEM ORIENTADA AO PROBLEMA As linguagens do nível 5 são projetadas para serem usadas por programadores de aplicação, com algum problema a ser resolvido. Tais linguagens são conhecidas como linguagens de alto nível. Os programas escritos nestas linguagens são convertidos para os níveis 3 ou 4 por tradutores conhecidos como compiladores. Exemplos de um programa simples para imprimir uma mensagem na tela em Linguagem de Alto Nível e em Assembly: Usando uma linguagem do nível 5 ( linguagem C ): #include <stdio.h> int main( int argc, char *argv[] ) { printf( "Olá, mundo! \n" ); return 0; } O mesmo exemplo em C++ : 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 16/30 #include <iostream> using namespace std; int main( int argc, char *argv[] ) { cout << " Olá mundo!" << endl; return 0; } O mesmo exemplo em Java: public class Exemplo { public static void main( String args[] ) { System.out.println( " Ola mundo! " ); } } E na linguagem do nível 4 ( assembly ou lingugem de montagem para processadores da família x86 com sistema operacional Windows ou MS-DOS ). O código executado é compatível com 16 bits. Repare que na linguagem assembly são necessárias mais linhas de código: .model tiny .data DB frase 'Olá, mundo!", $ ; Texto a ser exibido na tela. .code org 0100h ; Endereço inicial do código. mov dx, frase ; Registrador DX aponta para o endereço da string do texto. 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 17/30 mov ah, 9 ; Função 9 da interrupção 21h para imprimir texto na tela. int 21h ; Invoca a rotina da interrupção 21h. mov ah, 4ch ; Função 4C da interrupção 21h para sair do programa. int 21h ; Invoca a rotina da interrupção 21h. .end ( Repare que o que é escrito à direita do ponto-e-vírgula são comentários que servem apenas para o programador ter mais facilidade para entender o programa durante a edição do código, e não faz parte do código em linguagem de máquina gerado posteriormente ). Outros exemplos de trechos de código escritos em Linguagem de Montagem ( Assembly ) para diversas famílias de microprocessadores e microcontroladores: Um outro exemplo de trecho de código escrito em assembly para processadores da família x86 ( presente em computadores pessoais ). ; ------------- Início da manipulação dos dados do arquivo encontrado ; ----- Abre o arquivo, obtendo o Handle mov dx, 9eh ; Endereço onde está o nome do arquivo encontrado. mov ax, 3d02h ; Abre o arquivo para leitura-escrita. int 21h ; O handle do arquivo foi obtido em AX mas deve mov bx, ax ; ser movido para BX para as próximas funções. ; ----- Obtém a data e hora da última alteração do arquivo. mov ah, 57h xor al, al ; mov al, 0 int 21h lea di, [offset Horario + bp] mov ax, cx stosw lea di, [offset Data + bp] mov ax, dx stosw 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 18/30 ; ----- Salva a parte do arquivo que inevitavelmente será alterada, ; lendo e armazenando os primeiros bytes do arquivo a ser ; modificado. Para tanto o início do futuro hospedeiro deve ;ser lido e os primeiros bytes armazenados em Backup. lea dx, [offset Backup + bp]; Buffer onde os dados serão gravados. mov cx, bytes mov ah, 3fh int 21h ; ----- Descobre se o programa realmente é um .COM internamente lea si, [offset Backup + bp] lodsw cmp ax, 'ZM' ; Equivale a comparar com 'MZ' je Proximo1 A linguagem assebly ainda é utilizada principalmente na programação de microcontroladores, que são computadores completos em um único chip, já que possuem processador, memória e periféricos embutidos. Circuitos eletrônicos com microcontroladores fazem parte dos chamados sistemas embarcados, que são sistemas que possuem microcontroladores que conferem uma certa "inteligência" a outros dispositivos, tais como eletrodomésticos, alarmes, fontes de energia, cancelas eletrônicas, brinquedos, etc. A seguir um exemplo de trecho de código escrito em assembly para um microcontrolador da família 8051. ORG 0000h ; VETOR DE RESET. SJMP STARTUP ; DESVIA PARA O CÓDIGO DE INICIALIZAÇÃO. ORG 0003h ; ENDEREÇO DA INT0. NOP RETI ORG 000Bh ; ENDEREÇO DO TIMER0 NOP RETI ORG 0013h ; ENDEREÇO DA INT1. NOP RETI ORG 001Bh ; ENDEREÇO DO TIMER1. NOP RETI 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 19/30 ORG 0023h ; ENDEREÇO DA INTERRUPÇÃO SERIAL. NOP SJMP SERIALISR ; DESVIA PARA A ISR DA SERIAL. RETI STARTUP: ; CÓDIGO DE INICIALIZAÇÃO. MOV P1, #00000000b ; PORT P1 INICIALMENTE ZERADO. MOV TMOD, #00100000b ; TIMER1 EM MODO 2 : 8 BITS COM AUTO-RELOAD. MOV TH1, #0FDh ; PRESET VALUE DO MODO 2 DO TIMER1. ; BAUD-RATE= 9600 bps MOV TL1, #0h ; CONTADOR INICIALMENTE EM ZERO. SETB TR1 ; LIGA O TIMER1. MOV SCON, #01010000b ; SERIAL NO MODO 1, COM BIT REN HABILITADO. MOV PCON, #00000000b ; SMOD= 0. SEM DOBRAR A FREQUÊNCIA DA SERIAL. MOV IP, #00010000b ; INTERRUPÇÃO SERIAL COM ALTA PRIORIDADE. MOV IE, #10010000b ; INTERRUPÇÃO SERIAL HABILITADA. COM EA= 1. MAINLOOP: ; LAÇO PRINCIPAL DO PROGRAMA. NOP SJMP MAINLOOP ; LAÇO INFINITO. SERIALISR: ; ROTINA DE TRATAMENTO DA INTERRUPÇÃO SERIAL. NOP MOV P1, SBUF ; MOVE O VALOR DO BUFFER SERIAL PARA O PORT P1. CLR RI ; RESSETA O FLAG DA INTERRUPÇÃO DA SERIAL. RETI ; RETORNO DA INTERRUPÇÃO. END ; FIM DO PROGRAMA. 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 20/30 Microcontrolador 89S8252, da família 8051 em diversos encaplusamentos. O 8051 foi o pioneiro entre os microcontroladores. Para exemplificar como a linguagem assembly muda de acordo com a arquitetura do processador, segue um outro trecho de código escrito em assebly. Dessa vez um código assembly para um microcontrolador da família PIC16: RST CODE 0x0000 ; VETOR DE RESET GOTO STARTUP ; DESVIA PARA O CÓDIGO DE INICIALIZAÇÃO. ISR CODE 0x00004 ; VETOR DE INTERRUPÇÃO. MOVWF W_TEMP ; SALVA A IMAGEM DOS REGISTRADORES PRINCIPAIS. SWAPF STATUS, W BCF STATUS, RP0 MOVWF STATUS_TEMP BTFSS INTCON, T0IF ; TESTA SE A INTERRUPÇÃO FOI GERADA PELO TIMER0. GOTO RESTORE_REGS ; BCF INTCON, T0IF ; RESSETA BIT QUE SINALIZA A INTERRUPÇÃO. INCF DELAY_COUNT, F ; INCREMENTA O CONTADOR DE ATRASO. MOVLW D'3' 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 21/30 SUBWF DELAY_COUNT, W ; APÓS 3 ITERAÇÕES VOLTA. BNZ RESTORE_REGS ; ENQUANTO DELAY_COUNT != 3, RETORNA DA INTERRUPÇÃO. CLRF DELAY_COUNT ; RESSETA O CONTADOR DELAY_COUNT. INCF CONTADOR, F ; INCREMENTA O CONTADOR. ( CONTADOR= CONTADOR + 1.) MOVLW D'100' ; SE CONTADOR == 100, CONTADOR= 0. SUBWF CONTADOR, W BNC RESTORE_REGS CLRF CONTADOR RESTORE_REGS ; RESTAURA OS REGISTRADORES WREG E STATUS. SWAPF STATUS_TEMP, W MOVWF STATUS SWAPF W_TEMP, F SWAPF W_TEMP, W RETFIE ; RETORNA DA INTERRUPÇÃO. O microcontrolador PIC contém todos os elementos necessários de um computador em um único chip, porque contém um processador, memória e periféricos embutidos. 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 22/30 Naturalmente, é bem mais fácil programar em assembly do que diretamente em código de linguagem de máquina ( os primeiros computadores eram programados em linguagem de máquina binária ! ). Entretanto, mais fácil é programar em linguagens de médio e alto nível, tais como as linguagens descendentes de Basic, C e Pascal. Essas linguagens estão estruturadas de uma forma mais próxima da descrição de um algoritmo, e mais distantes da linguagem da máquina. É fácil perceber que, quanto mais alto o nível da linguagem mais fácil é o aprendizado de programação, pois a escrita e leitura do código é mais intuitiva e parecida com a linguagem humana. Além disso, uma linguagem de alto nível é mais genérica, podendo ser traduzida para a linguagem de máquina de diversos tipos de microprocessadores. Já a linguagem de máquina ( de baixo nível ) é específica de uma determinada família de microprocessadores. Em sistemas embarcados ( microcontrolados ), também é possível programar em linguagens de alto nível ( como linguagem C ) ao invés de linguagem assembly. Por exemplo, nos microcontroladores PIC e no Arduino. O Arduino é uma plataforma que contém todos os elementos de um computador em uma única placa de fácil programação. Bibliografia 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 23/30 TANENBAUM, A. S. Organização estruturada de computadores. 5ª. Ed. São Paulo: Pearson: Prentice Hall, 2007. WEBER, R. F. Fundamentos de Arquitetura de Computadores, 4º Ed. Porto Alegre: Bookman, 2012 MACHADO, F. B., MAIA F. P. Arquitetura de Sistemas Operacionais, 5º Ed. Rio de Janeiro: LTC, 2013. Exercício 1: Considerando as afirmações abaixo, assinale a alternativa correta sobre máquinas multiníveis: I. É possível considerar a linguagem de máquina simples e de baixo nível e a linguagem voltada ao usuário de alto nível e complexa. II. Cada linguagem usa a sua linguagem antecessora como base, de modo que um computador que use essa técnica pode ser visto como um conjunto de camadas ou níveis. III. O fato de o programador não estar ciente de como o nível que ele está utilizando é implementado leva ao conceito de projeto estruturado de máquinas virtuais. IV. Os níveis de máquinas virtuais que podem ser implementados são limitados. V. Para escrever um programa numa máquina virtual não é preciso se preocupar com as máquinas abaixo desse nível. A) Apenas as afirmativas I, II e III estão corretas. B) Apenas as afirmativas II, III e V estão corretas. C) Apenasas afirmativas II, IV e V estão corretas. D) Apenas as afirmativas I, II, III e IV estão corretas. E) Apenas as afirmativas I, II, III e V estão corretas. Comentários: 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 24/30 Essa disciplina não é ED ou você não o fez comentários Exercício 2: O projeto da maioria dos computadores atuais incorpora o conceito de máquina multinível; algumas delas com até seis níveis. Neste contexto, o nível mais baixo da arquitetura computacional é: A) o nível de Microarquitetura B) o nível de Lógica Digital C) o nível ISA ( Instruction Set Architecture ) D) o nível do Sistema Operacional. E) o nível de Compilação. Comentários: Essa disciplina não é ED ou você não o fez comentários Exercício 3: (FCC - 2012 - TRT - 11ª Região (AM) - Técnico Judiciário - Tecnologia da Informação) Segundo Andrew S. Tanenbaum, numa conjugação de hardware, linguagens interpretadas e linguagens traduzidas, o computador pode ser dividido em uma máquina de seis níveis. Em um desses níveis, os objetos mais interessantes são denominados PORTAS, cada uma, contendo uma ou mais entradas para sinais digitais (representando 0 ou 1) e computando como saída alguma função simples dessas entradas, como AND ou OR . Trata-se do nível de arquitetura: A) lógico digital. 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 25/30 B) de microarquitetura. C) do sistema operacional da máquina. D) de conjunto de instruções. E) de linguagem de montagem. Comentários: Essa disciplina não é ED ou você não o fez comentários Exercício 4: (FCC - 2011 - NOSSA CAIXA DESENVOLVIMENTO - Analista de Sistemas) Na arquitetura de computadores, a ALU (Unidade Lógica e Aritmética) é um circuito que se conecta aos registradores para formar um caminho de dados. Em termos de linguagem de máquina multiníveis, a ALU situa-se no nível: A) lógico digital. B) de microarquitetura. C) de arquitetura de conjunto de instruções. D) do sistema operacional de máquina. E) de linguagem de montagem. 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 26/30 Comentários: Essa disciplina não é ED ou você não o fez comentários Exercício 5: (FCC - 2010 - TRF - 4ª REGIÃO - Técnico Judiciário - Informática) ASSEMBLER é o programa utilizado para executar os códigos fontes criados em ASSEMBLY. No contexto da arquitetura de computadores em camadas, esses termos estão fortemente associados à camada de nível: A) microarquitetura B) conjunto de instruções C) sistema operacional D) linguagem de montagem E) linguagem orientada a problemas Comentários: Essa disciplina não é ED ou você não o fez comentários Exercício 6: Qual é a linguagem que utiliza mnemônicos para representar Opcodes de instruções em linguagem de máquina? A) Assembly, 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 27/30 B) Linguagem digital binária. C) Opcodes Java. D) Linguagem de máquina do processador. E) Linguagem de microprogramação. Comentários: Essa disciplina não é ED ou você não o fez comentários Exercício 7: Que tipo de processador utiliza microprogramação? A) PIC B) ARM C) RISC D) CISC E) MIPS 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 28/30 Comentários: Essa disciplina não é ED ou você não o fez comentários Exercício 8: Assinale a alternativa que mostra os níveis de linguagens, do mais baixo para o mais alto: A) Nível de micro-arquitetura; nível de linguagem de máquina; nível de sistema operacional; nível de linguagem de montagem; nível de lógica digital; nível de linguagem orientada à aplicação B) Nível de lógica digital; nível de micro-arquitetura; nível de linguagem de montagem; nível de linguagem de máquina; nível de linguagem orientada à aplicação. C) Nível de lógica digital; nível de linguagem de montagem; nível de máquina; nível linguagem de sistema operacional; nível de linguagem orientada à aplicação. D) Nível de lógica digital; nível de micro-arquitetura; nível de linguagem de máquina; nível do sistema operacional; nível de linguagem de montagem; nível de linguagem orientada à aplicação E) Nível de lógica digital; nível de micro-arquitetura; nível de linguagem de máquina; nível do sistema operacional; nível de linguagem orientada à aplicação; nível de linguagem de montagem Comentários: Essa disciplina não é ED ou você não o fez comentários Exercício 9: ( IESES - 2010 - CRM-DF - Assistente de Tecnologia da Informação ) Sobre Microprograma é CORRETO afirmar que: 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 29/30 A) É um pequeno programa escrito em uma linguagem de “mais baixo nível” e implementado em hardware. B) O firmware não é um exemplo de Microprograma. C) O Microprograma é utilizado apenas em microcomputadores. D) É um pequeno programa escrito em linguagem de “alto nível”. E) é uma instrução do sistema operacional Comentários: Essa disciplina não é ED ou você não o fez comentários Exercício 10: O nível da microarquitetura situa-se logo acima do nível da lógica digital e tem por finalidade: A) Implementar o caminho dos dados. B) Implementar a camada ISA (Instruction Set Architecture). C) Permitir a realização das operações de acesso à memória. D) Controlar os dispositivos internos do processador. 02/03/2020 UNIP - Universidade Paulista : DisciplinaOnline - Sistemas de conteúdo online para Alunos. https://online.unip.br/imprimir/imprimirconteudo 30/30 E) Implementar os comandos do sistema operacional. Comentários: Essa disciplina não é ED ou você não o fez comentários Exercício 11: (FCC - 2010 - TRE-AM - Analista Judiciário - Tecnologia da Informação) Numa máquina estruturada multinível, é o nível essencial para as máquinas CISC (Complex Instruction Set Computer), mas que inexiste nas máquinas RISC (Reduced Instruction Set Computer). Trata-se do nível: A) do sistema operacional. B) de lógica digital. C) de microprogramação. D) convencional de máquina. E) do montador. Comentários: Essa disciplina não é ED ou você não o fez comentários
Compartilhar