Sistemas Operacionais

  1. Conteúdo
  2. Bibliografia
  3. Material de Apoio
  4. Avaliação
  5. Simulador de Gerencia de Processos e de Memória
  6. Simuladores (Deadlock, Escalonamento, Memória, Arquivos...)
  7. Perguntas
    1. Como funciona um PC ?
    2. Como acontece o boot no PC ?
    3. Qual a influência da memória cache no desempenho do micro  ?
    4. O que é memória cache interna e memória cache externa?
    5. Resolvi aumentar minha memória de 8 MB para 16MB. Não senti nenhuma melhora em velocidade. No boot ele reconhece os 16 MB, e no Windows (uso a versão 3.11) no Painel de Controle, ícone 386 avançado, habilitei a memória virtual recomendada, mas mesmo assim não senti ganho de performance. O que está acontecendo? 
    6. O que é um programa residente ?
    7. Endereçamento da memória do PC (família 8086)
    8. Registradores da CPU (família 8086)
    9. Interrupções
    10. O Processador
    11. Ciclos de Máquina
    12. Sistemas de Arquivo

Conteúdo

  Objetivos Gerais

        Estudar os conceitos fundamentais e os aspectos importantes referentes à arquitetura, análise, desenvolvimento e avaliação de   sistemas operacionais

Conteúdo Programático

  1. Fundamentos de Sistemas Operacionais
  2. Estruturas de Computadores
  3. Estrutura dos Sistemas Operacionais
  4. Gerenciamento de Processos
  5. Sincronização de Processos Concorrentes  
  6. Escalonamento de Processos
  7. Gerenciamento de Memória
  8. Memória Virtual
  9. Sistema de Arquivos
  10. Sistema de Entrada e Saída
  11. Armazenamento Secundário

Carga horária

          80 horas

Voltar ao início

Bibliografia

           TANEMBAUM,A .S. Sistemas Operacionais Modernos. Pretice-Hall.1995

           DEITEL,H.M. An Introduction to Operatin Systems. Addison-Wesley,2º edition.1997

           NUTT,G.J. Operating Systems: A Modern Perspective. Addison-Wesley.1997.

           SHAY,W.A. Sistemas Operacionais. Makron Books. 1996.

           SILBERSCHATZ,A & GALVIN.P.B. Operating System Concepts. Adding-Wesley.1989.

           TANENBAUM, AS &WOODULL,AS. Operating Systems: Design and Implementation. Prentice-Hall,2ºedition.     

                   Prentice-Hall.1997.

Voltar ao início

Material de Apoio         

  1. Fundamentos de Sistemas Operacionais (1-slide ou 2-slides ou 3-slides) - lista01  lista01b
  2. Estruturas de Computadores e de Sistemas Operacionais (1-slides ou 2-slides ou 3-slides) - lista02
  3. Estrutura dos Sistemas Operacionais (1-slides ou 2-slides ou 3-slides )  lista03
  4. Gerenciamento de Processos  (1-slide ou 2-slides ou 3-slides ) lista 4 
  5. Sincronização de Processos Concorrentes (1-slide ou 2-slides  ou 3- slides ) (lista 5)
  6. Escalonamento de Processos (1-slide ou 2-slides  ou 3- slides ) (lista 6)
  7. Gerenciamento de Memória (1-slide ou 2-slides ou 3-slides) (lista 7)
  8. Memória Virtual (1-slide ou 2-slides ou 3-slides) (lista 8)
  9. Sistema de Arquivos (1-slide ou 2-slides ou 3-slides) (lista 9)
  10. Sistema de Entrada e Saída (1-slide ou 2-slides ou 3-slides) (lista 10)
  11. Armazenamento Secundário (1-slide ou 2-slides ou 3-slides) (lista 11)
Voltar ao início

Avaliação   

        Aprovação:

                 Média >= 5   e     Presença >= 75%

                      -- Média = (Prova1 + Prova 2 + Prova3)/3         

                      -- Presença:  NÃO será colocada presença para os alunos que chegarem após a realização da chamada.

                      -- Arredondamento:  >=0.76 será arredondado para cima  Ex:  4,76  ->  5,0

                                                       <  0.76 será arredondado para baixo Ex: 4,75  ->  4,5

                        Média Final e Faltas

 

          Prova 1

                       Conteúdo:

                            1.Fundamentos de Sistemas Operacionais

                            2.Estruturas de Computadores

                            3.Estrutura dos Sistemas Operacionais  

                       Data

                             Na próxima aula após a finalização do capítulo sobre Estrutura dos Sistemas Operacionais

                       Notas

 

          Prova 2

Conteúdo:

4.Gerenciamento de Processos  

5. Sincronização de Processos Concorrentes  

6. Escalonamento de Processos

                       Data

                             Na próxima aula após a finalização do capítulo sobre Escalonamento de Processos

                       Notas

 

 

          Prova 3

Conteúdo:

7.Gerenciamento de Memória

8. Memória Virtual  

9. Sistema de Arquivos

10.Sistema de Entrada e Saída

11.Armazenamento Secundário

                       Data

                             Na próxima aula após a finalização do capítulo sobre Armazenamento Secundário

                       Notas

 

Voltar ao início

Links sobre SO

 

       http://ipanema.inx.com.br/~kaizer/ap_so1.htm

          UFSCar http://www.comp.ufscar.br/~amitsuo/

        http://www.fe.up.pt/~jsilva/so/

UFRJ- Material de SO

UERJ - Material de SO

Página do Andrew S. Tanenbaum

Unicruz - Material de SO

SO, revistas, Empresas

Unisinos - Material de SO

Prof. Marinho P. Barcellos - UNISINOS

Guia do Hardware

Voltar ao início

Como Funciona um PC ?

Por Carlos E. Morimoto

Num PC temos vários componentes: Processador, HD, memória RAM, cache, etc. Neste artigo você conhecerá melhor como estes componentes interagem em tarefas comuns, como abrir programas, salvar arquivos, etc. qual é a função de cada um e como cada um afeta a performance do todo:

Ao clicar num ícone para abrir um programa, como é o  processo de carregamento, ou seja, como o programa é   carregado, aonde, e qual é a função da memória no processo?

Todos os programas e arquivos ficam originalmente gravados no HD. O problema é que o HD é muito lento em comparação com o processador, por isso ao serem abertos os programas são transferidos ou "carregados" na memória RAM. Apartir do momento em que o programa encontra-se na memória, ele começa a ser executado. É aí que o cache entra em cena, armazenando as instruções do programa que o processador já executou, ou possa vir a executar, tentando evitar que o processador precise buscar dados diretamente na memória RAM.

Num PC atual o Processador é o componente mais rápido, seguido pelo cache e pela memória RAM. O HD é de longe o mais lento do quarteto. É justamente por isso que um micro com pouca RAM fica tão lento, pois a partir do momento em que não existe mais espaço na memória RAM, o sistema operacional passa a usar o HD para armazenar os dados que não "couberam" na memória. É o famoso recurso de memória virtual, que permite que os programas sejam abertos, porém com um baixo desempenho.

Se a memória RAM, cujo tempo de acesso é medido em bilhonésimos de segundo já é bem mais lenta que o processador, prejudicando seu desempenho, imagine o quanto o HD, que tem seu tempo de acesso medido em milésimos de segundo não atrapalha.

Como é feito o processo inverso, ou seja, o que acontece  quando é preciso salvar arquivos?

Como os dados são lidos na memória, e como é o processo   de gravação dos dados no HD?

Qualquer arquivo gerado, um texto que está sendo escrito no Word por exemplo é primeiramente armazenado na memória RAM. É á que ficam todos os dados que estão sendo manipulados pelo processador.

Quando é dado o comando de salvar o arquivo o processador tem de ler o arquivo completo na memória RAM e transferi-lo para o HD. Atualmente este processo é mais rápido, pois como os HDs suportam Ultra DMA, o processador pode simplesmente enviar um comando para o HD, que se encarregará de ele próprio ler dados na memória RAM. Com isto o processador se livra mais cedo da tarefa, ficando livre para fazer outras coisas.

O HD por sua vez, também possui um pequeno processador na sua placa lógica, que controla o acesso ao disco. Ao receber os dados que devem ser gravados, ele procurará setores disponíveis no disco magnético. O  problema é que nem sempre existe um grande número de setores seqüenciais livres, o arquivo acaba então gravado de forma fragmentada, onde cada pedaço acaba numa parte diferente do HD. Claro que assim a leitura do arquivo demorará bem mais, por isso que rodar o Defrag, ou outro desfragmentador de disco periodicamente ajuda a melhorar a performance do micro.

Como é feito o acesso à memória RAM. Como os dados trafegam  entre a memória e o processador. Quem controla a leitura e  gravação dos dados? Como é a ação do cache?

A memória RAM não faz nada sozinha, ela é apenas como um depósito de dados. Quem controla a gravação e leitura dos dados, administra os endereços disponíveis, e mantém tudo organizado é o controlador de memória, que faz parte do chipset da placa mãe. O processador não se comunica diretamente com a memória RAM, mas sim com o controlador de memória, que se encarrega do trabalho pesado.

O cache L2 por sua vez também possui seu controlador. Este controlador pode estar embutido no próprio processador (no caso dos processadores atuais que trazem cache L2 integrado), quanto na placa mãe, no caso dos sistemas antigos onde o cache L2 faz parte da placa mãe.

Este controlador também está em contato direto com o processador, e deve ser esperto o suficiente para guardar apenas os dados que em maior possibilidade de serem usados mais tarde pelo processador, e tentar "adivinhar", com base nas instruções que o processador está executando, qual serão os próximos dados que ele irá precisar. É devido à esta "esperteza" que o cache é tão eficiente.

O cache L1 por sua vez tem um funcionamento semelhante, também tem seu próprio controlador, sempre embutido no processador. A vantagem do cachê L1 sobre o L2 é ser bem mais rápido.

E nos casos das placas de vídeo AGP? elas também podem acessar  diretamente a memória RAM para armazenar texturas. Como estes  acessos são administrados para que não sejam usados endereços de   memória que já estejam sendo usados pelo processador?

Novamente quem organiza tudo é o chipset da placa mãe. É mantida uma tabela de endereços, chamada Gart, "Graphics Address Remapping Table", que armazena todos os endereços de memória usados pela placa de vídeo e pelo processador. Como todos os acesso à memória tem de passar pelo controlador de memória de qualquer forma, ele pode consultar esta tabela para administrar os endereços ocupados por cada um.  

Voltar ao início

Como acontece o boot do PC ?

 Edson Júnior

edson_magela@uol.com.br

Do momento em que o botão de ligar do PC é acionado até que o usuário possa começar a trabalhar, ocorre no computador uma sucessão de grande número de operações. Em primeiro lugar, ativa-se o hardware. Uma vez concluído esse processo, inicializa-se o Sistema Operacional (SO).

1º: Depois que o botão de ligar do PC é acionado, a corrente elétrica chega a placa-mãe vinda da fonte de alimentação da Unidade Central de Processamento (CPU). Paralelamente, a eletricidade atinge as unidades internas de armazenamento, acionando seus motores e, assim, provocando sua inicialização. Com isso, elas estarão totalmente operacionais quando o sistema precisar empregá-las ao final do processo de boot.

2º: O microprocessador ativa-se tão logo recebe o primeiro sinal elétrico. Neste processo, ele apaga e zera todos os seus registros e contadores, para evitar que se armazenem dados residuais de sessões de trabalho anteriores. Uma vez terminada a fase de acionamento, o microprocessador está pronto para executar o programa de boot, que está armazenado de forma permanente na memória do BIOS.

3º: Após iniciar o programa de boot contido no BIOS, o microprocessado interpreta-o, executando uma série de testes do sistema conhecidos como POST. (POST: Teste automático ao ligar o micro).

4º: Por meio do bus do sistema, o microprocessador envia sinais para detectar a presença e o correto funcionamento dos dispositivos conectados ao computador. Os dispositivos plug & play (PnP), ativam-se e solicitam ao processador os recursos de que necessitam para funcionar. O processador compila todas as demandas dos dispositivos, de forma que o sistema operacional, ao ser inicializado, possa enviar-lhes os recursos necessários. Nesse ponto do processo de boot, a placa de vídeo se inicializa e permite que apareça no monitor as primeiras mensagens informativas.

5º: O POST executa com a memória RAM uma série de testes, que consistem em armazenar e recuperar os dados, comprovando assim o correto funcionamento dela. Durante o processo costuma aparecer no monitor o contador de memória, a medida em que o POST avança em sua inspeção.    

6º: Uma das últimas verificações realizados pelo POST durante o processo de boot do computador é o teste de funcionamento correto do teclado. Terminado este teste, o usuário pode interromper o processo para reconfigurar um ou mais parâmetros da BIOS.

7º: Encerrados todos os testes do programa de boot armazenado na BIOS, este verifica as unidades de armazenamento disponíveis para determinar a unidade de inicialização. Neste encontra-se o programa de inicialização do sistema operacional, que o programa de boot carregará na memória e executará para poder passar-lhe o controle do PC.

Conhecer como funciona o processo de inicialização ajuda a identificar eventuais problemas de boot do PC. Por exemplo, se ao ligar o micro nada aparece no monitor e nem se ouve som no alto-falante, é bem provável que os vários programas do BIOS, entre eles os que integram o POST, não tenham se inicializado e, assim, não possam fornecer mensagens ou informações de erro. Nesse caso, o problema deve estar no microprocessador ou na placa-mãe. Se nada aparece no monitor, mais se ouve uma série de apitos, significa que o POST detectou um erro antes de inicializar a placa de vídeo (passo 4 descritos anteriormente), que poderá estar mal conectada ou então apresentando algum defeito.

Voltar ao início

Qual a influência da memória cache no desempenho do micro?

O cache de memória é uma memória mais rápida do que a RAM. Como o processador consegue ser mais rápido que a memória RAM, ao trocar informações com a RAM o processador tem de esperar, o que degrada o desempenho do micro. Para que isso não ocorra, o cache de memória é usado como um intermediário na conversa do processador com a memória RAM, já que o cache é capaz de ser conversar com o processador rapidamente, sem espera. Nos testes que realizamos , um micro sem cache de memória ficou 30% mais lento para processamento, 20% mais lento para acesso a disco e 10% mais lento para acesso a vídeo. 

Voltar ao início

O que é memória cache interna e memória cache externa? 

    A memória cache é uma memória rápida utilizada para armazenar os dados mais utilizados, tornando o micro mais rápido. A memória cache começou a aperecer nos micros 386, instalada na placa-mãe. A partir do processador 486, todos os processadores passaram a ter uma pequena quantidade desta memória dentro do próprio processador - chamada memória cache nível 1 (L1) ou simplesmente memória cache interna, pois está dentro do processador. Quando citamos memória cache, normalmente estamos nos referindo à memória cache presente na placa-mãe do micro - chamada memória cache nível 2 (L2) ou simplesmente memória cache externa. 
    A exceção fica por conta do processador Pentium Pro - que possui tanto o cache L1 quanto o L2 dentro do próprio chip - e do Pentium II - que, ao invés do cache L2 estar na placa-mãe, está instalado dentro de um cartucho chamado SEC (Single Edge Contact) ao lado do processador. Portanto, para estes dois processadores as nomenclaturas "cache interno" e "cache externo" não fazem muito sentido - e daí preferirmos a nomenclatura "Cache L1" e "Cache L2". No quadro de configuração do micro que aparece logo após a contagem de memória, além de informações como tipo de processador, tipo do disco rígido, etc, deve aparecer obrigatoriamente o tamanho do cache de memória (em uma linha como "Memory Cache:", "L2 Cache Size:" ou equivalente). Na pior das hipóteses, esta informação aparecerá logo abaixo do quadro de configuração, em uma linha "extra" (como "256KB MEMORY CACHE"). Se esta informação não aparecer, é muito provável que o seu micro não possui cache de memória, ou então ele seja falsificado ou ainda ele esteja desabilitado no setup do micro. Para habilitar o cache de memória, basta entrar no setup do micro (pressionando-se a tecla [DEL] durante a contagem de memória) e habilitar a opção "External Memory Cache" presente em "Advanced Setup". Você poderá utilizar programas de teste de hardware tanto para ter a confirmação se o seu micro possui cache de memória quanto para saber sua capacidade. Recomendo os programas PC-Check (http://www.eurosoft-uk.com) e PC-Config (http://www.holin.com/indexe.htm). 
Voltar ao início


Resolvi aumentar minha memória de 8 MB para 16MB. Não senti nenhuma melhora em velocidade. No boot ele reconhece os 16 MB, e no Windows (uso a versão 3.11) no Painel de Controle, ícone 386 avançado, habilitei a memória virtual recomendada, mas mesmo assim não senti ganho de performance. O que está acontecendo? 

Não está acontecendo nada de errado: aumentar a quantidade de memória RAM do micro não o torna mais rápido, apesar da crença popular que diz o contrário. A explicação é simples: mais velocidade você só conseguirá com um processador mais rápido. Acontece que, em micros com pouca memória RAM, o processador utiliza um recurso chamado Memória Virtual para fazer com que não ocorram erros de falta de memória. Este recurso consiste em gerar no disco rígido um arquivo chamado arquivo de troca (no caso do Windows 3.x este arquivo chama-se 386SPART.PAR), que armazenará dados da memória RAM. Quando a memória "acaba", o processador armazena no arquivo de troca um trecho de memória que não esteja sendo utilizado naquele instante, liberando memória. Quando o dado armazenado no disco rígido é solicitado, o processador irá carregar o dado na memória, armazenando outro que não esteja sendo utilizado em seu lugar. Quanto mais aplicativos abertos ao mesmo tempo, mais trocas com o arquivo de troca do disco rígido são necessárias. Acontece que o disco rígido é um elemento muito mais lento que o processador e o usuário percebe essas trocas (o micro fica mais lento). No caso de você aumentar a quantidade de RAM do micro, menos "estouros" de memória ocorrerão, ou seja, menos trocas com o disco rígido serão necessárias. Com isto, o usuário achará que o micro está "mais rápido", enquanto, na verdade, a velocidade de processamento bruto continua a mesma. A diferença é que menos acessos ao disco rígido serão executados e, como o disco rígido é mais lento que o processador, o usuário percebe que algo ficou menos lento (menos acessos ao disco rígido). Em seu caso, como você está operando cálculos do Excel, é óbvio que o seu micro não ficará mais rápido instalando mais memória. Instalar mais memória só torna o micro mais rápido em casos de excesso do uso da memória virtual, como é o caso de usuários que utilizam mais de um programa aberto simultaneamente. No seu caso, entretanto, ainda há algumas dicas para tornar o seu micro mais rápido: apague as linhas que chamam o Smartdrive no Config.sys e no Autoexec.bat, instale o driver IFSHLP.SYS no Config.sys (DEVICEHIGH=C:\WINDOWS\IFSHLP.SYS), configure a memória virtual como "permanente", habilite o acesso a disco e arquivo 32 bits e habilite o cache de disco com 2.048 KB (estas configurações são feitas no ícone 386 avançado do Painel de Controle, clicando no botão "Memória Virtual"). 

Voltar ao início

O que é um programa residente ? 

    É um programa que fica na memória (residente) ao mesmo tempo que outros programas são executados. Ele pode passar a exercer suas funções através da ocorrência de um evento como, por exemplo, o acionamento de uma tecla, ou ser executado paralelamente com outros processos concorrentes.

    No primeiro caso podemos citar como exemplo o SideKick, que incorpora, entre outras funções, um editor de textos, calculadora, calendário etc. Através do acionamento de teclas, como ALT e CTRL simultaneamente, aparece na tela seu menu principal, independente do que esteja sendo executado no momento, e o usuário passa a usar suas funções. Pressionando ESC, retorna-se à tarefa anterior.

    O segundo tipo de programa residente pode ser exemplificado como o comando PRINT do MS- DOS, que imprime um ou mais arquivos ao mesmo tempo que executamos outrs tarefas, como o DBASE, LOTUS etc.

    Os Programa de Execução Paralela são os que possuem as características do comando PRINT. Os programas do tipo do SideKick, denominados Programas de Execução Não Paralela.

    Os Programas de Execução Paralela não são executados simultaneamente com outros programas, uma vez que o Hardware não permite. O programa transiente é executado em um pequeno espaço de tempo e passa o controle ao programa residente que, por sua vez, é executado durante um outro intervalo de tempo, permitindo que os dois programas  sejam executados um de cada vez. Como geralmente o espaço de tempo está na ordem de milessegundos, os processos parecem ser executados simultaneamente.

     Um Pouco de História

    O MS-DOS é um SO descendente direto do CP/M. O CP/M era padrão para máquinas com pouca capacidade, se comparadas ao IBM-PC. Sendo assim, o IBM-PC era uma máquina de grandes recursos com um SO baseado no CP/M que não possibilitava o total uso do computador. Os usuários naturalmente tiveram novas necessidades, que foram sendo implementadas aos poucos. O MS-DOS foi, então, "inchando", já que as versões seguintes deveriam ser compatíveis com as anteriores.

      Na versão 1 do MS-DOS, já existia a função TSR (Terminate But Stay Resident) que permite um programa ficar residente na memória. A criação desta função tinha como objetivo o desenvolvimento de pequenas rotinas de controle de dispositivos, como "filtros"de impressoras. Para programas residentes mais complexos, eram necessárias outras funções do SO que permitissem um maior controle, além da TSR.

    Na versão 1.1, apareceu o primeiro utilitário que trabalhava de forma residente, que foi o comando MODE. Ele permite fazer, entre outras, o redirecionamento da impressora para um outro dispositivo. 

    O maior problema para o desenvolvimento de programas residentes mais complexos, era o fato de não podermos acessar as funções do SO, ou seja, o programa ficava restrito a executar tarefas de manipulação de memória e nunca de disco.

    Finalmente na versão 2, foi lançado o programa PRINT, que é um exemplo fiel de multitarefa no IBM-PC. Listar arquivos implica na leitura dos mesmos, ou seja um programa residente que tem acesso às funções do SO. Desta forma foi provado que era possível termos um programa residente que pudesse fazer muito mais que o comando MODE.

     Porém, a Microsoft não divulgou nenhuma documentação a respeito de como desenvolver um programa desta natureza, já que o Sistema permitia. Através de  um depurador de programas, como o DEBUG, alguns "curiosos"s conseguiram "desmontar"o programa PRINT,  descobrindo os procedimentos e controles necessários. Estes controles são funções não documentadas, ou dista reservadas, do SO. Geralmente a Microsoft indica como uma função reservada, aquela sujeita a modificações sem aviso prévio e que é usada por outras funções do MS-DOS. Podemos usar estas funções não documentadas  para qualquer versão a partir da 2, uma vez que elas não serão alteradas devido ao problema de compatibilidade das versões posteriores como as anteriores, ou seja,  o comando PRINT da versão 2 deve ser executado em qualquer versão posterior.

    As conclusões a que chegaram estes "curiosos" foram publicadas em revistas americanas, e podem ser usadas de forma segura e eficiente sem nenhuma preocupação.

FONTE

YALLOUZ, C. Programas Residentes no IBM-PC. Rio de Janeiro: Livros Técnicos e Científicos Ed., 1991.

Voltar ao início

Endereçamento da memória do PC (família 8086)

      A memória do micro é um grande vetor de bytes, onde cada endereço de memória é um índice deste vetor. Se seu micro possui 640k de memória, então este vetor irá possuir 655360 posições (640 x 1024). Neste vetor existirão códigos que serão interpretados pela CPU, ou simplesmente informações armazenadas (dados) e utilizadas para o processamento. Algumas posições deste vetor poderão ser lidas e alteradas (memória RAM)  e outras só poderão ser lidas (ROM).

    Cada endereço de memória ( o índice do vetor mencionado anteriormente) é um número de 20 bits, ou seja, de 0 a 1.048.575 em decimal. Porém como é um número muito grande, a memória é dividida em blocos de 64k (65 536 Bytes) denominados de Segmentos, que facilitam o processamento par aa CPU. Um Segmento pode conter até 65.536 posições denominadas Deslocamentos. Portanto, para endereçarmos uma posição de memória no PC, devemos especificar um Segmento e um Deslocamento. A notação é sempre usada em Hexadecimal, separando o valor do Segmento com o Deslocamento através de dois pontos.

      Exemplo:

        0040:001C = Segmento 0040h e Deslocamento 001Ch

FONTE

YALLOUZ, C. Programas Residentes no IBM-PC. Rio de Janeiro: Livros Técnicos e Científicos Ed., 1991.

Voltar ao início

Registradores da CPU (família 8086)

   Para que a CPU trabalhe de forma eficiente, tanto para interpretar um código de máquina, como para trtar a memória, ela usa os que chamamos de Registradores. Podemos idealizá-los como sendo variáveis numéricas internas da CPU, ou seja, não pertencem a um endereço de memória e podem ser manipulados tanto pela máquina como pelo programa. Estes registradores possuem fins específicos, e podem assumir valores inteiros de 0 a 65.536 (0 a 0FFFFh). São usados, entre outras funções para mover conteúdo de memória, interpretar o código de máquina (programa), fazer operações aritméticas etc.

    Os 14 registradores são descritos abaixo junto com seus respectivos nomes:

AX - Acumulador

BX - Base

CX - Contador

DX - Dados

 

CS - Segmento de Código

DS - Segmento de dados

SS - Segmento de Pilha

ES - Segmento Extra

 

IP - Contador de Programa

SP - Ponteiro de Pilha

BP - Base de Pilha

SI - Indexador de Origem

DI - Indexador de Destino

FLAGS - Estado

    Os registradores CS, DS, SS e ES são utilizados para apontar segmentos de dados ou código que se deseja trabalhar. Desta forma, quando queremos endereçar uma certa posição de memória, não é preciso passar à CPU um valor de 20 bits conforme mostrado anteriormente. O conteúdo do CS indica o segmento corrente do código do programa que está sendo executado. O DS, o segmento de dados corrente, onde estamos nos referenciando. O SS é utilizado para o segmento da pilha. O ES é usado como um segmento extra, que nos permite acessar outros segmentos de dados, sem a necessidade de alteração do DS,SS ou CS.

    Se desejarmos, por exemplo, colocar um valor qualquer na posição da memória 078A:2030, e supondo ainda que o conteúdo de DS seja 078Ah, basta definir a posição de memória 2030h, uma vez que o segmento é intrínseco.

    O programa  é controlado pelo IP, também conhecido como PC (Program Counter), Ele aponta para a próxima instrução de máquina a ser executada, no segmento definido por CS. Sempre que uma instrução é executada, o IP é incrementado pela CPU, de acordo com o número de Bytes da instrução executada.

    Os registradores X (AX,BX,CX e DX) possuem uma característica diferente dos outros. Podemos trabalhar com eles tanto como inteiros (16 bits) ou bytes (8bits). Para acessar os 8 bits mais à esquerda do AX usamos a nomenclatura AH (H de Hight), e AL para os 8 bits mais à direita (L de Low). O mesmo se aplica aos outros registradores através de BL, BH,CL,CH, DL e DH.

      Exemplo

            Se AX possui o valor hexadecimal 2045h, então AH = 20h e AL =45h

    No contexto de um programa de máquina, usamos o AX como valor provisório e para operações aritméticas. O BX trabalha para endereçar memória funcionando como um endereço base e indexação de vetores. O CX é utilizado como contador, geralmente de "Loops" de controle . O DX é aplicado na maioria das vezes, para apontar memória de dados. Estas aplicações para os registradores X não são obrigatórias, mas o conjunto de comandos interpretados pela CPU partem deste princípio.

    Em quase todas as linguagens de programação, utilizamos as variáveis I e J par indexar um vetor de dados qualquer, ou para controlar um comando FOR por exemplo. A linguagem possui os registradores de indexação SI e DI que são utilizados de uma forma bem parecida. O SI, na maioria das vezes, indexa uma área de origem (Source Index) e o DI a de destino (Destination Index ). Eles são muito úteis para copiar ou varrer a memória. 

    Já o SO e o BP são usados pela pilha de controle. O último, e muito importante, constitui-se no registro FLAGS, que nos permite determinar o resultado de uma comparação, entre outros controles. Ele trabalha de forma diferenciada dos demais registradores, uma vez que não utilizamos seu valor numérico (16 bits)  mas sim seus bits isoladamente:

15 14 13 12 11 10 09 09 07 06 05 04 03 02 01 00
        O D I T S Z   A   P   C

Onde :

O - Overflow (Estouro) - A operação aritmética estourou.

D - Direção - Se igual 1 (um) indica decremento, se 0 (zero), o incremento dos indexadores para as operações de tratamento de memória

I - Interrupções - Se 1 habilita interrupções

T - Trap - Utilizado para programas de depuração, como o DEBUG.

S - Sinal - A operação resultou em um número negativo se S = 1.

Z - Zero - A operação resultou em um valor zeros se Z=1.

A - Auxiliar - Usado para operações BCD.

P -Paridade - Se P=1, o resultado é par, caso contrário ímpar.

C - Carry - Usado nas operações aritméticas.

    Os bits não indicados não são usados e devem conter sempre o valor 0

FONTE

YALLOUZ, C. Programas Residentes no IBM-PC. Rio de Janeiro: Livros Técnicos e Científicos Ed., 1991.

Voltar ao início

Interrupções

   Para que o computador trabalhe de forma satisfatória é necessário que alguns procedimentos essenciais sejam executados constantemente. Entre outros, podemos citar o relógio do PC, que nada mais é que um contador, incrementado de tempos em tempos em uma posição de memória. O comando TIME do MS-DOS retorna a hora corrente do sistema baseado no valor deste contador.

    Independente  do programa que esteja sendo rodado, estes procedimentos essenciais são executados através do que chamamos de Interrupções. Como o nome já diz, o programa corrente é interrompido passando o controle a uma rotina auxiliar, que após o seu término, retorna ao processo corrente. As interrupções ocorrem em espaços de tempo muito pequenos que não conseguimos perceber.

    Podemos ilustrar um processo de interrupção, fazendo uma analogia ao corpo humano. O nosso olho precisa ser "lubrificado"constantemente e fazemos isso de forma automática, sem percebermos. A visão corrente é "interrompida"durante frações de segundo por uma piscada. No caso do computador, a piscada seria um procedimento essencial, executado de tempos em tempos, e a visão o programa principal.

    Para se ter uma idéia, a rotina, ou interrupção, que incrementa o contador de relógio, acontece 18,2 vezes por segundo, porém a máquina é rápida o suficiente para que o processo se realize de forma satisfatória.

   Podemos classificar as interrupções de duas formas: as interrupções de Hardware e as de Software. No primeiro caso, a interrupção é causada por um dispositivo físico, como o teclado ou uma impressora. O segundo tipo diz respeito a uma interrupção causada por um programa, e funciona da mesma forma que uma chamada a uma rotina.

FONTE

YALLOUZ, C. Programas Residentes no IBM-PC. Rio de Janeiro: Livros Técnicos e Científicos Ed., 1991.

Voltar ao início

O Processador

       O processador, às vezes chamado unidade central de processamento (Central Processing Unit) ou processador principal, é o componente que manipula os dados da memória principal, e só pode operar mediante um programa de controle armazenado na mesma memória, uma vez que a "inteligência"de um computador decorre do software, e não do hardware (Figura 1)

Figura 1 - O processador manipula dados armazenados na memória

principal mediante um programa de controle armazenado na

mesma memória principal

    Um programa compõe-se de uma série de instruções, cada uma delas ordenando ao computador que realize uma de suas funções básicas: somar, subtrair, multiplicar, dividir, comparar, copiar, iniciar entrada ou saída de dados. Cada uma delas tem um código de operação que especifica a função a ser realizada, e um ou mais operandos, que identificam os endereços dos dados que tomarão parte na a operação (Figura 2). A instrução na Figura 2, por exemplo, diz ao computador somar os conteúdos dos endereços de memória 1000 e 1002.

Figura 2 - Uma instrução é composta de um código de operação, que

especifica qual a função a ser realizada, e um ou mais operandos,

que identificam os endereços dos elementos de dados a serem manipulados.

O processador contém quatro componentes principais (Figura 3): 

 - A unidade de controle de instruções, traz as instruções da memória principal;

- A unidade lógica-aritmética (ULA), consiste em circuitos capazes de somar, subtrair, multiplicar etc. ( o conjunto de instruções do computador).

- Os registradores armazenam temporariamente informações de controle, dados e resultados intermediários

- O clock gera pulsos eletrônicos precisamente cadenciados, que sincronizam a operação dos demais componentes.

 

Figura 3 - Um processador contém quatro componentes básicos.

FONTE

DAVIS,W.S.Sistemas Operacionais: uma visão sistemática;tradução Dalton Conde de Alencar;revisão técnica Simone Martins. Rio de Janeiro:     Campus.1991

Voltar ao início

Ciclos de Máquina

    Como, exatamente, os componentes internos de um computador operam em conjunto para executarem instruções ? Para responder a essa pergunta, usaremos como modelo um SISTEMA COMPUTACIONAL SIMPLES (Figura 4) para ilustrar alguns ciclos de máquina. Comecemos com o processador. Além do clock, ele contém a unidade de controle de instruções, a unidade lógica-aritmética e alguns registradores, incluindo um contador de instruções, um registrador de instruções e um registrador de trabalho, o acumulador. A memória principal armazena instruções de programas e valores. Cada localização da memória principal possui um endereço físico.

 

Figura 4 - Quando nosso exemplo se inicia, a memória contém instruções de programas e dados.

O contador de instruções aponta para a primeira instrução a ser executada.

    O processo tem início quando o clock gera um pulso de corrente que ativa a unidade de controle de instruções. Esta é responsável pela decisão do que a máquina fará a seguir. O computador é controlado por instruções de programas que, vale lembrar, estão armazenados na memória principal. O endereço da próxima instrução a ser executada é encontrado no contador de instruções (Figura 5). O conteúdo deste endereço é lido pela unidade de controle de instrução da memória, a unidade de controle incrementa o contador de instruções (Figura 5), para que este passe a apontar para a próxima instrução a ser executada.

Figura 5 - Em resposta ao comando de busca de instrução fornecido pela unidade de controle de instruções,

a primeira instrução é copiada da memória e armazenada no registrador de instruções. Observe que o contador de

instruções aponta para a instrução seguinte.

    A seguir, a unidade lógica-aritmética é ativada pela unidade de controle, executando a instrução armazenada no registrador de instruções (Figura 6). Observe que, seguindo a execução da instrução, um determinado valor é copiado da memória principal para o acumulador.

Figura 6 - A seguir, a unidade lógica-aritmética assume o controle e executa a instrução contida no registrador de instruções. Assim, um valor 

é copiado da memória principal e carregado no acumulador.

    Mais uma vez, a unidade de controle, onde o ciclo começa (Figura 7). lê o contador, traz uma nova instrução e coloca-a no registrador de instruções (Figura 8), direcionando ainda o contador para a instrução seguinte.

Figura 7 - No início do próximo ciclo, a unidade de controle de instruções retoma o controle e busca no contador de instruções  o endereço da próxima instrução.

 

 

Figura 8 - A próxima instrução é trazida e copiada no registrador de instruções. Observe que o contador de instruções

aponta para a próxima instrução.

    A unidade lógica-aritmética assume o controle e executa a instrução (Figura 9), adicionando um valor armazenado na memória ao acumulador. O próximo pulso nos traz de volta à unidade de controle , que lê o contador, traz a instrução para o registrador e ativa a unidade lógica-aritmética, executora da instrução.

Figura 9 - A unidade lógica-aritmética executa a instrução contida no registrador de instruções. Dois valores são

 somados e o resultado é colocado no acumulador.

    Uma instrução é trazida pela unidade de controle em tempo-I, ou tempo de instrução, e é executada pela unidade lógica aritmética em tempo-E, ou tempo de execução (Figura 10).  Esse processo repete-se até o término do programa. O clock conduz o processo, gerando pulsos em intervalos de tempo precisos. A taxa, na qual estes pulsos são gerados, determina a velocidade de operação do computador.

Figura 10 - O ciclo básico de máquina é repetido até que todas as instruções sejam executadas.

FONTE

DAVIS,W.S.Sistemas Operacionais: uma visão sistemática;tradução Dalton Conde de Alencar;revisão técnica Simone Martins. Rio de Janeiro:     Campus.1991

Voltar ao início

Sistemas de Arquivo

fonte (http://www.obeabadolinux.hpg.ig.com.br/Sistema%20de%20Arquivos/SistemadeArquivos.htm)

Um pouco de história:

HD

 Fisicamente, um HD é constituído por diversos discos magnéticos e cabeças de leitura. Os discos magnéticos são divididos em trilhas que são anéis concêntricos na superfície do disco  e cada trilha é subdividida em setores ,que variam conforme o disco. Toda essa subdivisão ordenada de um disco (subdividido em trilhas e setores) é o que permite a organização sistemática dos dados. A trilha zero de um disco é o anel mais externo e ela é vital em um disco porque nela fica o setor de boot , É  a primeira trilha de qualquer disco reservada ao setor de boot ou setor de inicialização. Este setor é que contém o registro de partida, que é a primeira parte do disco lida pelo seu computador durante a inicialização.

  A inicialização de um sistema é chamada de boot e durante esse processo a máquina procurará o disco com o registro de partida que pode ser um disquete ou um disco rígido. Todos os discos possuem um registro de partida, mesmo que não tenham sido formatados como discos de sistema. Quando um disco é formatado para ser de sistema, o programa no registro de partida contêm a primeira parte do sistema operacional, que por sua vez indicará ao sistema onde estão os demais arquivos e programas do sistema operacional necessários para que o computador possa executar seu trabalho. Quando o disco não foi formatado para ser de sistema, o programa do registro de partida retorna uma mensagem de erro solicitando que se introduza um disco de sistema para continuar a inicialização.

  Quando existe um disquete no drive A, o computador tentará inicializar o sistema operacional por ele. Ou seja, irá ler o registro de partida do disquete antes de procurar um registro de partida no disco rígido. Quando não existe um disquete no drive A, o computador é orientado pela BIOS a ler o registro de partida da unidade lógica de disco rígido chamada de "mestre", usualmente denominada de "C:/". Um disco rígido é uma unidade física que pode ser dividida em mais de uma unidade lógica. É o registro mestre de partida (MBR - master boot record) que contêm as informações sobre o particionamento da unidade física e em quantas unidades lógicas o disco está dividido. Ao procurar a unidade de disco rígido mestre (C:/) o sistema terá que ler as informações contidas na MBR para saber onde está a unidade lógica mestre e apenas após isso é que ele poderá achar e executar o registro de partida do sistema operacional.

Sistema de Arquivos 

É o método utilizado pelos sistemas operacionais para organizar os arquivos no HD. Quando um novo HD é fabricado, ainda não está preparado para receber essas informações pois, para isso, necessita de um sistema de arquivos que informe ao sistema operacional que será instalado, como esses dados deverão ser manipulados. Existem diversos tipos de arquivos de sistema, tais como FAT, FAT32, NTFS, HPFS, CDFS, Ext2, entre outros. A escolha do sistema de arquivos apropriado depende do sistema operacional que iremos instalar e geralmente é decidida durante o particionamento de disco.  

FAT

O disco é dividido em trilhas e setores que são registrados em uma tabela, a chamada tabela de alocação de arquivos (FAT - File Allocation Table). Nessa tabela, o disco é dividido em clusters, que podem ser do tamanho de um setor ou muito maior (até 256 setores). Cada cluster é registrado na FAT com o valor 1 (se estiver ocupado) ou 0 (se estiver vazio). As entradas da FAT podem ser de 12 ou 16 bits(ou 2 GB por partição), introduzido com o DOS, em 1981. É reconhecido por uma vasta gama de sistemas operacionais, incluindo todos os Windows (3.X, 9X, Me, NT, 2000), Linux, Unix, BeOS, OS/2, entre outros, embora em nenhum deles seu desempenho seja verdadeiramente otimizado pois, embora seja um sistema de arquivos amplamente utilizado, possui esquemas de endereçamento 16-bit e, portanto, obsoleto, contendo uma série de limitações. Funciona muito bem com partições pequenas, até 400 MB, embora suporte partições com até 2 GB - e nada mais! Utiliza o sistema 8.3, suportando arquivos com até 11 caracteres, sendo oito como nome do arquivo, e três como extensão (por exemplo, arquivo.txt). Sua maior desvantagem é possuir clusters muito grandes, conforme demonstrado na tabela abaixo.

Tamanho do Cluster

Capacidade máxima de armazenamento

2 KB

128 MB

4 KB

256 MB

8 KB

512 MB

16 KB

1 GB

32 KB

2 GB

     

FAT 32

No sistema FAT-32 cada partição pode ser de até 2 Terabytes, diminuindo o desperdício em disco. Uma entrada com mais bits permite a subdivisão mais eficiente do disco (por exemplo, uma FAT com 12 bits permite dividir o disco em 4.078 clusters e uma FAT com 16 bits permite até 65.518 clusters em um disco).

É um sistema de arquivos introduzido com o Windows 95 OEM Service Release 2, sendo reconhecido pelos Windows 95 (somente OSR2), 98, 98SE, Me e 2000. Trata-se de uma versão melhorada da FAT, com esquemas de endereçamento 32-bit, passando a suportar nomes longos de arquivos (até 255 caracteres) e partições de até 2 terabytes. Sua desvantagem em relação à FAT é o desempenho, cerca de 6% mais lento, o que pode ser explicado por possuir muito mais clusters a gerenciar. Confira a tabela abaixo, e a compare com a tabela acima. É fácil constatar que o gerenciamento e manipulação dos dados é muito mais racional com FAT32.

Tamanho do Cluster

Capacidade máxima de armazenamento

512 bytes

256 MB

4 KB

8 GB

8 KB

16 GB

16 KB

32 GB

32 KB

2 TB

 

É a FAT que permite ao sistema operacional controlar a alocação de arquivos no disco sem que, por exemplo, dois arquivos sejam gravados em um mesmo setor corrompendo os dados de um deles. E quando apagamos um arquivo, na verdade apenas alteramos seu status na FAT e na lista vinculada ao diretório raiz, indicando que os clusters ocupados por esse arquivo estão livres para gravação. Até que algum outro arquivo seja gravado nesses clusters, a informação antiga permanece no disco e, de fato, alguns utilitários de disco conseguem recuperar arquivos apagados desde que seus clusters estejam preservados.

As informações gravadas em um disco ocupam um ou mais clusters (que por sua vez podem ser constituídos de um ou mais setores) e o registro de quais clusters compõem um arquivo, bem como a ordem desses clusters fica registrada na FAT através de uma lista vinculada com o diretório raiz do disco.

Como um dado ocupa no mínimo um cluster e o cluster pode ser formado por vários setores, sempre há espaço vazio ao fim do último cluster ocupado por um dado e dentro deste, setores vazios. É por isso que se somarmos todos os dados de um disco cheio, ele não será numericamente igual à capacidade do disco; a diferença entre um valor e outro corresponderá aos clusters incompletos e setores vazios do disco.

    NTFS  

(New Technology File System) é um sistema de arquivos introduzido pelo Windows NT, reconhecido somente pelos Windows NT e 2000, embora a versão utilizada pelo Windows 2000 tenha sido aprimorada. Teoricamente, o tamanho máximo de uma partição NTFS é de 16 exabytes, mas ainda não existe hardware que suporte tanto, de modo que essa limitação de tamanho está restrita atualmente aos limites de hardware. Como características temos: segurança no nível de arquivo e diretório, compressão de arquivos incorporada, remapeamento de clusters com problema (caso ocorra um erro de gravação, o sistema de arquivo moverá os dados para outro setor do disco), fragmentação de arquivo reduzida, suporte para software compatível com o padrão POSIX.1 (Unix e derivados) e arquivos Macintosh (é necessário instalar o Services For Macintosh, no Windows NT). É um sistema de arquivos recuperável, que utiliza um log de transação para atividades de disco, podendo ser utilizado para refazer ou desfazer operações mal sucedidas. Como desvantagem, não suporta disquetes nem mídias removíveis, pois possui uma sobrecarga elevada, de cerca de 50 MB, e ao utilizar uma mídia removível formatada com NTFS, é necessário reiniciar o computador, o que acaba inviabilizando a utilização.

No Linux 

           Linux é como um sistema operacional Unix, que funcionava nos computadores PC-386. Foi executado primeiramente como a extensão ao sistema operacional Minix [ Tanenbaum 1987 ] e suas primeiras versões incluíram a sustentação para o arquivos de sistema de Minix somente. O arquivo de sistema de Minix contem duas limitações sérias: os endereços do bloco são armazenados em 16 inteiros do bit, assim o tamanho máximo do arquivo de sistema é restringido a 64 mega bytes, e os diretórios contêm entradas tamanho-fixo e o nome de arquivo de no máximo é 14 caracteres.    

As limitações no projeto do arquivo de sistemas de Minix estavam limitando demasiadamente,  foi assim que as pessoas envolvidas no projeto do Linux começaram pensar e trabalhar na execução de  um sistema de arquivos novos em Linux. A fim facilitar a adição de sistema de arquivos novos no kernel de Linux, uma camada virtual do sistema de arquivo (VFS) foi desenvolvida. A camada de VFS foi escrita inicialmente por Chris Provenzano, e reescrito mais tarde por Linus Torvalds antes dela ser integrada no kernel do Linux.

Ext 

Após a integração do VFS no kernel, temos um sistema de arquivos novo, chamado de sistema de arquivo “Extended” foi executado em abril 1992 e adicionado a Linux 0.96c. Este arquivo de sistemas novo removeu as duas limitações grandes de Minix: seu tamanho máximo era 2 Giga Bytes e o tamanho máximo do nome de arquivo era 255 caracteres. Era uma melhoria sobre o arquivo de sistemas de Minix, mas alguns problemas ainda permaneciam nele. Não havia nenhuma sustentação para o acesso, a modificação do inode, e os timestamps separados da modificação dos dados. O arquivo de sistemas usou listas linkadas manter uma trilha de blocos livres e os inodes e estes produziram desempenhos ruins: enquanto o arquivo de sistemas foi usado, as listas tornaram-se não sorteadas e o arquivo de sistemas tornou-se fragmentado.

Ext2

Como uma resposta a estes problemas, dois filesytems novos foram liberados na versão de alfa em janeiro 1993 o sistema de arquivo de Xia e o Ext2. O arquivo de sistemas de Xia foi baseado pesadamente no código do kernel do arquivo de sistemas de Minix e adicionou somente algumas melhorias sobre este arquivo de sistemas. Basicamente, forneceu nomes de arquivo longos, sustentação para umas divisórias maiores e sustentação para os três timestamps. Por outro lado, Ext2fs foi baseado no código de Extfs com muitos reorganizações e muitas melhorias. Tinha sido projetado com evolução na mente e espaço contido para as melhorias futuras.

  Quando os dois sistemas de arquivos novos foram liberados primeiramente, forneceram essencialmente as mesmas características. Devido a seu projeto mínimo, Xia fs era mais estável do que Ext2fs. Enquanto os sistemas de arquivos foram usados mais extensamente, os erros foram reparados em Ext2fs e os lotes das melhorias e de características novas foram integrados. Ext2fs é agora muito estável e transformou-se o arquivo de sistemas padrão de fato do Linux. Esta tabela contem um sumário das características fornecidas pelos sistemas de arquivos diferentes:

 

 

Minix FS

Ext FS

Ext2 FS

Xia FS

Max FS size

64 MB

2 GB

4 TB

2 GB

Max file size

64 MB

2 GB

2 GB

64 MB

Max file name

16/30 c

255 c

255 c

248 c

3 times support

No

No

Yes

Yes

Extensible

No

No

Yes

No

Var. block size

No

No

Yes

No

Maintained

Yes

No

Yes

?

 

 


Revisado em: 28 agosto, 2003 .